Homepage
·
+ Open Source
+ ·
Docs
·
Start Cloud Trial
@@ -53,20 +55,20 @@
### Fast and Flexible Multi-Agent Automation Framework
-> CrewAI is a lean, lightning-fast Python framework built entirely from scratch—completely **independent of LangChain or other agent frameworks**.
-> It empowers developers with both high-level simplicity and precise low-level control, ideal for creating autonomous AI agents tailored to any scenario.
+> CrewAI is an open-source Python framework with high-level abstractions and low-level APIs for building production-ready multi-agent workflows.
+> It gives developers autonomous agent collaboration through Crews and precise, event-driven control through Flows.
-- **CrewAI Crews**: Optimize for autonomy and collaborative intelligence.
-- **CrewAI Flows**: The **enterprise and production architecture** for building and deploying multi-agent systems. Enable granular, event-driven control, single LLM calls for precise task orchestration and supports Crews natively
+- **CrewAI Crews**: Optimize for autonomy and collaborative intelligence with role-based AI agents.
+- **CrewAI Flows**: Build event-driven automations that combine precise workflow control, single LLM calls, and native support for Crews.
With over 100,000 developers certified through our community courses at [learn.crewai.com](https://learn.crewai.com), CrewAI is rapidly becoming the
-standard for enterprise-ready AI automation.
+standard for production-ready agentic automation.
# CrewAI AMP Suite
-CrewAI AMP Suite is a comprehensive bundle tailored for organizations that require secure, scalable, and easy-to-manage agent-driven automation.
+For organizations that need a commercial control plane around CrewAI, [CrewAI AMP Suite](https://www.crewai.com/enterprise) adds managed deployment, observability, governance, security, and enterprise support.
-You can try one part of the suite the [Crew Control Plane for free](https://app.crewai.com)
+You can try one part of the suite, the [Crew Control Plane, for free](https://app.crewai.com).
## Crew Control Plane Key Features:
@@ -88,7 +90,6 @@ intelligent automations.
- [Getting Started](#getting-started)
- [Key Features](#key-features)
- [Understanding Flows and Crews](#understanding-flows-and-crews)
-- [CrewAI vs LangGraph](#how-crewai-compares)
- [Examples](#examples)
- [Quick Tutorial](#quick-tutorial)
- [Write Job Descriptions](#write-job-descriptions)
@@ -96,11 +97,11 @@ intelligent automations.
- [Stock Analysis](#stock-analysis)
- [Using Crews and Flows Together](#using-crews-and-flows-together)
- [Connecting Your Crew to a Model](#connecting-your-crew-to-a-model)
-- [How CrewAI Compares](#how-crewai-compares)
-- [Frequently Asked Questions (FAQ)](#frequently-asked-questions-faq)
+- [When to Use CrewAI](#when-to-use-crewai)
- [Contribution](#contribution)
- [Telemetry](#telemetry)
- [License](#license)
+- [Frequently Asked Questions (FAQ)](#frequently-asked-questions-faq)
## Build with AI
@@ -134,15 +135,15 @@ This installs the official [CrewAI Skills](https://github.com/crewAIInc/skills)
-CrewAI unlocks the true potential of multi-agent automation, delivering the best-in-class combination of speed, flexibility, and control with either Crews of AI Agents or Flows of Events:
+CrewAI unlocks the true potential of multi-agent automation, delivering speed, flexibility, and control through Crews of AI agents and event-driven Flows:
-- **Standalone Framework**: Built from scratch, independent of LangChain or any other agent framework.
+- **Purpose-built architecture**: Designed specifically for agent orchestration, with a lightweight Python core and clean primitives for real-world automation.
- **High Performance**: Optimized for speed and minimal resource usage, enabling faster execution.
-- **Flexible Low Level Customization**: Complete freedom to customize at both high and low levels - from overall workflows and system architecture to granular agent behaviors, internal prompts, and execution logic.
-- **Ideal for Every Use Case**: Proven effective for both simple tasks and highly complex, real-world, enterprise-grade scenarios.
+- **Flexible Low-Level Customization**: Complete freedom to customize everything from workflows and system architecture to agent behaviors, internal prompts, and execution logic.
+- **Ideal for Every Use Case**: Proven effective for simple tasks, complex workflows, and production-grade automation.
- **Robust Community**: Backed by a rapidly growing community of over **100,000 certified** developers offering comprehensive support and resources.
-CrewAI empowers developers and enterprises to confidently build intelligent automations, bridging the gap between simplicity, flexibility, and performance.
+CrewAI empowers developers and teams to build intelligent automations that balance simplicity, flexibility, and production-grade control.
## Getting Started
@@ -433,16 +434,17 @@ In addition to the sequential process, you can use the hierarchical process, whi
## Key Features
-CrewAI stands apart as a lean, standalone, high-performance multi-AI Agent framework delivering simplicity, flexibility, and precise control—free from the complexity and limitations found in other agent frameworks.
+CrewAI gives developers a practical foundation for building agentic systems that move from prototype to production: autonomous collaboration where it helps, explicit workflow control where it matters, and Python-native customization throughout.
-- **Standalone & Lean**: Completely independent from other frameworks like LangChain, offering faster execution and lighter resource demands.
-- **Flexible & Precise**: Easily orchestrate autonomous agents through intuitive [Crews](https://docs.crewai.com/concepts/crews) or precise [Flows](https://docs.crewai.com/concepts/flows), achieving perfect balance for your needs.
-- **Seamless Integration**: Effortlessly combine Crews (autonomy) and Flows (precision) to create complex, real-world automations.
-- **Deep Customization**: Tailor every aspect—from high-level workflows down to low-level internal prompts and agent behaviors.
-- **Reliable Performance**: Consistent results across simple tasks and complex, enterprise-level automations.
-- **Thriving Community**: Backed by robust documentation and over 100,000 certified developers, providing exceptional support and guidance.
+- **Crews for autonomy**: Model teams of specialized AI agents with roles, goals, tools, and tasks.
+- **Flows for control**: Build event-driven workflows with state, branching, routing, and production logic.
+- **Seamless integration**: Combine Crews and Flows to create complex, real-world automations.
+- **Python-native customization**: Customize prompts, tools, execution paths, state, and integrations without fighting the framework.
+- **Agent-ready capabilities**: Use tools, memory, knowledge, checkpointing, async execution, and MCP/A2A support for more capable production agents.
+- **Production-ready patterns**: Add deterministic steps, human input, structured outputs, and checkpointing as your system grows.
+- **Thriving community**: Backed by robust documentation and over 100,000 certified developers, providing exceptional support and guidance.
-Choose CrewAI to easily build powerful, adaptable, and production-ready AI automations.
+Choose CrewAI to build powerful, adaptable, and production-ready AI automations.
## Examples
@@ -580,16 +582,17 @@ CrewAI supports using various LLMs through a variety of connection options. By d
Please refer to the [Connect CrewAI to LLMs](https://docs.crewai.com/how-to/LLM-Connections/) page for details on configuring your agents' connections to models.
-## How CrewAI Compares
+## When to Use CrewAI
-**CrewAI's Advantage**: CrewAI combines autonomous agent intelligence with precise workflow control through its unique Crews and Flows architecture. The framework excels at both high-level orchestration and low-level customization, enabling complex, production-grade systems with granular control.
+Use CrewAI when you need more than a single prompt or chatbot: multi-step work, specialized agents, tool use, structured outputs, human review, or workflows that combine autonomous reasoning with explicit business logic.
-- **LangGraph**: While LangGraph provides a foundation for building agent workflows, its approach requires significant boilerplate code and complex state management patterns. The framework's tight coupling with LangChain can limit flexibility when implementing custom agent behaviors or integrating with external systems.
+CrewAI is especially useful when you want to:
-_P.S. CrewAI demonstrates significant performance advantages over LangGraph, executing 5.76x faster in certain cases like this QA task example ([see comparison](https://github.com/crewAIInc/crewAI-examples/tree/main/Notebooks/CrewAI%20Flows%20%26%20Langgraph/QA%20Agent)) while achieving higher evaluation scores with faster completion times in certain coding tasks, like in this example ([detailed analysis](https://github.com/crewAIInc/crewAI-examples/blob/main/Notebooks/CrewAI%20Flows%20%26%20Langgraph/Coding%20Assistant/coding_assistant_eval.ipynb))._
-
-- **Autogen**: While Autogen excels at creating conversational agents capable of working together, it lacks an inherent concept of process. In Autogen, orchestrating agents' interactions requires additional programming, which can become complex and cumbersome as the scale of tasks grows.
-- **ChatDev**: ChatDev introduced the idea of processes into the realm of AI agents, but its implementation is quite rigid. Customizations in ChatDev are limited and not geared towards production environments, which can hinder scalability and flexibility in real-world applications.
+- Coordinate multiple agents with clear roles and tasks.
+- Wrap agent work in deterministic, event-driven workflows.
+- Keep application logic in regular Python.
+- Move from experiment to production without changing frameworks.
+- Add tools, memory, checkpointing, and async execution as your system grows.
## Contribution
@@ -698,7 +701,7 @@ CrewAI is released under the [MIT License](https://github.com/crewAIInc/crewAI/b
- [What exactly is CrewAI?](#q-what-exactly-is-crewai)
- [How do I install CrewAI?](#q-how-do-i-install-crewai)
-- [Does CrewAI depend on LangChain?](#q-does-crewai-depend-on-langchain)
+- [Is CrewAI a standalone framework?](#q-is-crewai-a-standalone-framework)
- [Is CrewAI open-source?](#q-is-crewai-open-source)
- [Does CrewAI collect data from users?](#q-does-crewai-collect-data-from-users)
@@ -707,7 +710,6 @@ CrewAI is released under the [MIT License](https://github.com/crewAIInc/crewAI/b
- [Can CrewAI handle complex use cases?](#q-can-crewai-handle-complex-use-cases)
- [Can I use CrewAI with local AI models?](#q-can-i-use-crewai-with-local-ai-models)
- [What makes Crews different from Flows?](#q-what-makes-crews-different-from-flows)
-- [How is CrewAI better than LangChain?](#q-how-is-crewai-better-than-langchain)
- [Does CrewAI support fine-tuning or training custom models?](#q-does-crewai-support-fine-tuning-or-training-custom-models)
### Resources and Community
@@ -723,7 +725,7 @@ CrewAI is released under the [MIT License](https://github.com/crewAIInc/crewAI/b
### Q: What exactly is CrewAI?
-A: CrewAI is a standalone, lean, and fast Python framework built specifically for orchestrating autonomous AI agents. Unlike frameworks like LangChain, CrewAI does not rely on external dependencies, making it leaner, faster, and simpler.
+A: CrewAI is a lean, fast Python framework built specifically for orchestrating autonomous AI agents and production-ready agentic workflows.
### Q: How do I install CrewAI?
@@ -739,9 +741,9 @@ For additional tools, use:
uv pip install 'crewai[tools]'
```
-### Q: Does CrewAI depend on LangChain?
+### Q: Is CrewAI a standalone framework?
-A: No. CrewAI is built entirely from the ground up, with no dependencies on LangChain or other agent frameworks. This ensures a lean, fast, and flexible experience.
+A: Yes. CrewAI is a standalone Python framework with its own primitives for agents, tasks, crews, flows, tools, and orchestration.
### Q: Can CrewAI handle complex use cases?
@@ -755,10 +757,6 @@ A: Absolutely! CrewAI supports various language models, including local ones. To
A: Crews provide autonomous agent collaboration, ideal for tasks requiring flexible decision-making and dynamic interaction. Flows offer precise, event-driven control, ideal for managing detailed execution paths and secure state management. You can seamlessly combine both for maximum effectiveness.
-### Q: How is CrewAI better than LangChain?
-
-A: CrewAI provides simpler, more intuitive APIs, faster execution speeds, more reliable and consistent results, robust documentation, and an active community—addressing common criticisms and limitations associated with LangChain.
-
### Q: Is CrewAI open-source?
A: Yes, CrewAI is open-source and actively encourages community contributions and collaboration.
@@ -797,11 +795,11 @@ A: Absolutely! CrewAI agents can easily integrate with external tools, APIs, and
### Q: Is CrewAI suitable for production environments?
-A: Yes, CrewAI is explicitly designed with production-grade standards, ensuring reliability, stability, and scalability for enterprise deployments.
+A: Yes, CrewAI is designed with production-grade patterns that support reliable, stable, and scalable agentic workflows.
### Q: How scalable is CrewAI?
-A: CrewAI is highly scalable, supporting simple automations and large-scale enterprise workflows involving numerous agents and complex tasks simultaneously.
+A: CrewAI is highly scalable, supporting simple automations and large-scale workflows involving numerous agents and complex tasks simultaneously.
### Q: Does CrewAI offer debugging and monitoring tools?
diff --git a/docs/docs.json b/docs/docs.json
index 1b8b03806..c71b081ee 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -586,8 +586,538 @@
"tag": "Edge"
},
{
- "version": "v1.15.0",
+ "version": "v1.15.1",
"default": true,
+ "tabs": [
+ {
+ "tab": "Home",
+ "icon": "house",
+ "groups": [
+ {
+ "group": "Welcome",
+ "pages": [
+ "index"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Documentation",
+ "icon": "book-open",
+ "groups": [
+ {
+ "group": "Get Started",
+ "pages": [
+ "v1.15.1/en/introduction",
+ "v1.15.1/en/guides/coding-tools/build-with-ai",
+ "v1.15.1/en/skills",
+ "v1.15.1/en/installation",
+ "v1.15.1/en/quickstart"
+ ]
+ },
+ {
+ "group": "Guides",
+ "pages": [
+ {
+ "group": "Strategy",
+ "icon": "compass",
+ "pages": [
+ "v1.15.1/en/guides/concepts/evaluating-use-cases"
+ ]
+ },
+ {
+ "group": "Agents",
+ "icon": "user",
+ "pages": [
+ "v1.15.1/en/guides/agents/crafting-effective-agents"
+ ]
+ },
+ {
+ "group": "Crews",
+ "icon": "users",
+ "pages": [
+ "v1.15.1/en/guides/crews/first-crew"
+ ]
+ },
+ {
+ "group": "Flows",
+ "icon": "code-branch",
+ "pages": [
+ "v1.15.1/en/guides/flows/first-flow",
+ "v1.15.1/en/guides/flows/mastering-flow-state",
+ "v1.15.1/en/guides/flows/conversational-flows",
+ "v1.15.1/en/guides/flows/inputs-id-deprecation"
+ ]
+ },
+ {
+ "group": "Tools",
+ "icon": "wrench",
+ "pages": [
+ "v1.15.1/en/guides/tools/publish-custom-tools"
+ ]
+ },
+ {
+ "group": "Coding Tools",
+ "icon": "terminal",
+ "pages": [
+ "v1.15.1/en/guides/coding-tools/agents-md",
+ "v1.15.1/en/guides/coding-tools/build-with-ai"
+ ]
+ },
+ {
+ "group": "Advanced",
+ "icon": "gear",
+ "pages": [
+ "v1.15.1/en/guides/advanced/customizing-prompts",
+ "v1.15.1/en/guides/advanced/fingerprinting"
+ ]
+ },
+ {
+ "group": "Migration",
+ "icon": "shuffle",
+ "pages": [
+ "v1.15.1/en/guides/migration/migrating-from-langgraph",
+ "v1.15.1/en/guides/migration/upgrading-crewai"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Core Concepts",
+ "pages": [
+ "v1.15.1/en/concepts/agents",
+ "v1.15.1/en/concepts/agent-capabilities",
+ "v1.15.1/en/concepts/tasks",
+ "v1.15.1/en/concepts/crews",
+ "v1.15.1/en/concepts/flows",
+ "v1.15.1/en/concepts/production-architecture",
+ "v1.15.1/en/concepts/knowledge",
+ "v1.15.1/en/concepts/skills",
+ "v1.15.1/en/concepts/llms",
+ "v1.15.1/en/concepts/files",
+ "v1.15.1/en/concepts/processes",
+ "v1.15.1/en/concepts/collaboration",
+ "v1.15.1/en/concepts/training",
+ "v1.15.1/en/concepts/memory",
+ "v1.15.1/en/concepts/reasoning",
+ "v1.15.1/en/concepts/planning",
+ "v1.15.1/en/concepts/testing",
+ "v1.15.1/en/concepts/cli",
+ "v1.15.1/en/concepts/tools",
+ "v1.15.1/en/concepts/event-listener",
+ "v1.15.1/en/concepts/checkpointing"
+ ]
+ },
+ {
+ "group": "MCP Integration",
+ "pages": [
+ "v1.15.1/en/mcp/overview",
+ "v1.15.1/en/mcp/dsl-integration",
+ "v1.15.1/en/mcp/stdio",
+ "v1.15.1/en/mcp/sse",
+ "v1.15.1/en/mcp/streamable-http",
+ "v1.15.1/en/mcp/multiple-servers",
+ "v1.15.1/en/mcp/security"
+ ]
+ },
+ {
+ "group": "Tools",
+ "pages": [
+ "v1.15.1/en/tools/overview",
+ {
+ "group": "File & Document",
+ "icon": "folder-open",
+ "pages": [
+ "v1.15.1/en/tools/file-document/overview",
+ "v1.15.1/en/tools/file-document/filereadtool",
+ "v1.15.1/en/tools/file-document/filewritetool",
+ "v1.15.1/en/tools/file-document/pdfsearchtool",
+ "v1.15.1/en/tools/file-document/docxsearchtool",
+ "v1.15.1/en/tools/file-document/mdxsearchtool",
+ "v1.15.1/en/tools/file-document/xmlsearchtool",
+ "v1.15.1/en/tools/file-document/txtsearchtool",
+ "v1.15.1/en/tools/file-document/jsonsearchtool",
+ "v1.15.1/en/tools/file-document/csvsearchtool",
+ "v1.15.1/en/tools/file-document/directorysearchtool",
+ "v1.15.1/en/tools/file-document/directoryreadtool",
+ "v1.15.1/en/tools/file-document/ocrtool",
+ "v1.15.1/en/tools/file-document/pdf-text-writing-tool"
+ ]
+ },
+ {
+ "group": "Web Scraping & Browsing",
+ "icon": "globe",
+ "pages": [
+ "v1.15.1/en/tools/web-scraping/overview",
+ "v1.15.1/en/tools/web-scraping/scrapewebsitetool",
+ "v1.15.1/en/tools/web-scraping/scrapeelementfromwebsitetool",
+ "v1.15.1/en/tools/web-scraping/scrapflyscrapetool",
+ "v1.15.1/en/tools/web-scraping/seleniumscrapingtool",
+ "v1.15.1/en/tools/web-scraping/scrapegraphscrapetool",
+ "v1.15.1/en/tools/web-scraping/spidertool",
+ "v1.15.1/en/tools/web-scraping/browserbaseloadtool",
+ "v1.15.1/en/tools/web-scraping/hyperbrowserloadtool",
+ "v1.15.1/en/tools/web-scraping/stagehandtool",
+ "v1.15.1/en/tools/web-scraping/firecrawlcrawlwebsitetool",
+ "v1.15.1/en/tools/web-scraping/firecrawlscrapewebsitetool",
+ "v1.15.1/en/tools/web-scraping/oxylabsscraperstool",
+ "v1.15.1/en/tools/web-scraping/brightdata-tools",
+ "v1.15.1/en/tools/web-scraping/youai-contents"
+ ]
+ },
+ {
+ "group": "Search & Research",
+ "icon": "magnifying-glass",
+ "pages": [
+ "v1.15.1/en/tools/search-research/overview",
+ "v1.15.1/en/tools/search-research/serperdevtool",
+ "v1.15.1/en/tools/search-research/bravesearchtool",
+ "v1.15.1/en/tools/search-research/exasearchtool",
+ "v1.15.1/en/tools/search-research/linkupsearchtool",
+ "v1.15.1/en/tools/search-research/githubsearchtool",
+ "v1.15.1/en/tools/search-research/websitesearchtool",
+ "v1.15.1/en/tools/search-research/codedocssearchtool",
+ "v1.15.1/en/tools/search-research/youtubechannelsearchtool",
+ "v1.15.1/en/tools/search-research/youtubevideosearchtool",
+ "v1.15.1/en/tools/search-research/tavilysearchtool",
+ "v1.15.1/en/tools/search-research/tavilyextractortool",
+ "v1.15.1/en/tools/search-research/tavilyresearchtool",
+ "v1.15.1/en/tools/search-research/arxivpapertool",
+ "v1.15.1/en/tools/search-research/serpapi-googlesearchtool",
+ "v1.15.1/en/tools/search-research/serpapi-googleshoppingtool",
+ "v1.15.1/en/tools/search-research/databricks-query-tool",
+ "v1.15.1/en/tools/search-research/youai-search"
+ ]
+ },
+ {
+ "group": "Database & Data",
+ "icon": "database",
+ "pages": [
+ "v1.15.1/en/tools/database-data/overview",
+ "v1.15.1/en/tools/database-data/mysqltool",
+ "v1.15.1/en/tools/database-data/pgsearchtool",
+ "v1.15.1/en/tools/database-data/snowflakesearchtool",
+ "v1.15.1/en/tools/database-data/nl2sqltool",
+ "v1.15.1/en/tools/database-data/qdrantvectorsearchtool",
+ "v1.15.1/en/tools/database-data/weaviatevectorsearchtool",
+ "v1.15.1/en/tools/database-data/mongodbvectorsearchtool",
+ "v1.15.1/en/tools/database-data/singlestoresearchtool"
+ ]
+ },
+ {
+ "group": "AI & Machine Learning",
+ "icon": "brain",
+ "pages": [
+ "v1.15.1/en/tools/ai-ml/overview",
+ "v1.15.1/en/tools/ai-ml/dalletool",
+ "v1.15.1/en/tools/ai-ml/visiontool",
+ "v1.15.1/en/tools/ai-ml/aimindtool",
+ "v1.15.1/en/tools/ai-ml/llamaindextool",
+ "v1.15.1/en/tools/ai-ml/langchaintool",
+ "v1.15.1/en/tools/ai-ml/ragtool",
+ "v1.15.1/en/tools/ai-ml/codeinterpretertool",
+ "v1.15.1/en/tools/ai-ml/daytona",
+ "v1.15.1/en/tools/ai-ml/e2bsandboxtools"
+ ]
+ },
+ {
+ "group": "Cloud & Storage",
+ "icon": "cloud",
+ "pages": [
+ "v1.15.1/en/tools/cloud-storage/overview",
+ "v1.15.1/en/tools/cloud-storage/s3readertool",
+ "v1.15.1/en/tools/cloud-storage/s3writertool",
+ "v1.15.1/en/tools/cloud-storage/bedrockkbretriever"
+ ]
+ },
+ {
+ "group": "Integrations",
+ "icon": "plug",
+ "pages": [
+ "v1.15.1/en/tools/integration/overview",
+ "v1.15.1/en/tools/integration/bedrockinvokeagenttool",
+ "v1.15.1/en/tools/integration/crewaiautomationtool",
+ "v1.15.1/en/tools/integration/mergeagenthandlertool"
+ ]
+ },
+ {
+ "group": "Automation",
+ "icon": "bolt",
+ "pages": [
+ "v1.15.1/en/tools/automation/overview",
+ "v1.15.1/en/tools/automation/apifyactorstool",
+ "v1.15.1/en/tools/automation/composiotool",
+ "v1.15.1/en/tools/automation/multiontool",
+ "v1.15.1/en/tools/automation/zapieractionstool"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Observability",
+ "pages": [
+ "v1.15.1/en/observability/tracing",
+ "v1.15.1/en/observability/overview",
+ "v1.15.1/en/observability/arize-phoenix",
+ "v1.15.1/en/observability/braintrust",
+ "v1.15.1/en/observability/datadog",
+ "v1.15.1/en/observability/galileo",
+ "v1.15.1/en/observability/langdb",
+ "v1.15.1/en/observability/langfuse",
+ "v1.15.1/en/observability/langtrace",
+ "v1.15.1/en/observability/maxim",
+ "v1.15.1/en/observability/mlflow",
+ "v1.15.1/en/observability/neatlogs",
+ "v1.15.1/en/observability/openlit",
+ "v1.15.1/en/observability/opik",
+ "v1.15.1/en/observability/patronus-evaluation",
+ "v1.15.1/en/observability/portkey",
+ "v1.15.1/en/observability/weave",
+ "v1.15.1/en/observability/truefoundry"
+ ]
+ },
+ {
+ "group": "Learn",
+ "pages": [
+ "v1.15.1/en/learn/overview",
+ "v1.15.1/en/learn/llm-selection-guide",
+ "v1.15.1/en/learn/conditional-tasks",
+ "v1.15.1/en/learn/coding-agents",
+ "v1.15.1/en/learn/create-custom-tools",
+ "v1.15.1/en/learn/custom-llm",
+ "v1.15.1/en/learn/custom-manager-agent",
+ "v1.15.1/en/learn/customizing-agents",
+ "v1.15.1/en/learn/dalle-image-generation",
+ "v1.15.1/en/learn/force-tool-output-as-result",
+ "v1.15.1/en/learn/hierarchical-process",
+ "v1.15.1/en/learn/human-input-on-execution",
+ "v1.15.1/en/learn/human-in-the-loop",
+ "v1.15.1/en/learn/human-feedback-in-flows",
+ "v1.15.1/en/learn/kickoff-async",
+ "v1.15.1/en/learn/kickoff-for-each",
+ "v1.15.1/en/learn/llm-connections",
+ "v1.15.1/en/learn/litellm-removal-guide",
+ "v1.15.1/en/learn/multimodal-agents",
+ "v1.15.1/en/learn/replay-tasks-from-latest-crew-kickoff",
+ "v1.15.1/en/learn/sequential-process",
+ "v1.15.1/en/learn/using-annotations",
+ "v1.15.1/en/learn/execution-hooks",
+ "v1.15.1/en/learn/llm-hooks",
+ "v1.15.1/en/learn/tool-hooks"
+ ]
+ },
+ {
+ "group": "Telemetry",
+ "pages": [
+ "v1.15.1/en/telemetry"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "AMP",
+ "icon": "briefcase",
+ "groups": [
+ {
+ "group": "Getting Started",
+ "pages": [
+ "v1.15.1/en/enterprise/introduction"
+ ]
+ },
+ {
+ "group": "Build",
+ "pages": [
+ "v1.15.1/en/enterprise/features/automations",
+ {
+ "group": "Crew Studio",
+ "icon": "pencil",
+ "pages": [
+ "v1.15.1/en/enterprise/features/crew-studio",
+ "v1.15.1/en/enterprise/features/merged-step-card"
+ ]
+ },
+ "v1.15.1/en/enterprise/features/marketplace",
+ "v1.15.1/en/enterprise/features/agent-repositories",
+ "v1.15.1/en/enterprise/features/tools-and-integrations",
+ "v1.15.1/en/enterprise/features/pii-trace-redactions",
+ "v1.15.1/en/enterprise/features/a2a"
+ ]
+ },
+ {
+ "group": "Operate",
+ "pages": [
+ "v1.15.1/en/enterprise/features/traces",
+ "v1.15.1/en/enterprise/features/webhook-streaming",
+ "v1.15.1/en/enterprise/features/hallucination-guardrail",
+ "v1.15.1/en/enterprise/features/flow-hitl-management"
+ ]
+ },
+ {
+ "group": "Manage",
+ "pages": [
+ "v1.15.1/en/enterprise/features/sso",
+ "v1.15.1/en/enterprise/features/rbac",
+ {
+ "group": "Secrets Manager",
+ "icon": "lock",
+ "pages": [
+ "v1.15.1/en/enterprise/features/secrets-manager/overview",
+ "v1.15.1/en/enterprise/features/secrets-manager/usage",
+ {
+ "group": "AWS",
+ "icon": "aws",
+ "pages": [
+ "v1.15.1/en/enterprise/features/secrets-manager/aws",
+ "v1.15.1/en/enterprise/features/secrets-manager/aws-workload-identity"
+ ]
+ },
+ {
+ "group": "GCP",
+ "icon": "google",
+ "pages": [
+ "v1.15.1/en/enterprise/features/secrets-manager/gcp",
+ "v1.15.1/en/enterprise/features/secrets-manager/gcp-workload-identity"
+ ]
+ },
+ {
+ "group": "Azure",
+ "icon": "microsoft",
+ "pages": [
+ "v1.15.1/en/enterprise/features/secrets-manager/azure",
+ "v1.15.1/en/enterprise/features/secrets-manager/azure-workload-identity"
+ ]
+ },
+ "v1.15.1/en/enterprise/features/secrets-manager/verify-rotation"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Integration Docs",
+ "pages": [
+ "v1.15.1/en/enterprise/integrations/asana",
+ "v1.15.1/en/enterprise/integrations/box",
+ "v1.15.1/en/enterprise/integrations/clickup",
+ "v1.15.1/en/enterprise/integrations/databricks",
+ "v1.15.1/en/enterprise/integrations/github",
+ "v1.15.1/en/enterprise/integrations/gmail",
+ "v1.15.1/en/enterprise/integrations/google_calendar",
+ "v1.15.1/en/enterprise/integrations/google_contacts",
+ "v1.15.1/en/enterprise/integrations/google_docs",
+ "v1.15.1/en/enterprise/integrations/google_drive",
+ "v1.15.1/en/enterprise/integrations/google_sheets",
+ "v1.15.1/en/enterprise/integrations/google_slides",
+ "v1.15.1/en/enterprise/integrations/hubspot",
+ "v1.15.1/en/enterprise/integrations/jira",
+ "v1.15.1/en/enterprise/integrations/linear",
+ "v1.15.1/en/enterprise/integrations/microsoft_excel",
+ "v1.15.1/en/enterprise/integrations/microsoft_onedrive",
+ "v1.15.1/en/enterprise/integrations/microsoft_outlook",
+ "v1.15.1/en/enterprise/integrations/microsoft_sharepoint",
+ "v1.15.1/en/enterprise/integrations/microsoft_teams",
+ "v1.15.1/en/enterprise/integrations/microsoft_word",
+ "v1.15.1/en/enterprise/integrations/notion",
+ "v1.15.1/en/enterprise/integrations/salesforce",
+ "v1.15.1/en/enterprise/integrations/shopify",
+ "v1.15.1/en/enterprise/integrations/slack",
+ "v1.15.1/en/enterprise/integrations/snowflake",
+ "v1.15.1/en/enterprise/integrations/stripe",
+ "v1.15.1/en/enterprise/integrations/zendesk"
+ ]
+ },
+ {
+ "group": "Triggers",
+ "pages": [
+ "v1.15.1/en/enterprise/guides/automation-triggers",
+ "v1.15.1/en/enterprise/guides/gmail-trigger",
+ "v1.15.1/en/enterprise/guides/google-calendar-trigger",
+ "v1.15.1/en/enterprise/guides/google-drive-trigger",
+ "v1.15.1/en/enterprise/guides/outlook-trigger",
+ "v1.15.1/en/enterprise/guides/onedrive-trigger",
+ "v1.15.1/en/enterprise/guides/microsoft-teams-trigger",
+ "v1.15.1/en/enterprise/guides/slack-trigger",
+ "v1.15.1/en/enterprise/guides/hubspot-trigger",
+ "v1.15.1/en/enterprise/guides/salesforce-trigger",
+ "v1.15.1/en/enterprise/guides/zapier-trigger"
+ ]
+ },
+ {
+ "group": "How-To Guides",
+ "pages": [
+ "v1.15.1/en/enterprise/guides/build-crew",
+ "v1.15.1/en/enterprise/guides/prepare-for-deployment",
+ "v1.15.1/en/enterprise/guides/deploy-to-amp",
+ "v1.15.1/en/enterprise/guides/monorepo-deployments",
+ "v1.15.1/en/enterprise/guides/private-package-registry",
+ "v1.15.1/en/enterprise/guides/kickoff-crew",
+ "v1.15.1/en/enterprise/guides/update-crew",
+ "v1.15.1/en/enterprise/guides/enable-crew-studio",
+ "v1.15.1/en/enterprise/guides/capture_telemetry_logs",
+ "v1.15.1/en/enterprise/guides/datadog",
+ "v1.15.1/en/enterprise/guides/azure-openai-setup",
+ "v1.15.1/en/enterprise/guides/vertex-ai-workload-identity-setup",
+ "v1.15.1/en/enterprise/guides/tool-repository",
+ "v1.15.1/en/enterprise/guides/custom-mcp-server",
+ "v1.15.1/en/enterprise/guides/react-component-export",
+ "v1.15.1/en/enterprise/guides/team-management",
+ "v1.15.1/en/enterprise/guides/human-in-the-loop",
+ "v1.15.1/en/enterprise/guides/webhook-automation"
+ ]
+ },
+ {
+ "group": "Resources",
+ "pages": [
+ "v1.15.1/en/enterprise/resources/frequently-asked-questions"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API Reference",
+ "icon": "magnifying-glass",
+ "groups": [
+ {
+ "group": "Getting Started",
+ "pages": [
+ "v1.15.1/en/api-reference/introduction",
+ "v1.15.1/en/api-reference/inputs",
+ "v1.15.1/en/api-reference/kickoff",
+ "v1.15.1/en/api-reference/resume",
+ "v1.15.1/en/api-reference/status"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Examples",
+ "icon": "code",
+ "groups": [
+ {
+ "group": "Examples",
+ "pages": [
+ "v1.15.1/en/examples/example",
+ "v1.15.1/en/examples/cookbooks"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Changelog",
+ "icon": "clock",
+ "groups": [
+ {
+ "group": "Release Notes",
+ "pages": [
+ "v1.15.1/en/changelog"
+ ]
+ }
+ ]
+ }
+ ],
+ "tag": "Latest"
+ },
+ {
+ "version": "v1.15.0",
"tabs": [
{
"tab": "Home",
@@ -1053,6 +1583,7 @@
"v1.15.0/en/enterprise/guides/update-crew",
"v1.15.0/en/enterprise/guides/enable-crew-studio",
"v1.15.0/en/enterprise/guides/capture_telemetry_logs",
+ "v1.15.0/en/enterprise/guides/datadog",
"v1.15.0/en/enterprise/guides/azure-openai-setup",
"v1.15.0/en/enterprise/guides/vertex-ai-workload-identity-setup",
"v1.15.0/en/enterprise/guides/tool-repository",
@@ -1112,8 +1643,7 @@
}
]
}
- ],
- "tag": "Latest"
+ ]
},
{
"version": "v1.14.7",
@@ -9276,8 +9806,515 @@
"tag": "Edge"
},
{
- "version": "v1.15.0",
+ "version": "v1.15.1",
"default": true,
+ "tabs": [
+ {
+ "tab": "Início",
+ "icon": "house",
+ "groups": [
+ {
+ "group": "Bem-vindo",
+ "pages": [
+ "v1.15.1/pt-BR/index"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Documentação",
+ "icon": "book-open",
+ "groups": [
+ {
+ "group": "Começando",
+ "pages": [
+ "v1.15.1/pt-BR/introduction",
+ "v1.15.1/pt-BR/guides/coding-tools/build-with-ai",
+ "v1.15.1/pt-BR/skills",
+ "v1.15.1/pt-BR/installation",
+ "v1.15.1/pt-BR/quickstart"
+ ]
+ },
+ {
+ "group": "Guias",
+ "pages": [
+ {
+ "group": "Estratégia",
+ "icon": "compass",
+ "pages": [
+ "v1.15.1/pt-BR/guides/concepts/evaluating-use-cases"
+ ]
+ },
+ {
+ "group": "Agentes",
+ "icon": "user",
+ "pages": [
+ "v1.15.1/pt-BR/guides/agents/crafting-effective-agents"
+ ]
+ },
+ {
+ "group": "Crews",
+ "icon": "users",
+ "pages": [
+ "v1.15.1/pt-BR/guides/crews/first-crew"
+ ]
+ },
+ {
+ "group": "Flows",
+ "icon": "code-branch",
+ "pages": [
+ "v1.15.1/pt-BR/guides/flows/first-flow",
+ "v1.15.1/pt-BR/guides/flows/mastering-flow-state",
+ "v1.15.1/pt-BR/guides/flows/conversational-flows",
+ "v1.15.1/pt-BR/guides/flows/inputs-id-deprecation"
+ ]
+ },
+ {
+ "group": "Ferramentas",
+ "icon": "wrench",
+ "pages": [
+ "v1.15.1/pt-BR/guides/tools/publish-custom-tools"
+ ]
+ },
+ {
+ "group": "Ferramentas de Codificação",
+ "icon": "terminal",
+ "pages": [
+ "v1.15.1/pt-BR/guides/coding-tools/agents-md"
+ ]
+ },
+ {
+ "group": "Avançado",
+ "icon": "gear",
+ "pages": [
+ "v1.15.1/pt-BR/guides/advanced/customizing-prompts",
+ "v1.15.1/pt-BR/guides/advanced/fingerprinting"
+ ]
+ },
+ {
+ "group": "Migração",
+ "icon": "shuffle",
+ "pages": [
+ "v1.15.1/pt-BR/guides/migration/migrating-from-langgraph"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Conceitos-Chave",
+ "pages": [
+ "v1.15.1/pt-BR/concepts/agents",
+ "v1.15.1/pt-BR/concepts/agent-capabilities",
+ "v1.15.1/pt-BR/concepts/tasks",
+ "v1.15.1/pt-BR/concepts/crews",
+ "v1.15.1/pt-BR/concepts/flows",
+ "v1.15.1/pt-BR/concepts/production-architecture",
+ "v1.15.1/pt-BR/concepts/knowledge",
+ "v1.15.1/pt-BR/concepts/skills",
+ "v1.15.1/pt-BR/concepts/llms",
+ "v1.15.1/pt-BR/concepts/files",
+ "v1.15.1/pt-BR/concepts/processes",
+ "v1.15.1/pt-BR/concepts/collaboration",
+ "v1.15.1/pt-BR/concepts/training",
+ "v1.15.1/pt-BR/concepts/memory",
+ "v1.15.1/pt-BR/concepts/reasoning",
+ "v1.15.1/pt-BR/concepts/planning",
+ "v1.15.1/pt-BR/concepts/testing",
+ "v1.15.1/pt-BR/concepts/cli",
+ "v1.15.1/pt-BR/concepts/tools",
+ "v1.15.1/pt-BR/concepts/event-listener",
+ "v1.15.1/pt-BR/concepts/checkpointing"
+ ]
+ },
+ {
+ "group": "Integração MCP",
+ "pages": [
+ "v1.15.1/pt-BR/mcp/overview",
+ "v1.15.1/pt-BR/mcp/dsl-integration",
+ "v1.15.1/pt-BR/mcp/stdio",
+ "v1.15.1/pt-BR/mcp/sse",
+ "v1.15.1/pt-BR/mcp/streamable-http",
+ "v1.15.1/pt-BR/mcp/multiple-servers",
+ "v1.15.1/pt-BR/mcp/security"
+ ]
+ },
+ {
+ "group": "Ferramentas",
+ "pages": [
+ "v1.15.1/pt-BR/tools/overview",
+ {
+ "group": "Arquivo & Documento",
+ "icon": "folder-open",
+ "pages": [
+ "v1.15.1/pt-BR/tools/file-document/overview",
+ "v1.15.1/pt-BR/tools/file-document/filereadtool",
+ "v1.15.1/pt-BR/tools/file-document/filewritetool",
+ "v1.15.1/pt-BR/tools/file-document/pdfsearchtool",
+ "v1.15.1/pt-BR/tools/file-document/docxsearchtool",
+ "v1.15.1/pt-BR/tools/file-document/mdxsearchtool",
+ "v1.15.1/pt-BR/tools/file-document/xmlsearchtool",
+ "v1.15.1/pt-BR/tools/file-document/txtsearchtool",
+ "v1.15.1/pt-BR/tools/file-document/jsonsearchtool",
+ "v1.15.1/pt-BR/tools/file-document/csvsearchtool",
+ "v1.15.1/pt-BR/tools/file-document/directorysearchtool",
+ "v1.15.1/pt-BR/tools/file-document/directoryreadtool"
+ ]
+ },
+ {
+ "group": "Web Scraping & Navegação",
+ "icon": "globe",
+ "pages": [
+ "v1.15.1/pt-BR/tools/web-scraping/overview",
+ "v1.15.1/pt-BR/tools/web-scraping/scrapewebsitetool",
+ "v1.15.1/pt-BR/tools/web-scraping/scrapeelementfromwebsitetool",
+ "v1.15.1/pt-BR/tools/web-scraping/scrapflyscrapetool",
+ "v1.15.1/pt-BR/tools/web-scraping/seleniumscrapingtool",
+ "v1.15.1/pt-BR/tools/web-scraping/scrapegraphscrapetool",
+ "v1.15.1/pt-BR/tools/web-scraping/spidertool",
+ "v1.15.1/pt-BR/tools/web-scraping/browserbaseloadtool",
+ "v1.15.1/pt-BR/tools/web-scraping/hyperbrowserloadtool",
+ "v1.15.1/pt-BR/tools/web-scraping/stagehandtool",
+ "v1.15.1/pt-BR/tools/web-scraping/firecrawlcrawlwebsitetool",
+ "v1.15.1/pt-BR/tools/web-scraping/firecrawlscrapewebsitetool",
+ "v1.15.1/pt-BR/tools/web-scraping/oxylabsscraperstool"
+ ]
+ },
+ {
+ "group": "Pesquisa",
+ "icon": "magnifying-glass",
+ "pages": [
+ "v1.15.1/pt-BR/tools/search-research/overview",
+ "v1.15.1/pt-BR/tools/search-research/serperdevtool",
+ "v1.15.1/pt-BR/tools/search-research/bravesearchtool",
+ "v1.15.1/pt-BR/tools/search-research/exasearchtool",
+ "v1.15.1/pt-BR/tools/search-research/linkupsearchtool",
+ "v1.15.1/pt-BR/tools/search-research/githubsearchtool",
+ "v1.15.1/pt-BR/tools/search-research/websitesearchtool",
+ "v1.15.1/pt-BR/tools/search-research/codedocssearchtool",
+ "v1.15.1/pt-BR/tools/search-research/youtubechannelsearchtool",
+ "v1.15.1/pt-BR/tools/search-research/youtubevideosearchtool"
+ ]
+ },
+ {
+ "group": "Dados",
+ "icon": "database",
+ "pages": [
+ "v1.15.1/pt-BR/tools/database-data/overview",
+ "v1.15.1/pt-BR/tools/database-data/mysqltool",
+ "v1.15.1/pt-BR/tools/database-data/pgsearchtool",
+ "v1.15.1/pt-BR/tools/database-data/snowflakesearchtool",
+ "v1.15.1/pt-BR/tools/database-data/nl2sqltool",
+ "v1.15.1/pt-BR/tools/database-data/qdrantvectorsearchtool",
+ "v1.15.1/pt-BR/tools/database-data/weaviatevectorsearchtool"
+ ]
+ },
+ {
+ "group": "IA & Machine Learning",
+ "icon": "brain",
+ "pages": [
+ "v1.15.1/pt-BR/tools/ai-ml/overview",
+ "v1.15.1/pt-BR/tools/ai-ml/dalletool",
+ "v1.15.1/pt-BR/tools/ai-ml/visiontool",
+ "v1.15.1/pt-BR/tools/ai-ml/aimindtool",
+ "v1.15.1/pt-BR/tools/ai-ml/llamaindextool",
+ "v1.15.1/pt-BR/tools/ai-ml/langchaintool",
+ "v1.15.1/pt-BR/tools/ai-ml/ragtool",
+ "v1.15.1/pt-BR/tools/ai-ml/codeinterpretertool",
+ "v1.15.1/pt-BR/tools/ai-ml/daytona"
+ ]
+ },
+ {
+ "group": "Cloud & Armazenamento",
+ "icon": "cloud",
+ "pages": [
+ "v1.15.1/pt-BR/tools/cloud-storage/overview",
+ "v1.15.1/pt-BR/tools/cloud-storage/s3readertool",
+ "v1.15.1/pt-BR/tools/cloud-storage/s3writertool",
+ "v1.15.1/pt-BR/tools/cloud-storage/bedrockkbretriever"
+ ]
+ },
+ {
+ "group": "Integrations",
+ "icon": "plug",
+ "pages": [
+ "v1.15.1/pt-BR/tools/integration/overview",
+ "v1.15.1/pt-BR/tools/integration/bedrockinvokeagenttool",
+ "v1.15.1/pt-BR/tools/integration/crewaiautomationtool"
+ ]
+ },
+ {
+ "group": "Automação",
+ "icon": "bolt",
+ "pages": [
+ "v1.15.1/pt-BR/tools/automation/overview",
+ "v1.15.1/pt-BR/tools/automation/apifyactorstool",
+ "v1.15.1/pt-BR/tools/automation/composiotool",
+ "v1.15.1/pt-BR/tools/automation/multiontool"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Observabilidade",
+ "pages": [
+ "v1.15.1/pt-BR/observability/tracing",
+ "v1.15.1/pt-BR/observability/overview",
+ "v1.15.1/pt-BR/observability/arize-phoenix",
+ "v1.15.1/pt-BR/observability/braintrust",
+ "v1.15.1/pt-BR/observability/datadog",
+ "v1.15.1/pt-BR/observability/galileo",
+ "v1.15.1/pt-BR/observability/langdb",
+ "v1.15.1/pt-BR/observability/langfuse",
+ "v1.15.1/pt-BR/observability/langtrace",
+ "v1.15.1/pt-BR/observability/maxim",
+ "v1.15.1/pt-BR/observability/mlflow",
+ "v1.15.1/pt-BR/observability/openlit",
+ "v1.15.1/pt-BR/observability/opik",
+ "v1.15.1/pt-BR/observability/patronus-evaluation",
+ "v1.15.1/pt-BR/observability/portkey",
+ "v1.15.1/pt-BR/observability/weave",
+ "v1.15.1/pt-BR/observability/truefoundry"
+ ]
+ },
+ {
+ "group": "Aprenda",
+ "pages": [
+ "v1.15.1/pt-BR/learn/overview",
+ "v1.15.1/pt-BR/learn/llm-selection-guide",
+ "v1.15.1/pt-BR/learn/conditional-tasks",
+ "v1.15.1/pt-BR/learn/coding-agents",
+ "v1.15.1/pt-BR/learn/create-custom-tools",
+ "v1.15.1/pt-BR/learn/custom-llm",
+ "v1.15.1/pt-BR/learn/custom-manager-agent",
+ "v1.15.1/pt-BR/learn/customizing-agents",
+ "v1.15.1/pt-BR/learn/dalle-image-generation",
+ "v1.15.1/pt-BR/learn/force-tool-output-as-result",
+ "v1.15.1/pt-BR/learn/hierarchical-process",
+ "v1.15.1/pt-BR/learn/human-input-on-execution",
+ "v1.15.1/pt-BR/learn/human-in-the-loop",
+ "v1.15.1/pt-BR/learn/human-feedback-in-flows",
+ "v1.15.1/pt-BR/learn/kickoff-async",
+ "v1.15.1/pt-BR/learn/kickoff-for-each",
+ "v1.15.1/pt-BR/learn/llm-connections",
+ "v1.15.1/pt-BR/learn/multimodal-agents",
+ "v1.15.1/pt-BR/learn/replay-tasks-from-latest-crew-kickoff",
+ "v1.15.1/pt-BR/learn/sequential-process",
+ "v1.15.1/pt-BR/learn/using-annotations",
+ "v1.15.1/pt-BR/learn/execution-hooks",
+ "v1.15.1/pt-BR/learn/llm-hooks",
+ "v1.15.1/pt-BR/learn/tool-hooks"
+ ]
+ },
+ {
+ "group": "Telemetria",
+ "pages": [
+ "v1.15.1/pt-BR/telemetry"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "AMP",
+ "icon": "briefcase",
+ "groups": [
+ {
+ "group": "Começando",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/introduction"
+ ]
+ },
+ {
+ "group": "Construir",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/features/automations",
+ {
+ "group": "Crew Studio",
+ "icon": "pencil",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/features/crew-studio",
+ "v1.15.1/pt-BR/enterprise/features/merged-step-card"
+ ]
+ },
+ "v1.15.1/pt-BR/enterprise/features/marketplace",
+ "v1.15.1/pt-BR/enterprise/features/agent-repositories",
+ "v1.15.1/pt-BR/enterprise/features/tools-and-integrations",
+ "v1.15.1/pt-BR/enterprise/features/pii-trace-redactions"
+ ]
+ },
+ {
+ "group": "Operar",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/features/traces",
+ "v1.15.1/pt-BR/enterprise/features/webhook-streaming",
+ "v1.15.1/pt-BR/enterprise/features/hallucination-guardrail",
+ "v1.15.1/pt-BR/enterprise/features/flow-hitl-management"
+ ]
+ },
+ {
+ "group": "Gerenciar",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/features/rbac",
+ {
+ "group": "Secrets Manager",
+ "icon": "lock",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/overview",
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/usage",
+ {
+ "group": "AWS",
+ "icon": "aws",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/aws",
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/aws-workload-identity"
+ ]
+ },
+ {
+ "group": "GCP",
+ "icon": "google",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/gcp",
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/gcp-workload-identity"
+ ]
+ },
+ {
+ "group": "Azure",
+ "icon": "microsoft",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/azure",
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/azure-workload-identity"
+ ]
+ },
+ "v1.15.1/pt-BR/enterprise/features/secrets-manager/verify-rotation"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Documentação de Integração",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/integrations/asana",
+ "v1.15.1/pt-BR/enterprise/integrations/box",
+ "v1.15.1/pt-BR/enterprise/integrations/clickup",
+ "v1.15.1/pt-BR/enterprise/integrations/databricks",
+ "v1.15.1/pt-BR/enterprise/integrations/github",
+ "v1.15.1/pt-BR/enterprise/integrations/gmail",
+ "v1.15.1/pt-BR/enterprise/integrations/google_calendar",
+ "v1.15.1/pt-BR/enterprise/integrations/google_contacts",
+ "v1.15.1/pt-BR/enterprise/integrations/google_docs",
+ "v1.15.1/pt-BR/enterprise/integrations/google_drive",
+ "v1.15.1/pt-BR/enterprise/integrations/google_sheets",
+ "v1.15.1/pt-BR/enterprise/integrations/google_slides",
+ "v1.15.1/pt-BR/enterprise/integrations/hubspot",
+ "v1.15.1/pt-BR/enterprise/integrations/jira",
+ "v1.15.1/pt-BR/enterprise/integrations/linear",
+ "v1.15.1/pt-BR/enterprise/integrations/microsoft_excel",
+ "v1.15.1/pt-BR/enterprise/integrations/microsoft_onedrive",
+ "v1.15.1/pt-BR/enterprise/integrations/microsoft_outlook",
+ "v1.15.1/pt-BR/enterprise/integrations/microsoft_sharepoint",
+ "v1.15.1/pt-BR/enterprise/integrations/microsoft_teams",
+ "v1.15.1/pt-BR/enterprise/integrations/microsoft_word",
+ "v1.15.1/pt-BR/enterprise/integrations/notion",
+ "v1.15.1/pt-BR/enterprise/integrations/salesforce",
+ "v1.15.1/pt-BR/enterprise/integrations/shopify",
+ "v1.15.1/pt-BR/enterprise/integrations/slack",
+ "v1.15.1/pt-BR/enterprise/integrations/snowflake",
+ "v1.15.1/pt-BR/enterprise/integrations/stripe",
+ "v1.15.1/pt-BR/enterprise/integrations/zendesk"
+ ]
+ },
+ {
+ "group": "Guias",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/guides/build-crew",
+ "v1.15.1/pt-BR/enterprise/guides/prepare-for-deployment",
+ "v1.15.1/pt-BR/enterprise/guides/deploy-to-amp",
+ "v1.15.1/pt-BR/enterprise/guides/monorepo-deployments",
+ "v1.15.1/pt-BR/enterprise/guides/private-package-registry",
+ "v1.15.1/pt-BR/enterprise/guides/kickoff-crew",
+ "v1.15.1/pt-BR/enterprise/guides/training-crews",
+ "v1.15.1/pt-BR/enterprise/guides/update-crew",
+ "v1.15.1/pt-BR/enterprise/guides/enable-crew-studio",
+ "v1.15.1/pt-BR/enterprise/guides/capture_telemetry_logs",
+ "v1.15.1/pt-BR/enterprise/guides/datadog",
+ "v1.15.1/pt-BR/enterprise/guides/azure-openai-setup",
+ "v1.15.1/pt-BR/enterprise/guides/tool-repository",
+ "v1.15.1/pt-BR/enterprise/guides/custom-mcp-server",
+ "v1.15.1/pt-BR/enterprise/guides/react-component-export",
+ "v1.15.1/pt-BR/enterprise/guides/team-management",
+ "v1.15.1/pt-BR/enterprise/guides/human-in-the-loop",
+ "v1.15.1/pt-BR/enterprise/guides/webhook-automation"
+ ]
+ },
+ {
+ "group": "Triggers",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/guides/automation-triggers",
+ "v1.15.1/pt-BR/enterprise/guides/gmail-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/google-calendar-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/google-drive-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/outlook-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/onedrive-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/microsoft-teams-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/slack-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/hubspot-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/salesforce-trigger",
+ "v1.15.1/pt-BR/enterprise/guides/zapier-trigger"
+ ]
+ },
+ {
+ "group": "Recursos",
+ "pages": [
+ "v1.15.1/pt-BR/enterprise/resources/frequently-asked-questions"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Referência da API",
+ "icon": "magnifying-glass",
+ "groups": [
+ {
+ "group": "Começando",
+ "pages": [
+ "v1.15.1/pt-BR/api-reference/introduction",
+ "v1.15.1/pt-BR/api-reference/inputs",
+ "v1.15.1/pt-BR/api-reference/kickoff",
+ "v1.15.1/pt-BR/api-reference/resume",
+ "v1.15.1/pt-BR/api-reference/status"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Exemplos",
+ "icon": "code",
+ "groups": [
+ {
+ "group": "Exemplos",
+ "pages": [
+ "v1.15.1/pt-BR/examples/example",
+ "v1.15.1/pt-BR/examples/cookbooks"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "Notas de Versão",
+ "icon": "clock",
+ "groups": [
+ {
+ "group": "Notas de Versão",
+ "pages": [
+ "v1.15.1/pt-BR/changelog"
+ ]
+ }
+ ]
+ }
+ ],
+ "tag": "Latest"
+ },
+ {
+ "version": "v1.15.0",
"tabs": [
{
"tab": "Início",
@@ -9705,6 +10742,7 @@
"v1.15.0/pt-BR/enterprise/guides/update-crew",
"v1.15.0/pt-BR/enterprise/guides/enable-crew-studio",
"v1.15.0/pt-BR/enterprise/guides/capture_telemetry_logs",
+ "v1.15.0/pt-BR/enterprise/guides/datadog",
"v1.15.0/pt-BR/enterprise/guides/azure-openai-setup",
"v1.15.0/pt-BR/enterprise/guides/tool-repository",
"v1.15.0/pt-BR/enterprise/guides/custom-mcp-server",
@@ -9779,8 +10817,7 @@
}
]
}
- ],
- "tag": "Latest"
+ ]
},
{
"version": "v1.14.7",
@@ -17659,8 +18696,527 @@
"tag": "Edge"
},
{
- "version": "v1.15.0",
+ "version": "v1.15.1",
"default": true,
+ "tabs": [
+ {
+ "tab": "홈",
+ "icon": "house",
+ "groups": [
+ {
+ "group": "환영합니다",
+ "pages": [
+ "v1.15.1/ko/index"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "기술 문서",
+ "icon": "book-open",
+ "groups": [
+ {
+ "group": "시작 안내",
+ "pages": [
+ "v1.15.1/ko/introduction",
+ "v1.15.1/ko/guides/coding-tools/build-with-ai",
+ "v1.15.1/ko/skills",
+ "v1.15.1/ko/installation",
+ "v1.15.1/ko/quickstart"
+ ]
+ },
+ {
+ "group": "가이드",
+ "pages": [
+ {
+ "group": "전략",
+ "icon": "compass",
+ "pages": [
+ "v1.15.1/ko/guides/concepts/evaluating-use-cases"
+ ]
+ },
+ {
+ "group": "에이전트 (Agents)",
+ "icon": "user",
+ "pages": [
+ "v1.15.1/ko/guides/agents/crafting-effective-agents"
+ ]
+ },
+ {
+ "group": "크루 (Crews)",
+ "icon": "users",
+ "pages": [
+ "v1.15.1/ko/guides/crews/first-crew"
+ ]
+ },
+ {
+ "group": "플로우 (Flows)",
+ "icon": "code-branch",
+ "pages": [
+ "v1.15.1/ko/guides/flows/first-flow",
+ "v1.15.1/ko/guides/flows/mastering-flow-state",
+ "v1.15.1/ko/guides/flows/conversational-flows",
+ "v1.15.1/ko/guides/flows/inputs-id-deprecation"
+ ]
+ },
+ {
+ "group": "도구",
+ "icon": "wrench",
+ "pages": [
+ "v1.15.1/ko/guides/tools/publish-custom-tools"
+ ]
+ },
+ {
+ "group": "코딩 도구",
+ "icon": "terminal",
+ "pages": [
+ "v1.15.1/ko/guides/coding-tools/agents-md"
+ ]
+ },
+ {
+ "group": "고급",
+ "icon": "gear",
+ "pages": [
+ "v1.15.1/ko/guides/advanced/customizing-prompts",
+ "v1.15.1/ko/guides/advanced/fingerprinting"
+ ]
+ },
+ {
+ "group": "마이그레이션",
+ "icon": "shuffle",
+ "pages": [
+ "v1.15.1/ko/guides/migration/migrating-from-langgraph"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "핵심 개념",
+ "pages": [
+ "v1.15.1/ko/concepts/agents",
+ "v1.15.1/ko/concepts/tasks",
+ "v1.15.1/ko/concepts/agent-capabilities",
+ "v1.15.1/ko/concepts/crews",
+ "v1.15.1/ko/concepts/flows",
+ "v1.15.1/ko/concepts/production-architecture",
+ "v1.15.1/ko/concepts/knowledge",
+ "v1.15.1/ko/concepts/skills",
+ "v1.15.1/ko/concepts/llms",
+ "v1.15.1/ko/concepts/files",
+ "v1.15.1/ko/concepts/processes",
+ "v1.15.1/ko/concepts/collaboration",
+ "v1.15.1/ko/concepts/training",
+ "v1.15.1/ko/concepts/memory",
+ "v1.15.1/ko/concepts/reasoning",
+ "v1.15.1/ko/concepts/planning",
+ "v1.15.1/ko/concepts/testing",
+ "v1.15.1/ko/concepts/cli",
+ "v1.15.1/ko/concepts/tools",
+ "v1.15.1/ko/concepts/event-listener",
+ "v1.15.1/ko/concepts/checkpointing"
+ ]
+ },
+ {
+ "group": "MCP 통합",
+ "pages": [
+ "v1.15.1/ko/mcp/overview",
+ "v1.15.1/ko/mcp/dsl-integration",
+ "v1.15.1/ko/mcp/stdio",
+ "v1.15.1/ko/mcp/sse",
+ "v1.15.1/ko/mcp/streamable-http",
+ "v1.15.1/ko/mcp/multiple-servers",
+ "v1.15.1/ko/mcp/security"
+ ]
+ },
+ {
+ "group": "도구 (Tools)",
+ "pages": [
+ "v1.15.1/ko/tools/overview",
+ {
+ "group": "파일 & 문서",
+ "icon": "folder-open",
+ "pages": [
+ "v1.15.1/ko/tools/file-document/overview",
+ "v1.15.1/ko/tools/file-document/filereadtool",
+ "v1.15.1/ko/tools/file-document/filewritetool",
+ "v1.15.1/ko/tools/file-document/pdfsearchtool",
+ "v1.15.1/ko/tools/file-document/docxsearchtool",
+ "v1.15.1/ko/tools/file-document/mdxsearchtool",
+ "v1.15.1/ko/tools/file-document/xmlsearchtool",
+ "v1.15.1/ko/tools/file-document/txtsearchtool",
+ "v1.15.1/ko/tools/file-document/jsonsearchtool",
+ "v1.15.1/ko/tools/file-document/csvsearchtool",
+ "v1.15.1/ko/tools/file-document/directorysearchtool",
+ "v1.15.1/ko/tools/file-document/directoryreadtool",
+ "v1.15.1/ko/tools/file-document/ocrtool",
+ "v1.15.1/ko/tools/file-document/pdf-text-writing-tool"
+ ]
+ },
+ {
+ "group": "웹 스크래핑 & 브라우징",
+ "icon": "globe",
+ "pages": [
+ "v1.15.1/ko/tools/web-scraping/overview",
+ "v1.15.1/ko/tools/web-scraping/scrapewebsitetool",
+ "v1.15.1/ko/tools/web-scraping/scrapeelementfromwebsitetool",
+ "v1.15.1/ko/tools/web-scraping/scrapflyscrapetool",
+ "v1.15.1/ko/tools/web-scraping/seleniumscrapingtool",
+ "v1.15.1/ko/tools/web-scraping/scrapegraphscrapetool",
+ "v1.15.1/ko/tools/web-scraping/spidertool",
+ "v1.15.1/ko/tools/web-scraping/browserbaseloadtool",
+ "v1.15.1/ko/tools/web-scraping/hyperbrowserloadtool",
+ "v1.15.1/ko/tools/web-scraping/stagehandtool",
+ "v1.15.1/ko/tools/web-scraping/firecrawlcrawlwebsitetool",
+ "v1.15.1/ko/tools/web-scraping/firecrawlscrapewebsitetool",
+ "v1.15.1/ko/tools/web-scraping/oxylabsscraperstool",
+ "v1.15.1/ko/tools/web-scraping/brightdata-tools"
+ ]
+ },
+ {
+ "group": "검색 및 연구",
+ "icon": "magnifying-glass",
+ "pages": [
+ "v1.15.1/ko/tools/search-research/overview",
+ "v1.15.1/ko/tools/search-research/serperdevtool",
+ "v1.15.1/ko/tools/search-research/bravesearchtool",
+ "v1.15.1/ko/tools/search-research/exasearchtool",
+ "v1.15.1/ko/tools/search-research/linkupsearchtool",
+ "v1.15.1/ko/tools/search-research/githubsearchtool",
+ "v1.15.1/ko/tools/search-research/websitesearchtool",
+ "v1.15.1/ko/tools/search-research/codedocssearchtool",
+ "v1.15.1/ko/tools/search-research/youtubechannelsearchtool",
+ "v1.15.1/ko/tools/search-research/youtubevideosearchtool",
+ "v1.15.1/ko/tools/search-research/tavilysearchtool",
+ "v1.15.1/ko/tools/search-research/tavilyextractortool",
+ "v1.15.1/ko/tools/search-research/tavilyresearchtool",
+ "v1.15.1/ko/tools/search-research/arxivpapertool",
+ "v1.15.1/ko/tools/search-research/serpapi-googlesearchtool",
+ "v1.15.1/ko/tools/search-research/serpapi-googleshoppingtool",
+ "v1.15.1/ko/tools/search-research/databricks-query-tool"
+ ]
+ },
+ {
+ "group": "데이터베이스 & 데이터",
+ "icon": "database",
+ "pages": [
+ "v1.15.1/ko/tools/database-data/overview",
+ "v1.15.1/ko/tools/database-data/mysqltool",
+ "v1.15.1/ko/tools/database-data/pgsearchtool",
+ "v1.15.1/ko/tools/database-data/snowflakesearchtool",
+ "v1.15.1/ko/tools/database-data/nl2sqltool",
+ "v1.15.1/ko/tools/database-data/qdrantvectorsearchtool",
+ "v1.15.1/ko/tools/database-data/weaviatevectorsearchtool",
+ "v1.15.1/ko/tools/database-data/mongodbvectorsearchtool",
+ "v1.15.1/ko/tools/database-data/singlestoresearchtool"
+ ]
+ },
+ {
+ "group": "인공지능 & 머신러닝",
+ "icon": "brain",
+ "pages": [
+ "v1.15.1/ko/tools/ai-ml/overview",
+ "v1.15.1/ko/tools/ai-ml/dalletool",
+ "v1.15.1/ko/tools/ai-ml/visiontool",
+ "v1.15.1/ko/tools/ai-ml/aimindtool",
+ "v1.15.1/ko/tools/ai-ml/llamaindextool",
+ "v1.15.1/ko/tools/ai-ml/langchaintool",
+ "v1.15.1/ko/tools/ai-ml/ragtool",
+ "v1.15.1/ko/tools/ai-ml/codeinterpretertool"
+ ]
+ },
+ {
+ "group": "클라우드 & 스토리지",
+ "icon": "cloud",
+ "pages": [
+ "v1.15.1/ko/tools/cloud-storage/overview",
+ "v1.15.1/ko/tools/cloud-storage/s3readertool",
+ "v1.15.1/ko/tools/cloud-storage/s3writertool",
+ "v1.15.1/ko/tools/cloud-storage/bedrockkbretriever"
+ ]
+ },
+ {
+ "group": "Integrations",
+ "icon": "plug",
+ "pages": [
+ "v1.15.1/ko/tools/integration/overview",
+ "v1.15.1/ko/tools/integration/bedrockinvokeagenttool",
+ "v1.15.1/ko/tools/integration/crewaiautomationtool"
+ ]
+ },
+ {
+ "group": "자동화",
+ "icon": "bolt",
+ "pages": [
+ "v1.15.1/ko/tools/automation/overview",
+ "v1.15.1/ko/tools/automation/apifyactorstool",
+ "v1.15.1/ko/tools/automation/composiotool",
+ "v1.15.1/ko/tools/automation/multiontool",
+ "v1.15.1/ko/tools/automation/zapieractionstool"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Observability",
+ "pages": [
+ "v1.15.1/ko/observability/tracing",
+ "v1.15.1/ko/observability/overview",
+ "v1.15.1/ko/observability/arize-phoenix",
+ "v1.15.1/ko/observability/braintrust",
+ "v1.15.1/ko/observability/datadog",
+ "v1.15.1/ko/observability/galileo",
+ "v1.15.1/ko/observability/langdb",
+ "v1.15.1/ko/observability/langfuse",
+ "v1.15.1/ko/observability/langtrace",
+ "v1.15.1/ko/observability/maxim",
+ "v1.15.1/ko/observability/mlflow",
+ "v1.15.1/ko/observability/neatlogs",
+ "v1.15.1/ko/observability/openlit",
+ "v1.15.1/ko/observability/opik",
+ "v1.15.1/ko/observability/patronus-evaluation",
+ "v1.15.1/ko/observability/portkey",
+ "v1.15.1/ko/observability/weave"
+ ]
+ },
+ {
+ "group": "학습",
+ "pages": [
+ "v1.15.1/ko/learn/overview",
+ "v1.15.1/ko/learn/llm-selection-guide",
+ "v1.15.1/ko/learn/conditional-tasks",
+ "v1.15.1/ko/learn/coding-agents",
+ "v1.15.1/ko/learn/create-custom-tools",
+ "v1.15.1/ko/learn/custom-llm",
+ "v1.15.1/ko/learn/custom-manager-agent",
+ "v1.15.1/ko/learn/customizing-agents",
+ "v1.15.1/ko/learn/dalle-image-generation",
+ "v1.15.1/ko/learn/force-tool-output-as-result",
+ "v1.15.1/ko/learn/hierarchical-process",
+ "v1.15.1/ko/learn/human-input-on-execution",
+ "v1.15.1/ko/learn/human-in-the-loop",
+ "v1.15.1/ko/learn/human-feedback-in-flows",
+ "v1.15.1/ko/learn/kickoff-async",
+ "v1.15.1/ko/learn/kickoff-for-each",
+ "v1.15.1/ko/learn/llm-connections",
+ "v1.15.1/ko/learn/multimodal-agents",
+ "v1.15.1/ko/learn/replay-tasks-from-latest-crew-kickoff",
+ "v1.15.1/ko/learn/sequential-process",
+ "v1.15.1/ko/learn/using-annotations",
+ "v1.15.1/ko/learn/execution-hooks",
+ "v1.15.1/ko/learn/llm-hooks",
+ "v1.15.1/ko/learn/tool-hooks"
+ ]
+ },
+ {
+ "group": "Telemetry",
+ "pages": [
+ "v1.15.1/ko/telemetry"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "엔터프라이즈",
+ "icon": "briefcase",
+ "groups": [
+ {
+ "group": "시작 안내",
+ "pages": [
+ "v1.15.1/ko/enterprise/introduction"
+ ]
+ },
+ {
+ "group": "빌드",
+ "pages": [
+ "v1.15.1/ko/enterprise/features/automations",
+ {
+ "group": "Crew Studio",
+ "icon": "pencil",
+ "pages": [
+ "v1.15.1/ko/enterprise/features/crew-studio",
+ "v1.15.1/ko/enterprise/features/merged-step-card"
+ ]
+ },
+ "v1.15.1/ko/enterprise/features/marketplace",
+ "v1.15.1/ko/enterprise/features/agent-repositories",
+ "v1.15.1/ko/enterprise/features/tools-and-integrations",
+ "v1.15.1/ko/enterprise/features/pii-trace-redactions"
+ ]
+ },
+ {
+ "group": "운영",
+ "pages": [
+ "v1.15.1/ko/enterprise/features/traces",
+ "v1.15.1/ko/enterprise/features/webhook-streaming",
+ "v1.15.1/ko/enterprise/features/hallucination-guardrail",
+ "v1.15.1/ko/enterprise/features/flow-hitl-management"
+ ]
+ },
+ {
+ "group": "관리",
+ "pages": [
+ "v1.15.1/ko/enterprise/features/rbac",
+ {
+ "group": "Secrets Manager",
+ "icon": "lock",
+ "pages": [
+ "v1.15.1/ko/enterprise/features/secrets-manager/overview",
+ "v1.15.1/ko/enterprise/features/secrets-manager/usage",
+ {
+ "group": "AWS",
+ "icon": "aws",
+ "pages": [
+ "v1.15.1/ko/enterprise/features/secrets-manager/aws",
+ "v1.15.1/ko/enterprise/features/secrets-manager/aws-workload-identity"
+ ]
+ },
+ {
+ "group": "GCP",
+ "icon": "google",
+ "pages": [
+ "v1.15.1/ko/enterprise/features/secrets-manager/gcp",
+ "v1.15.1/ko/enterprise/features/secrets-manager/gcp-workload-identity"
+ ]
+ },
+ {
+ "group": "Azure",
+ "icon": "microsoft",
+ "pages": [
+ "v1.15.1/ko/enterprise/features/secrets-manager/azure",
+ "v1.15.1/ko/enterprise/features/secrets-manager/azure-workload-identity"
+ ]
+ },
+ "v1.15.1/ko/enterprise/features/secrets-manager/verify-rotation"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "통합 문서",
+ "pages": [
+ "v1.15.1/ko/enterprise/integrations/asana",
+ "v1.15.1/ko/enterprise/integrations/box",
+ "v1.15.1/ko/enterprise/integrations/clickup",
+ "v1.15.1/ko/enterprise/integrations/databricks",
+ "v1.15.1/ko/enterprise/integrations/github",
+ "v1.15.1/ko/enterprise/integrations/gmail",
+ "v1.15.1/ko/enterprise/integrations/google_calendar",
+ "v1.15.1/ko/enterprise/integrations/google_contacts",
+ "v1.15.1/ko/enterprise/integrations/google_docs",
+ "v1.15.1/ko/enterprise/integrations/google_drive",
+ "v1.15.1/ko/enterprise/integrations/google_sheets",
+ "v1.15.1/ko/enterprise/integrations/google_slides",
+ "v1.15.1/ko/enterprise/integrations/hubspot",
+ "v1.15.1/ko/enterprise/integrations/jira",
+ "v1.15.1/ko/enterprise/integrations/linear",
+ "v1.15.1/ko/enterprise/integrations/microsoft_excel",
+ "v1.15.1/ko/enterprise/integrations/microsoft_onedrive",
+ "v1.15.1/ko/enterprise/integrations/microsoft_outlook",
+ "v1.15.1/ko/enterprise/integrations/microsoft_sharepoint",
+ "v1.15.1/ko/enterprise/integrations/microsoft_teams",
+ "v1.15.1/ko/enterprise/integrations/microsoft_word",
+ "v1.15.1/ko/enterprise/integrations/notion",
+ "v1.15.1/ko/enterprise/integrations/salesforce",
+ "v1.15.1/ko/enterprise/integrations/shopify",
+ "v1.15.1/ko/enterprise/integrations/slack",
+ "v1.15.1/ko/enterprise/integrations/snowflake",
+ "v1.15.1/ko/enterprise/integrations/stripe",
+ "v1.15.1/ko/enterprise/integrations/zendesk"
+ ]
+ },
+ {
+ "group": "How-To Guides",
+ "pages": [
+ "v1.15.1/ko/enterprise/guides/build-crew",
+ "v1.15.1/ko/enterprise/guides/prepare-for-deployment",
+ "v1.15.1/ko/enterprise/guides/deploy-to-amp",
+ "v1.15.1/ko/enterprise/guides/monorepo-deployments",
+ "v1.15.1/ko/enterprise/guides/private-package-registry",
+ "v1.15.1/ko/enterprise/guides/kickoff-crew",
+ "v1.15.1/ko/enterprise/guides/training-crews",
+ "v1.15.1/ko/enterprise/guides/update-crew",
+ "v1.15.1/ko/enterprise/guides/enable-crew-studio",
+ "v1.15.1/ko/enterprise/guides/capture_telemetry_logs",
+ "v1.15.1/ko/enterprise/guides/datadog",
+ "v1.15.1/ko/enterprise/guides/azure-openai-setup",
+ "v1.15.1/ko/enterprise/guides/tool-repository",
+ "v1.15.1/ko/enterprise/guides/custom-mcp-server",
+ "v1.15.1/ko/enterprise/guides/react-component-export",
+ "v1.15.1/ko/enterprise/guides/team-management",
+ "v1.15.1/ko/enterprise/guides/human-in-the-loop",
+ "v1.15.1/ko/enterprise/guides/webhook-automation"
+ ]
+ },
+ {
+ "group": "트리거",
+ "pages": [
+ "v1.15.1/ko/enterprise/guides/automation-triggers",
+ "v1.15.1/ko/enterprise/guides/gmail-trigger",
+ "v1.15.1/ko/enterprise/guides/google-calendar-trigger",
+ "v1.15.1/ko/enterprise/guides/google-drive-trigger",
+ "v1.15.1/ko/enterprise/guides/outlook-trigger",
+ "v1.15.1/ko/enterprise/guides/onedrive-trigger",
+ "v1.15.1/ko/enterprise/guides/microsoft-teams-trigger",
+ "v1.15.1/ko/enterprise/guides/slack-trigger",
+ "v1.15.1/ko/enterprise/guides/hubspot-trigger",
+ "v1.15.1/ko/enterprise/guides/salesforce-trigger",
+ "v1.15.1/ko/enterprise/guides/zapier-trigger"
+ ]
+ },
+ {
+ "group": "학습 자원",
+ "pages": [
+ "v1.15.1/ko/enterprise/resources/frequently-asked-questions"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API 레퍼런스",
+ "icon": "magnifying-glass",
+ "groups": [
+ {
+ "group": "시작 안내",
+ "pages": [
+ "v1.15.1/ko/api-reference/introduction",
+ "v1.15.1/ko/api-reference/inputs",
+ "v1.15.1/ko/api-reference/kickoff",
+ "v1.15.1/ko/api-reference/resume",
+ "v1.15.1/ko/api-reference/status"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "예시",
+ "icon": "code",
+ "groups": [
+ {
+ "group": "예시",
+ "pages": [
+ "v1.15.1/ko/examples/example",
+ "v1.15.1/ko/examples/cookbooks"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "변경 로그",
+ "icon": "clock",
+ "groups": [
+ {
+ "group": "릴리스 노트",
+ "pages": [
+ "v1.15.1/ko/changelog"
+ ]
+ }
+ ]
+ }
+ ],
+ "tag": "Latest"
+ },
+ {
+ "version": "v1.15.0",
"tabs": [
{
"tab": "홈",
@@ -18100,6 +19656,7 @@
"v1.15.0/ko/enterprise/guides/update-crew",
"v1.15.0/ko/enterprise/guides/enable-crew-studio",
"v1.15.0/ko/enterprise/guides/capture_telemetry_logs",
+ "v1.15.0/ko/enterprise/guides/datadog",
"v1.15.0/ko/enterprise/guides/azure-openai-setup",
"v1.15.0/ko/enterprise/guides/tool-repository",
"v1.15.0/ko/enterprise/guides/custom-mcp-server",
@@ -18174,8 +19731,7 @@
}
]
}
- ],
- "tag": "Latest"
+ ]
},
{
"version": "v1.14.7",
@@ -26246,8 +27802,527 @@
"tag": "Edge"
},
{
- "version": "v1.15.0",
+ "version": "v1.15.1",
"default": true,
+ "tabs": [
+ {
+ "tab": "الرئيسية",
+ "icon": "house",
+ "groups": [
+ {
+ "group": "مرحباً",
+ "pages": [
+ "v1.15.1/ar/index"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "التقنية التوثيق",
+ "icon": "book-open",
+ "groups": [
+ {
+ "group": "البدء",
+ "pages": [
+ "v1.15.1/ar/introduction",
+ "v1.15.1/ar/guides/coding-tools/build-with-ai",
+ "v1.15.1/ar/skills",
+ "v1.15.1/ar/installation",
+ "v1.15.1/ar/quickstart"
+ ]
+ },
+ {
+ "group": "الأدلّة",
+ "pages": [
+ {
+ "group": "الاستراتيجية",
+ "icon": "compass",
+ "pages": [
+ "v1.15.1/ar/guides/concepts/evaluating-use-cases"
+ ]
+ },
+ {
+ "group": "الوكلاء",
+ "icon": "user",
+ "pages": [
+ "v1.15.1/ar/guides/agents/crafting-effective-agents"
+ ]
+ },
+ {
+ "group": "الطواقم",
+ "icon": "users",
+ "pages": [
+ "v1.15.1/ar/guides/crews/first-crew"
+ ]
+ },
+ {
+ "group": "التدفقات",
+ "icon": "code-branch",
+ "pages": [
+ "v1.15.1/ar/guides/flows/first-flow",
+ "v1.15.1/ar/guides/flows/mastering-flow-state",
+ "v1.15.1/ar/guides/flows/conversational-flows",
+ "v1.15.1/ar/guides/flows/inputs-id-deprecation"
+ ]
+ },
+ {
+ "group": "الأدوات",
+ "icon": "wrench",
+ "pages": [
+ "v1.15.1/ar/guides/tools/publish-custom-tools"
+ ]
+ },
+ {
+ "group": "أدوات البرمجة",
+ "icon": "terminal",
+ "pages": [
+ "v1.15.1/ar/guides/coding-tools/agents-md"
+ ]
+ },
+ {
+ "group": "متقدّم",
+ "icon": "gear",
+ "pages": [
+ "v1.15.1/ar/guides/advanced/customizing-prompts",
+ "v1.15.1/ar/guides/advanced/fingerprinting"
+ ]
+ },
+ {
+ "group": "الترحيل",
+ "icon": "shuffle",
+ "pages": [
+ "v1.15.1/ar/guides/migration/migrating-from-langgraph"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "المفاهيم الأساسية",
+ "pages": [
+ "v1.15.1/ar/concepts/agents",
+ "v1.15.1/ar/concepts/agent-capabilities",
+ "v1.15.1/ar/concepts/tasks",
+ "v1.15.1/ar/concepts/crews",
+ "v1.15.1/ar/concepts/flows",
+ "v1.15.1/ar/concepts/production-architecture",
+ "v1.15.1/ar/concepts/knowledge",
+ "v1.15.1/ar/concepts/skills",
+ "v1.15.1/ar/concepts/llms",
+ "v1.15.1/ar/concepts/files",
+ "v1.15.1/ar/concepts/processes",
+ "v1.15.1/ar/concepts/collaboration",
+ "v1.15.1/ar/concepts/training",
+ "v1.15.1/ar/concepts/memory",
+ "v1.15.1/ar/concepts/reasoning",
+ "v1.15.1/ar/concepts/planning",
+ "v1.15.1/ar/concepts/testing",
+ "v1.15.1/ar/concepts/cli",
+ "v1.15.1/ar/concepts/tools",
+ "v1.15.1/ar/concepts/event-listener",
+ "v1.15.1/ar/concepts/checkpointing"
+ ]
+ },
+ {
+ "group": "تكامل MCP",
+ "pages": [
+ "v1.15.1/ar/mcp/overview",
+ "v1.15.1/ar/mcp/dsl-integration",
+ "v1.15.1/ar/mcp/stdio",
+ "v1.15.1/ar/mcp/sse",
+ "v1.15.1/ar/mcp/streamable-http",
+ "v1.15.1/ar/mcp/multiple-servers",
+ "v1.15.1/ar/mcp/security"
+ ]
+ },
+ {
+ "group": "الأدوات",
+ "pages": [
+ "v1.15.1/ar/tools/overview",
+ {
+ "group": "الملفات والمستندات",
+ "icon": "folder-open",
+ "pages": [
+ "v1.15.1/ar/tools/file-document/overview",
+ "v1.15.1/ar/tools/file-document/filereadtool",
+ "v1.15.1/ar/tools/file-document/filewritetool",
+ "v1.15.1/ar/tools/file-document/pdfsearchtool",
+ "v1.15.1/ar/tools/file-document/docxsearchtool",
+ "v1.15.1/ar/tools/file-document/mdxsearchtool",
+ "v1.15.1/ar/tools/file-document/xmlsearchtool",
+ "v1.15.1/ar/tools/file-document/txtsearchtool",
+ "v1.15.1/ar/tools/file-document/jsonsearchtool",
+ "v1.15.1/ar/tools/file-document/csvsearchtool",
+ "v1.15.1/ar/tools/file-document/directorysearchtool",
+ "v1.15.1/ar/tools/file-document/directoryreadtool",
+ "v1.15.1/ar/tools/file-document/ocrtool",
+ "v1.15.1/ar/tools/file-document/pdf-text-writing-tool"
+ ]
+ },
+ {
+ "group": "استخراج بيانات الويب",
+ "icon": "globe",
+ "pages": [
+ "v1.15.1/ar/tools/web-scraping/overview",
+ "v1.15.1/ar/tools/web-scraping/scrapewebsitetool",
+ "v1.15.1/ar/tools/web-scraping/scrapeelementfromwebsitetool",
+ "v1.15.1/ar/tools/web-scraping/scrapflyscrapetool",
+ "v1.15.1/ar/tools/web-scraping/seleniumscrapingtool",
+ "v1.15.1/ar/tools/web-scraping/scrapegraphscrapetool",
+ "v1.15.1/ar/tools/web-scraping/spidertool",
+ "v1.15.1/ar/tools/web-scraping/browserbaseloadtool",
+ "v1.15.1/ar/tools/web-scraping/hyperbrowserloadtool",
+ "v1.15.1/ar/tools/web-scraping/stagehandtool",
+ "v1.15.1/ar/tools/web-scraping/firecrawlcrawlwebsitetool",
+ "v1.15.1/ar/tools/web-scraping/firecrawlscrapewebsitetool",
+ "v1.15.1/ar/tools/web-scraping/oxylabsscraperstool",
+ "v1.15.1/ar/tools/web-scraping/brightdata-tools"
+ ]
+ },
+ {
+ "group": "البحث والاستكشاف",
+ "icon": "magnifying-glass",
+ "pages": [
+ "v1.15.1/ar/tools/search-research/overview",
+ "v1.15.1/ar/tools/search-research/serperdevtool",
+ "v1.15.1/ar/tools/search-research/bravesearchtool",
+ "v1.15.1/ar/tools/search-research/exasearchtool",
+ "v1.15.1/ar/tools/search-research/linkupsearchtool",
+ "v1.15.1/ar/tools/search-research/githubsearchtool",
+ "v1.15.1/ar/tools/search-research/websitesearchtool",
+ "v1.15.1/ar/tools/search-research/codedocssearchtool",
+ "v1.15.1/ar/tools/search-research/youtubechannelsearchtool",
+ "v1.15.1/ar/tools/search-research/youtubevideosearchtool",
+ "v1.15.1/ar/tools/search-research/tavilysearchtool",
+ "v1.15.1/ar/tools/search-research/tavilyextractortool",
+ "v1.15.1/ar/tools/search-research/tavilyresearchtool",
+ "v1.15.1/ar/tools/search-research/arxivpapertool",
+ "v1.15.1/ar/tools/search-research/serpapi-googlesearchtool",
+ "v1.15.1/ar/tools/search-research/serpapi-googleshoppingtool",
+ "v1.15.1/ar/tools/search-research/databricks-query-tool"
+ ]
+ },
+ {
+ "group": "قواعد البيانات",
+ "icon": "database",
+ "pages": [
+ "v1.15.1/ar/tools/database-data/overview",
+ "v1.15.1/ar/tools/database-data/mysqltool",
+ "v1.15.1/ar/tools/database-data/pgsearchtool",
+ "v1.15.1/ar/tools/database-data/snowflakesearchtool",
+ "v1.15.1/ar/tools/database-data/nl2sqltool",
+ "v1.15.1/ar/tools/database-data/qdrantvectorsearchtool",
+ "v1.15.1/ar/tools/database-data/weaviatevectorsearchtool",
+ "v1.15.1/ar/tools/database-data/mongodbvectorsearchtool",
+ "v1.15.1/ar/tools/database-data/singlestoresearchtool"
+ ]
+ },
+ {
+ "group": "الذكاء الاصطناعي والتعلّم الآلي",
+ "icon": "brain",
+ "pages": [
+ "v1.15.1/ar/tools/ai-ml/overview",
+ "v1.15.1/ar/tools/ai-ml/dalletool",
+ "v1.15.1/ar/tools/ai-ml/visiontool",
+ "v1.15.1/ar/tools/ai-ml/aimindtool",
+ "v1.15.1/ar/tools/ai-ml/llamaindextool",
+ "v1.15.1/ar/tools/ai-ml/langchaintool",
+ "v1.15.1/ar/tools/ai-ml/ragtool",
+ "v1.15.1/ar/tools/ai-ml/codeinterpretertool"
+ ]
+ },
+ {
+ "group": "التخزين السحابي",
+ "icon": "cloud",
+ "pages": [
+ "v1.15.1/ar/tools/cloud-storage/overview",
+ "v1.15.1/ar/tools/cloud-storage/s3readertool",
+ "v1.15.1/ar/tools/cloud-storage/s3writertool",
+ "v1.15.1/ar/tools/cloud-storage/bedrockkbretriever"
+ ]
+ },
+ {
+ "group": "Integrations",
+ "icon": "plug",
+ "pages": [
+ "v1.15.1/ar/tools/integration/overview",
+ "v1.15.1/ar/tools/integration/bedrockinvokeagenttool",
+ "v1.15.1/ar/tools/integration/crewaiautomationtool"
+ ]
+ },
+ {
+ "group": "الأتمتة",
+ "icon": "bolt",
+ "pages": [
+ "v1.15.1/ar/tools/automation/overview",
+ "v1.15.1/ar/tools/automation/apifyactorstool",
+ "v1.15.1/ar/tools/automation/composiotool",
+ "v1.15.1/ar/tools/automation/multiontool",
+ "v1.15.1/ar/tools/automation/zapieractionstool"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "Observability",
+ "pages": [
+ "v1.15.1/ar/observability/tracing",
+ "v1.15.1/ar/observability/overview",
+ "v1.15.1/ar/observability/arize-phoenix",
+ "v1.15.1/ar/observability/braintrust",
+ "v1.15.1/ar/observability/datadog",
+ "v1.15.1/ar/observability/galileo",
+ "v1.15.1/ar/observability/langdb",
+ "v1.15.1/ar/observability/langfuse",
+ "v1.15.1/ar/observability/langtrace",
+ "v1.15.1/ar/observability/maxim",
+ "v1.15.1/ar/observability/mlflow",
+ "v1.15.1/ar/observability/neatlogs",
+ "v1.15.1/ar/observability/openlit",
+ "v1.15.1/ar/observability/opik",
+ "v1.15.1/ar/observability/patronus-evaluation",
+ "v1.15.1/ar/observability/portkey",
+ "v1.15.1/ar/observability/weave"
+ ]
+ },
+ {
+ "group": "التعلّم",
+ "pages": [
+ "v1.15.1/ar/learn/overview",
+ "v1.15.1/ar/learn/llm-selection-guide",
+ "v1.15.1/ar/learn/conditional-tasks",
+ "v1.15.1/ar/learn/coding-agents",
+ "v1.15.1/ar/learn/create-custom-tools",
+ "v1.15.1/ar/learn/custom-llm",
+ "v1.15.1/ar/learn/custom-manager-agent",
+ "v1.15.1/ar/learn/customizing-agents",
+ "v1.15.1/ar/learn/dalle-image-generation",
+ "v1.15.1/ar/learn/force-tool-output-as-result",
+ "v1.15.1/ar/learn/hierarchical-process",
+ "v1.15.1/ar/learn/human-input-on-execution",
+ "v1.15.1/ar/learn/human-in-the-loop",
+ "v1.15.1/ar/learn/human-feedback-in-flows",
+ "v1.15.1/ar/learn/kickoff-async",
+ "v1.15.1/ar/learn/kickoff-for-each",
+ "v1.15.1/ar/learn/llm-connections",
+ "v1.15.1/ar/learn/multimodal-agents",
+ "v1.15.1/ar/learn/replay-tasks-from-latest-crew-kickoff",
+ "v1.15.1/ar/learn/sequential-process",
+ "v1.15.1/ar/learn/using-annotations",
+ "v1.15.1/ar/learn/execution-hooks",
+ "v1.15.1/ar/learn/llm-hooks",
+ "v1.15.1/ar/learn/tool-hooks"
+ ]
+ },
+ {
+ "group": "Telemetry",
+ "pages": [
+ "v1.15.1/ar/telemetry"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "المؤسسات",
+ "icon": "briefcase",
+ "groups": [
+ {
+ "group": "البدء",
+ "pages": [
+ "v1.15.1/ar/enterprise/introduction"
+ ]
+ },
+ {
+ "group": "البناء",
+ "pages": [
+ "v1.15.1/ar/enterprise/features/automations",
+ {
+ "group": "استوديو الطاقم",
+ "icon": "pencil",
+ "pages": [
+ "v1.15.1/ar/enterprise/features/crew-studio",
+ "v1.15.1/ar/enterprise/features/merged-step-card"
+ ]
+ },
+ "v1.15.1/ar/enterprise/features/marketplace",
+ "v1.15.1/ar/enterprise/features/agent-repositories",
+ "v1.15.1/ar/enterprise/features/tools-and-integrations",
+ "v1.15.1/ar/enterprise/features/pii-trace-redactions"
+ ]
+ },
+ {
+ "group": "العمليات",
+ "pages": [
+ "v1.15.1/ar/enterprise/features/traces",
+ "v1.15.1/ar/enterprise/features/webhook-streaming",
+ "v1.15.1/ar/enterprise/features/hallucination-guardrail",
+ "v1.15.1/ar/enterprise/features/flow-hitl-management"
+ ]
+ },
+ {
+ "group": "الإدارة",
+ "pages": [
+ "v1.15.1/ar/enterprise/features/rbac",
+ {
+ "group": "Secrets Manager",
+ "icon": "lock",
+ "pages": [
+ "v1.15.1/ar/enterprise/features/secrets-manager/overview",
+ "v1.15.1/ar/enterprise/features/secrets-manager/usage",
+ {
+ "group": "AWS",
+ "icon": "aws",
+ "pages": [
+ "v1.15.1/ar/enterprise/features/secrets-manager/aws",
+ "v1.15.1/ar/enterprise/features/secrets-manager/aws-workload-identity"
+ ]
+ },
+ {
+ "group": "GCP",
+ "icon": "google",
+ "pages": [
+ "v1.15.1/ar/enterprise/features/secrets-manager/gcp",
+ "v1.15.1/ar/enterprise/features/secrets-manager/gcp-workload-identity"
+ ]
+ },
+ {
+ "group": "Azure",
+ "icon": "microsoft",
+ "pages": [
+ "v1.15.1/ar/enterprise/features/secrets-manager/azure",
+ "v1.15.1/ar/enterprise/features/secrets-manager/azure-workload-identity"
+ ]
+ },
+ "v1.15.1/ar/enterprise/features/secrets-manager/verify-rotation"
+ ]
+ }
+ ]
+ },
+ {
+ "group": "التكاملات",
+ "pages": [
+ "v1.15.1/ar/enterprise/integrations/asana",
+ "v1.15.1/ar/enterprise/integrations/box",
+ "v1.15.1/ar/enterprise/integrations/clickup",
+ "v1.15.1/ar/enterprise/integrations/databricks",
+ "v1.15.1/ar/enterprise/integrations/github",
+ "v1.15.1/ar/enterprise/integrations/gmail",
+ "v1.15.1/ar/enterprise/integrations/google_calendar",
+ "v1.15.1/ar/enterprise/integrations/google_contacts",
+ "v1.15.1/ar/enterprise/integrations/google_docs",
+ "v1.15.1/ar/enterprise/integrations/google_drive",
+ "v1.15.1/ar/enterprise/integrations/google_sheets",
+ "v1.15.1/ar/enterprise/integrations/google_slides",
+ "v1.15.1/ar/enterprise/integrations/hubspot",
+ "v1.15.1/ar/enterprise/integrations/jira",
+ "v1.15.1/ar/enterprise/integrations/linear",
+ "v1.15.1/ar/enterprise/integrations/microsoft_excel",
+ "v1.15.1/ar/enterprise/integrations/microsoft_onedrive",
+ "v1.15.1/ar/enterprise/integrations/microsoft_outlook",
+ "v1.15.1/ar/enterprise/integrations/microsoft_sharepoint",
+ "v1.15.1/ar/enterprise/integrations/microsoft_teams",
+ "v1.15.1/ar/enterprise/integrations/microsoft_word",
+ "v1.15.1/ar/enterprise/integrations/notion",
+ "v1.15.1/ar/enterprise/integrations/salesforce",
+ "v1.15.1/ar/enterprise/integrations/shopify",
+ "v1.15.1/ar/enterprise/integrations/slack",
+ "v1.15.1/ar/enterprise/integrations/snowflake",
+ "v1.15.1/ar/enterprise/integrations/stripe",
+ "v1.15.1/ar/enterprise/integrations/zendesk"
+ ]
+ },
+ {
+ "group": "How-To Guides",
+ "pages": [
+ "v1.15.1/ar/enterprise/guides/build-crew",
+ "v1.15.1/ar/enterprise/guides/prepare-for-deployment",
+ "v1.15.1/ar/enterprise/guides/deploy-to-amp",
+ "v1.15.1/ar/enterprise/guides/monorepo-deployments",
+ "v1.15.1/ar/enterprise/guides/private-package-registry",
+ "v1.15.1/ar/enterprise/guides/kickoff-crew",
+ "v1.15.1/ar/enterprise/guides/training-crews",
+ "v1.15.1/ar/enterprise/guides/update-crew",
+ "v1.15.1/ar/enterprise/guides/enable-crew-studio",
+ "v1.15.1/ar/enterprise/guides/capture_telemetry_logs",
+ "v1.15.1/ar/enterprise/guides/datadog",
+ "v1.15.1/ar/enterprise/guides/azure-openai-setup",
+ "v1.15.1/ar/enterprise/guides/tool-repository",
+ "v1.15.1/ar/enterprise/guides/custom-mcp-server",
+ "v1.15.1/ar/enterprise/guides/react-component-export",
+ "v1.15.1/ar/enterprise/guides/team-management",
+ "v1.15.1/ar/enterprise/guides/human-in-the-loop",
+ "v1.15.1/ar/enterprise/guides/webhook-automation"
+ ]
+ },
+ {
+ "group": "المشغّلات",
+ "pages": [
+ "v1.15.1/ar/enterprise/guides/automation-triggers",
+ "v1.15.1/ar/enterprise/guides/gmail-trigger",
+ "v1.15.1/ar/enterprise/guides/google-calendar-trigger",
+ "v1.15.1/ar/enterprise/guides/google-drive-trigger",
+ "v1.15.1/ar/enterprise/guides/outlook-trigger",
+ "v1.15.1/ar/enterprise/guides/onedrive-trigger",
+ "v1.15.1/ar/enterprise/guides/microsoft-teams-trigger",
+ "v1.15.1/ar/enterprise/guides/slack-trigger",
+ "v1.15.1/ar/enterprise/guides/hubspot-trigger",
+ "v1.15.1/ar/enterprise/guides/salesforce-trigger",
+ "v1.15.1/ar/enterprise/guides/zapier-trigger"
+ ]
+ },
+ {
+ "group": "موارد التعلّم",
+ "pages": [
+ "v1.15.1/ar/enterprise/resources/frequently-asked-questions"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "API المرجع",
+ "icon": "magnifying-glass",
+ "groups": [
+ {
+ "group": "البدء",
+ "pages": [
+ "v1.15.1/ar/api-reference/introduction",
+ "v1.15.1/ar/api-reference/inputs",
+ "v1.15.1/ar/api-reference/kickoff",
+ "v1.15.1/ar/api-reference/resume",
+ "v1.15.1/ar/api-reference/status"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "أمثلة",
+ "icon": "code",
+ "groups": [
+ {
+ "group": "أمثلة",
+ "pages": [
+ "v1.15.1/ar/examples/example",
+ "v1.15.1/ar/examples/cookbooks"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "التغييرات السجلات",
+ "icon": "clock",
+ "groups": [
+ {
+ "group": "سجل التغييرات",
+ "pages": [
+ "v1.15.1/ar/changelog"
+ ]
+ }
+ ]
+ }
+ ],
+ "tag": "Latest"
+ },
+ {
+ "version": "v1.15.0",
"tabs": [
{
"tab": "الرئيسية",
@@ -26687,6 +28762,7 @@
"v1.15.0/ar/enterprise/guides/update-crew",
"v1.15.0/ar/enterprise/guides/enable-crew-studio",
"v1.15.0/ar/enterprise/guides/capture_telemetry_logs",
+ "v1.15.0/ar/enterprise/guides/datadog",
"v1.15.0/ar/enterprise/guides/azure-openai-setup",
"v1.15.0/ar/enterprise/guides/tool-repository",
"v1.15.0/ar/enterprise/guides/custom-mcp-server",
@@ -26761,8 +28837,7 @@
}
]
}
- ],
- "tag": "Latest"
+ ]
},
{
"version": "v1.14.7",
@@ -32537,110 +34612,110 @@
"redirects": [
{
"source": "/api-reference",
- "destination": "/v1.15.0/en/api-reference/introduction"
+ "destination": "/v1.15.1/en/api-reference/introduction"
},
{
"source": "/introduction",
- "destination": "/v1.15.0/en/introduction"
+ "destination": "/v1.15.1/en/introduction"
},
{
"source": "/skills",
- "destination": "/v1.15.0/en/skills"
+ "destination": "/v1.15.1/en/skills"
},
{
"source": "/installation",
- "destination": "/v1.15.0/en/installation"
+ "destination": "/v1.15.1/en/installation"
},
{
"source": "/quickstart",
- "destination": "/v1.15.0/en/quickstart"
+ "destination": "/v1.15.1/en/quickstart"
},
{
"source": "/changelog",
- "destination": "/v1.15.0/en/changelog"
+ "destination": "/v1.15.1/en/changelog"
},
{
"source": "/telemetry",
- "destination": "/v1.15.0/en/telemetry"
+ "destination": "/v1.15.1/en/telemetry"
},
{
"source": "/concepts/:path*",
- "destination": "/v1.15.0/en/concepts/:path*"
+ "destination": "/v1.15.1/en/concepts/:path*"
},
{
"source": "/guides/:path*",
- "destination": "/v1.15.0/en/guides/:path*"
+ "destination": "/v1.15.1/en/guides/:path*"
},
{
"source": "/tools/:path*",
- "destination": "/v1.15.0/en/tools/:path*"
+ "destination": "/v1.15.1/en/tools/:path*"
},
{
"source": "/learn/:path*",
- "destination": "/v1.15.0/en/learn/:path*"
+ "destination": "/v1.15.1/en/learn/:path*"
},
{
"source": "/mcp/:path*",
- "destination": "/v1.15.0/en/mcp/:path*"
+ "destination": "/v1.15.1/en/mcp/:path*"
},
{
"source": "/observability/:path*",
- "destination": "/v1.15.0/en/observability/:path*"
+ "destination": "/v1.15.1/en/observability/:path*"
},
{
"source": "/enterprise/:path*",
- "destination": "/v1.15.0/en/enterprise/:path*"
+ "destination": "/v1.15.1/en/enterprise/:path*"
},
{
"source": "/en/enterprise/guides/deploy-crew",
- "destination": "/v1.15.0/en/enterprise/guides/deploy-to-amp"
+ "destination": "/v1.15.1/en/enterprise/guides/deploy-to-amp"
},
{
"source": "/ko/enterprise/guides/deploy-crew",
- "destination": "/v1.15.0/ko/enterprise/guides/deploy-to-amp"
+ "destination": "/v1.15.1/ko/enterprise/guides/deploy-to-amp"
},
{
"source": "/pt-BR/enterprise/guides/deploy-crew",
- "destination": "/v1.15.0/pt-BR/enterprise/guides/deploy-to-amp"
+ "destination": "/v1.15.1/pt-BR/enterprise/guides/deploy-to-amp"
},
{
"source": "/api-reference/:path*",
- "destination": "/v1.15.0/en/api-reference/:path*"
+ "destination": "/v1.15.1/en/api-reference/:path*"
},
{
"source": "/en/api-reference",
- "destination": "/v1.15.0/en/api-reference/introduction"
+ "destination": "/v1.15.1/en/api-reference/introduction"
},
{
"source": "/pt-BR/api-reference",
- "destination": "/v1.15.0/pt-BR/api-reference/introduction"
+ "destination": "/v1.15.1/pt-BR/api-reference/introduction"
},
{
"source": "/ko/api-reference",
- "destination": "/v1.15.0/ko/api-reference/introduction"
+ "destination": "/v1.15.1/ko/api-reference/introduction"
},
{
"source": "/examples/:path*",
- "destination": "/v1.15.0/en/examples/:path*"
+ "destination": "/v1.15.1/en/examples/:path*"
},
{
"source": "/en/:slug*",
- "destination": "/v1.15.0/en/:slug*",
+ "destination": "/v1.15.1/en/:slug*",
"permanent": false
},
{
"source": "/pt-BR/:slug*",
- "destination": "/v1.15.0/pt-BR/:slug*",
+ "destination": "/v1.15.1/pt-BR/:slug*",
"permanent": false
},
{
"source": "/ko/:slug*",
- "destination": "/v1.15.0/ko/:slug*",
+ "destination": "/v1.15.1/ko/:slug*",
"permanent": false
},
{
"source": "/ar/:slug*",
- "destination": "/v1.15.0/ar/:slug*",
+ "destination": "/v1.15.1/ar/:slug*",
"permanent": false
}
],
diff --git a/docs/edge/ar/changelog.mdx b/docs/edge/ar/changelog.mdx
index 65c16c8cd..3656cacf7 100644
--- a/docs/edge/ar/changelog.mdx
+++ b/docs/edge/ar/changelog.mdx
@@ -4,6 +4,62 @@ description: "تحديثات المنتج والتحسينات وإصلاحات
icon: "clock"
mode: "wide"
---
+
+ ## v1.15.1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تهيئة مستودعات Git للمشاريع المولدة (#6364)
+ - طلب تعريفات مشروع CrewAI بشكل صريح (#6358)
+ - فتح صفحة النشر بعد نشر CLI (#6343)
+
+ ### إصلاحات الأخطاء
+ - إصلاح حل رابط معرف صفحة النشر (#6365)
+ - إصلاح عرض قالب الطاقم JSON (#6359)
+ - إصلاح تثبيت إصدار الطاقم JSON (#6342)
+ - إصلاح تجاوز إعادة التوجيه SSRF في عمليات السحب (#6331)
+
+ ### الوثائق
+ - تحسين وضع المصدر المفتوح في README (#6363)
+ - تحسين دعوة العمل لإعداد وكيل البرمجة (#6344)
+ - إضافة لقطة وتغيير السجل للإصدار 1.15.1a1 (#6362)
+
+ ## المساهمون
+
+ @joaomdmoura, @lorenzejay, @oalami, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.15.1a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1a1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تتبع بيانات الزر TUI
+ - يتطلب تعريفات مشروع CrewAI بشكل صريح
+ - فتح صفحة النشر بعد نشر CLI
+
+ ### إصلاحات الأخطاء
+ - إصلاح عرض قالب الطاقم بصيغة JSON
+ - إصلاح تثبيت إصدار الطاقم بصيغة JSON
+ - إصلاح تجاوز إعادة التوجيه SSRF في عمليات جلب البيانات
+
+ ### الوثائق
+ - تحسين دعوة إعداد وكيل البرمجة
+ - لقطة وتغيير السجل للإصدار v1.15.0
+
+ ## المساهمون
+
+ @joaomdmoura, @lorenzejay, @theCyberTech, @vinibrsl
+
+
+
## v1.15.0
diff --git a/docs/edge/ar/enterprise/guides/datadog.mdx b/docs/edge/ar/enterprise/guides/datadog.mdx
index 1a3ee818f..7a5f05b12 100644
--- a/docs/edge/ar/enterprise/guides/datadog.mdx
+++ b/docs/edge/ar/enterprise/guides/datadog.mdx
@@ -21,12 +21,11 @@ CrewAI supports two log-ingestion paths to Datadog — both are first-class and
- The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. With `CREWAI_LOG_FORMAT=json` set, each log event ships as a single billable line with structured attributes.
+ The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. Each log event ships as a single billable line with structured attributes — see the [log schema reference](#log-schema-reference) for the full field contract.
**Setup:**
1. Run the Datadog Agent next to your CrewAI containers — see [Datadog's deployment docs](https://docs.datadoghq.com/agent/) for Kubernetes, ECS, or VM setup. Enable log collection (`logs_enabled: true`) and container log collection (`logs_config.container_collect_all: true`).
- 2. Set `CREWAI_LOG_FORMAT=json` as an **automation environment variable** in CrewAI AMP (open your automation → **Settings → Environment Variables**) so each log event is a single line instead of a multi-line traceback. AMP propagates the value to every container in the deployment (API + workers) — don't set it on the container or host directly. See [Enabling JSON output](#enabling-json-output) below for the AMP UI walkthrough and the [log schema reference](#log-schema-reference) for the full field contract.
- 3. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
+ 2. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
**Pick this path if** you already operate Datadog Agents (e.g. for infrastructure metrics), or your log volume makes per-event ingestion cost a real concern — collapsing tracebacks into single events keeps Agent ingestion cheap at scale.
@@ -57,10 +56,10 @@ Either path lands the same structured facets in Datadog (`@automation_id`, `@kic
## Log schema reference
-This schema applies to the **Datadog Agent path** — stdout JSON logs produced when `CREWAI_LOG_FORMAT=json` is set. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
+This schema applies to the **Datadog Agent path** — structured stdout JSON logs emitted by every CrewAI worker container. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
-When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
+Every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
### Why JSON output
@@ -79,20 +78,6 @@ When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single J
-### Enabling JSON output
-
-`CREWAI_LOG_FORMAT=json` must be set as an **automation environment variable** in CrewAI AMP — it is **not** a container, host, or Docker setting. Open your automation in AMP, click the **Settings** icon, and add the variable under the **Environment Variables** section. AMP applies the value to every container in the deployment (API + workers) on the next restart. See [Update Your Crew](./update-crew) for the full UI walkthrough with screenshots.
-
-```shell
-CREWAI_LOG_FORMAT=json
-```
-
-Restart the deployment to pick up the change. Every log line on stdout from that point on is a single JSON object.
-
-
- The default value is `text`, which preserves the legacy human-readable line format byte-for-byte. Setting any value other than `json` falls back to text mode. There is no migration step — the variable is read at process start and the format switches immediately.
-
-
### Example events
A single info-level log inside an active automation kickoff:
@@ -135,7 +120,7 @@ An error with a Python exception is collapsed into a single event with the trace
}
```
-The same error in legacy text mode would have produced ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
+Without JSON output, that same error would produce ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
### Schema v1 fields
@@ -237,7 +222,7 @@ Open [Logs Explorer](https://app.datadoghq.com/logs) and run a query that matche
Search `service:crewai* @schema:v1`. You should see structured logs with the JSON fields parsed into Datadog facets. Pick a recent event and verify it has `@automation_id`, `@kickoff_id`, `@execution_id`, `@crewai_version`, and (when running inside a span) `@trace_id` / `@span_id` populated.
- If nothing appears, confirm `CREWAI_LOG_FORMAT=json` is set under your automation's **Environment Variables** in AMP, the deployment was restarted after the change, and the Datadog Agent is tailing container stdout.
+ If nothing appears, confirm the Datadog Agent is tailing container stdout and that the deployment is running a recent enough CrewAI Enterprise build.
Search `source:otlp service:crewai*`. OTLP attributes land with their OpenTelemetry names (`automation_id`, `crewai.kickoff.id`, etc.) rather than the stdout JSON keys, but they map to the same dashboard facets after [facet promotion](#prerequisite-promote-facets).
@@ -280,7 +265,7 @@ The `$service` template variable defaults to `*` and will catch every CrewAI dep
| All widgets show "No data" | Facets aren't promoted | Re-do the [Promote facets](#prerequisite-promote-facets) step. Datadog won't query against an un-promoted field. |
| Error Rate widget shows `NaN` | No executions in the time window | Either no traffic, or `@execution_id` isn't faceted. Expand the time range and re-check facets. |
| Throughput chart is flat at the same value | Logs aren't reaching Datadog | Search `service:crewai*` in Logs Explorer. If nothing shows, verify the Datadog Agent is running (Agent path) or the OTel collector endpoint is correct (OTLP path). |
-| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments running text mode (or older AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
+| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments (pre-structured-logs AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
| Template variables don't filter widgets | The widget's filter line doesn't reference the template variable | Edit the widget and confirm the search includes `$automation $version $service`. |
## Next steps
diff --git a/docs/edge/en/changelog.mdx b/docs/edge/en/changelog.mdx
index e8e5193e3..8291887d6 100644
--- a/docs/edge/en/changelog.mdx
+++ b/docs/edge/en/changelog.mdx
@@ -4,6 +4,62 @@ description: "Product updates, improvements, and bug fixes for CrewAI"
icon: "clock"
mode: "wide"
---
+
+ ## v1.15.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1)
+
+ ## What's Changed
+
+ ### Features
+ - Initialize Git repositories for generated projects (#6364)
+ - Require explicit CrewAI project definitions (#6358)
+ - Open deployment page after CLI deploy (#6343)
+
+ ### Bug Fixes
+ - Fix deployment page link ID resolution (#6365)
+ - Fix JSON crew template rendering (#6359)
+ - Fix JSON crew version pin (#6342)
+ - Fix SSRF redirect bypass in scraping fetches (#6331)
+
+ ### Documentation
+ - Improve open source positioning in README (#6363)
+ - Improve coding agent setup call-to-action (#6344)
+ - Add snapshot and changelog for version 1.15.1a1 (#6362)
+
+ ## Contributors
+
+ @joaomdmoura, @lorenzejay, @oalami, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.15.1a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1a1)
+
+ ## What's Changed
+
+ ### Features
+ - Track TUI button telemetry
+ - Require explicit CrewAI project definitions
+ - Open deployment page after CLI deploy
+
+ ### Bug Fixes
+ - Fix JSON crew template rendering
+ - Fix JSON crew version pin
+ - Fix SSRF redirect bypass in scraping fetches
+
+ ### Documentation
+ - Improve coding agent setup CTA
+ - Snapshot and changelog for v1.15.0
+
+ ## Contributors
+
+ @joaomdmoura, @lorenzejay, @theCyberTech, @vinibrsl
+
+
+
## v1.15.0
diff --git a/docs/edge/en/enterprise/features/agent-control-plane/overview.mdx b/docs/edge/en/enterprise/features/agent-control-plane/overview.mdx
index 1e3d4de8b..d4a03e02f 100644
--- a/docs/edge/en/enterprise/features/agent-control-plane/overview.mdx
+++ b/docs/edge/en/enterprise/features/agent-control-plane/overview.mdx
@@ -20,7 +20,7 @@ The **Agent Control Plane** (ACP) is the operations hub for everything you have
- Monitor the **health** of every live automation (crew or flow), with `Critical` / `Warning` / `Healthy` breakdowns and execution counts.
- Track **LLM consumption** — tokens and cost — per automation, per provider, and per model, with a delta vs the previous period.
- Drill into any single automation or model provider for time-series charts and per-provider breakdowns.
-- Apply organization-wide **Rules** (today: PII Redaction) across many automations at once instead of editing each deployment individually.
+- Apply organization-wide **Rules** (today: PII Redaction and Cost Limit) across many automations at once instead of editing each deployment individually.

@@ -33,7 +33,7 @@ The **Agent Control Plane** (ACP) is the operations hub for everything you have
The two tabs answer two different questions:
- **Automations** — *"How is my fleet behaving right now, and what is it costing me?"* See [Monitoring](/en/enterprise/features/agent-control-plane/monitoring).
-- **Rules** — *"How do I enforce a policy (e.g. PII redaction) across many deployments without re-deploying each one?"* See [Rules](/en/enterprise/features/agent-control-plane/rules).
+- **Rules** — *"How do I enforce a policy (e.g. PII redaction or a spend budget) across many deployments without re-deploying each one?"* See [Rules](/en/enterprise/features/agent-control-plane/rules).
## Requirements
@@ -42,7 +42,7 @@ The two tabs answer two different questions:
- **Enterprise Plan or Ultra Plan** is required to create or edit [Rules](/en/enterprise/features/agent-control-plane/rules). Lower-tier organizations can open the Rules tab and view existing rules, but the editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction rules require an Enterprise plan."* Monitoring (the Automations tab) is available on all plans where the feature is enabled.
+ **Enterprise Plan or Ultra Plan** is required to create or edit **PII Redaction** [Rules](/en/enterprise/features/agent-control-plane/rules). Lower-tier organizations can open the Rules tab and view existing rules, but the PII editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction rules require an Enterprise plan."* **Cost Limit** rules and Monitoring (the Automations tab) are available on all plans where the feature is enabled.
- The **Agent Control Plane** feature must be enabled for your organization. If you don't see it in the sidebar, ask your account owner to request enablement.
@@ -56,7 +56,7 @@ The two tabs answer two different questions:
Watch fleet health and LLM spend with metric cards, an interactive sankey, per-automation tables, and drill-down side panels for any automation or provider.
- Apply organization-wide PII Redaction policies scoped by tools and tags. Changes take effect on the next execution — no re-deploy required.
+ Apply organization-wide PII Redaction and Cost Limit policies scoped by tools and tags. Changes take effect on the next execution — no re-deploy required.
diff --git a/docs/edge/en/enterprise/features/agent-control-plane/rules.mdx b/docs/edge/en/enterprise/features/agent-control-plane/rules.mdx
index 755afbcc4..fd7108e3f 100644
--- a/docs/edge/en/enterprise/features/agent-control-plane/rules.mdx
+++ b/docs/edge/en/enterprise/features/agent-control-plane/rules.mdx
@@ -16,7 +16,7 @@ mode: "wide"
## Overview
-Rules let you apply policies — today: **PII Redaction** — across many automations at once, instead of configuring each deployment individually. Open the **Rules** tab in the [Agent Control Plane](/en/enterprise/features/agent-control-plane/overview) to manage them.
+Rules let you apply policies — today **PII Redaction** and **Cost Limit** — across many automations at once, instead of configuring each deployment individually. Open the **Rules** tab in the [Agent Control Plane](/en/enterprise/features/agent-control-plane/overview) to manage them.

@@ -27,26 +27,78 @@ Each rule card shows the name, description, the **scope** the rule applies to (s
## Requirements
- **Enterprise Plan or Ultra Plan** is required to create or edit PII Redaction rules. Lower-tier organizations can still open the Rules tab and view existing rules, but the editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction rules require an Enterprise plan."* — contact your account owner or sales to upgrade.
+ **Enterprise Plan or Ultra Plan** is required to create or edit **PII Redaction** rules. Lower-tier organizations can still open the Rules tab and view existing rules, but the PII editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction rules require an Enterprise plan."* — contact your account owner or sales to upgrade. **Cost Limit** rules are **not** plan-gated and can be created on any plan where the Agent Control Plane is enabled.
- The **Agent Control Plane** feature must be enabled for your organization. See [Overview — Requirements](/en/enterprise/features/agent-control-plane/overview#requirements).
- The `manage` [RBAC permission](/en/enterprise/features/rbac) on Agent Control Plane is required to create, edit, toggle, or delete rules. The `read` permission is enough to view them.
- All rule changes are versioned for auditing.
-## Available rule types
+## Rule types
-| Type | What it does |
-|------|---------------|
-| **PII Redaction** | Applies PII redaction to executions of every matching automation, using the same entity catalog and custom recognizers documented in [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions). |
+Every rule is one of the types below. Open the tab for the policy you want to enforce.
+
+
+
+Applies PII redaction to executions of every matching automation, using the same entity catalog and custom recognizers documented in [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions).
+
+
+Creating or editing PII Redaction rules requires an **Enterprise** or **Ultra** plan. On lower tiers the PII editor renders read-only with an "Enterprise" lock pill.
+
+
+**Configuration** — in the **PII Mask Type** table, check each entity type you want covered and choose how to handle it:
+
+- **Mask** — replaces the match with the entity label (e.g. ``).
+- **Redact** — removes the matched text entirely.
+
+See [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions) for the full entity catalog and how to add organization-level custom recognizers.
+
+
+
+Emails the recipients you choose when a matching automation's LLM spend exceeds a budget threshold in the selected period. Available on **all plans** where the Agent Control Plane is enabled — it is not Enterprise-gated.
+
+
+Cost Limit rules are **notify-only**. They never pause, throttle, or stop a run — they only send an email so a human can decide what to do. Adjust the budget or remove the rule if you no longer want the alert.
+
+
+**Configuration**
+
+| Field | Description |
+|-------|-------------|
+| **Budget period** | The window spend is measured over: **Daily**, **Weekly**, or **Monthly** (default *Monthly*). Spend resets at the start of each calendar period. |
+| **Threshold (USD)** | The dollar amount that triggers an alert. Must be greater than `0`. The alert fires once the automation's spend for the current period exceeds this value. |
+| **Recipient emails** | Up to 50 email addresses. Type an address and press **Enter** or comma to add it as a chip; **Backspace** removes the last chip. These do not need to be CrewAI users. |
+| **Notify roles** | Optionally select organization [roles](/en/enterprise/features/rbac); the alert is sent to every member of the chosen roles. Roles with no members can't be selected. You must provide at least one recipient — an email or a role. |
+| **Re-alert frequency** | How often the alert can re-fire while an automation stays over budget: **Once per period**, **Every hour while over**, **Every 4h while over**, or **Daily while over**. Re-alerts are capped at 24 per period. |
+
+**How spend is measured and matched**
+
+- The threshold is evaluated **per automation**, not summed across the whole scope. Each engaged automation has its own running total for the period.
+- A rule can match many automations via its conditions (tools/tags), and a single automation can be covered by **multiple** Cost Limit rules at once. Each rule tracks its own budget and alert state independently — they don't merge.
+- A background check compares each engaged automation's period-to-date spend against the threshold and sends the email when it's exceeded. Because the check runs periodically, expect a short delay between crossing the threshold and the email arriving.
+
+**The alert email**
+
+When an automation goes over budget, recipients get an email summarizing the overage — the automation name, the **current spend**, the **budget threshold**, and how far over it is in both dollars and percent (e.g. `$0.38` current vs a `$0.10` budget = `+277%`). The email reiterates that the run was **not** paused.
+
+
More rule types will be added over time.
## Creating a rule
+
+
-
+
+
+
+
+
+
+
+
@@ -54,11 +106,11 @@ More rule types will be added over time.
- Give the rule a clear name (e.g. *Mask PII (CC)*) and a description explaining when it applies. Both show up on the rule card and in the Engaged Automations modal.
+ Give the rule a clear name (e.g. *Mask PII (CC)* or *Monthly $100 budget*) and a description explaining when it applies. Both show up on the rule card and in the Engaged Automations modal.
- Today only **PII Redaction** is available.
+ Choose **PII Redaction** or **Cost Limit**. The type determines which configuration section appears below the conditions. The type is fixed once the rule is created — to switch, create a new rule.
@@ -70,8 +122,8 @@ More rule types will be added over time.
Leaving a picker empty means "no filter on this dimension". Leaving both empty means the rule applies to **every** automation in the organization.
-
- Check each entity type you want covered and choose **Mask** (replaces with the entity label, e.g. ``) or **Redact** (removes the matched text entirely). See [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions) for the full entity catalog and how to add organization-level custom recognizers.
+
+ The editor shows the configuration for the type you picked — the **PII Mask Type** table for PII Redaction, or the budget fields for Cost Limit. See [Rule types](#rule-types) for what each field does.
@@ -91,12 +143,14 @@ This is the fastest way to sanity-check a rule's scope before enabling it — fo
## Org-wide rules vs per-deployment settings
-PII Redaction can be configured in two places:
+Both PII Redaction and Cost Limit can be configured in two places: org-wide as a Rule on this page, or per-deployment under that deployment's **Settings**. When an enabled org-wide rule's scope matches a deployment, the rule takes precedence over the deployment-owned setting while it's attached.
-- **Per-deployment** — under **Settings → PII Protection** on each individual deployment ([guide](/en/enterprise/features/pii-trace-redactions))
-- **Org-wide** — as a Rule on this page
+| Policy | Per-deployment setting | What an attached org-wide rule does |
+|--------|------------------------|-------------------------------------|
+| **PII Redaction** | **Settings → PII Protection** ([guide](/en/enterprise/features/pii-trace-redactions)) | The rule's entity configuration **overrides** the deployment's PII settings for that deployment's executions. |
+| **Cost Limit** | **Settings → Cost Alerts** | The deployment's manual cost alert is **paused** and the attached cost rule(s) fire instead. The per-deployment form stays editable as a fallback. |
-When an enabled org-wide rule's scope matches a deployment, the rule's entity configuration **overrides** the deployment-owned PII settings for that deployment's executions — the rule becomes the single source of truth while it's attached. Disable or detach the rule (or change its scope so it no longer matches) and the deployment falls back to its own PII Protection settings.
+Disable or detach the rule (or change its scope so it no longer matches) and the deployment falls back to its own per-deployment settings.
Prefer org-wide rules when you want to enforce a consistent policy across many deployments; reserve per-deployment configuration for one-off exceptions.
diff --git a/docs/edge/en/enterprise/guides/datadog.mdx b/docs/edge/en/enterprise/guides/datadog.mdx
index 1db2eae88..003519c79 100644
--- a/docs/edge/en/enterprise/guides/datadog.mdx
+++ b/docs/edge/en/enterprise/guides/datadog.mdx
@@ -17,12 +17,11 @@ CrewAI supports two log-ingestion paths to Datadog — both are first-class and
- The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. With `CREWAI_LOG_FORMAT=json` set, each log event ships as a single billable line with structured attributes.
+ The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. Each log event ships as a single billable line with structured attributes — see the [log schema reference](#log-schema-reference) for the full field contract.
**Setup:**
1. Run the Datadog Agent next to your CrewAI containers — see [Datadog's deployment docs](https://docs.datadoghq.com/agent/) for Kubernetes, ECS, or VM setup. Enable log collection (`logs_enabled: true`) and container log collection (`logs_config.container_collect_all: true`).
- 2. Set `CREWAI_LOG_FORMAT=json` as an **automation environment variable** in CrewAI AMP (open your automation → **Settings → Environment Variables**) so each log event is a single line instead of a multi-line traceback. AMP propagates the value to every container in the deployment (API + workers) — don't set it on the container or host directly. See [Enabling JSON output](#enabling-json-output) below for the AMP UI walkthrough and the [log schema reference](#log-schema-reference) for the full field contract.
- 3. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
+ 2. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
**Pick this path if** you already operate Datadog Agents (e.g. for infrastructure metrics), or your log volume makes per-event ingestion cost a real concern — collapsing tracebacks into single events keeps Agent ingestion cheap at scale.
@@ -53,10 +52,10 @@ Either path lands the same structured facets in Datadog (`@automation_id`, `@kic
## Log schema reference
-This schema applies to the **Datadog Agent path** — stdout JSON logs produced when `CREWAI_LOG_FORMAT=json` is set. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
+This schema applies to the **Datadog Agent path** — structured stdout JSON logs emitted by every CrewAI worker container. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
-When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
+Every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
### Why JSON output
@@ -75,20 +74,6 @@ When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single J
-### Enabling JSON output
-
-`CREWAI_LOG_FORMAT=json` must be set as an **automation environment variable** in CrewAI AMP — it is **not** a container, host, or Docker setting. Open your automation in AMP, click the **Settings** icon, and add the variable under the **Environment Variables** section. AMP applies the value to every container in the deployment (API + workers) on the next restart. See [Update Your Crew](./update-crew) for the full UI walkthrough with screenshots.
-
-```shell
-CREWAI_LOG_FORMAT=json
-```
-
-Restart the deployment to pick up the change. Every log line on stdout from that point on is a single JSON object.
-
-
- The default value is `text`, which preserves the legacy human-readable line format byte-for-byte. Setting any value other than `json` falls back to text mode. There is no migration step — the variable is read at process start and the format switches immediately.
-
-
### Example events
A single info-level log inside an active automation kickoff:
@@ -131,7 +116,7 @@ An error with a Python exception is collapsed into a single event with the trace
}
```
-The same error in legacy text mode would have produced ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
+Without JSON output, that same error would produce ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
### Schema v1 fields
@@ -233,7 +218,7 @@ Open [Logs Explorer](https://app.datadoghq.com/logs) and run a query that matche
Search `service:crewai* @schema:v1`. You should see structured logs with the JSON fields parsed into Datadog facets. Pick a recent event and verify it has `@automation_id`, `@kickoff_id`, `@execution_id`, `@crewai_version`, and (when running inside a span) `@trace_id` / `@span_id` populated.
- If nothing appears, confirm `CREWAI_LOG_FORMAT=json` is set under your automation's **Environment Variables** in AMP, the deployment was restarted after the change, and the Datadog Agent is tailing container stdout.
+ If nothing appears, confirm the Datadog Agent is tailing container stdout and that the deployment is running a recent enough CrewAI Enterprise build.
Search `source:otlp service:crewai*`. OTLP attributes land with their OpenTelemetry names (`automation_id`, `crewai.kickoff.id`, etc.) rather than the stdout JSON keys, but they map to the same dashboard facets after [facet promotion](#prerequisite-promote-facets).
@@ -276,7 +261,7 @@ The `$service` template variable defaults to `*` and will catch every CrewAI dep
| All widgets show "No data" | Facets aren't promoted | Re-do the [Promote facets](#prerequisite-promote-facets) step. Datadog won't query against an un-promoted field. |
| Error Rate widget shows `NaN` | No executions in the time window | Either no traffic, or `@execution_id` isn't faceted. Expand the time range and re-check facets. |
| Throughput chart is flat at the same value | Logs aren't reaching Datadog | Search `service:crewai*` in Logs Explorer. If nothing shows, verify the Datadog Agent is running (Agent path) or the OTel collector endpoint is correct (OTLP path). |
-| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments running text mode (or older AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
+| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments (pre-structured-logs AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
| Template variables don't filter widgets | The widget's filter line doesn't reference the template variable | Edit the widget and confirm the search includes `$automation $version $service`. |
## Next steps
diff --git a/docs/edge/en/installation.mdx b/docs/edge/en/installation.mdx
index 66f80d248..381b92c8a 100644
--- a/docs/edge/en/installation.mdx
+++ b/docs/edge/en/installation.mdx
@@ -5,15 +5,49 @@ icon: wrench
mode: "wide"
---
-### Watch: Building CrewAI Agents & Flows with Coding Agent Skills
+
+
+
+ Coding agent setup
+
+
Set up CrewAI in your coding agent
+
+ Copy a ready-to-paste setup prompt for Claude Code, Codex, Cursor, or any coding agent. It installs the official CrewAI skills, checks the CLI, and points the agent at the right docs before it edits code.
+
+
-Install our coding agent skills (Claude Code, Codex, ...) to quickly get your coding agents up and running with CrewAI.
-
-
+
+### Watch: Building CrewAI Agents & Flows with Coding Agent Skills
diff --git a/docs/edge/ko/changelog.mdx b/docs/edge/ko/changelog.mdx
index 1aae820b2..3bc2a9332 100644
--- a/docs/edge/ko/changelog.mdx
+++ b/docs/edge/ko/changelog.mdx
@@ -4,6 +4,62 @@ description: "CrewAI의 제품 업데이트, 개선 사항 및 버그 수정"
icon: "clock"
mode: "wide"
---
+
+ ## v1.15.1
+
+ [GitHub 릴리스 보기](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1)
+
+ ## 변경 사항
+
+ ### 기능
+ - 생성된 프로젝트에 대한 Git 저장소 초기화 (#6364)
+ - 명시적인 CrewAI 프로젝트 정의 필요 (#6358)
+ - CLI 배포 후 배포 페이지 열기 (#6343)
+
+ ### 버그 수정
+ - 배포 페이지 링크 ID 해상도 수정 (#6365)
+ - JSON 크루 템플릿 렌더링 수정 (#6359)
+ - JSON 크루 버전 고정 수정 (#6342)
+ - 스크래핑 페치에서 SSRF 리디렉션 우회 수정 (#6331)
+
+ ### 문서
+ - README에서 오픈 소스 위치 개선 (#6363)
+ - 코딩 에이전트 설정을 위한 행동 촉구 개선 (#6344)
+ - 버전 1.15.1a1에 대한 스냅샷 및 변경 로그 추가 (#6362)
+
+ ## 기여자
+
+ @joaomdmoura, @lorenzejay, @oalami, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.15.1a1
+
+ [GitHub 릴리스 보기](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1a1)
+
+ ## 변경 사항
+
+ ### 기능
+ - TUI 버튼 텔레메트리 추적
+ - 명시적인 CrewAI 프로젝트 정의 필요
+ - CLI 배포 후 배포 페이지 열기
+
+ ### 버그 수정
+ - JSON 크루 템플릿 렌더링 수정
+ - JSON 크루 버전 고정 수정
+ - 스크래핑 페치에서 SSRF 리다이렉트 우회 수정
+
+ ### 문서
+ - 코딩 에이전트 설정 CTA 개선
+ - v1.15.0에 대한 스냅샷 및 변경 로그
+
+ ## 기여자
+
+ @joaomdmoura, @lorenzejay, @theCyberTech, @vinibrsl
+
+
+
## v1.15.0
diff --git a/docs/edge/ko/enterprise/guides/datadog.mdx b/docs/edge/ko/enterprise/guides/datadog.mdx
index 0d6016bf1..948376875 100644
--- a/docs/edge/ko/enterprise/guides/datadog.mdx
+++ b/docs/edge/ko/enterprise/guides/datadog.mdx
@@ -21,12 +21,11 @@ CrewAI supports two log-ingestion paths to Datadog — both are first-class and
- The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. With `CREWAI_LOG_FORMAT=json` set, each log event ships as a single billable line with structured attributes.
+ The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. Each log event ships as a single billable line with structured attributes — see the [log schema reference](#log-schema-reference) for the full field contract.
**Setup:**
1. Run the Datadog Agent next to your CrewAI containers — see [Datadog's deployment docs](https://docs.datadoghq.com/agent/) for Kubernetes, ECS, or VM setup. Enable log collection (`logs_enabled: true`) and container log collection (`logs_config.container_collect_all: true`).
- 2. Set `CREWAI_LOG_FORMAT=json` as an **automation environment variable** in CrewAI AMP (open your automation → **Settings → Environment Variables**) so each log event is a single line instead of a multi-line traceback. AMP propagates the value to every container in the deployment (API + workers) — don't set it on the container or host directly. See [Enabling JSON output](#enabling-json-output) below for the AMP UI walkthrough and the [log schema reference](#log-schema-reference) for the full field contract.
- 3. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
+ 2. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
**Pick this path if** you already operate Datadog Agents (e.g. for infrastructure metrics), or your log volume makes per-event ingestion cost a real concern — collapsing tracebacks into single events keeps Agent ingestion cheap at scale.
@@ -57,10 +56,10 @@ Either path lands the same structured facets in Datadog (`@automation_id`, `@kic
## Log schema reference
-This schema applies to the **Datadog Agent path** — stdout JSON logs produced when `CREWAI_LOG_FORMAT=json` is set. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
+This schema applies to the **Datadog Agent path** — structured stdout JSON logs emitted by every CrewAI worker container. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
-When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
+Every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
### Why JSON output
@@ -79,20 +78,6 @@ When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single J
-### Enabling JSON output
-
-`CREWAI_LOG_FORMAT=json` must be set as an **automation environment variable** in CrewAI AMP — it is **not** a container, host, or Docker setting. Open your automation in AMP, click the **Settings** icon, and add the variable under the **Environment Variables** section. AMP applies the value to every container in the deployment (API + workers) on the next restart. See [Update Your Crew](./update-crew) for the full UI walkthrough with screenshots.
-
-```shell
-CREWAI_LOG_FORMAT=json
-```
-
-Restart the deployment to pick up the change. Every log line on stdout from that point on is a single JSON object.
-
-
- The default value is `text`, which preserves the legacy human-readable line format byte-for-byte. Setting any value other than `json` falls back to text mode. There is no migration step — the variable is read at process start and the format switches immediately.
-
-
### Example events
A single info-level log inside an active automation kickoff:
@@ -135,7 +120,7 @@ An error with a Python exception is collapsed into a single event with the trace
}
```
-The same error in legacy text mode would have produced ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
+Without JSON output, that same error would produce ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
### Schema v1 fields
@@ -237,7 +222,7 @@ Open [Logs Explorer](https://app.datadoghq.com/logs) and run a query that matche
Search `service:crewai* @schema:v1`. You should see structured logs with the JSON fields parsed into Datadog facets. Pick a recent event and verify it has `@automation_id`, `@kickoff_id`, `@execution_id`, `@crewai_version`, and (when running inside a span) `@trace_id` / `@span_id` populated.
- If nothing appears, confirm `CREWAI_LOG_FORMAT=json` is set under your automation's **Environment Variables** in AMP, the deployment was restarted after the change, and the Datadog Agent is tailing container stdout.
+ If nothing appears, confirm the Datadog Agent is tailing container stdout and that the deployment is running a recent enough CrewAI Enterprise build.
Search `source:otlp service:crewai*`. OTLP attributes land with their OpenTelemetry names (`automation_id`, `crewai.kickoff.id`, etc.) rather than the stdout JSON keys, but they map to the same dashboard facets after [facet promotion](#prerequisite-promote-facets).
@@ -280,7 +265,7 @@ The `$service` template variable defaults to `*` and will catch every CrewAI dep
| All widgets show "No data" | Facets aren't promoted | Re-do the [Promote facets](#prerequisite-promote-facets) step. Datadog won't query against an un-promoted field. |
| Error Rate widget shows `NaN` | No executions in the time window | Either no traffic, or `@execution_id` isn't faceted. Expand the time range and re-check facets. |
| Throughput chart is flat at the same value | Logs aren't reaching Datadog | Search `service:crewai*` in Logs Explorer. If nothing shows, verify the Datadog Agent is running (Agent path) or the OTel collector endpoint is correct (OTLP path). |
-| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments running text mode (or older AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
+| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments (pre-structured-logs AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
| Template variables don't filter widgets | The widget's filter line doesn't reference the template variable | Edit the widget and confirm the search includes `$automation $version $service`. |
## Next steps
diff --git a/docs/edge/pt-BR/changelog.mdx b/docs/edge/pt-BR/changelog.mdx
index 55b56eef7..8935e2841 100644
--- a/docs/edge/pt-BR/changelog.mdx
+++ b/docs/edge/pt-BR/changelog.mdx
@@ -4,6 +4,62 @@ description: "Atualizações de produto, melhorias e correções do CrewAI"
icon: "clock"
mode: "wide"
---
+
+ ## v1.15.1
+
+ [Ver release no GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1)
+
+ ## O Que Mudou
+
+ ### Funcionalidades
+ - Inicializar repositórios Git para projetos gerados (#6364)
+ - Exigir definições explícitas de projetos CrewAI (#6358)
+ - Abrir a página de implantação após o deploy pelo CLI (#6343)
+
+ ### Correções de Bugs
+ - Corrigir a resolução do ID do link da página de implantação (#6365)
+ - Corrigir a renderização do template de equipe em JSON (#6359)
+ - Corrigir o bloqueio da versão da equipe em JSON (#6342)
+ - Corrigir a bypass de redirecionamento SSRF em fetches de scraping (#6331)
+
+ ### Documentação
+ - Melhorar o posicionamento de código aberto no README (#6363)
+ - Melhorar a chamada para ação na configuração do agente de codificação (#6344)
+ - Adicionar snapshot e changelog para a versão 1.15.1a1 (#6362)
+
+ ## Contribuidores
+
+ @joaomdmoura, @lorenzejay, @oalami, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.15.1a1
+
+ [Ver release no GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1a1)
+
+ ## O que Mudou
+
+ ### Funcionalidades
+ - Rastrear a telemetria dos botões TUI
+ - Exigir definições explícitas de projetos CrewAI
+ - Abrir a página de implantação após o deploy via CLI
+
+ ### Correções de Bugs
+ - Corrigir a renderização do template de equipe em JSON
+ - Corrigir o pin de versão da equipe em JSON
+ - Corrigir a bypass de redirecionamento SSRF em fetches de scraping
+
+ ### Documentação
+ - Melhorar o CTA de configuração do agente de codificação
+ - Snapshot e changelog para v1.15.0
+
+ ## Contribuidores
+
+ @joaomdmoura, @lorenzejay, @theCyberTech, @vinibrsl
+
+
+
## v1.15.0
diff --git a/docs/edge/pt-BR/enterprise/guides/datadog.mdx b/docs/edge/pt-BR/enterprise/guides/datadog.mdx
index 391c11eac..2d1c23dab 100644
--- a/docs/edge/pt-BR/enterprise/guides/datadog.mdx
+++ b/docs/edge/pt-BR/enterprise/guides/datadog.mdx
@@ -21,12 +21,11 @@ CrewAI supports two log-ingestion paths to Datadog — both are first-class and
- The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. With `CREWAI_LOG_FORMAT=json` set, each log event ships as a single billable line with structured attributes.
+ The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. Each log event ships as a single billable line with structured attributes — see the [log schema reference](#log-schema-reference) for the full field contract.
**Setup:**
1. Run the Datadog Agent next to your CrewAI containers — see [Datadog's deployment docs](https://docs.datadoghq.com/agent/) for Kubernetes, ECS, or VM setup. Enable log collection (`logs_enabled: true`) and container log collection (`logs_config.container_collect_all: true`).
- 2. Set `CREWAI_LOG_FORMAT=json` as an **automation environment variable** in CrewAI AMP (open your automation → **Settings → Environment Variables**) so each log event is a single line instead of a multi-line traceback. AMP propagates the value to every container in the deployment (API + workers) — don't set it on the container or host directly. See [Enabling JSON output](#enabling-json-output) below for the AMP UI walkthrough and the [log schema reference](#log-schema-reference) for the full field contract.
- 3. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
+ 2. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
**Pick this path if** you already operate Datadog Agents (e.g. for infrastructure metrics), or your log volume makes per-event ingestion cost a real concern — collapsing tracebacks into single events keeps Agent ingestion cheap at scale.
@@ -57,10 +56,10 @@ Either path lands the same structured facets in Datadog (`@automation_id`, `@kic
## Log schema reference
-This schema applies to the **Datadog Agent path** — stdout JSON logs produced when `CREWAI_LOG_FORMAT=json` is set. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
+This schema applies to the **Datadog Agent path** — structured stdout JSON logs emitted by every CrewAI worker container. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
-When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
+Every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
### Why JSON output
@@ -79,20 +78,6 @@ When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single J
-### Enabling JSON output
-
-`CREWAI_LOG_FORMAT=json` must be set as an **automation environment variable** in CrewAI AMP — it is **not** a container, host, or Docker setting. Open your automation in AMP, click the **Settings** icon, and add the variable under the **Environment Variables** section. AMP applies the value to every container in the deployment (API + workers) on the next restart. See [Update Your Crew](./update-crew) for the full UI walkthrough with screenshots.
-
-```shell
-CREWAI_LOG_FORMAT=json
-```
-
-Restart the deployment to pick up the change. Every log line on stdout from that point on is a single JSON object.
-
-
- The default value is `text`, which preserves the legacy human-readable line format byte-for-byte. Setting any value other than `json` falls back to text mode. There is no migration step — the variable is read at process start and the format switches immediately.
-
-
### Example events
A single info-level log inside an active automation kickoff:
@@ -135,7 +120,7 @@ An error with a Python exception is collapsed into a single event with the trace
}
```
-The same error in legacy text mode would have produced ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
+Without JSON output, that same error would produce ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
### Schema v1 fields
@@ -237,7 +222,7 @@ Open [Logs Explorer](https://app.datadoghq.com/logs) and run a query that matche
Search `service:crewai* @schema:v1`. You should see structured logs with the JSON fields parsed into Datadog facets. Pick a recent event and verify it has `@automation_id`, `@kickoff_id`, `@execution_id`, `@crewai_version`, and (when running inside a span) `@trace_id` / `@span_id` populated.
- If nothing appears, confirm `CREWAI_LOG_FORMAT=json` is set under your automation's **Environment Variables** in AMP, the deployment was restarted after the change, and the Datadog Agent is tailing container stdout.
+ If nothing appears, confirm the Datadog Agent is tailing container stdout and that the deployment is running a recent enough CrewAI Enterprise build.
Search `source:otlp service:crewai*`. OTLP attributes land with their OpenTelemetry names (`automation_id`, `crewai.kickoff.id`, etc.) rather than the stdout JSON keys, but they map to the same dashboard facets after [facet promotion](#prerequisite-promote-facets).
@@ -280,7 +265,7 @@ The `$service` template variable defaults to `*` and will catch every CrewAI dep
| All widgets show "No data" | Facets aren't promoted | Re-do the [Promote facets](#prerequisite-promote-facets) step. Datadog won't query against an un-promoted field. |
| Error Rate widget shows `NaN` | No executions in the time window | Either no traffic, or `@execution_id` isn't faceted. Expand the time range and re-check facets. |
| Throughput chart is flat at the same value | Logs aren't reaching Datadog | Search `service:crewai*` in Logs Explorer. If nothing shows, verify the Datadog Agent is running (Agent path) or the OTel collector endpoint is correct (OTLP path). |
-| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments running text mode (or older AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
+| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments (pre-structured-logs AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
| Template variables don't filter widgets | The widget's filter line doesn't reference the template variable | Edit the widget and confirm the search includes `$automation $version $service`. |
## Next steps
diff --git a/docs/images/enterprise/acp-rules-edit-cost-limit.png b/docs/images/enterprise/acp-rules-edit-cost-limit.png
new file mode 100644
index 000000000..89fc144a4
Binary files /dev/null and b/docs/images/enterprise/acp-rules-edit-cost-limit.png differ
diff --git a/docs/index.mdx b/docs/index.mdx
index ff6466f27..2afb9373a 100644
--- a/docs/index.mdx
+++ b/docs/index.mdx
@@ -27,9 +27,133 @@ mode: "wide"
- Get started
- View changelog
- API Reference
+
+ Get started
+
+ {
+ const prompt = `Set up this environment so I can build with CrewAI.
+
+First install the official CrewAI coding-agent skills if this environment supports npx:
+
+npx skills add crewaiinc/skills
+
+If npx is missing or the current agent cannot load skills, do not fail the whole setup. Report the exact issue and continue using the CrewAI docs directly.
+
+Use these CrewAI docs as source of truth before making assumptions:
+- https://skills.crewai.com
+- https://docs.crewai.com/llms.txt
+- https://docs.crewai.com/en/installation
+- https://docs.crewai.com/en/guides/coding-tools/build-with-ai
+
+Setup steps:
+1. Check python3 --version. CrewAI requires Python >=3.10 and <3.14.
+2. Install uv if missing:
+ curl -LsSf https://astral.sh/uv/install.sh | sh
+3. Source the uv environment if needed:
+ source "$HOME/.local/bin/env"
+4. Install the CrewAI CLI:
+ uv tool install crewai
+5. Verify the CLI:
+ crewai version
+ crewai create --help
+6. Create a project:
+ CREWAI_DMN=true crewai create
+7. After project creation, inspect the generated files before editing.
+8. Run:
+ crewai install
+ crewai run
+
+Do not hardcode API keys. Use .env.
+Do not invent CLI flags. Validate with crewai --help or crewai create --help.
+If a command fails, show the exact command and error, explain the likely cause, fix what you can safely fix, and retry once.`;
+ const button = event.currentTarget;
+ const resetTimeout = button.dataset.resetTimeout;
+ if (resetTimeout) {
+ window.clearTimeout(Number(resetTimeout));
+ }
+ try {
+ await navigator.clipboard.writeText(prompt);
+ button.textContent = "Copied";
+ } catch {
+ button.textContent = "Copy failed";
+ } finally {
+ button.dataset.resetTimeout = String(window.setTimeout(() => {
+ button.textContent = "Copy agent setup prompt";
+ delete button.dataset.resetTimeout;
+ }, 1600));
+ }
+ }}
+ >
+ Copy agent setup prompt
+
+
+ Coding-agent guide
+
+
+ API Reference
+
diff --git a/docs/v1.15.1/ar/api-reference/inputs.mdx b/docs/v1.15.1/ar/api-reference/inputs.mdx
new file mode 100644
index 000000000..1a6ecce37
--- /dev/null
+++ b/docs/v1.15.1/ar/api-reference/inputs.mdx
@@ -0,0 +1,8 @@
+---
+title: "GET /inputs"
+description: "الحصول على المدخلات المطلوبة لطاقمك"
+openapi: "/v1.15.1/enterprise-api.en.yaml GET /inputs"
+mode: "wide"
+---
+
+
diff --git a/docs/v1.15.1/ar/api-reference/introduction.mdx b/docs/v1.15.1/ar/api-reference/introduction.mdx
new file mode 100644
index 000000000..60f7bb118
--- /dev/null
+++ b/docs/v1.15.1/ar/api-reference/introduction.mdx
@@ -0,0 +1,135 @@
+---
+title: "مقدمة"
+description: "المرجع الكامل لواجهة برمجة تطبيقات CrewAI AMP REST"
+icon: "code"
+mode: "wide"
+---
+
+# واجهة برمجة تطبيقات CrewAI AMP
+
+مرحبًا بك في مرجع واجهة برمجة تطبيقات CrewAI AMP. تتيح لك هذه الواجهة التفاعل برمجيًا مع الأطقم المنشورة، مما يمكّنك من دمجها مع تطبيقاتك وسير عملك وخدماتك.
+
+## البدء السريع
+
+
+
+ انتقل إلى صفحة تفاصيل طاقمك في لوحة تحكم CrewAI AMP وانسخ رمز Bearer من علامة تبويب الحالة.
+
+
+
+ استخدم نقطة النهاية `GET /inputs` لمعرفة المعاملات التي يتوقعها طاقمك.
+
+
+
+ استدعِ `POST /kickoff` مع مدخلاتك لبدء تنفيذ الطاقم واستلام
+ `kickoff_id`.
+
+
+
+ استخدم `GET /status/{kickoff_id}` للتحقق من حالة التنفيذ واسترجاع النتائج.
+
+
+
+## المصادقة
+
+تتطلب جميع طلبات API المصادقة باستخدام رمز Bearer. أدرج رمزك في ترويسة `Authorization`:
+
+```bash
+curl -H "Authorization: Bearer YOUR_CREW_TOKEN" \
+ https://your-crew-url.crewai.com/inputs
+```
+
+### أنواع الرموز
+
+| نوع الرمز | النطاق | حالة الاستخدام |
+| :-------------------- | :------------------------ | :----------------------------------------------------------- |
+| **Bearer Token** | وصول على مستوى المؤسسة | عمليات الطاقم الكاملة، مثالي للتكامل بين الخوادم |
+| **User Bearer Token** | وصول محدد بالمستخدم | صلاحيات محدودة، مناسب للعمليات الخاصة بالمستخدم |
+
+
+ يمكنك العثور على كلا نوعي الرموز في علامة تبويب الحالة من صفحة تفاصيل طاقمك في
+ لوحة تحكم CrewAI AMP.
+
+
+## عنوان URL الأساسي
+
+لكل طاقم منشور نقطة نهاية API فريدة خاصة به:
+
+```
+https://your-crew-name.crewai.com
+```
+
+استبدل `your-crew-name` بعنوان URL الفعلي لطاقمك من لوحة التحكم.
+
+## سير العمل النموذجي
+
+1. **الاكتشاف**: استدعِ `GET /inputs` لفهم ما يحتاجه طاقمك
+2. **التنفيذ**: أرسل المدخلات عبر `POST /kickoff` لبدء المعالجة
+3. **المراقبة**: استعلم عن `GET /status/{kickoff_id}` حتى الاكتمال
+4. **النتائج**: استخرج المخرجات النهائية من الاستجابة المكتملة
+
+## معالجة الأخطاء
+
+تستخدم الواجهة أكواد حالة HTTP القياسية:
+
+| الكود | المعنى |
+| ----- | :----------------------------------------- |
+| `200` | نجاح |
+| `400` | طلب غير صالح - تنسيق مدخلات غير صحيح |
+| `401` | غير مصرّح - رمز bearer غير صالح |
+| `404` | غير موجود - المورد غير موجود |
+| `422` | خطأ في التحقق - مدخلات مطلوبة مفقودة |
+| `500` | خطأ في الخادم - تواصل مع الدعم |
+
+## الاختبار التفاعلي
+
+
+ **لماذا لا يوجد زر "إرسال"؟** نظرًا لأن كل مستخدم CrewAI AMP لديه عنوان URL
+ فريد للطاقم، نستخدم **وضع المرجع** بدلاً من بيئة تفاعلية لتجنب
+ الالتباس. يوضح لك هذا بالضبط كيف يجب أن تبدو الطلبات بدون
+ أزرار إرسال غير فعالة.
+
+
+تعرض لك كل صفحة نقطة نهاية:
+
+- **تنسيق الطلب الدقيق** مع جميع المعاملات
+- **أمثلة الاستجابة** لحالات النجاح والخطأ
+- **عينات الكود** بلغات متعددة (cURL، Python، JavaScript، إلخ)
+- **أمثلة المصادقة** بتنسيق رمز Bearer الصحيح
+
+### **لاختبار واجهتك الفعلية:**
+
+
+
+ انسخ أمثلة cURL واستبدل العنوان URL + الرمز بقيمك الحقيقية
+
+
+ استورد الأمثلة في أداة اختبار API المفضلة لديك
+
+
+
+**مثال على سير العمل:**
+
+1. **انسخ مثال cURL هذا** من أي صفحة نقطة نهاية
+2. **استبدل `your-actual-crew-name.crewai.com`** بعنوان URL الحقيقي لطاقمك
+3. **استبدل رمز Bearer** برمزك الحقيقي من لوحة التحكم
+4. **نفّذ الطلب** في طرفيتك أو عميل API
+
+## هل تحتاج مساعدة؟
+
+
+
+ احصل على مساعدة في تكامل API واستكشاف الأخطاء وإصلاحها
+
+
+ إدارة أطقمك وعرض سجلات التنفيذ
+
+
diff --git a/docs/v1.15.1/ar/api-reference/kickoff.mdx b/docs/v1.15.1/ar/api-reference/kickoff.mdx
new file mode 100644
index 000000000..84c8ddeac
--- /dev/null
+++ b/docs/v1.15.1/ar/api-reference/kickoff.mdx
@@ -0,0 +1,8 @@
+---
+title: "POST /kickoff"
+description: "بدء تنفيذ الطاقم"
+openapi: "/v1.15.1/enterprise-api.en.yaml POST /kickoff"
+mode: "wide"
+---
+
+
diff --git a/docs/v1.15.1/ar/api-reference/resume.mdx b/docs/v1.15.1/ar/api-reference/resume.mdx
new file mode 100644
index 000000000..acc497219
--- /dev/null
+++ b/docs/v1.15.1/ar/api-reference/resume.mdx
@@ -0,0 +1,6 @@
+---
+title: "POST /resume"
+description: "استئناف تنفيذ الطاقم مع التغذية الراجعة البشرية"
+openapi: "/v1.15.1/enterprise-api.en.yaml POST /resume"
+mode: "wide"
+---
diff --git a/docs/v1.15.1/ar/api-reference/status.mdx b/docs/v1.15.1/ar/api-reference/status.mdx
new file mode 100644
index 000000000..b33611cb2
--- /dev/null
+++ b/docs/v1.15.1/ar/api-reference/status.mdx
@@ -0,0 +1,6 @@
+---
+title: "GET /status/{kickoff_id}"
+description: "الحصول على حالة التنفيذ"
+openapi: "/v1.15.1/enterprise-api.en.yaml GET /status/{kickoff_id}"
+mode: "wide"
+---
diff --git a/docs/v1.15.1/ar/changelog.mdx b/docs/v1.15.1/ar/changelog.mdx
new file mode 100644
index 000000000..3656cacf7
--- /dev/null
+++ b/docs/v1.15.1/ar/changelog.mdx
@@ -0,0 +1,1939 @@
+---
+title: "سجل التغييرات"
+description: "تحديثات المنتج والتحسينات وإصلاحات الأخطاء لـ CrewAI"
+icon: "clock"
+mode: "wide"
+---
+
+ ## v1.15.1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تهيئة مستودعات Git للمشاريع المولدة (#6364)
+ - طلب تعريفات مشروع CrewAI بشكل صريح (#6358)
+ - فتح صفحة النشر بعد نشر CLI (#6343)
+
+ ### إصلاحات الأخطاء
+ - إصلاح حل رابط معرف صفحة النشر (#6365)
+ - إصلاح عرض قالب الطاقم JSON (#6359)
+ - إصلاح تثبيت إصدار الطاقم JSON (#6342)
+ - إصلاح تجاوز إعادة التوجيه SSRF في عمليات السحب (#6331)
+
+ ### الوثائق
+ - تحسين وضع المصدر المفتوح في README (#6363)
+ - تحسين دعوة العمل لإعداد وكيل البرمجة (#6344)
+ - إضافة لقطة وتغيير السجل للإصدار 1.15.1a1 (#6362)
+
+ ## المساهمون
+
+ @joaomdmoura, @lorenzejay, @oalami, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.15.1a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1a1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تتبع بيانات الزر TUI
+ - يتطلب تعريفات مشروع CrewAI بشكل صريح
+ - فتح صفحة النشر بعد نشر CLI
+
+ ### إصلاحات الأخطاء
+ - إصلاح عرض قالب الطاقم بصيغة JSON
+ - إصلاح تثبيت إصدار الطاقم بصيغة JSON
+ - إصلاح تجاوز إعادة التوجيه SSRF في عمليات جلب البيانات
+
+ ### الوثائق
+ - تحسين دعوة إعداد وكيل البرمجة
+ - لقطة وتغيير السجل للإصدار v1.15.0
+
+ ## المساهمون
+
+ @joaomdmoura, @lorenzejay, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.15.0
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.0)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تتبع استخدام تدفق المحادثات في التليمتري
+ - دعم تدفقات المحادثات في واجهة سطر الأوامر TUI
+ - إضافة تحميل تدفق موحد بالإعلان
+ - إضافة دعم تدفق CLI بالإعلان
+ - إضافة تعبير "if" اختياري إلى خطوات each.do
+ - إضافة إجراء عميل فردي إلى تعريفات التدفق
+ - إضافة إجراءات الطاقم إلى تعريف التدفق
+ - إضافة تحميل تعريف الطاقم داخل السطر
+ - إضافة إجراء مركب `each` إلى تعريف التدفق
+ - تنفيذ دعم وضع DMN في إنشاء الطاقم وتنفيذه
+
+ ### إصلاحات الأخطاء
+ - إصلاح تطبيق أذونات المالك فقط على ملفات الاعتماد
+ - إصلاح مدخلات بدء حالة تدفق مخطط JSON
+ - إصلاح تجاوز مسار الرابط الرمزي في استخراج أرشيف المهارة
+ - تجميع استخدام الرموز عبر جميع مكالمات LLM
+ - إزالة أداة Exa المكررة
+ - حل مشاكل الطاقم JSON
+ - إصلاح معالجة الطاقم JSON وتعزيز وظيفة إعادة تعيين الذاكرة
+
+ ### الوثائق
+ - تحديث وثائق التثبيت والبدء السريع لمشاريع الطاقم التي تعتمد على JSON
+ - إضافة دليل تكامل Datadog مع لوحة عمليات قابلة للاستيراد
+ - إضافة صفحة استوديو "بطاقة واحدة لكل خطوة"
+ - إضافة لقطات وتغييرات للإصدارات السابقة التي تؤدي إلى v1.15.0
+
+ ### الأداء
+ - تحسين تجربة بدء تشغيل crewai run
+ - الحفاظ على تقدم طريقة التدفق مرئيًا للطاقم المتداخل
+
+ ### إعادة الهيكلة
+ - إزالة `StateProxy` من الوصول إلى حالة التدفق
+ - دمج `crewai run` و `crewai flow kickoff`
+ - تمييز أنواع حالة تعريف التدفق
+ - توصيل التكوين والاستمرارية من تعريف التدفق إلى وقت التشغيل
+
+ ## المساهمون
+
+ @gabemilani, @github-code-quality[bot], @greysonlalonde, @iris-clawd, @jessemiller, @joaomdmoura, @lorenzejay, @lucasgomide, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.14.8a5
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a5)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - جعل المراجع التصريحية تعمل عبر التدفقات والفرق (#6326)
+
+ ### إصلاحات الأخطاء
+ - إصلاح مدخلات بدء حالة تدفق مخطط JSON (#6325)
+
+ ### الوثائق
+ - وضع بطاقة واحدة لكل خطوة تحت استوديو الفريق وإزالة لافتة التوزيع (AGE-107) (#6317)
+ - تحديث اللقطة وسجل التغييرات للإصدار v1.14.8a4 (#6319)
+
+ ### إعادة الهيكلة
+ - إزالة `StateProxy` من الوصول إلى حالة التدفق (#6327)
+
+ ## المساهمون
+
+ @jessemiller, @vinibrsl
+
+
+
+
+ ## v1.14.8a4
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a4)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - دعم تدفقات المحادثة في واجهة سطر الأوامر TUI.
+
+ ### إصلاحات الأخطاء
+ - إصلاح مسار التوجيه الرمزي في استخراج أرشيف المهارات.
+ - التحقق من صحة مسارات تعريف التدفق الإعلاني.
+
+ ### الوثائق
+ - تحديث اللقطة وسجل التغييرات للإصدار v1.14.8a3.
+
+ ## المساهمون
+
+ @lorenzejay, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.14.8a3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a3)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة تحميل تدفق موحد إعلاني
+ - تحسين تجربة بدء تشغيل crewai run
+ - دمج `crewai run` و `crewai flow kickoff`
+ - الحفاظ على تقدم طريقة التدفق مرئيًا للفرق المتداخلة
+ - إضافة دعم واجهة سطر الأوامر الإعلانية للتدفق
+ - السماح باستخدام `@router()` كطريقة بدء لتدفق
+ - إضافة مخططات مخرجات مكتوبة لأدوات CrewAI
+
+ ### إصلاحات الأخطاء
+ - تثبيت opentelemetry على ~=1.42.0
+
+ ### الوثائق
+ - إضافة صفحة استوديو "بطاقة واحدة لكل خطوة"
+
+ ## المساهمون
+
+ @jessemiller, @joaomdmoura, @lucasgomide, @vinibrsl
+
+
+
+
+ ## v1.14.8a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة إجراء عميل واحد إلى تعريفات التدفق
+ - التحقق من تعبيرات CEL للتدفق عند تحميل التعريف
+
+ ### الوثائق
+ - إضافة دليل تكامل Datadog مع لوحة عمليات قابلة للاستيراد
+ - تحديث اللقطة وسجل التغييرات للإصدار v1.14.8a1
+
+ ## المساهمون
+
+ @joaomdmoura, @lucasgomide, @vinibrsl
+
+
+
+
+ ## v1.14.8a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة تعبير if اختياري إلى خطوات each.do
+
+ ### إصلاحات الأخطاء
+ - إصلاح مشكلات JSON crew
+
+ ### الوثائق
+ - تحديث snapshot و changelog للإصدار v1.14.8a
+
+ ## المساهمون
+
+ @joaomdmoura, @vinibrsl
+
+
+
+
+ ## v1.14.8a
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة إجراء كتلة نصية/كود إلى FlowDefinition
+ - إضافة إجراءات الطاقم إلى FlowDefinition
+ - إضافة إجراء مركب `each` إلى FlowDefinition
+ - تنفيذ دعم وضع DMN في إنشاء الطاقم وتنفيذه
+ - تحسين وظيفة إعادة تعيين الذاكرة ومعالجة الطاقم بتنسيق JSON
+ - إضافة تعبيرات إلى إجراءات FlowDefinition
+ - تنفيذ أدوات تشغيل تعريف التدفق بدون كود Python
+ - دفع التغذية الراجعة البشرية من تعريف التدفق
+ - توصيل التكوين والاستمرارية من FlowDefinition إلى وقت التشغيل
+ - إضافة `crewai run --definition` للتدفقات التصريحية
+ - دعم تراجع نشر ZIP وتشغيل مشاريع الطاقم بتنسيق JSON
+ - تقديم الطواقم بتنسيق JSON أولاً
+
+ ### إصلاحات الأخطاء
+ - إصلاح أداة Exa المكررة
+ - إصلاح استخدام الرموز المجمعة عبر جميع استدعاءات LLM
+ - حل المشكلات المتعلقة بتحميل الطاقم ومنطق التحقق
+
+ ### الوثائق
+ - توثيق حقول FlowDefinition في مخطط JSON
+ - تحديث وثائق التثبيت والبدء السريع لمشاريع الطاقم بتنسيق JSON أولاً
+ - تحديث سجل التغييرات والإصدار لـ v1.14.7
+
+ ## المساهمون
+
+ @gabemilani, @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay, @lucasgomide, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.14.7
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة واجهات خلفية افتراضية قابلة للتوصيل للذاكرة، والمعرفة، وrag، وflow.
+ - عرض السبب الحقيقي للإنهاء، ومعلمات العينة، وresponse.id في أحداث LLM.
+ - تصنيف مشغلات DSL كزخارف واعية للمسار.
+ - إضافة واجهة برمجة تطبيقات الدردشة لتدفقات المحادثة.
+ - جعل واجهة القفل قابلة للتجاوز.
+ - بناء FlowDefinition من بيانات التعريف الخاصة بـ Flow DSL.
+ - إضافة مزود LLM من Snowflake Cortex الأصلي.
+ - إضافة دعم لملفات الوكلاء المدربين من crew.
+
+ ### إصلاحات الأخطاء
+ - إصلاح نقطة التحقق لإعادة بناء BaseLLM مخصص كـ LLM ملموس عند الاستعادة.
+ - تقييد الاستعادة على علامة لمنع اللقطات الحية من إعادة التشغيل كاستئناف.
+ - تحديد حالة وقت التشغيل لكل تشغيل للحد من النمو وعزل التشغيل المتزامن.
+ - إصلاح إعدادات التتبع على crewai-login.
+ - احترام suppress_flow_events لأحداث تنفيذ الطريقة.
+ - استعادة [project.scripts] في حزمة crewai لتثبيت أداة uv.
+ - حل مشكلات CVE الخاصة بـ pip-audit لـ aiohttp وdocling وdocling-core.
+ - إصلاح إدخال الملفات الذي لا يعمل بشكل موثوق.
+ - إصلاح تاريخ نتائج أدوات Snowflake Claude غير المكتملة.
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.7.
+ - تحديث وثائق جامع OpenTelemetry.
+ - تحديث دليل NVIDIA Nemotron LLM.
+ - إضافة دليل تكامل Databricks.
+ - إضافة دليل تكامل Snowflake.
+
+ ### الأداء
+ - تحسين سرعة استيراد crewai من خلال تحميل مستندات docling بشكل كسول.
+
+ ### إعادة الهيكلة
+ - تبسيط تقييم شروط التدفق ليكون بلا حالة لكل حدث.
+ - فصل منطق المحادثة عن وقت التشغيل وإضافة تعريف المحادثة.
+ - تقسيم `flow.py` إلى DSL، وتعريف، ووقت تشغيل.
+
+ ## المساهمون
+
+ @Luzk, @alex-clawd, @devin-ai-integration[bot], @greysonlalonde, @gvieira, @jessemiller, @lorenzejay, @lucasgomide, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.14.7rc2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7rc2)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - استعادة البوابة على علامة لمنع اللقطات الحية من إعادة التشغيل كاستئناف
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.7rc1
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.7rc1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7rc1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة `reset_runtime_state` لإطلاق حالة الحافلة المتراكمة
+ - التعامل مع دعم كل من الموجهات المخصصة
+ - فصل منطق المحادثة عن وقت التشغيل وإضافة `conversational_definition`
+
+ ### إصلاحات الأخطاء
+ - إصلاح نطاق حالة وقت التشغيل لكل تشغيل للحد من النمو وعزل التشغيلات المتزامنة
+ - إصلاح إعدادات القياس عن بُعد على `crewai-login`
+ - إصلاح احترام `suppress_flow_events` لفعاليات تنفيذ الأساليب
+
+ ### الوثائق
+ - تحديث صور OpenTelemetry
+ - تحديث الوثائق لتعكس الحالة الجديدة لجمع بيانات OpenTelemetry
+ - تحديث سجل التغييرات والإصدار لـ v1.14.7a4
+
+ ### إعادة الهيكلة
+ - تبسيط تقييم شرط التدفق ليكون بلا حالة لكل حدث
+ - تحسين دورة توجيه المحادثة مع تقليل مسار واحد
+
+ ## المساهمون
+
+ @greysonlalonde, @lorenzejay, @lucasgomide, @vinibrsl
+
+
+
+
+ ## v1.14.7a4
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7a4)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - نقل وقت التشغيل @listen/@router لقراءة من FlowDefinition
+ - إضافة واجهات خلفية افتراضية قابلة للتوصيل للذاكرة، والمعرفة، وrag، وflow
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.7a3
+
+ ## المساهمون
+
+ @greysonlalonde, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.14.7a3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7a3)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح تعرض `ask_for_human_input` في `AgentExecutor` التجريبي
+ - حل مشكلات CVEs الخاصة بـ pip-audit لـ `aiohttp`، `docling`، `docling-core`، و `pip`
+
+ ### إعادة هيكلة
+ - نقل `@start` لقراءة من `FlowDefinition`
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.7a2
+
+ ## المساهمون
+
+ @greysonlalonde، @lorenzejay، @vinibrsl
+
+
+
+
+ ## v1.14.7a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7a2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة دعم تتبع تدفقات المحادثة.
+ - تحديث وثائق تدفق المحادثة لاستخدام `handle_turn`.
+ - عرض السبب الحقيقي لإنهاء المحادثة، ومعلمات العينة، و`response.id` في أحداث LLM.
+ - تصنيف مشغلات DSL كزخارف واعية بالمسار.
+ - تنفيذ واجهة برمجة التطبيقات للدردشة لتدفقات المحادثة.
+ - جعل قفل الخلفية قابلاً للتجاوز في متجر القفل.
+ - تقسيم أحادي تدفق DSL إلى وحدات زخرفية مركزة.
+ - تسطيح استخدام ذاكرة التخزين المؤقت LiteLLM/أعداد الأسباب الفرعية في `_usage_to_dict`.
+ - بناء `FlowDefinition` من بيانات التعريف الخاصة بتدفق DSL.
+
+ ### الوثائق
+ - إضافة دليل NVIDIA Nemotron LLM.
+ - توثيق عمليات نشر المونوريبو.
+ - تحديث سجل التغييرات والإصدار لـ v1.14.7a1.
+
+ ## المساهمون
+
+ @alex-clawd, @gvieira, @lorenzejay, @lucasgomide, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.14.7a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7a1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة دعم ملفات الوكلاء المدربين
+ - إضافة مزود LLM الأصلي لـ Snowflake Cortex
+ - إضافة دليل تكامل Databricks
+ - إضافة دليل تكامل Snowflake
+
+ ### إصلاحات الأخطاء
+ - إصلاح CLI عن طريق استعادة `[project.scripts]` في حزمة crewai لتثبيت أداة UV
+ - حل مشكلات موثوقية إدخال الملفات
+ - إصلاح تاريخ نتائج الأدوات غير المكتملة في Snowflake Claude
+ - التعامل مع استدعاءات الأدوات الممثلة كسلاسل لـ Snowflake Claude
+ - إعادة تفعيل مستمعي `or_` متعدد المصادر عبر دورات مدفوعة بالموجه
+
+ ### الأداء
+ - تحسين سرعة استيراد crewai عن طريق تحميل استيرادات docling بشكل كسول
+
+ ### إعادة هيكلة
+ - تقسيم `flow.py` إلى DSL، تعريف، وتشغيل
+
+ ## المساهمون
+
+ @Luzk, @alex-clawd, @devin-ai-integration[bot], @greysonlalonde, @jessemiller, @lorenzejay, @vinibrsl
+
+
+
+
+ ## v1.14.6
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.6)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تحسين StdioTransport لمنع تسرب متغيرات البيئة
+ - تعزيز تكوين التخطيط ومعالجة الملاحظات
+ - إعلان env_vars على DatabricksQueryTool
+ - إضافة وثائق خطة التحكم في الوكيل
+
+ ### إصلاحات الأخطاء
+ - إصلاح تسرب المخرجات المنظمة في حلقات استدعاء الأدوات
+ - حذف ردود الاستدعاء غير القابلة للعودة وحالة المحول في نقطة التحقق
+ - تسلسل الحقول من النوع [BaseModel] كـ JSON schema في نقطة التحقق
+ - تجنب مهمة orphan task_started عند استعادة نطاق الاستئناف
+ - السماح لـ AgentExecutor بالاستعادة من نقطة التحقق
+ - تصحيح خطأ الكتابة من mongodb إلى pymongo في package_dependencies
+
+ ### الوثائق
+ - إضافة كتلة تنقل وثائق ACP (بيتا) إلى صفحات خطة التحكم في الوكيل
+ - إزالة المراجع إلى العمليات التوافقية من صفحة العمليات
+ - إعادة هيكلة صفحة نقاط التحقق
+ - توثيق خطوة تثبيت حزمة الإدارة لمرة واحدة
+ - نقل Secrets Manager / Workload Identity من replicated-config
+ - إزالة تعبيرات `{" "}` JSX التي تكسر عرض ``
+
+ ### إعادة الهيكلة
+ - نقل مستودع المهارات إلى experimental + CREWAI_EXPERIMENTAL gate
+
+ ## المساهمون
+
+ @akaKuruma, @alex-clawd, @github-actions[bot], @greysonlalonde, @heitorado, @iris-clawd, @lorenzejay, @lucasgomide, @mattatcha, @thiagomoretto, @vinibrsl
+
+
+
+
+ ## v1.14.6a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.6a2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تحسين `StdioTransport` لمنع تسرب متغيرات البيئة
+ - تحسين تكوين التخطيط ومعالجة المراقبة
+ - إعلان `env_vars` على `DatabricksQueryTool`
+ - إضافة وثائق خطة التحكم بالوكيل
+
+ ### إصلاحات الأخطاء
+ - إصلاح تسرب المخرجات المنظمة في حلقات استدعاء الأدوات
+ - حذف الاستدعاءات غير القابلة للعودة وحالة المحول في نقاط التحقق
+ - تسلسل حقول `type[BaseModel]` كـ JSON schema في نقاط التحقق
+ - تجنب `task_started` اليتيمة عند استعادة نطاق الاستئناف
+ - السماح لـ `AgentExecutor` بالاستعادة من نقطة تحقق
+ - تصحيح خطأ مطبعي في MongoDB إلى `pymongo` في تبعيات الحزمة
+
+ ### الوثائق
+ - إعادة هيكلة صفحة نقاط التحقق
+ - توثيق خطوة تثبيت حزمة الإدارة لمرة واحدة
+ - نقل Secrets Manager / Workload Identity من replicated-config
+ - إزالة إدخال Skills Repository من سجل التغييرات
+
+ ## المساهمون
+
+ @github-actions[bot], @greysonlalonde, @heitorado, @iris-clawd, @lorenzejay, @lucasgomide, @mattatcha, @thiagomoretto, @vinibrsl
+
+
+
+
+ ## v1.14.6a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.6a1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - توليد ملاحظات إصدار مصنفة للمؤسسات
+
+ ### إصلاحات الأخطاء
+ - تعزيز تسلسل حالة وقت التشغيل عبر حقول الكيان
+ - تحديث idna إلى 3.15 لمعالجة مشكلة الأمان GHSA-65pc-fj4g-8rjx
+ - إزالة تعبيرات JSX `{" "}` التي تعطل عرض ``
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.5
+
+ ## المساهمون
+
+ @akaKuruma, @alex-clawd, @greysonlalonde
+
+
+
+
+ ## v1.14.5
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إلغاء استخدام `CrewAgentExecutor`، وتعيين وكلاء الطاقم الافتراضيين إلى `AgentExecutor`
+ - تحسين أدوات صندوق الرمل Daytona
+ - إضافة معلمة بدء `restore_from_state_id`
+ - إضافة تسليط الضوء على `ExaSearchTool`، وإعادة تسميته من `EXASearchTool`
+
+ ### إصلاحات الأخطاء
+ - إصلاح تسرب الذاكرة في `git.py` باستخدام `cached_property`
+ - عرض استدعاءات الأدوات المتدفقة عندما تكون `available_functions` غائبة
+ - ضمان تحميل أحداث `skills` للتتبع
+ - تصحيح مسار نقطة النهاية للحالة من `/{kickoff_id}/status` إلى `/status/{kickoff_id}`
+ - استعادة كتلة الشيفرة المفقودة في دليل التدفق الأول للغة البرتغالية (pt-BR)
+ - منع `result_as_answer` من إرجاع رسائل الخطأ أو الكتل المرتبطة كإجابة نهائية
+ - الحفاظ على مخرجات المهام عبر تفريغ الدفعات غير المتزامنة
+ - دائمًا استعادة `task.output_pydantic` في كتلة finally
+ - التعامل مع إدخال `BaseModel` في `convert_to_model`
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.5
+ - إضافة دليل ترقية OSS و انتقال الطاقم إلى التدفق
+ - توثيق متغيرات البيئة الإضافية لأدوات المطور
+ - إضافة وثائق لـ `TavilyGetResearch`
+
+ ### إعادة الهيكلة
+ - استخراج واجهة سطر الأوامر إلى حزمة مستقلة `crewai-cli`
+
+ ## المساهمون
+
+ @NIK-TIGER-BILL, @akaKuruma, @cgoeppinger, @github-actions[bot], @greysonlalonde, @heitorado, @irfaan101, @iris-clawd, @lorenzejay, @manisrinivasan2k1, @minasami-pr, @mislavivanda, @theCyberTech, @theishangoswami, @wishhyt
+
+
+
+
+ ## v1.14.5a7
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a7)
+
+ ## ما الذي تغير
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.5a6
+
+ ### تغييرات كسرية
+ - إلغاء حقل function_calling_llm
+
+ ## المساهمون
+
+ @greysonlalonde, @heitorado
+
+
+
+
+ ## v1.14.5a6
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a6)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح استدعاءات الأدوات المتدفقة عندما تكون available_functions غائبة
+ - رفع اعتماد langsmith إلى الإصدار >=0.8.0 لمعالجة GHSA-3644-q5cj-c5c7
+ - حل مشاكل الأماكن الشاغرة لكتل التعليمات البرمجية غير المترجمة في وثائق البرتغالية البرازيلية
+
+ ### الوثائق
+ - إضافة وثائق لـ TavilyGetResearch
+ - تحديث سجل التغييرات والإصدار لـ v1.14.5a5
+
+ ## المساهمون
+
+ @greysonlalonde, @heitorado, @iris-clawd, @lorenzejay, @manisrinivasan2k1
+
+
+
+
+ ## v1.14.5a5
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a5)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إلغاء استخدام CrewAgentExecutor، وتعيين وكلاء Crew الافتراضيين إلى AgentExecutor
+ - تحسين أدوات صندوق الرمل Daytona
+
+ ### إصلاحات الأخطاء
+ - إصلاح كتلة الكود المفقودة في دليل التدفق الأول باللغة البرتغالية (pt-BR)
+ - تسجيل أخطاء المراجعة المسبقة والتقطير HITL، إضافة learn_strict
+ - تصحيح urllib3 للثغرات الأمنية
+ - تصحيح gitpython و langchain-core؛ تجاهل CVE paramiko غير المصححة
+ - تحديث جميع حزم مساحة العمل المنشورة على uv lock/sync
+
+ ### الوثائق
+ - إضافة دليل ترحيل لـ `inputs.id` إلى `restoreFromStateId`
+ - إضافة دليل ترقية OSS ودليل ترحيل crew-to-flow
+ - تحديث سجل التغييرات والإصدار لـ v1.14.5a4
+
+ ## المساهمون
+
+ @akaKuruma, @greysonlalonde, @iris-clawd, @lorenzejay, @mislavivanda
+
+
+
+
+ ## v1.14.5a4
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a4)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تحديث قوائم LLM
+
+ ### إصلاحات الأخطاء
+ - إصلاح مشكلة الاعتماد من خلال نقل `textual` إلى `crewai-cli` وإضافة `certifi`
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.5a3
+
+ ## المساهمون
+
+ @cgoeppinger, @greysonlalonde
+
+
+
+
+ ## v1.14.5a3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a3)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح مسار نقطة النهاية للحالة من /{kickoff_id}/status إلى /status/{kickoff_id}
+ - تحديث تبعية gitpython إلى الإصدار >=3.1.47 للامتثال الأمني
+
+ ### إعادة هيكلة
+ - استخراج واجهة سطر الأوامر إلى حزمة crewai-cli المستقلة
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار للإصدار v1.14.5a2
+
+ ## المساهمون
+
+ @greysonlalonde, @iris-clawd
+
+
+
+
+ ## v1.14.5a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a2)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح استعادة مخرجات المهام في كتلة finally
+ - تضمين `thoughts_token_count` في رموز الإكمال
+ - الحفاظ على مخرجات المهام عبر تفريغ دفعات غير متزامنة
+ - تمرير kwargs إلى استدعاءات المحمل في `CrewAIRagAdapter`
+ - منع `result_as_answer` من إرجاع رسالة كتلة الخطاف كإجابة نهائية
+ - منع `result_as_answer` من إرجاع خطأ كإجابة نهائية
+ - استخدام `acall` لتحويل المخرجات في المسارات غير المتزامنة
+ - منع تغيير كلمات التوقف المشتركة في LLM عبر الوكلاء
+ - التعامل مع مدخلات `BaseModel` في `convert_to_model`
+
+ ### الوثائق
+ - توثيق متغيرات البيئة الإضافية
+ - تحديث سجل التغييرات والإصدار لـ v1.14.5a1
+
+ ## المساهمون
+
+ @NIK-TIGER-BILL, @greysonlalonde, @lorenzejay, @minasami-pr, @theCyberTech, @wishhyt
+
+
+
+
+ ## v1.14.5a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة معلمة بدء `restore_from_state_id`
+ - إضافة تسليط الضوء على ExaSearchTool وإعادة تسميته من EXASearchTool
+
+ ### إصلاحات الأخطاء
+ - إصلاح المواقع المفقودة لـ crewai في تدفق الإصدار
+ - ضمان تحميل أحداث المهارات للآثار
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.4
+
+ ## المساهمون
+
+ @akaKuruma, @github-actions[bot], @greysonlalonde, @lorenzejay, @theishangoswami
+
+
+
+
+ ## v1.14.4
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.4)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة دعم لمفتاح الاستمرارية المخصص في @persist
+ - إضافة دعم واجهة برمجة التطبيقات للردود لمزود Azure OpenAI
+ - تمرير credential_scopes إلى عميل Azure AI Inference
+ - إضافة دليل إعداد هوية عبء العمل لـ Vertex AI
+ - إضافة Tavily Research والحصول على Research
+ - إضافة أدوات MCP من You.com للبحث، البحث، واستخراج المحتوى
+
+ ### إصلاحات الأخطاء
+ - إصلاح مشكلة السقوط عند عدم تطابق تعبير JSON regex مع JSON صالح
+ - إصلاح للحفاظ على tool_calls عندما تحتوي الاستجابة أيضًا على نص
+ - إصلاح لتمرير base_url و api_key إلى instructor.from_provider
+ - إصلاح لتحذير وإرجاع فارغ عندما لا يُرجع خادم MCP الأصلي أي أدوات
+ - إصلاح لاستخدام متغير الرسائل الموثقة في معالجات غير البث
+ - إصلاح لحماية مساعدي وصف دردشة الطاقم ضد فشل LLM
+ - إصلاح لإعادة تعيين الرسائل والتكرارات بين الاستدعاءات
+ - إصلاح لتمرير ملف trained-agents من خلال replay و test
+ - إصلاح لاحترام ملف trained-agents المخصص في الاستدلال
+ - إصلاح لربط الوكلاء المخصصين بالمهام فقط بالطاقم لملفات الإدخال متعددة الأنماط
+ - إصلاح لتسلسل callable الحواجز كـ null لتسجيل JSON
+ - إصلاح إعادة تسمية force_final_answer لتجنب توجيه ذاتي
+ - إصلاح زيادة litellm لإصلاح SSTI؛ تجاهل CVE غير القابل للإصلاح في pip
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.4a1
+ - إضافة صفحة أدوات E2B Sandbox
+ - إضافة وثائق أدوات صندوق Daytona
+
+ ## المساهمون
+
+ @EdwardIrby, @dependabot[bot], @factory-droid-oss, @factory-droid[bot], @greysonlalonde, @kunalk16, @lorenzejay, @lucasgomide, @manisrinivasan2k1, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.14.4a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.4a1)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح مساعدي وصف دردشة الطاقم ضد فشل LLM.
+ - إعادة تعيين الرسائل والتكرارات بين الاستدعاءات في المنفذ.
+ - تمرير ملف الوكلاء المدربين عبر إعادة التشغيل والاختبار في CLI.
+ - احترام ملف الوكلاء المدربين المخصص أثناء الاستدلال في الوكيل.
+ - ربط الوكلاء المخصصين بالمهام فقط بالطاقم لضمان وصول ملفات الإدخال متعددة الوسائط إلى LLM.
+ - تسلسل استدعاءات الحواجز كـ null لتسجيل النقاط في JSON.
+ - إعادة تسمية `force_final_answer` في agent_executor لتجنب جهاز التوجيه الذاتي الإشارة.
+ - تحديث `litellm` لإصلاح SSTI وتجاهل CVE pip غير القابل للإصلاح.
+
+ ### الوثائق
+ - إضافة صفحة أدوات Sandbox E2B.
+ - إضافة وثائق أدوات Sandbox Daytona.
+ - إضافة دليل إعداد هوية عبء العمل لـ Vertex AI.
+ - إضافة أدوات MCP من You.com للبحث، البحث، واستخراج المحتوى.
+ - تحديث سجل التغييرات والإصدار لـ v1.14.3.
+
+ ## المساهمون
+
+ @EdwardIrby, @dependabot[bot], @factory-droid-oss, @factory-droid[bot], @greysonlalonde, @lorenzejay, @manisrinivasan2k1, @mattatcha
+
+
+
+
+ ## v1.14.3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.3)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة أحداث دورة الحياة لعمليات نقطة التحقق
+ - إضافة دعم لـ e2b
+ - الرجوع إلى DefaultAzureCredential عند عدم توفير مفتاح API في تكامل Azure
+ - إضافة دعم Bedrock V4
+ - إضافة أدوات Daytona sandbox لوظائف محسّنة
+ - إضافة دعم نقطة التحقق والتفرع للوكلاء المستقلين
+
+ ### إصلاحات الأخطاء
+ - إصلاح execution_id ليكون منفصلًا عن state.id
+ - حل مشكلة إعادة تشغيل أحداث الطريقة المسجلة عند استئناف نقطة التحقق
+ - إصلاح تسلسل مراجع class initial_state كـ JSON schema
+ - الحفاظ على مهارات الوكلاء التي تحتوي على بيانات وصفية فقط
+ - تمرير أسماء @CrewBase الضمنية إلى أحداث الطاقم
+ - دمج بيانات التنفيذ عند تهيئة دفعة مكررة
+ - إصلاح تسلسل حقول مراجع class Task لنقاط التحقق
+ - التعامل مع نتيجة BaseModel في حلقة إعادة المحاولة guardrail
+ - الحفاظ على thought_signature في استدعاءات أدوات Gemini للبث
+ - إصدار task_started عند استئناف التفرع وإعادة تصميم واجهة المستخدم النصية لنقطة التحقق
+ - استخدام تواريخ مستقبلية في اختبارات تقليم نقطة التحقق لمنع الفشل المعتمد على الوقت
+ - إصلاح ترتيب التشغيل الجاف والتعامل مع الفرع القديم الذي تم التحقق منه في إصدار أدوات التطوير
+ - ترقية lxml إلى >=6.1.0 لرقعة الأمان
+ - رفع python-dotenv إلى >=1.2.2 لرقعة الأمان
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.3
+ - إضافة صفحة "بناء باستخدام الذكاء الاصطناعي" وتحديث التنقل لجميع اللغات
+ - إزالة الأسئلة الشائعة حول التسعير من صفحة البناء باستخدام الذكاء الاصطناعي عبر جميع المواقع
+
+ ### الأداء
+ - تحسين MCP SDK وأنواع الأحداث لتقليل بدء التشغيل البارد بنسبة ~29%
+
+ ### إعادة الهيكلة
+ - إعادة هيكلة مساعدي نقطة التحقق للقضاء على التكرار وتشديد تلميحات نوع الحالة
+
+ ## المساهمون
+
+ @MatthiasHowellYopp, @akaKuruma, @alex-clawd, @github-actions[bot], @github-advanced-security[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @mattatcha, @renatonitta
+
+
+
+
+ ## v1.14.3a3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.3a3)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة دعم لـ e2b
+ - تنفيذ التراجع إلى DefaultAzureCredential عند عدم توفير مفتاح API
+
+ ### إصلاحات الأخطاء
+ - ترقية lxml إلى >=6.1.0 لمعالجة مشكلة الأمان GHSA-vfmq-68hx-4jfw
+
+ ### الوثائق
+ - إزالة الأسئلة الشائعة حول التسعير من صفحة البناء باستخدام الذكاء الاصطناعي عبر جميع اللغات
+
+ ### الأداء
+ - تحسين وقت بدء التشغيل البارد بنسبة ~29% من خلال التحميل الكسول لمجموعة أدوات MCP وأنواع الأحداث
+
+ ## المساهمون
+
+ @alex-clawd, @github-advanced-security[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @mattatcha
+
+
+
+
+ ## v1.14.3a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.3a2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة دعم لـ bedrock V4
+ - إضافة أدوات Daytona sandbox لوظائف محسّنة
+ - إضافة صفحة "البناء باستخدام الذكاء الاصطناعي" — مستندات أصلية للذكاء الاصطناعي لوكلاء البرمجة
+ - إضافة "البناء باستخدام الذكاء الاصطناعي" إلى التنقل في صفحة "البدء" وملفات الصفحات لجميع اللغات (en, ko, pt-BR, ar)
+
+ ### إصلاحات الأخطاء
+ - إصلاح انتشار أسماء @CrewBase الضمنية إلى أحداث الطاقم
+ - حل مشكلة تكرار تهيئة الدفعات في دمج بيانات التنفيذ الوصفية
+ - إصلاح تسلسل حقول مرجع فئة Task لعمليات التحقق من النقاط
+ - التعامل مع نتيجة BaseModel في حلقة إعادة المحاولة للحدود
+ - تحديث python-dotenv إلى الإصدار >=1.2.2 للامتثال الأمني
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.3a1
+ - تحديث الأوصاف وتطبيق الترجمات الفعلية
+
+ ## المساهمون
+
+ @MatthiasHowellYopp, @github-actions[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @renatonitta
+
+
+
+
+ ## v1.14.3a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.3a1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة دعم نقاط التحقق والفروع لوكلاء مستقلين
+
+ ### إصلاحات الأخطاء
+ - الحفاظ على thought_signature في استدعاءات أداة البث Gemini
+ - إصدار task_started عند استئناف الفرع وإعادة تصميم واجهة المستخدم النصية لنقاط التحقق
+ - تصحيح ترتيب التشغيل الجاف ومعالجة الفرع القديم الذي تم التحقق منه في إصدار أدوات التطوير
+ - استخدام تواريخ مستقبلية في اختبارات تقليم نقاط التحقق لمنع الفشل المعتمد على الوقت (#5543)
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.2
+
+ ## المساهمون
+
+ @alex-clawd, @greysonlalonde
+
+
+
+
+ ## v1.14.2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة أوامر استئناف النقاط التفتيش، والاختلاف، والتنظيف مع تحسين إمكانية الاكتشاف.
+ - إضافة معلمة `from_checkpoint` إلى `Agent.kickoff` والطرق ذات الصلة.
+ - إضافة أوامر إدارة القوالب لقوالب المشاريع.
+ - إضافة تلميحات استئناف إلى إصدار أدوات المطور عند الفشل.
+ - إضافة واجهة سطر الأوامر للتحقق من النشر وتعزيز سهولة استخدام تهيئة LLM.
+ - إضافة تقسيم النقاط التفتيشية مع تتبع النسب.
+ - إثراء تتبع رموز LLM مع رموز الاستدلال ورموز إنشاء التخزين المؤقت.
+
+ ### إصلاحات الأخطاء
+ - إصلاح المطالبة بشأن تعارضات الفروع القديمة في إصدار أدوات المطور.
+ - تصحيح الثغرات في `authlib` و `langchain-text-splitters` و `pypdf`.
+ - تحديد نطاق معالجات البث لمنع تلوث أجزاء التشغيل المتقاطعة.
+ - إرسال نقاط التفتيش عبر واجهات Flow في TUI.
+ - استخدام نمط البحث المتكرر لاكتشاف نقاط التفتيش بتنسيق JSON.
+ - التعامل مع مخططات JSON الدائرية في أداة حل MCP.
+ - الحفاظ على معلمات استدعاء أداة Bedrock من خلال إزالة القيمة الافتراضية الصحيحة.
+ - إصدار حدث flow_finished بعد استئناف HITL.
+ - إصلاح ثغرات متنوعة من خلال تحديث التبعيات، بما في ذلك `requests` و `cryptography` و `pytest`.
+ - إصلاح لإيقاف تمرير وضع صارم إلى واجهة برمجة التطبيقات Bedrock Converse.
+
+ ### الوثائق
+ - توثيق المعلمات المفقودة وإضافة قسم النقاط التفتيشية.
+ - تحديث سجل التغييرات والإصدار للإصدار v1.14.2 ومرشحي الإصدار السابقين.
+ - إضافة توثيق ميزة A2A الخاصة بالشركات وتحديث وثائق A2A المفتوحة المصدر.
+
+ ## المساهمون
+
+ @Yanhu007، @alex-clawd، @github-actions[bot]، @greysonlalonde، @iris-clawd، @lorenzejay، @lucasgomide
+
+
+
+
+ ## v1.14.2rc1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2rc1)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح معالجة مخططات JSON الدائرية في أداة MCP
+ - إصلاح ثغرة أمنية من خلال تحديث python-multipart إلى 0.0.26
+ - إصلاح ثغرة أمنية من خلال تحديث pypdf إلى 6.10.1
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.2a5
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.2a5
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a5)
+
+ ## ما الذي تغير
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.2a4
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.2a4
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a4)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة تلميحات استئناف إلى إصدار أدوات المطورين عند الفشل
+
+ ### إصلاحات الأخطاء
+ - إصلاح توجيه وضع الصرامة إلى واجهة برمجة تطبيقات Bedrock Converse
+ - إصلاح إصدار pytest إلى 9.0.3 لثغرة الأمان GHSA-6w46-j5rx-g56g
+ - رفع الحد الأدنى لـ OpenAI إلى >=2.0.0
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.2a3
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.2a3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a3)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة واجهة سطر الأوامر للتحقق من النشر
+ - تحسين سهولة استخدام تهيئة LLM
+
+ ### إصلاحات الأخطاء
+ - تجاوز pypdf و uv إلى إصدارات مصححة لـ CVE-2026-40260 و GHSA-pjjw-68hj-v9mw
+ - ترقية requests إلى >=2.33.0 لمعالجة ثغرة ملف مؤقت CVE
+ - الحفاظ على معلمات استدعاء أداة Bedrock من خلال إزالة القيمة الافتراضية الصحيحة
+ - تنظيف مخططات الأدوات لوضع صارم
+ - إصلاح اختبار تسلسل تضمين MemoryRecord
+
+ ### الوثائق
+ - تنظيف لغة A2A الخاصة بالمؤسسات
+ - إضافة وثائق ميزات A2A الخاصة بالمؤسسات
+ - تحديث وثائق A2A الخاصة بالمصادر المفتوحة
+ - تحديث سجل التغييرات والإصدار لـ v1.14.2a2
+
+ ## المساهمون
+
+ @Yanhu007, @greysonlalonde
+
+
+
+
+ ## v1.14.2a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة واجهة مستخدم نصية لنقطة التحقق مع عرض شجري، ودعم التفرع، ومدخلات/مخرجات قابلة للتعديل
+ - إثراء تتبع رموز LLM مع رموز الاستدلال ورموز إنشاء التخزين المؤقت
+ - إضافة معلمة `from_checkpoint` إلى طرق الانطلاق
+ - تضمين `crewai_version` في نقاط التحقق مع إطار عمل الهجرة
+ - إضافة تفرع نقاط التحقق مع تتبع السلالة
+
+ ### إصلاحات الأخطاء
+ - إصلاح توجيه الوضع الصارم إلى مزودي Anthropic وBedrock
+ - تعزيز NL2SQLTool مع وضع القراءة فقط الافتراضي، والتحقق من الاستعلامات، والاستعلامات المعلمة
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.2a1
+
+ ## المساهمون
+
+ @alex-clawd, @github-actions[bot], @greysonlalonde, @lucasgomide
+
+
+
+
+ ## v1.14.2a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a1)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح إصدار حدث flow_finished بعد استئناف HITL
+ - إصلاح إصدار التشفير إلى 46.0.7 لمعالجة CVE-2026-39892
+
+ ### إعادة هيكلة
+ - إعادة هيكلة لاستخدام I18N_DEFAULT المشترك
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.1
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة متصفح TUI لنقاط التفتيش غير المتزامنة
+ - إضافة دالة aclose()/close() ومدير سياق غير متزامن لمخرجات البث
+
+ ### إصلاحات الأخطاء
+ - إصلاح التعبير النمطي لزيادة إصدار pyproject.toml
+ - تنظيف أسماء الأدوات في مرشحات زخرفة الخطاف
+ - إصلاح تسجيل معالجات نقاط التفتيش عند إنشاء CheckpointConfig
+ - رفع إصدار transformers إلى 5.5.0 لحل CVE-2026-1839
+ - إزالة غلاف FilteredStream لـ stdout/stderr
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.1rc1
+
+ ### إعادة الهيكلة
+ - استبدال القائمة المحظورة الثابتة باستبعاد حقل BaseTool الديناميكي في توليد المواصفات
+ - استبدال التعبير النمطي بـ tomlkit في واجهة سطر أوامر أدوات التطوير
+ - استخدام كائن PRINTER المشترك
+ - جعل BaseProvider نموذجاً أساسياً مع مميز نوع المزود
+
+ ## المساهمون
+
+ @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay
+
+
+
+
+ ## v1.14.1rc1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.1rc1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة متصفح TUI لنقطة التحقق غير المتزامنة
+ - إضافة aclose()/close() ومدير سياق غير متزامن لمخرجات البث
+
+ ### إصلاحات الأخطاء
+ - إصلاح زيادة إصدارات pyproject.toml باستخدام التعبيرات العادية
+ - تنظيف أسماء الأدوات في مرشحات ديكور المكونات
+ - زيادة إصدار transformers إلى 5.5.0 لحل CVE-2026-1839
+ - تسجيل معالجات نقطة التحقق عند إنشاء CheckpointConfig
+
+ ### إعادة الهيكلة
+ - استبدال القائمة المحظورة الثابتة باستبعاد حقل BaseTool الديناميكي في توليد المواصفات
+ - استبدال التعبيرات العادية بـ tomlkit في واجهة سطر الأوامر devtools
+ - استخدام كائن PRINTER المشترك
+ - جعل BaseProvider نموذجًا أساسيًا مع مميز نوع المزود
+ - إزالة غلاف stdout/stderr لـ FilteredStream
+ - إزالة flow/config.py غير المستخدمة
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.0
+
+ ## المساهمون
+
+ @greysonlalonde, @iris-clawd, @joaomdmoura
+
+
+
+
+ ## v1.14.0
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.0)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة أوامر CLI لقائمة/معلومات نقاط التحقق
+ - إضافة guardrail_type و name لتمييز التتبع
+ - إضافة SqliteProvider لتخزين نقاط التحقق
+ - إضافة CheckpointConfig للتسجيل التلقائي لنقاط التحقق
+ - تنفيذ تسجيل حالة وقت التشغيل، نظام الأحداث، وإعادة هيكلة المنفذ
+
+ ### إصلاحات الأخطاء
+ - إضافة حماية من SSRF وتجاوز المسار
+ - إضافة التحقق من المسار وعنوان URL لأدوات RAG
+ - استبعاد متجهات التضمين من تسلسل الذاكرة لتوفير الرموز
+ - التأكد من وجود دليل الإخراج قبل الكتابة في قالب التدفق
+ - رفع litellm إلى >=1.83.0 لمعالجة CVE-2026-35030
+ - إزالة حقل فهرسة SEO الذي يتسبب في عرض الصفحة العربية بشكل غير صحيح
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.0
+ - تحديث أدلة البدء السريع والتثبيت لتحسين الوضوح
+ - إضافة قسم مزودي التخزين، تصدير JsonProvider
+ - إضافة دليل علامة AMP التدريبية
+
+ ### إعادة الهيكلة
+ - تنظيف واجهة برمجة تطبيقات نقاط التحقق
+ - إزالة CodeInterpreterTool وإهمال معلمات تنفيذ الكود
+
+ ## المساهمون
+
+ @alex-clawd, @github-actions[bot], @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay, @lucasgomide
+
+
+
+
+ ## v1.14.0a4
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.0a4)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة guardrail_type و name لتمييز الآثار
+ - إضافة SqliteProvider لتخزين نقاط التحقق
+ - إضافة CheckpointConfig للتخزين التلقائي لنقاط التحقق
+ - تنفيذ نقاط التحقق لحالة التشغيل، نظام الأحداث، وإعادة هيكلة المنفذ
+
+ ### إصلاحات الأخطاء
+ - استبعاد متجهات التضمين من تسلسل الذاكرة لتوفير الرموز
+ - رفع litellm إلى >=1.83.0 لمعالجة CVE-2026-35030
+
+ ### الوثائق
+ - تحديث أدلة البدء السريع والتثبيت لتحسين الوضوح
+ - إضافة قسم مقدمي التخزين وتصدير JsonProvider
+
+ ### الأداء
+ - استخدام JSONB لعمود بيانات نقاط التحقق
+
+ ### إعادة الهيكلة
+ - إزالة CodeInterpreterTool وإهمال معلمات تنفيذ الكود
+
+ ## المساهمون
+
+ @alex-clawd, @github-actions[bot], @greysonlalonde, @joaomdmoura, @lorenzejay, @lucasgomide
+
+
+
+
+ ## v1.14.0a3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.0a3)
+
+ ## ما الذي تغير
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.14.0a2
+
+ ## المساهمون
+
+ @joaomdmoura
+
+
+
+
+ ## v1.14.0a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.0a2)
+
+ # ملاحظات الإصدار 1.14.0a2
+
+ ## التعليمات:
+ - ترجم جميع عناوين الأقسام والوصف بشكل طبيعي
+ - احتفظ بتنسيق markdown (##، ###، -، إلخ) كما هو
+ - احتفظ بجميع الأسماء الصحيحة، ومعرفات الشيفرة، وأسماء الفئات، والمصطلحات التقنية دون تغيير
+ (مثل "CrewAI"، "LiteAgent"، "ChromaDB"، "MCP"، "@username")
+ - احتفظ بقسم ## المساهمون وأسماء مستخدمي GitHub كما هي
+ - لا تضف أو تزيل أي محتوى، فقط ترجم
+
+ ## المميزات الجديدة
+ - تمت إضافة دعم لـ "ChromaDB" لتحسين أداء قاعدة البيانات.
+ - تحسينات على "LiteAgent" لزيادة الكفاءة.
+
+ ## الإصلاحات
+ - إصلاح مشكلة تتعلق بـ "MCP" التي كانت تؤدي إلى تعطل التطبيق.
+ - معالجة الأخطاء المتعلقة بواجهة المستخدم في "CrewAI".
+
+ ## المساهمون
+ - @username1
+ - @username2
+ - @username3
+
+
+
+
+ ## v1.13.0
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة نموذج RuntimeState RootModel لتوحيد تسلسل الحالة
+ - تعزيز مستمع الأحداث مع نطاقات جديدة للقياس عن أحداث المهارة والذاكرة
+ - إضافة امتداد A2UI مع دعم v0.8/v0.9، والمخططات، والوثائق
+ - إصدار بيانات استخدام الرموز في حدث LLMCallCompletedEvent
+ - تحديث تلقائي لمستودع اختبار النشر أثناء الإصدار
+ - تحسين مرونة الإصدار المؤسسي وتجربة المستخدم
+
+ ### إصلاحات الأخطاء
+ - إضافة بيانات اعتماد مستودع الأدوات إلى تثبيت crewai
+ - إضافة بيانات اعتماد مستودع الأدوات إلى بناء uv في نشر الأدوات
+ - تمرير بيانات التعريف عبر الإعدادات بدلاً من معلمات الأدوات
+ - معالجة نماذج GPT-5.x التي لا تدعم معلمة API `stop`
+ - إضافة GPT-5 وسلسلة o إلى بادئات الرؤية متعددة الوسائط
+ - مسح ذاكرة التخزين المؤقت uv للحزم التي تم نشرها حديثًا في الإصدار المؤسسي
+ - تحديد lancedb أقل من 0.30.1 لضمان التوافق مع Windows
+ - إصلاح مستويات أذونات RBAC لتتناسب مع خيارات واجهة المستخدم الفعلية
+ - إصلاح عدم الدقة في قدرات الوكيل عبر جميع اللغات
+
+ ### الوثائق
+ - إضافة فيديو توضيحي لمهارات وكيل البرمجة إلى صفحات البدء
+ - إضافة دليل شامل لتكوين SSO
+ - إضافة مصفوفة شاملة لأذونات RBAC ودليل النشر
+ - تحديث سجل التغييرات والإصدار إلى v1.13.0
+
+ ### الأداء
+ - تقليل الحمل الزائد للإطار باستخدام حافلة الأحداث الكسولة، وتخطي التتبع عند تعطيله
+
+ ### إعادة الهيكلة
+ - تحويل Flow إلى Pydantic BaseModel
+ - تحويل فئات LLM إلى Pydantic BaseModel
+ - استبدال InstanceOf[T] بتعليقات نوع عادية
+ - إزالة دليل LLM الخاص بالطرف الثالث غير المستخدم
+
+ ## المساهمون
+
+ @alex-clawd, @dependabot[bot], @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay, @lucasgomide, @thiagomoretto
+
+
+
+
+ ## v1.13.0a7
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a7)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة امتداد A2UI مع دعم v0.8/v0.9، والمخططات، والوثائق
+
+ ### إصلاحات الأخطاء
+ - إصلاح بادئات الرؤية متعددة الأنماط عن طريق إضافة GPT-5 وسلسلة o
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.13.0a6
+
+ ## المساهمون
+
+ @alex-clawd, @greysonlalonde, @joaomdmoura
+
+
+
+
+ ## v1.13.0a6
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a6)
+
+ ## ما الذي تغير
+
+ ### الوثائق
+ - إصلاح مستويات أذونات RBAC لتتوافق مع خيارات واجهة المستخدم الفعلية (#5210)
+ - تحديث سجل التغييرات والإصدار لـ v1.13.0a5 (#5200)
+
+ ### الأداء
+ - تقليل عبء العمل على الإطار من خلال تنفيذ حافلة أحداث كسولة وتجاوز التتبع عند تعطيله (#5187)
+
+ ## المساهمون
+
+ @alex-clawd, @joaomdmoura, @lucasgomide
+
+
+
+
+ ## v1.13.0a5
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a5)
+
+ ## ما الذي تغير
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.13.0a4
+
+ ## المساهمون
+
+ @greysonlalonde, @joaomdmoura
+
+
+
+
+ ## v1.13.0a4
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a4)
+
+ ## ما الذي تغير
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.13.0a3
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.13.0a3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a3)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إصدار بيانات استخدام الرمز في LLMCallCompletedEvent
+ - استخراج ونشر بيانات الأداة إلى AMP
+
+ ### إصلاح الأخطاء
+ - التعامل مع نماذج GPT-5.x التي لا تدعم معلمة API `stop`
+
+ ### الوثائق
+ - إصلاح عدم الدقة في قدرات الوكيل عبر جميع اللغات
+ - إضافة نظرة عامة على قدرات الوكيل وتحسين وثائق المهارات
+ - إضافة دليل شامل لتكوين SSO
+ - تحديث سجل التغييرات والإصدار لـ v1.13.0rc1
+
+ ### إعادة الهيكلة
+ - تحويل Flow إلى Pydantic BaseModel
+ - تحويل فئات LLM إلى Pydantic BaseModel
+ - استبدال InstanceOf[T] بتعليقات نوع عادية
+ - إزالة الطرق غير المستخدمة
+
+ ## المساهمون
+
+ @dependabot[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @lucasgomide, @thiagomoretto
+
+
+
+
+ ## v1.13.0rc1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0rc1)
+
+ ## ما الذي تغير
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.13.0a2
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.13.0a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - تحديث تلقائي لمستودع اختبار النشر أثناء الإصدار
+ - تحسين مرونة إصدار المؤسسات وتجربة المستخدم
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار للإصدار v1.13.0a1
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.13.0a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a1)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح الروابط المعطلة في سير العمل الوثائقي عن طريق تثبيت Node على LTS 22
+ - مسح ذاكرة التخزين المؤقت لـ uv للحزم المنشورة حديثًا في الإصدار المؤسسي
+
+ ### الوثائق
+ - إضافة مصفوفة شاملة لأذونات RBAC ودليل النشر
+ - تحديث سجل التغييرات والإصدار للإصدار v1.12.2
+
+ ## المساهمون
+
+ @greysonlalonde, @iris-clawd, @joaomdmoura
+
+
+
+
+ ## v1.12.2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة مرحلة إصدار المؤسسات إلى إصدار أدوات المطورين
+
+ ### إصلاحات الأخطاء
+ - الحفاظ على قيمة إرجاع الطريقة كإخراج تدفق لـ @human_feedback مع emit
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.12.1
+ - مراجعة سياسة الأمان وتعليمات الإبلاغ
+
+ ## المساهمون
+
+ @alex-clawd, @greysonlalonde, @joaomdmoura, @theCyberTech
+
+
+
+
+ ## v1.12.1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة request_id إلى HumanFeedbackRequestedEvent
+ - إضافة Qdrant Edge كخلفية تخزين لنظام الذاكرة
+ - إضافة أمر docs-check لتحليل التغييرات وتوليد الوثائق مع الترجمات
+ - إضافة دعم اللغة العربية إلى سجل التغييرات وأدوات الإصدار
+ - إضافة ترجمة باللغة العربية الفصحى لجميع الوثائق
+ - إضافة أمر تسجيل الخروج في واجهة سطر الأوامر
+ - إضافة مهارات الوكيل
+ - تنفيذ root_scope تلقائيًا لعزل الذاكرة الهيكلية
+ - تنفيذ مزودين متوافقين مع OpenAI (OpenRouter، DeepSeek، Ollama، vLLM، Cerebras، Dashscope)
+
+ ### إصلاحات الأخطاء
+ - إصلاح بيانات اعتماد غير صحيحة لدفع دفعات التتبع (404)
+ - حل العديد من الأخطاء في نظام تدفق HITL
+ - إصلاح حفظ ذاكرة الوكيل
+ - حل جميع أخطاء mypy الصارمة عبر حزمة crewai
+ - إصلاح استخدام __router_paths__ لطرق المستمع + الموجه في FlowMeta
+ - إصلاح خطأ القيمة عند عدم دعم الملفات
+ - تصحيح صياغة الحجر الصحي لـ litellm في الوثائق
+ - إصلاح جميع أخطاء mypy في crewai-files وإضافة جميع الحزم إلى فحوصات النوع في CI
+ - تثبيت الحد الأعلى لـ litellm على آخر إصدار تم اختباره (1.82.6)
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.12.0
+ - إضافة CONTRIBUTING.md
+ - إضافة دليل لاستخدام CrewAI بدون LiteLLM
+
+ ## المساهمون
+
+ @akaKuruma، @alex-clawd، @greysonlalonde، @iris-clawd، @joaomdmoura، @lorenzejay، @lucasgomide، @nicoferdi96
+
+
+
+
+ ## v1.12.0
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.0)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة واجهة تخزين Qdrant Edge لنظام الذاكرة
+ - إضافة أمر docs-check لتحليل التغييرات وتوليد الوثائق مع الترجمات
+ - إضافة دعم اللغة العربية لسجل التغييرات وأدوات الإصدار
+ - إضافة ترجمة اللغة العربية الفصحى لجميع الوثائق
+ - إضافة أمر تسجيل الخروج في واجهة سطر الأوامر
+ - تنفيذ مهارات الوكيل
+ - تنفيذ نطاق الجذر التلقائي لعزل الذاكرة الهرمية
+ - تنفيذ موفري خدمات متوافقين مع OpenAI (OpenRouter، DeepSeek، Ollama، vLLM، Cerebras، Dashscope)
+
+ ### إصلاح الأخطاء
+ - إصلاح بيانات الاعتماد السيئة لدفع دفعات التتبع (404)
+ - حل العديد من الأخطاء في نظام تدفق HITL
+ - حل أخطاء mypy في crewai-files وإضافة جميع الحزم إلى فحوصات نوع CI
+ - حل جميع أخطاء mypy الصارمة عبر حزمة crewai-tools
+ - حل جميع أخطاء mypy عبر حزمة crewai
+ - إصلاح حفظ الذاكرة في الوكيل
+ - إصلاح استخدام __router_paths__ لطرق المستمع + الموجه في FlowMeta
+ - رفع خطأ القيمة عند عدم دعم الملفات
+ - تصحيح صياغة الحجر الصحي لـ litellm في الوثائق
+ - استخدام فحص None بدلاً من isinstance للذاكرة في تعلم التغذية الراجعة البشرية
+ - تثبيت الحد الأعلى لـ litellm على آخر إصدار تم اختباره (1.82.6)
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.12.0
+ - إضافة CONTRIBUTING.md
+ - إضافة دليل لاستخدام CrewAI بدون LiteLLM
+
+ ### إعادة الهيكلة
+ - إعادة هيكلة لتجنب تكرار تنفيذ المهام المتزامنة / غير المتزامنة وبدء التشغيل في الوكيل
+ - تبسيط الأنابيب الداخلية من litellm (عد الرموز، ردود النداء، اكتشاف الميزات، الأخطاء)
+
+ ## المساهمون
+
+ @akaKuruma، @alex-clawd، @greysonlalonde، @iris-clawd، @joaomdmoura، @lorenzejay، @nicoferdi96
+
+
+
+
+ ## v1.12.0a3
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.0a3)
+
+ ## ما الذي تغير
+
+ ### إصلاحات الأخطاء
+ - إصلاح بيانات الاعتماد الخاطئة لدفع دفعات التتبع (404)
+ - حل العديد من الأخطاء في نظام تدفق HITL
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.12.0a2
+
+ ## المساهمون
+
+ @akaKuruma, @greysonlalonde
+
+
+
+
+ ## v1.12.0a2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.0a2)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة واجهة تخزين Qdrant Edge لنظام الذاكرة
+
+ ### الوثائق
+ - تحديث سجل التغييرات والإصدار لـ v1.12.0a1
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.12.0a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.0a1)
+
+ ## ما الذي تغير
+
+ ### الميزات
+ - إضافة أمر docs-check لتحليل التغييرات وتوليد الوثائق مع الترجمات
+ - إضافة دعم اللغة العربية لسجل التغييرات وأدوات الإصدار
+ - إضافة ترجمة اللغة العربية الفصحى لجميع الوثائق
+ - إضافة مزودي خدمات متوافقين مع OpenAI (OpenRouter، DeepSeek، Ollama، vLLM، Cerebras، Dashscope)
+ - إضافة مهارات الوكيل
+ - إضافة أمر تسجيل الخروج في واجهة سطر الأوامر
+ - تنفيذ نطاق الجذر التلقائي لعزل الذاكرة الهيكلية
+
+ ### إصلاح الأخطاء
+ - إصلاح حفظ ذاكرة الوكيل
+ - حل أخطاء mypy في crewai-files وإضافة جميع الحزم إلى فحوصات نوع CI
+ - حل جميع أخطاء mypy الصارمة عبر حزمة crewai-tools
+ - حل جميع أخطاء mypy عبر حزمة crewai
+ - إصلاح استخدام __router_paths__ لطرق المستمع + الموجه في FlowMeta
+ - تثبيت الحد الأعلى لـ litellm على آخر إصدار تم اختباره (1.82.6)
+ - رفع خطأ القيمة عند عدم دعم الملفات
+ - تصحيح صياغة الحجر الصحي لـ litellm في الوثائق
+
+ ### الوثائق
+ - إضافة CONTRIBUTING.md
+ - إضافة دليل لاستخدام CrewAI بدون LiteLLM
+ - تحديث سجل التغييرات والإصدار لـ v1.11.1
+
+ ### إعادة الهيكلة
+ - إعادة هيكلة لإزالة التكرار في تنفيذ المهام المتزامنة وغير المتزامنة وبدء التشغيل في الوكيل
+ - فصل الأنابيب الداخلية عن litellm (عد الرموز، ردود الفعل، اكتشاف الميزات، الأخطاء)
+
+ ## المساهمون
+
+ @alex-clawd، @greysonlalonde، @iris-clawd، @lorenzejay، @nicoferdi96
+
+
+
+
+ ## v1.11.1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.11.1)
+
+ ## ما تغيّر
+
+ ### الميزات
+ - إضافة مُسلسِل flow_structure() لفحص فئة Flow.
+
+ ### إصلاحات الأخطاء
+ - إصلاح ثغرات أمنية بتحديث pypdf و tinytag و langchain-core.
+ - الحفاظ على تهيئة LLM الكاملة عبر استئناف HITL لمزودي غير OpenAI.
+ - منع اجتياز المسار في FileWriterTool.
+ - إصلاح انهيار lock_store عندما لا تكون حزمة redis مثبتة.
+ - تمرير cache_function من BaseTool إلى CrewStructuredTool.
+
+ ### التوثيق
+ - إضافة دليل نشر الأدوات المخصصة مع الترجمات.
+ - تحديث سجل التغييرات والإصدار لـ v1.11.0.
+ - إضافة توثيق مستمعي الأحداث المفقود.
+
+ ### إعادة الهيكلة
+ - استبدال urllib بـ requests في محمّل PDF.
+ - استبدال حقول callback والنموذج من نوع Any بأنواع قابلة للتسلسل.
+
+ ## المساهمون
+
+ @alex-clawd, @danielfsbarreto, @dependabot[bot], @greysonlalonde, @lorenzejay, @lucasgomide, @mattatcha, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.11.0
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.11.0)
+
+ ## ما تغيّر
+
+ ### التوثيق
+ - تحديث سجل التغييرات والإصدار لـ v1.11.0rc2
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.11.0rc2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.11.0rc2)
+
+ ## ما تغيّر
+
+ ### إصلاحات الأخطاء
+ - تحسين معالجة استجابات LLM والتسلسل.
+ - ترقية الاعتماديات الانتقالية المعرضة للخطر (authlib، PyJWT، snowflake-connector-python).
+ - استبدال `os.system` بـ `subprocess.run` في تثبيت pip بالوضع غير الآمن.
+
+ ### التوثيق
+ - تحديث صفحة أداة Exa Search بتسمية ووصف وخيارات تهيئة محسّنة.
+ - إضافة خوادم MCP المخصصة في دليل الإرشادات.
+ - تحديث توثيق جامعي OTEL.
+ - تحديث توثيق MCP.
+ - تحديث سجل التغييرات والإصدار لـ v1.11.0rc1.
+
+ ## المساهمون
+
+ @10ishq, @greysonlalonde, @joaomdmoura, @lucasgomide, @mattatcha, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.11.0rc1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.11.0rc1)
+
+ ## ما تغيّر
+
+ ### الميزات
+ - إضافة مصادقة رمز Plus API في a2a
+ - تنفيذ نمط التخطيط والتنفيذ
+
+ ### إصلاحات الأخطاء
+ - حل مشكلة هروب صندوق حماية مفسر الكود
+
+ ### التوثيق
+ - تحديث سجل التغييرات والإصدار لـ v1.10.2rc2
+
+ ## المساهمون
+
+ @Copilot, @greysonlalonde, @lorenzejay, @theCyberTech
+
+
+
+
+ ## v1.10.2rc2
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.2rc2)
+
+ ## ما تغيّر
+
+ ### إصلاحات الأخطاء
+ - إزالة الأقفال الحصرية من عمليات التخزين للقراءة فقط
+
+ ### التوثيق
+ - تحديث سجل التغييرات والإصدار لـ v1.10.2rc1
+
+ ## المساهمون
+
+ @greysonlalonde
+
+
+
+
+ ## v1.10.2rc1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.2rc1)
+
+ ## ما تغيّر
+
+ ### الميزات
+ - إضافة أمر الإصدار وتشغيل نشر PyPI
+
+ ### إصلاحات الأخطاء
+ - إصلاح القفل الآمن عبر العمليات والخيوط للإدخال/الإخراج غير المحمي
+ - نشر contextvars عبر جميع حدود الخيوط والمنفذين
+ - نشر ContextVars إلى خيوط المهام غير المتزامنة
+
+ ### التوثيق
+ - تحديث سجل التغييرات والإصدار لـ v1.10.2a1
+
+ ## المساهمون
+
+ @danglies007, @greysonlalonde
+
+
+
+
+ ## v1.10.2a1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.2a1)
+
+ ## ما تغيّر
+
+ ### الميزات
+ - إضافة دعم البحث عن الأدوات وتوفير الرموز وحقن الأدوات المناسبة ديناميكيًا أثناء التنفيذ لـ Anthropic.
+ - تقديم المزيد من أدوات Brave Search.
+ - إنشاء إجراء للإصدارات الليلية.
+
+ ### إصلاحات الأخطاء
+ - إصلاح LockException تحت التنفيذ المتزامن متعدد العمليات.
+ - حل مشكلات تجميع نتائج الأدوات المتوازية في رسالة مستخدم واحدة.
+ - معالجة حلول أدوات MCP والقضاء على جميع الاتصالات المشتركة القابلة للتغيير.
+ - تحديث معالجة معاملات LLM في دالة human_feedback.
+ - إضافة طرق list/dict المفقودة إلى LockedListProxy و LockedDictProxy.
+ - نشر سياق contextvars إلى خيوط استدعاء الأدوات المتوازية.
+ - ترقية اعتمادية gitpython إلى >=3.1.41 لحل ثغرة اجتياز مسار CVE.
+
+ ### إعادة الهيكلة
+ - إعادة هيكلة فئات الذاكرة لتكون قابلة للتسلسل.
+
+ ### التوثيق
+ - تحديث سجل التغييرات والإصدار لـ v1.10.1.
+
+ ## المساهمون
+
+ @akaKuruma, @github-actions[bot], @giulio-leone, @greysonlalonde, @joaomdmoura, @jonathansampson, @lorenzejay, @lucasgomide, @mattatcha
+
+
+
+
+ ## v1.10.1
+
+ [عرض الإصدار على GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.1)
+
+ ## ما تغيّر
+
+ ### الميزات
+ - ترقية Gemini GenAI
+
+ ### إصلاحات الأخطاء
+ - ضبط قيمة مستمع المنفذ لتجنب التكرار
+ - تجميع أجزاء استجابة الدوال المتوازية في كائن Content واحد في Gemini
+ - إظهار مخرجات التفكير من نماذج التفكير في Gemini
+ - تحميل أدوات MCP والمنصة عندما تكون أدوات الوكيل None
+ - دعم بيئات Jupyter مع حلقات أحداث قيد التشغيل في A2A
+ - استخدام معرّف مجهول للتتبعات المؤقتة
+ - تمرير ترويسة plus بشكل مشروط
+ - تخطي تسجيل معالج الإشارة في الخيوط غير الرئيسية لقياس الأداء عن بعد
+ - حقن أخطاء الأدوات كملاحظات وحل تعارضات الأسماء
+ - ترقية pypdf من 4.x إلى 6.7.4 لحل تنبيهات Dependabot
+ - حل تنبيهات أمان Dependabot الحرجة والعالية
+
+ ### التوثيق
+ - تحديث توثيق بث webhook
+ - ضبط لغة التوثيق من AOP إلى AMP
+
+ ### المساهمون
+ @Vidit-Ostwal, @greysonlalonde, @heitorado, @joaomdmoura, @lorenzejay, @lucasgomide, @mplachta
+
+
diff --git a/docs/v1.15.1/ar/concepts/agent-capabilities.mdx b/docs/v1.15.1/ar/concepts/agent-capabilities.mdx
new file mode 100644
index 000000000..f2a1e142c
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/agent-capabilities.mdx
@@ -0,0 +1,147 @@
+---
+title: "قدرات الوكيل"
+description: "فهم الطرق الخمس لتوسيع وكلاء CrewAI: الأدوات، MCP، التطبيقات، المهارات، والمعرفة."
+icon: puzzle-piece
+mode: "wide"
+---
+
+## نظرة عامة
+
+يمكن توسيع وكلاء CrewAI بـ **خمسة أنواع مميزة من القدرات**، كل منها يخدم غرضًا مختلفًا. فهم متى تستخدم كل نوع — وكيف يعملون معًا — هو المفتاح لبناء وكلاء فعّالين.
+
+
+
+ **دوال قابلة للاستدعاء** — تمنح الوكلاء القدرة على اتخاذ إجراءات. البحث على الويب، عمليات الملفات، استدعاءات API، تنفيذ الكود.
+
+
+ **خوادم أدوات عن بُعد** — تربط الوكلاء بخوادم أدوات خارجية عبر Model Context Protocol. نفس تأثير الأدوات، لكن مستضافة خارجيًا.
+
+
+ **تكاملات المنصة** — تربط الوكلاء بتطبيقات SaaS (Gmail، Slack، Jira، Salesforce) عبر منصة CrewAI. تعمل محليًا مع رمز تكامل المنصة.
+
+
+ **خبرة المجال** — تحقن التعليمات والإرشادات والمواد المرجعية في إرشادات الوكلاء. المهارات تخبر الوكلاء *كيف يفكرون*.
+
+
+ **حقائق مُسترجعة** — توفر للوكلاء بيانات من المستندات والملفات وعناوين URL عبر البحث الدلالي (RAG). المعرفة تعطي الوكلاء *ما يحتاجون معرفته*.
+
+
+
+---
+
+## التمييز الأساسي
+
+أهم شيء يجب فهمه: **هذه القدرات تنقسم إلى فئتين**.
+
+### قدرات الإجراء (الأدوات، MCP، التطبيقات)
+
+تمنح الوكلاء القدرة على **فعل أشياء** — استدعاء APIs، قراءة الملفات، البحث على الويب، إرسال رسائل البريد الإلكتروني. عند التنفيذ، تتحول الأنواع الثلاثة إلى نفس التنسيق الداخلي (مثيلات `BaseTool`) وتظهر في قائمة أدوات موحدة يمكن للوكيل استدعاؤها.
+
+```python
+from crewai import Agent
+from crewai_tools import SerperDevTool, FileReadTool
+
+agent = Agent(
+ role="Researcher",
+ goal="Find and compile market data",
+ backstory="Expert market analyst",
+ tools=[SerperDevTool(), FileReadTool()], # أدوات محلية
+ mcps=["https://mcp.example.com/sse"], # أدوات خادم MCP عن بُعد
+ apps=["gmail", "google_sheets"], # تكاملات المنصة
+)
+```
+
+### قدرات السياق (المهارات، المعرفة)
+
+تُعدّل **إرشادات** الوكيل — بحقن الخبرة أو التعليمات أو البيانات المُسترجعة قبل أن يبدأ الوكيل في التفكير. لا تمنح الوكلاء إجراءات جديدة؛ بل تُشكّل كيف يفكر الوكلاء وما هي المعلومات التي يمكنهم الوصول إليها.
+
+```python
+from crewai import Agent
+
+agent = Agent(
+ role="Security Auditor",
+ goal="Audit cloud infrastructure for vulnerabilities",
+ backstory="Expert in cloud security with 10 years of experience",
+ skills=["./skills/security-audit"], # تعليمات المجال
+ knowledge_sources=[pdf_source, url_source], # حقائق مُسترجعة
+)
+```
+
+---
+
+## متى تستخدم ماذا
+
+| تحتاج إلى... | استخدم | مثال |
+| :------------------------------------------------------- | :---------------- | :--------------------------------------- |
+| الوكيل يبحث على الويب | **الأدوات** | `tools=[SerperDevTool()]` |
+| الوكيل يستدعي API عن بُعد عبر MCP | **MCP** | `mcps=["https://api.example.com/sse"]` |
+| الوكيل يرسل بريد إلكتروني عبر Gmail | **التطبيقات** | `apps=["gmail"]` |
+| الوكيل يتبع إجراءات محددة | **المهارات** | `skills=["./skills/code-review"]` |
+| الوكيل يرجع لمستندات الشركة | **المعرفة** | `knowledge_sources=[pdf_source]` |
+| الوكيل يبحث على الويب ويتبع إرشادات المراجعة | **الأدوات + المهارات** | استخدم كليهما معًا |
+
+---
+
+## دمج القدرات
+
+في الممارسة العملية، غالبًا ما يستخدم الوكلاء **أنواعًا متعددة من القدرات معًا**. إليك مثال واقعي:
+
+```python
+from crewai import Agent
+from crewai_tools import SerperDevTool, FileReadTool, CodeInterpreterTool
+
+# وكيل بحث مجهز بالكامل
+researcher = Agent(
+ role="Senior Research Analyst",
+ goal="Produce comprehensive market analysis reports",
+ backstory="Expert analyst with deep industry knowledge",
+
+ # الإجراء: ما يمكن للوكيل فعله
+ tools=[
+ SerperDevTool(), # البحث على الويب
+ FileReadTool(), # قراءة الملفات المحلية
+ CodeInterpreterTool(), # تشغيل كود Python للتحليل
+ ],
+ mcps=["https://data-api.example.com/sse"], # الوصول لـ API بيانات عن بُعد
+ apps=["google_sheets"], # الكتابة في Google Sheets
+
+ # السياق: ما يعرفه الوكيل
+ skills=["./skills/research-methodology"], # كيفية إجراء البحث
+ knowledge_sources=[company_docs], # بيانات خاصة بالشركة
+)
+```
+
+---
+
+## جدول المقارنة
+
+| الميزة | الأدوات | MCP | التطبيقات | المهارات | المعرفة |
+| :--- | :---: | :---: | :---: | :---: | :---: |
+| **يمنح الوكيل إجراءات** | ✅ | ✅ | ✅ | ❌ | ❌ |
+| **يُعدّل الإرشادات** | ❌ | ❌ | ❌ | ✅ | ✅ |
+| **يتطلب كود** | نعم | إعداد فقط | إعداد فقط | Markdown فقط | إعداد فقط |
+| **يعمل محليًا** | نعم | يعتمد | نعم (مع متغير بيئة) | غير متاح | نعم |
+| **يحتاج مفاتيح API** | لكل أداة | لكل خادم | رمز التكامل | لا | المُضمّن فقط |
+| **يُعيَّن على Agent** | `tools=[]` | `mcps=[]` | `apps=[]` | `skills=[]` | `knowledge_sources=[]` |
+| **يُعيَّن على Crew** | ❌ | ❌ | ❌ | `skills=[]` | `knowledge_sources=[]` |
+
+---
+
+## تعمّق أكثر
+
+هل أنت مستعد لمعرفة المزيد عن كل نوع من أنواع القدرات؟
+
+
+
+ إنشاء أدوات مخصصة، استخدام كتالوج OSS مع أكثر من 75 خيارًا، تكوين التخزين المؤقت والتنفيذ غير المتزامن.
+
+
+ الاتصال بخوادم MCP عبر stdio أو SSE أو HTTP. تصفية الأدوات، تكوين المصادقة.
+
+
+ بناء حزم المهارات مع SKILL.md، حقن خبرة المجال، استخدام الكشف التدريجي.
+
+
+ إضافة المعرفة من ملفات PDF وCSV وعناوين URL والمزيد. تكوين المُضمّنات والاسترجاع.
+
+
diff --git a/docs/v1.15.1/ar/concepts/agents.mdx b/docs/v1.15.1/ar/concepts/agents.mdx
new file mode 100644
index 000000000..685320db2
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/agents.mdx
@@ -0,0 +1,383 @@
+---
+title: الوكلاء
+description: دليل تفصيلي حول إنشاء وإدارة الوكلاء ضمن إطار عمل CrewAI.
+icon: robot
+mode: "wide"
+---
+
+## نظرة عامة على الوكيل
+
+في إطار عمل CrewAI، الـ `Agent` هو وحدة مستقلة يمكنها:
+
+- أداء مهام محددة
+- اتخاذ قرارات بناءً على دوره وهدفه
+- استخدام الأدوات لتحقيق الأهداف
+- التواصل والتعاون مع وكلاء آخرين
+- الاحتفاظ بذاكرة التفاعلات
+- تفويض المهام عند السماح بذلك
+
+
+ فكّر في الوكيل كعضو فريق متخصص بمهارات وخبرات ومسؤوليات محددة.
+ على سبيل المثال، قد يتفوق وكيل `Researcher` في جمع وتحليل المعلومات،
+ بينما قد يكون وكيل `Writer` أفضل في إنشاء المحتوى.
+
+
+
+يتضمن CrewAI AMP منشئ وكلاء مرئي يبسّط إنشاء وتهيئة الوكلاء بدون كتابة كود. صمم وكلاءك بصريًا واختبرهم في الوقت الفعلي.
+
+
+
+يُمكّن منشئ الوكلاء المرئي من:
+
+- تهيئة وكلاء بديهية بواجهات نماذج
+- اختبار والتحقق في الوقت الفعلي
+- مكتبة قوالب مع أنواع وكلاء مهيأة مسبقًا
+- تخصيص سهل لخصائص وسلوكيات الوكيل
+
+
+## خصائص الوكيل
+
+| الخاصية | المعامل | النوع | الوصف |
+| :-------------------------------------- | :----------------------- | :------------------------------------ | :------------------------------------------------------------------------------------------------------- |
+| **الدور** | `role` | `str` | يحدد وظيفة الوكيل وخبرته ضمن الطاقم. |
+| **الهدف** | `goal` | `str` | الهدف الفردي الذي يوجه عملية اتخاذ القرار لدى الوكيل. |
+| **الخلفية** | `backstory` | `str` | يوفر سياقًا وشخصية للوكيل، مما يثري التفاعلات. |
+| **LLM** _(اختياري)_ | `llm` | `Union[str, LLM, Any]` | نموذج اللغة الذي يشغّل الوكيل. افتراضيًا النموذج المحدد في `OPENAI_MODEL_NAME` أو "gpt-4". |
+| **الأدوات** _(اختياري)_ | `tools` | `List[BaseTool]` | القدرات أو الوظائف المتاحة للوكيل. افتراضيًا قائمة فارغة. |
+| **LLM استدعاء الدوال** _(اختياري)_ | `function_calling_llm` | `Optional[Any]` | نموذج لغة لاستدعاء الأدوات، يتجاوز LLM الطاقم إذا حُدد. |
+| **الحد الأقصى للتكرارات** _(اختياري)_ | `max_iter` | `int` | الحد الأقصى للتكرارات قبل أن يقدم الوكيل أفضل إجابته. الافتراضي 20. |
+| **الحد الأقصى لـ RPM** _(اختياري)_ | `max_rpm` | `Optional[int]` | الحد الأقصى للطلبات في الدقيقة لتجنب حدود المعدل. |
+| **الحد الأقصى لوقت التنفيذ** _(اختياري)_ | `max_execution_time` | `Optional[int]` | الحد الأقصى للوقت (بالثواني) لتنفيذ المهمة. |
+| **الوضع المفصل** _(اختياري)_ | `verbose` | `bool` | تفعيل سجلات التنفيذ المفصلة للتصحيح. الافتراضي False. |
+| **السماح بالتفويض** _(اختياري)_ | `allow_delegation` | `bool` | السماح للوكيل بتفويض المهام لوكلاء آخرين. الافتراضي False. |
+| **دالة الخطوة** _(اختياري)_ | `step_callback` | `Optional[Any]` | دالة تُستدعى بعد كل خطوة للوكيل، تتجاوز دالة الطاقم. |
+| **التخزين المؤقت** _(اختياري)_ | `cache` | `bool` | تفعيل التخزين المؤقت لاستخدام الأدوات. الافتراضي True. |
+| **قالب النظام** _(اختياري)_ | `system_template` | `Optional[str]` | قالب أمر نظام مخصص للوكيل. |
+| **قالب الأمر** _(اختياري)_ | `prompt_template` | `Optional[str]` | قالب أمر مخصص للوكيل. |
+| **قالب الاستجابة** _(اختياري)_ | `response_template` | `Optional[str]` | قالب استجابة مخصص للوكيل. |
+| **السماح بتنفيذ الكود** _(اختياري)_ | `allow_code_execution` | `Optional[bool]` | تفعيل تنفيذ الكود للوكيل. الافتراضي False. |
+| **الحد الأقصى لإعادة المحاولة** _(اختياري)_ | `max_retry_limit` | `int` | الحد الأقصى لإعادات المحاولة عند حدوث خطأ. الافتراضي 2. |
+| **احترام نافذة السياق** _(اختياري)_ | `respect_context_window` | `bool` | إبقاء الرسائل تحت حجم نافذة السياق عبر التلخيص. الافتراضي True. |
+| **وضع تنفيذ الكود** _(اختياري)_ | `code_execution_mode` | `Literal["safe", "unsafe"]` | وضع تنفيذ الكود: 'safe' (باستخدام Docker) أو 'unsafe' (مباشر). الافتراضي 'safe'. |
+| **متعدد الوسائط** _(اختياري)_ | `multimodal` | `bool` | ما إذا كان الوكيل يدعم القدرات متعددة الوسائط. الافتراضي False. |
+| **حقن التاريخ** _(اختياري)_ | `inject_date` | `bool` | ما إذا كان يتم حقن التاريخ الحالي تلقائيًا في المهام. الافتراضي False. |
+| **تنسيق التاريخ** _(اختياري)_ | `date_format` | `str` | سلسلة تنسيق التاريخ عند تفعيل inject_date. الافتراضي "%Y-%m-%d" (تنسيق ISO). |
+| **الاستدلال** _(اختياري)_ | `reasoning` | `bool` | ما إذا كان يجب على الوكيل التأمل وإنشاء خطة قبل تنفيذ المهمة. الافتراضي False. |
+| **الحد الأقصى لمحاولات الاستدلال** _(اختياري)_ | `max_reasoning_attempts` | `Optional[int]` | الحد الأقصى لمحاولات الاستدلال قبل تنفيذ المهمة. إذا None، سيحاول حتى الاستعداد. |
+| **المُضمّن** _(اختياري)_ | `embedder` | `Optional[Dict[str, Any]]` | تهيئة المُضمّن المستخدم من قبل الوكيل. |
+| **مصادر المعرفة** _(اختياري)_ | `knowledge_sources` | `Optional[List[BaseKnowledgeSource]]` | مصادر المعرفة المتاحة للوكيل. |
+| **استخدام أمر النظام** _(اختياري)_ | `use_system_prompt` | `Optional[bool]` | ما إذا كان يُستخدم أمر النظام (لدعم نموذج o1). الافتراضي True. |
+
+## إنشاء الوكلاء
+
+هناك طريقتان شائعتان لإنشاء الوكلاء في CrewAI: باستخدام **تهيئة JSONC (الموصى بها للـ crews الجديدة)** أو تعريفهم **مباشرة في الكود**.
+
+### تهيئة JSONC (موصى بها)
+
+المشاريع الجديدة التي تُنشأ عبر `crewai create crew ` تستخدم تهيئة JSON-first. يُعرّف كل Agent في `agents/.jsonc`، ويحدد `crew.jsonc` أي Agents تدخل في الـ crew.
+
+```jsonc agents/researcher.jsonc
+{
+ "role": "{topic} Senior Data Researcher",
+ "goal": "Uncover cutting-edge developments in {topic}",
+ "backstory": "You find the most relevant information and present it clearly.",
+ "llm": "openai/gpt-4o",
+ "tools": ["SerperDevTool"],
+ "settings": {
+ "verbose": true,
+ "allow_delegation": false
+ }
+}
+```
+
+استخدم `{placeholder}` داخل `role` أو `goal` أو `backstory`. ضع القيم الافتراضية في `inputs` داخل `crew.jsonc`؛ وسيطلب `crewai run` أي قيم ناقصة. يمكن وضع حقول السلوك مثل `verbose` و `allow_delegation` و `max_iter` و `memory` و `cache` و `planning_config` في المستوى الأعلى أو داخل `settings`.
+
+
+يدعم JSONC التعليقات والفواصل النهائية. إذا وُجد `agents/.jsonc` و `agents/.json` معًا، يستخدم CrewAI ملف JSONC.
+
+
+### تهيئة YAML الكلاسيكية
+
+المشاريع الكلاسيكية التي تُنشأ عبر `crewai create crew --classic` تستخدم `config/agents.yaml` وفئة `@CrewBase` في `crew.py`.
+
+تظل تهيئة YAML مدعومة للمشاريع الحالية المبنية بـ Python/YAML وللفِرق التي تفضل تعريف الوكلاء من خلال فئة `@CrewBase`.
+
+بعد إنشاء مشروع كلاسيكي، انتقل إلى ملف `src//config/agents.yaml` وعدّل القالب ليتوافق مع متطلباتك.
+
+
+ستُستبدل المتغيرات في ملفات YAML (مثل `{topic}`) بقيم من مدخلاتك عند تشغيل الطاقم:
+```python Code
+crew.kickoff(inputs={'topic': 'AI Agents'})
+```
+
+
+إليك مثالًا على كيفية تهيئة الوكلاء باستخدام YAML:
+
+```yaml agents.yaml
+# src//config/agents.yaml
+researcher:
+ role: >
+ {topic} Senior Data Researcher
+ goal: >
+ Uncover cutting-edge developments in {topic}
+ backstory: >
+ You're a seasoned researcher with a knack for uncovering the latest
+ developments in {topic}. Known for your ability to find the most relevant
+ information and present it in a clear and concise manner.
+
+reporting_analyst:
+ role: >
+ {topic} Reporting Analyst
+ goal: >
+ Create detailed reports based on {topic} data analysis and research findings
+ backstory: >
+ You're a meticulous analyst with a keen eye for detail. You're known for
+ your ability to turn complex data into clear and concise reports, making
+ it easy for others to understand and act on the information you provide.
+```
+
+لاستخدام تهيئة YAML في الكود، أنشئ فئة طاقم ترث من `CrewBase`:
+
+```python Code
+# src//crew.py
+from crewai import Agent, Crew, Process
+from crewai.project import CrewBase, agent, crew
+from crewai_tools import SerperDevTool
+
+@CrewBase
+class LatestAiDevelopmentCrew():
+ """LatestAiDevelopment crew"""
+
+ agents_config = "config/agents.yaml"
+
+ @agent
+ def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config['researcher'], # type: ignore[index]
+ verbose=True,
+ tools=[SerperDevTool()]
+ )
+
+ @agent
+ def reporting_analyst(self) -> Agent:
+ return Agent(
+ config=self.agents_config['reporting_analyst'], # type: ignore[index]
+ verbose=True
+ )
+```
+
+
+ يجب أن تتطابق الأسماء المستخدمة في ملفات YAML (`agents.yaml`) مع أسماء
+ الطرق في كود Python.
+
+
+### تعريف مباشر في الكود
+
+يمكنك إنشاء الوكلاء مباشرة في الكود بإنشاء فئة `Agent`. إليك مثالًا شاملًا يوضح جميع المعاملات المتاحة:
+
+```python Code
+from crewai import Agent
+from crewai_tools import SerperDevTool
+
+# إنشاء وكيل بجميع المعاملات المتاحة
+agent = Agent(
+ role="Senior Data Scientist",
+ goal="Analyze and interpret complex datasets to provide actionable insights",
+ backstory="With over 10 years of experience in data science and machine learning, "
+ "you excel at finding patterns in complex datasets.",
+ llm="gpt-4",
+ function_calling_llm=None,
+ verbose=False,
+ allow_delegation=False,
+ max_iter=20,
+ max_rpm=None,
+ max_execution_time=None,
+ max_retry_limit=2,
+ allow_code_execution=False,
+ code_execution_mode="safe",
+ respect_context_window=True,
+ use_system_prompt=True,
+ multimodal=False,
+ inject_date=False,
+ date_format="%Y-%m-%d",
+ reasoning=False,
+ max_reasoning_attempts=None,
+ tools=[SerperDevTool()],
+ knowledge_sources=None,
+ embedder=None,
+ system_template=None,
+ prompt_template=None,
+ response_template=None,
+ step_callback=None,
+)
+```
+
+دعنا نستعرض بعض تركيبات المعاملات الرئيسية لحالات الاستخدام الشائعة:
+
+#### وكيل بحث أساسي
+
+```python Code
+research_agent = Agent(
+ role="Research Analyst",
+ goal="Find and summarize information about specific topics",
+ backstory="You are an experienced researcher with attention to detail",
+ tools=[SerperDevTool()],
+ verbose=True
+)
+```
+
+#### وكيل تطوير الكود
+
+```python Code
+dev_agent = Agent(
+ role="Senior Python Developer",
+ goal="Write and debug Python code",
+ backstory="Expert Python developer with 10 years of experience",
+ allow_code_execution=True,
+ code_execution_mode="safe",
+ max_execution_time=300,
+ max_retry_limit=3
+)
+```
+
+#### وكيل تحليل طويل المدى
+
+```python Code
+analysis_agent = Agent(
+ role="Data Analyst",
+ goal="Perform deep analysis of large datasets",
+ backstory="Specialized in big data analysis and pattern recognition",
+ memory=True,
+ respect_context_window=True,
+ max_rpm=10,
+ function_calling_llm="gpt-4o-mini"
+)
+```
+
+### تفاصيل المعاملات
+
+#### المعاملات الحرجة
+
+- `role` و `goal` و `backstory` مطلوبة وتشكّل سلوك الوكيل
+- `llm` يحدد نموذج اللغة المستخدم (افتراضي: GPT-4 من OpenAI)
+
+#### الذاكرة والسياق
+
+- `memory`: تفعيل للحفاظ على سجل المحادثة
+- `respect_context_window`: يمنع مشاكل حد الرموز
+- `knowledge_sources`: إضافة قواعد معرفة خاصة بالمجال
+
+#### التحكم في التنفيذ
+
+- `max_iter`: الحد الأقصى للمحاولات قبل تقديم أفضل إجابة
+- `max_execution_time`: المهلة بالثواني
+- `max_rpm`: تحديد معدل استدعاءات API
+- `max_retry_limit`: إعادات المحاولة عند الخطأ
+
+#### تنفيذ الكود
+
+
+ `allow_code_execution` و`code_execution_mode` مهجوران. تمت إزالة `CodeInterpreterTool` من `crewai-tools`. استخدم خدمة بيئة معزولة مخصصة مثل [E2B](https://e2b.dev) أو [Modal](https://modal.com) لتنفيذ الكود بأمان.
+
+
+- `allow_code_execution` _(مهجور)_: كان يُمكّن تنفيذ الكود المدمج عبر `CodeInterpreterTool`.
+- `code_execution_mode` _(مهجور)_: كان يتحكم في وضع التنفيذ (`"safe"` لـ Docker، `"unsafe"` للتنفيذ المباشر).
+
+#### الميزات المتقدمة
+
+- `multimodal`: تفعيل القدرات متعددة الوسائط لمعالجة النص والمحتوى المرئي
+- `reasoning`: تمكين الوكيل من التأمل وإنشاء خطط قبل تنفيذ المهام
+- `inject_date`: حقن التاريخ الحالي تلقائيًا في أوصاف المهام
+
+#### القوالب
+
+- `system_template`: يحدد السلوك الأساسي للوكيل
+- `prompt_template`: ينظم تنسيق الإدخال
+- `response_template`: ينسّق استجابات الوكيل
+
+
+ عند استخدام القوالب المخصصة، تأكد من تعريف كل من `system_template` و
+ `prompt_template`. `response_template` اختياري لكن يُوصى به
+ لتنسيق مخرجات متسق.
+
+
+## أدوات الوكيل
+
+يمكن تجهيز الوكلاء بأدوات متنوعة لتعزيز قدراتهم. يدعم CrewAI أدوات من:
+
+- [مجموعة أدوات CrewAI](https://github.com/joaomdmoura/crewai-tools)
+- [أدوات LangChain](https://python.langchain.com/docs/integrations/tools)
+
+إليك كيفية إضافة أدوات لوكيل:
+
+```python Code
+from crewai import Agent
+from crewai_tools import SerperDevTool, WikipediaTools
+
+# إنشاء الأدوات
+search_tool = SerperDevTool()
+wiki_tool = WikipediaTools()
+
+# إضافة أدوات للوكيل
+researcher = Agent(
+ role="AI Technology Researcher",
+ goal="Research the latest AI developments",
+ tools=[search_tool, wiki_tool],
+ verbose=True
+)
+```
+
+## التفاعل المباشر مع الوكيل عبر `kickoff()`
+
+يمكن استخدام الوكلاء مباشرة بدون المرور بمهمة أو سير عمل طاقم باستخدام طريقة `kickoff()`. يوفر هذا طريقة أبسط للتفاعل مع وكيل عندما لا تحتاج إلى إمكانيات تنسيق الطاقم الكاملة.
+
+```python Code
+from crewai import Agent
+from crewai_tools import SerperDevTool
+
+# إنشاء وكيل
+researcher = Agent(
+ role="AI Technology Researcher",
+ goal="Research the latest AI developments",
+ tools=[SerperDevTool()],
+ verbose=True
+)
+
+# استخدام kickoff() للتفاعل مباشرة مع الوكيل
+result = researcher.kickoff("What are the latest developments in language models?")
+
+# الوصول إلى الاستجابة الخام
+print(result.raw)
+```
+
+## اعتبارات مهمة وأفضل الممارسات
+
+### الأمان وتنفيذ الكود
+
+
+ `allow_code_execution` و`code_execution_mode` مهجوران وتمت إزالة `CodeInterpreterTool`. استخدم خدمة بيئة معزولة مخصصة مثل [E2B](https://e2b.dev) أو [Modal](https://modal.com) لتنفيذ الكود بأمان.
+
+
+### تحسين الأداء
+
+- استخدم `respect_context_window: true` لمنع مشاكل حد الرموز
+- عيّن `max_rpm` مناسبًا لتجنب تحديد المعدل
+- فعّل `cache: true` لتحسين الأداء للمهام المتكررة
+- اضبط `max_iter` و `max_retry_limit` بناءً على تعقيد المهمة
+
+### إدارة الذاكرة والسياق
+
+- استفد من `knowledge_sources` للمعلومات الخاصة بالمجال
+- هيّئ `embedder` عند استخدام نماذج تضمين مخصصة
+- استخدم القوالب المخصصة للتحكم الدقيق في سلوك الوكيل
+
+### التعاون بين الوكلاء
+
+- فعّل `allow_delegation: true` عندما يحتاج الوكلاء للعمل معًا
+- استخدم `step_callback` لمراقبة وتسجيل تفاعلات الوكلاء
+- فكّر في استخدام نماذج LLM مختلفة لأغراض مختلفة
+
+### توافق النموذج
+
+- عيّن `use_system_prompt: false` للنماذج القديمة التي لا تدعم رسائل النظام
+- تأكد من أن `llm` المختار يدعم الميزات التي تحتاجها
diff --git a/docs/v1.15.1/ar/concepts/checkpointing.mdx b/docs/v1.15.1/ar/concepts/checkpointing.mdx
new file mode 100644
index 000000000..7cb52ece8
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/checkpointing.mdx
@@ -0,0 +1,423 @@
+---
+title: Checkpointing
+description: حفظ حالة التنفيذ تلقائيا حتى تتمكن الطواقم والتدفقات والوكلاء من الاستئناف بعد الفشل.
+icon: floppy-disk
+mode: "wide"
+---
+
+الـ Checkpointing يحفظ لقطة من حالة التنفيذ أثناء التشغيل بحيث يمكن لطاقم أو تدفق أو وكيل الاستئناف بعد الفشل أو التفرع إلى فرع بديل.
+
+
+
+ كيف يعمل الـ Checkpointing: الأحداث والتخزين والوراثة.
+
+
+ دليل 5 دقائق: تشغيل، إيقاف، استئناف.
+
+
+ وصفات مركزة على المهام لسير العمل الشائع.
+
+
+ `CheckpointConfig` والأحداث والمزودات وسطر الأوامر.
+
+
+
+## الشرح
+
+### ما هي نقطة الحفظ
+
+تلتقط نقطة الحفظ كل ما يحتاجه CrewAI لإعادة إنشاء تشغيل أثناء سيره: الحالة الكاملة للطاقم أو التدفق أو الوكيل — التكوين، وذاكرة الوكلاء ومصادر المعرفة، وتقدم المهام، والمخرجات الوسيطة، والحالة الداخلية والسمات — إلى جانب مدخلات الـ kickoff، وسجل الأحداث حتى تلك النقطة، ومعرف نسب يربط نقطة الحفظ بالتشغيل الذي جاءت منه.
+
+الاستعادة تعيد بناء تلك الحالة وتستمر. تتخطى المهام المكتملة، وتعاد ترطيب الذاكرة والمعرفة، ويعمل العمل التابع على نفس المخرجات التي أنتجها التشغيل الأصلي. التفرع يجري نفس الاستعادة تحت نسب جديد، بحيث يكتب الفرع الجديد والتشغيل الأصلي نقاط الحفظ جنبا إلى جنب دون أن يطمس أحدهما الآخر.
+
+### متى تكتب نقاط الحفظ
+
+الـ Checkpointing مدفوع بالأحداث. يشترك وقت التشغيل في الأحداث التي تحددها عبر `on_events` ويكتب نقطة حفظ عند إطلاق أحدها. الافتراضي `task_completed` ينتج نقطة حفظ لكل مهمة منتهية — توازن معقول بين الدقة واستخدام القرص. الأحداث عالية التردد مثل `llm_call_completed` متاحة للاستعادة الدقيقة لكنها تكتب ملفات أكثر بكثير.
+
+### التخزين
+
+يتضمن CrewAI مزودين:
+
+- `JsonProvider` يكتب ملفا لكل نقطة حفظ. قابل للقراءة وسهل التفقد.
+- `SqliteProvider` يكتب إلى قاعدة بيانات SQLite واحدة. أفضل لنقاط الحفظ عالية التردد.
+
+كلاهما يحذف أقدم نقاط الحفظ عند تحديد `max_checkpoints`.
+
+
+كتابة نقاط الحفظ بأفضل جهد. فشل نقطة حفظ يسجل لكنه لا يقاطع التشغيل.
+
+
+### نموذج الوراثة
+
+`Crew` و`Flow` و`Agent` كلها تقبل وسيط `checkpoint`. يرث الأبناء من الأب ما لم يحددوا قيمتهم الخاصة أو يمرروا `False` للانسحاب. فعل الـ Checkpointing مرة واحدة على الطاقم وتشارك كل الوكلاء، أو استبعد وكيلا واحدا بشكل انتقائي.
+
+## درس تطبيقي: استئناف طاقم فاشل
+
+هذا الدليل يستغرق حوالي 5 دقائق. ستشغل طاقما بمهمتين، توقفه في المنتصف، ثم تستأنف من نقطة الحفظ المحفوظة.
+
+
+
+ ```python
+ from crewai import Agent, Crew, Task
+
+ researcher = Agent(role="Researcher", goal="Research", backstory="Expert")
+ writer = Agent(role="Writer", goal="Write", backstory="Expert")
+
+ crew = Crew(
+ agents=[researcher, writer],
+ tasks=[
+ Task(description="Research AI trends", agent=researcher, expected_output="bullets"),
+ Task(description="Write a summary", agent=writer, expected_output="paragraph"),
+ ],
+ checkpoint=True,
+ )
+ ```
+
+
+ ```python
+ result = crew.kickoff()
+ ```
+
+ اضغط `Ctrl+C` بعد انتهاء المهمة الأولى. في `./.checkpoints/`، الملف بصيغة `_.json` هو نقطة الحفظ.
+
+
+ ```python
+ from crewai import CheckpointConfig
+
+ result = crew.kickoff(
+ from_checkpoint=CheckpointConfig(
+ restore_from="./.checkpoints/_.json",
+ ),
+ )
+ ```
+
+ يتم تخطي مهمة البحث، ويعمل الكاتب على مخرجات البحث المحفوظة، وينتهي الطاقم.
+
+
+
+## ادلة عملية
+
+
+
+ ```python
+ crew = Crew(agents=[...], tasks=[...], checkpoint=True)
+ ```
+
+ يكتب إلى `./.checkpoints/` عند كل `task_completed`.
+
+
+
+ ```python
+ from crewai import Crew, CheckpointConfig
+
+ crew = Crew(
+ agents=[...],
+ tasks=[...],
+ checkpoint=CheckpointConfig(
+ location="./my_checkpoints",
+ on_events=["task_completed", "crew_kickoff_completed"],
+ max_checkpoints=5,
+ ),
+ )
+ ```
+
+
+
+
+ ```python JsonProvider
+ from crewai import Crew, CheckpointConfig
+ from crewai.state import JsonProvider
+
+ crew = Crew(
+ agents=[...],
+ tasks=[...],
+ checkpoint=CheckpointConfig(
+ location="./my_checkpoints",
+ provider=JsonProvider(),
+ max_checkpoints=5,
+ ),
+ )
+ ```
+ ```python SqliteProvider
+ from crewai import Crew, CheckpointConfig
+ from crewai.state import SqliteProvider
+
+ crew = Crew(
+ agents=[...],
+ tasks=[...],
+ checkpoint=CheckpointConfig(
+ location="./.checkpoints.db",
+ provider=SqliteProvider(),
+ max_checkpoints=50,
+ ),
+ )
+ ```
+
+
+
+ SQLite يفعل وضع journal WAL للقراءات المتزامنة. يفضل لنقاط الحفظ عالية التردد.
+
+
+
+
+ ```python
+ crew = Crew(
+ agents=[
+ Agent(role="Researcher", ...),
+ Agent(role="Writer", ..., checkpoint=False),
+ ],
+ tasks=[...],
+ checkpoint=True,
+ )
+ ```
+
+
+
+ `fork()` يستعيد نقطة حفظ تحت نسب جديد بحيث لا يتصادم التشغيل الجديد مع الأصلي.
+
+ ```python
+ config = CheckpointConfig(restore_from="./my_checkpoints/.json")
+ crew = Crew.fork(config, branch="experiment-a")
+ result = crew.kickoff(inputs={"strategy": "aggressive"})
+ ```
+
+ تسمية `branch` اختيارية؛ يتم إنشاء واحدة إذا أغفلت.
+
+
+
+
+
+ ```python
+ crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, write_task, review_task],
+ checkpoint=CheckpointConfig(location="./crew_cp"),
+ )
+ ```
+
+ المشغل الافتراضي: `task_completed`.
+
+
+ ```python
+ from crewai.flow.flow import Flow, start, listen
+ from crewai import CheckpointConfig
+
+ class MyFlow(Flow):
+ @start()
+ def step_one(self):
+ return "data"
+
+ @listen(step_one)
+ def step_two(self, data):
+ return process(data)
+
+ flow = MyFlow(
+ checkpoint=CheckpointConfig(
+ location="./flow_cp",
+ on_events=["method_execution_finished"],
+ ),
+ )
+ result = flow.kickoff()
+ ```
+
+
+ ```python
+ agent = Agent(
+ role="Researcher",
+ goal="Research topics",
+ backstory="Expert researcher",
+ checkpoint=CheckpointConfig(
+ location="./agent_cp",
+ on_events=["lite_agent_execution_completed"],
+ ),
+ )
+ result = agent.kickoff(messages=[{"role": "user", "content": "Research AI trends"}])
+ ```
+
+
+
+
+
+ سجل معالجا على أي حدث واستدع `state.checkpoint()`.
+
+
+ ```python Sync
+ from __future__ import annotations
+
+ from typing import TYPE_CHECKING, Any
+
+ from crewai.events.event_bus import crewai_event_bus
+ from crewai.events.types.llm_events import LLMCallCompletedEvent
+
+ if TYPE_CHECKING:
+ from crewai.state.runtime import RuntimeState
+
+
+ @crewai_event_bus.on(LLMCallCompletedEvent)
+ def on_llm_done(source: Any, event: LLMCallCompletedEvent, state: RuntimeState) -> None:
+ path = state.checkpoint("./my_checkpoints")
+ print(f"تم حفظ نقطة الحفظ: {path}")
+ ```
+ ```python Async
+ from __future__ import annotations
+
+ from typing import TYPE_CHECKING, Any
+
+ from crewai.events.event_bus import crewai_event_bus
+ from crewai.events.types.llm_events import LLMCallCompletedEvent
+
+ if TYPE_CHECKING:
+ from crewai.state.runtime import RuntimeState
+
+
+ @crewai_event_bus.on(LLMCallCompletedEvent)
+ async def on_llm_done_async(source: Any, event: LLMCallCompletedEvent, state: RuntimeState) -> None:
+ path = await state.acheckpoint("./my_checkpoints")
+ print(f"تم حفظ نقطة الحفظ: {path}")
+ ```
+
+
+ يتم تمرير وسيط `state` تلقائيا عندما يقبل المعالج ثلاثة معاملات. راجع [Event Listeners](/ar/concepts/event-listener) لقائمة الأحداث الكاملة.
+
+
+
+ ```bash
+ crewai checkpoint
+ crewai checkpoint --location ./my_checkpoints
+ crewai checkpoint --location ./.checkpoints.db
+ ```
+
+
+
+
+
+ اللوحة اليسرى تجمع نقاط الحفظ حسب الفرع؛ التفرعات تتداخل تحت أبيها. اختيار نقطة حفظ يفتح لوحة التفاصيل مع بياناتها الوصفية وحالة الكيان وتقدم المهام. **Resume** يكمل التشغيل؛ **Fork** يبدأ فرعا جديدا.
+
+
+
+
+
+ لوحة التفاصيل تعرض منطقتين قابلتين للتحرير:
+
+ - **Inputs** — مدخلات الـ kickoff الأصلية، معبأة مسبقا وقابلة للتحرير.
+
+
+
+
+
+ - **مخرجات المهام** — مخرجات المهام المكتملة. تحرير مخرج والضغط على **Fork** يبطل المهام التابعة لتعاد بالسياق المعدل.
+
+
+
+
+
+
+
+
+
+
+ مفيد لاستكشاف "ماذا لو": تفرع، عدل، راقب.
+
+
+
+
+ ```bash
+ crewai checkpoint list ./my_checkpoints
+ crewai checkpoint info ./my_checkpoints/.json
+ crewai checkpoint info ./.checkpoints.db
+ ```
+
+
+
+## المرجع
+
+### `CheckpointConfig`
+
+
+ وجهة التخزين. مجلد لـ `JsonProvider`، مسار ملف قاعدة بيانات لـ `SqliteProvider`.
+
+
+
+ أنواع الأحداث التي تطلق نقطة حفظ. `CheckpointEventType` هو `Literal` — مدقق الأنواع يكمل تلقائيا ويرفض القيم غير المدعومة. راجع [أنواع الأحداث](#أنواع-الأحداث) للقائمة الكاملة.
+
+
+
+ واجهة التخزين. `JsonProvider` أو `SqliteProvider`.
+
+
+
+ الحد الاقصى لنقاط الحفظ المحتفظ بها. الأقدم تحذف بعد كل كتابة.
+
+
+
+ نقطة الحفظ المراد استعادتها عند تمريرها عبر `from_checkpoint`.
+
+
+### قيم حقل `checkpoint`
+
+مقبولة في `Crew` و`Flow` و`Agent`.
+
+
+ يرث من الأب.
+
+
+
+ تفعيل بالإعدادات الافتراضية.
+
+
+
+ انسحاب صريح. يوقف الوراثة.
+
+
+
+ إعدادات مخصصة.
+
+
+### أنواع الأحداث
+
+يقبل `on_events` أي مجموعة من قيم `CheckpointEventType`. الافتراضي `["task_completed"]` يكتب نقطة حفظ لكل مهمة منتهية، و`["*"]` يطابق جميع الأحداث.
+
+
+`["*"]` والأحداث عالية التردد مثل `llm_call_completed` تكتب نقاط حفظ كثيرة وقد تضر بالاداء. استخدمها مع `max_checkpoints`.
+
+
+
+
+- **Task** — `task_started`, `task_completed`, `task_failed`, `task_evaluation`
+- **Crew** — `crew_kickoff_started`, `crew_kickoff_completed`, `crew_kickoff_failed`, `crew_train_started`, `crew_train_completed`, `crew_train_failed`, `crew_test_started`, `crew_test_completed`, `crew_test_failed`, `crew_test_result`
+- **Agent** — `agent_execution_started`, `agent_execution_completed`, `agent_execution_error`, `lite_agent_execution_started`, `lite_agent_execution_completed`, `lite_agent_execution_error`, `agent_evaluation_started`, `agent_evaluation_completed`, `agent_evaluation_failed`
+- **Flow** — `flow_created`, `flow_started`, `flow_finished`, `flow_paused`, `method_execution_started`, `method_execution_finished`, `method_execution_failed`, `method_execution_paused`, `human_feedback_requested`, `human_feedback_received`, `flow_input_requested`, `flow_input_received`
+- **LLM** — `llm_call_started`, `llm_call_completed`, `llm_call_failed`, `llm_stream_chunk`, `llm_thinking_chunk`
+- **LLM Guardrail** — `llm_guardrail_started`, `llm_guardrail_completed`, `llm_guardrail_failed`
+- **Tool** — `tool_usage_started`, `tool_usage_finished`, `tool_usage_error`, `tool_validate_input_error`, `tool_selection_error`, `tool_execution_error`
+- **Memory** — `memory_save_started`, `memory_save_completed`, `memory_save_failed`, `memory_query_started`, `memory_query_completed`, `memory_query_failed`, `memory_retrieval_started`, `memory_retrieval_completed`, `memory_retrieval_failed`
+- **Knowledge** — `knowledge_search_query_started`, `knowledge_search_query_completed`, `knowledge_query_started`, `knowledge_query_completed`, `knowledge_query_failed`, `knowledge_search_query_failed`
+- **Reasoning** — `agent_reasoning_started`, `agent_reasoning_completed`, `agent_reasoning_failed`
+- **MCP** — `mcp_connection_started`, `mcp_connection_completed`, `mcp_connection_failed`, `mcp_tool_execution_started`, `mcp_tool_execution_completed`, `mcp_tool_execution_failed`, `mcp_config_fetch_failed`
+- **Observation** — `step_observation_started`, `step_observation_completed`, `step_observation_failed`, `plan_refinement`, `plan_replan_triggered`, `goal_achieved_early`
+- **Skill** — `skill_discovery_started`, `skill_discovery_completed`, `skill_loaded`, `skill_activated`, `skill_load_failed`
+- **Logging** — `agent_logs_started`, `agent_logs_execution`
+- **A2A** — `a2a_delegation_started`, `a2a_delegation_completed`, `a2a_conversation_started`, `a2a_conversation_completed`, `a2a_message_sent`, `a2a_response_received`, `a2a_polling_started`, `a2a_polling_status`, `a2a_push_notification_registered`, `a2a_push_notification_received`, `a2a_push_notification_sent`, `a2a_push_notification_timeout`, `a2a_streaming_started`, `a2a_streaming_chunk`, `a2a_agent_card_fetched`, `a2a_authentication_failed`, `a2a_artifact_received`, `a2a_connection_error`, `a2a_server_task_started`, `a2a_server_task_completed`, `a2a_server_task_canceled`, `a2a_server_task_failed`, `a2a_parallel_delegation_started`, `a2a_parallel_delegation_completed`, `a2a_transport_negotiated`, `a2a_content_type_negotiated`, `a2a_context_created`, `a2a_context_expired`, `a2a_context_idle`, `a2a_context_completed`, `a2a_context_pruned`
+- **إشارات النظام** — `SIGTERM`, `SIGINT`, `SIGHUP`, `SIGTSTP`, `SIGCONT`
+- **حرف بدل** — `"*"` يطابق جميع الأحداث.
+
+
+
+### مزودات التخزين
+
+
+ ملف واحد لكل نقطة حفظ بصيغة `_.json` داخل `location`.
+
+
+
+ ملف قاعدة بيانات واحد في `location` مع journaling WAL.
+
+
+### سطر الأوامر
+
+| الامر | الغرض |
+|:------|:------|
+| `crewai checkpoint` | تشغيل TUI؛ كشف التخزين تلقائيا. |
+| `crewai checkpoint --location ` | تشغيل TUI على موقع محدد. |
+| `crewai checkpoint list ` | سرد نقاط الحفظ. |
+| `crewai checkpoint info ` | تفقد ملف نقطة حفظ أو آخر مدخل في قاعدة بيانات SQLite. |
diff --git a/docs/v1.15.1/ar/concepts/cli.mdx b/docs/v1.15.1/ar/concepts/cli.mdx
new file mode 100644
index 000000000..e89829eb9
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/cli.mdx
@@ -0,0 +1,302 @@
+---
+title: واجهة سطر الأوامر
+description: تعرّف على كيفية استخدام واجهة سطر أوامر CrewAI للتفاعل مع CrewAI.
+icon: terminal
+mode: "wide"
+---
+
+
+ منذ الإصدار 0.140.0، بدأ CrewAI AMP عملية نقل مزود تسجيل الدخول.
+ لذلك، تم تحديث تدفق المصادقة عبر CLI. المستخدمون الذين يسجلون الدخول
+ باستخدام Google، أو الذين أنشأوا حساباتهم بعد 3 يوليو 2025 لن يتمكنوا
+ من تسجيل الدخول مع الإصدارات القديمة من مكتبة `crewai`.
+
+
+## نظرة عامة
+
+توفر واجهة سطر أوامر CrewAI مجموعة من الأوامر للتفاعل مع CrewAI، مما يتيح لك إنشاء وتدريب وتشغيل وإدارة الأطقم والتدفقات.
+
+## التثبيت
+
+لاستخدام واجهة سطر أوامر CrewAI، تأكد من تثبيت CrewAI:
+
+```shell Terminal
+pip install crewai
+```
+
+## الاستخدام الأساسي
+
+الهيكل الأساسي لأمر CrewAI CLI هو:
+
+```shell Terminal
+crewai [COMMAND] [OPTIONS] [ARGUMENTS]
+```
+
+## الأوامر المتاحة
+
+### 1. إنشاء
+
+إنشاء طاقم أو تدفق جديد.
+
+```shell Terminal
+crewai create [OPTIONS] TYPE NAME
+```
+
+- `TYPE`: اختر بين "crew" أو "flow"
+- `NAME`: اسم الطاقم أو التدفق
+
+مثال:
+
+```shell Terminal
+crewai create crew my_new_crew
+crewai create flow my_new_flow
+```
+
+افتراضيًا، ينشئ `crewai create crew` مشروعًا JSON-first يحتوي على `crew.jsonc` و `agents/*.jsonc`. استخدم `crewai create crew my_new_crew --classic` فقط إذا أردت البنية القديمة Python/YAML مع `crew.py` و `config/agents.yaml` و `config/tasks.yaml`.
+
+### 2. الإصدار
+
+عرض الإصدار المثبت من CrewAI.
+
+```shell Terminal
+crewai version [OPTIONS]
+```
+
+- `--tools`: (اختياري) عرض الإصدار المثبت من أدوات CrewAI
+
+### 3. التدريب
+
+تدريب الطاقم لعدد محدد من التكرارات.
+
+```shell Terminal
+crewai train [OPTIONS]
+```
+
+- `-n, --n_iterations INTEGER`: عدد تكرارات التدريب (افتراضي: 5)
+- `-f, --filename TEXT`: مسار ملف مخصص للتدريب (افتراضي: "trained_agents_data.pkl")
+
+### 4. الإعادة
+
+إعادة تنفيذ الطاقم من مهمة محددة.
+
+```shell Terminal
+crewai replay [OPTIONS]
+```
+
+- `-t, --task_id TEXT`: إعادة تنفيذ الطاقم من معرّف المهمة هذا، بما في ذلك جميع المهام اللاحقة
+
+### 5. سجل مخرجات المهام
+
+استرجاع أحدث مخرجات مهام crew.kickoff().
+
+```shell Terminal
+crewai log-tasks-outputs
+```
+
+### 6. إعادة تعيين الذاكرة
+
+إعادة تعيين ذاكرة الطاقم (طويلة، قصيرة، الكيانات، أحدث مخرجات التشغيل).
+
+```shell Terminal
+crewai reset-memories [OPTIONS]
+```
+
+- `-l, --long`: إعادة تعيين الذاكرة طويلة المدى
+- `-s, --short`: إعادة تعيين الذاكرة قصيرة المدى
+- `-e, --entities`: إعادة تعيين ذاكرة الكيانات
+- `-k, --kickoff-outputs`: إعادة تعيين أحدث مخرجات التشغيل
+- `-kn, --knowledge`: إعادة تعيين تخزين المعرفة
+- `-akn, --agent-knowledge`: إعادة تعيين تخزين معرفة الوكيل
+- `-a, --all`: إعادة تعيين جميع الذاكرات
+
+### 7. الاختبار
+
+اختبار الطاقم وتقييم النتائج.
+
+```shell Terminal
+crewai test [OPTIONS]
+```
+
+- `-n, --n_iterations INTEGER`: عدد تكرارات الاختبار (افتراضي: 3)
+- `-m, --model TEXT`: نموذج LLM لتشغيل الاختبارات (افتراضي: "gpt-4o-mini")
+
+### 8. التشغيل
+
+تشغيل الطاقم أو التدفق.
+
+```shell Terminal
+crewai run
+```
+
+
+ بدءًا من الإصدار 0.103.0، يمكن استخدام أمر `crewai run` لتشغيل
+ كل من الأطقم القياسية والتدفقات. للتدفقات، يكتشف تلقائيًا النوع
+ من pyproject.toml ويشغّل الأمر المناسب. هذه هي الطريقة الموصى بها
+ لتشغيل كل من الأطقم والتدفقات.
+
+
+### 9. الدردشة
+
+بدءًا من الإصدار `0.98.0`، عند تشغيل أمر `crewai chat`، تبدأ جلسة تفاعلية مع طاقمك. سيرشدك المساعد الذكي بطلب المدخلات اللازمة لتنفيذ الطاقم. بمجرد توفير جميع المدخلات، سينفذ الطاقم مهامه.
+
+```shell Terminal
+crewai chat
+```
+
+
+مهم: عيّن خاصية `chat_llm` في تعريف الـ crew لتفعيل هذا الأمر.
+
+للـ crews بنمط JSON-first، أضفها إلى `crew.jsonc`:
+
+```jsonc
+{
+ "name": "My Crew",
+ "agents": ["researcher"],
+ "tasks": [],
+ "chat_llm": "openai/gpt-4o"
+}
+```
+
+للـ crews الكلاسيكية Python/YAML، عيّنها في `crew.py`:
+
+```python
+@crew
+def crew(self) -> Crew:
+ return Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ verbose=True,
+ chat_llm="gpt-4o",
+ )
+```
+
+
+### 10. النشر
+
+نشر الطاقم أو التدفق إلى [CrewAI AMP](https://app.crewai.com).
+
+- **المصادقة**: تحتاج لتكون مصادقًا للنشر إلى CrewAI AMP.
+
+ ```shell Terminal
+ crewai login
+ ```
+
+- **إنشاء نشر**:
+ ```shell Terminal
+ crewai deploy create
+ ```
+
+- **نشر الطاقم**:
+ ```shell Terminal
+ crewai deploy push
+ ```
+
+- **حالة النشر**:
+ ```shell Terminal
+ crewai deploy status
+ ```
+
+- **سجلات النشر**:
+ ```shell Terminal
+ crewai deploy logs
+ ```
+
+- **عرض النشرات**:
+ ```shell Terminal
+ crewai deploy list
+ ```
+
+- **حذف النشر**:
+ ```shell Terminal
+ crewai deploy remove
+ ```
+
+### 11. إدارة المؤسسة
+
+إدارة مؤسسات CrewAI AMP.
+
+```shell Terminal
+crewai org [COMMAND] [OPTIONS]
+```
+
+- `list`: عرض جميع المؤسسات
+- `current`: عرض المؤسسة النشطة حاليًا
+- `switch`: التبديل إلى مؤسسة محددة
+
+### 12. تسجيل الدخول
+
+المصادقة مع CrewAI AMP باستخدام تدفق رمز الجهاز الآمن.
+
+```shell Terminal
+crewai login
+```
+
+### 13. إدارة التهيئة
+
+إدارة إعدادات تهيئة CLI لـ CrewAI.
+
+```shell Terminal
+crewai config [COMMAND] [OPTIONS]
+```
+
+- `list`: عرض جميع معاملات التهيئة
+- `set`: تعيين معامل تهيئة
+- `reset`: إعادة تعيين جميع المعاملات إلى القيم الافتراضية
+
+### 14. إدارة التتبع
+
+إدارة تفضيلات جمع التتبع لعمليات الطاقم والتدفق.
+
+```shell Terminal
+crewai traces [COMMAND]
+```
+
+- `enable`: تفعيل جمع التتبع
+- `disable`: تعطيل جمع التتبع
+- `status`: عرض حالة جمع التتبع الحالية
+
+#### كيف يعمل التتبع
+
+يتم التحكم في جمع التتبع بفحص ثلاثة إعدادات بترتيب الأولوية:
+
+1. **علامة صريحة في الكود** (الأولوية الأعلى):
+ ```python
+ crew = Crew(agents=[...], tasks=[...], tracing=True) # تفعيل دائمًا
+ crew = Crew(agents=[...], tasks=[...], tracing=False) # تعطيل دائمًا
+ crew = Crew(agents=[...], tasks=[...]) # فحص الأولويات الأدنى
+ ```
+
+2. **متغير البيئة** (الأولوية الثانية):
+ ```env
+ CREWAI_TRACING_ENABLED=true
+ ```
+
+3. **تفضيل المستخدم** (الأولوية الأدنى):
+ ```shell Terminal
+ crewai traces enable
+ ```
+
+
+**لتفعيل التتبع**، استخدم أيًا من هذه الطرق:
+- عيّن `tracing=True` في كود الطاقم/التدفق، أو
+- أضف `CREWAI_TRACING_ENABLED=true` إلى ملف `.env`، أو
+- شغّل `crewai traces enable`
+
+**لتعطيل التتبع**، استخدم أيًا من هذه الطرق:
+- عيّن `tracing=False` في كود الطاقم/التدفق، أو
+- أزل أو عيّن `false` لمتغير `CREWAI_TRACING_ENABLED`، أو
+- شغّل `crewai traces disable`
+
+
+
+ يتعامل CrewAI CLI مع المصادقة لمستودع الأدوات تلقائيًا عند
+ إضافة حزم إلى مشروعك. فقط أضف `crewai` قبل أي أمر `uv`
+ لاستخدامه. مثلًا `crewai uv add requests`.
+
+
+
+ تُخزن إعدادات التهيئة في `~/.config/crewai/settings.json`. بعض
+ الإعدادات مثل اسم المؤسسة ومعرّفها للقراءة فقط وتُدار من خلال
+ أوامر المصادقة والمؤسسة.
+
diff --git a/docs/v1.15.1/ar/concepts/collaboration.mdx b/docs/v1.15.1/ar/concepts/collaboration.mdx
new file mode 100644
index 000000000..a0cae9139
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/collaboration.mdx
@@ -0,0 +1,363 @@
+---
+title: التعاون
+description: كيفية تمكين الوكلاء من العمل معًا وتفويض المهام والتواصل بفعالية داخل فرق CrewAI.
+icon: screen-users
+mode: "wide"
+---
+
+## نظرة عامة
+
+يُمكّن التعاون في CrewAI الوكلاء من العمل معًا كفريق عن طريق تفويض المهام وطرح الأسئلة للاستفادة من خبرات بعضهم البعض. عندما يكون `allow_delegation=True`، يحصل الوكلاء تلقائيًا على أدوات تعاون قوية.
+
+## البدء السريع: تفعيل التعاون
+
+```python
+from crewai import Agent, Crew, Task
+
+# تفعيل التعاون للوكلاء
+researcher = Agent(
+ role="Research Specialist",
+ goal="Conduct thorough research on any topic",
+ backstory="Expert researcher with access to various sources",
+ allow_delegation=True, # الإعداد الرئيسي للتعاون
+ verbose=True
+)
+
+writer = Agent(
+ role="Content Writer",
+ goal="Create engaging content based on research",
+ backstory="Skilled writer who transforms research into compelling content",
+ allow_delegation=True, # يُمكّن طرح الأسئلة على الوكلاء الآخرين
+ verbose=True
+)
+
+# يمكن للوكلاء الآن التعاون تلقائيًا
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[...],
+ verbose=True
+)
+```
+
+## كيف يعمل تعاون الوكلاء
+
+عندما يكون `allow_delegation=True`، يوفر CrewAI تلقائيًا للوكلاء أداتين قويتين:
+
+### 1. **أداة تفويض العمل**
+تسمح للوكلاء بتعيين مهام لزملاء الفريق ذوي الخبرة المحددة.
+
+```python
+# يحصل الوكيل تلقائيًا على هذه الأداة:
+# Delegate work to coworker(task: str, context: str, coworker: str)
+```
+
+### 2. **أداة طرح الأسئلة**
+تُمكّن الوكلاء من طرح أسئلة محددة لجمع المعلومات من الزملاء.
+
+```python
+# يحصل الوكيل تلقائيًا على هذه الأداة:
+# Ask question to coworker(question: str, context: str, coworker: str)
+```
+
+## التعاون في الممارسة
+
+إليك مثالًا كاملًا يوضح تعاون الوكلاء في مهمة إنشاء المحتوى:
+
+```python
+from crewai import Agent, Crew, Task, Process
+
+# إنشاء وكلاء تعاونيين
+researcher = Agent(
+ role="Research Specialist",
+ goal="Find accurate, up-to-date information on any topic",
+ backstory="""You're a meticulous researcher with expertise in finding
+ reliable sources and fact-checking information across various domains.""",
+ allow_delegation=True,
+ verbose=True
+)
+
+writer = Agent(
+ role="Content Writer",
+ goal="Create engaging, well-structured content",
+ backstory="""You're a skilled content writer who excels at transforming
+ research into compelling, readable content for different audiences.""",
+ allow_delegation=True,
+ verbose=True
+)
+
+editor = Agent(
+ role="Content Editor",
+ goal="Ensure content quality and consistency",
+ backstory="""You're an experienced editor with an eye for detail,
+ ensuring content meets high standards for clarity and accuracy.""",
+ allow_delegation=True,
+ verbose=True
+)
+
+# إنشاء مهمة تشجع التعاون
+article_task = Task(
+ description="""Write a comprehensive 1000-word article about 'The Future of AI in Healthcare'.
+
+ The article should include:
+ - Current AI applications in healthcare
+ - Emerging trends and technologies
+ - Potential challenges and ethical considerations
+ - Expert predictions for the next 5 years
+
+ Collaborate with your teammates to ensure accuracy and quality.""",
+ expected_output="A well-researched, engaging 1000-word article with proper structure and citations",
+ agent=writer # الكاتب يقود، لكن يمكنه تفويض البحث إلى الباحث
+)
+
+# إنشاء طاقم تعاوني
+crew = Crew(
+ agents=[researcher, writer, editor],
+ tasks=[article_task],
+ process=Process.sequential,
+ verbose=True
+)
+
+result = crew.kickoff()
+```
+
+## أنماط التعاون
+
+### النمط 1: بحث ← كتابة ← تحرير
+```python
+research_task = Task(
+ description="Research the latest developments in quantum computing",
+ expected_output="Comprehensive research summary with key findings and sources",
+ agent=researcher
+)
+
+writing_task = Task(
+ description="Write an article based on the research findings",
+ expected_output="Engaging 800-word article about quantum computing",
+ agent=writer,
+ context=[research_task] # يحصل على مخرجات البحث كسياق
+)
+
+editing_task = Task(
+ description="Edit and polish the article for publication",
+ expected_output="Publication-ready article with improved clarity and flow",
+ agent=editor,
+ context=[writing_task] # يحصل على مسودة المقال كسياق
+)
+```
+
+### النمط 2: مهمة واحدة تعاونية
+```python
+collaborative_task = Task(
+ description="""Create a marketing strategy for a new AI product.
+
+ Writer: Focus on messaging and content strategy
+ Researcher: Provide market analysis and competitor insights
+
+ Work together to create a comprehensive strategy.""",
+ expected_output="Complete marketing strategy with research backing",
+ agent=writer # الوكيل القائد، لكن يمكنه التفويض إلى الباحث
+)
+```
+
+## التعاون الهرمي
+
+للمشاريع المعقدة، استخدم عملية هرمية مع وكيل مدير:
+
+```python
+from crewai import Agent, Crew, Task, Process
+
+# وكيل المدير ينسق الفريق
+manager = Agent(
+ role="Project Manager",
+ goal="Coordinate team efforts and ensure project success",
+ backstory="Experienced project manager skilled at delegation and quality control",
+ allow_delegation=True,
+ verbose=True
+)
+
+# وكلاء متخصصون
+researcher = Agent(
+ role="Researcher",
+ goal="Provide accurate research and analysis",
+ backstory="Expert researcher with deep analytical skills",
+ allow_delegation=False, # المتخصصون يركزون على خبرتهم
+ verbose=True
+)
+
+writer = Agent(
+ role="Writer",
+ goal="Create compelling content",
+ backstory="Skilled writer who creates engaging content",
+ allow_delegation=False,
+ verbose=True
+)
+
+# مهمة يقودها المدير
+project_task = Task(
+ description="Create a comprehensive market analysis report with recommendations",
+ expected_output="Executive summary, detailed analysis, and strategic recommendations",
+ agent=manager # المدير سيفوّض إلى المتخصصين
+)
+
+# طاقم هرمي
+crew = Crew(
+ agents=[manager, researcher, writer],
+ tasks=[project_task],
+ process=Process.hierarchical, # المدير ينسق كل شيء
+ manager_llm="gpt-4o", # تحديد LLM للمدير
+ verbose=True
+)
+```
+
+## أفضل ممارسات التعاون
+
+### 1. **تحديد الأدوار بوضوح**
+```python
+# جيد: أدوار محددة ومتكاملة
+researcher = Agent(role="Market Research Analyst", ...)
+writer = Agent(role="Technical Content Writer", ...)
+
+# تجنب: أدوار متداخلة أو غامضة
+agent1 = Agent(role="General Assistant", ...)
+agent2 = Agent(role="Helper", ...)
+```
+
+### 2. **تفعيل التفويض الاستراتيجي**
+```python
+# فعّل التفويض للمنسقين والعامين
+lead_agent = Agent(
+ role="Content Lead",
+ allow_delegation=True, # يمكنه التفويض إلى المتخصصين
+ ...
+)
+
+# عطّل للمتخصصين المركّزين (اختياري)
+specialist_agent = Agent(
+ role="Data Analyst",
+ allow_delegation=False, # يركز على الخبرة الأساسية
+ ...
+)
+```
+
+### 3. **مشاركة السياق**
+```python
+# استخدم معامل context لاعتماديات المهام
+writing_task = Task(
+ description="Write article based on research",
+ agent=writer,
+ context=[research_task], # يشارك نتائج البحث
+ ...
+)
+```
+
+### 4. **أوصاف المهام الواضحة**
+```python
+# أوصاف محددة وقابلة للتنفيذ
+Task(
+ description="""Research competitors in the AI chatbot space.
+ Focus on: pricing models, key features, target markets.
+ Provide data in a structured format.""",
+ ...
+)
+
+# تجنب: أوصاف غامضة لا توجه التعاون
+Task(description="Do some research about chatbots", ...)
+```
+
+## استكشاف أخطاء التعاون وإصلاحها
+
+### المشكلة: الوكلاء لا يتعاونون
+**الأعراض:** يعمل الوكلاء بمعزل، لا يحدث تفويض
+```python
+# الحل: تأكد من تفعيل التفويض
+agent = Agent(
+ role="...",
+ allow_delegation=True, # هذا مطلوب!
+ ...
+)
+```
+
+### المشكلة: كثرة الذهاب والإياب
+**الأعراض:** يطرح الوكلاء أسئلة مفرطة، تقدم بطيء
+```python
+# الحل: وفّر سياقًا أفضل وأدوارًا محددة
+Task(
+ description="""Write a technical blog post about machine learning.
+
+ Context: Target audience is software developers with basic ML knowledge.
+ Length: 1200 words
+ Include: code examples, practical applications, best practices
+
+ If you need specific technical details, delegate research to the researcher.""",
+ ...
+)
+```
+
+### المشكلة: حلقات التفويض
+**الأعراض:** يفوّض الوكلاء ذهابًا وإيابًا بلا نهاية
+```python
+# الحل: تسلسل هرمي واضح ومسؤوليات
+manager = Agent(role="Manager", allow_delegation=True)
+specialist1 = Agent(role="Specialist A", allow_delegation=False) # لا إعادة تفويض
+specialist2 = Agent(role="Specialist B", allow_delegation=False)
+```
+
+## ميزات التعاون المتقدمة
+
+### قواعد التعاون المخصصة
+```python
+# تعيين إرشادات تعاون محددة في خلفية الوكيل
+agent = Agent(
+ role="Senior Developer",
+ backstory="""You lead development projects and coordinate with team members.
+
+ Collaboration guidelines:
+ - Delegate research tasks to the Research Analyst
+ - Ask the Designer for UI/UX guidance
+ - Consult the QA Engineer for testing strategies
+ - Only escalate blocking issues to the Project Manager""",
+ allow_delegation=True
+)
+```
+
+### مراقبة التعاون
+```python
+def track_collaboration(output):
+ """تتبع أنماط التعاون"""
+ if "Delegate work to coworker" in output.raw:
+ print("Delegation occurred")
+ if "Ask question to coworker" in output.raw:
+ print("Question asked")
+
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ step_callback=track_collaboration, # مراقبة التعاون
+ verbose=True
+)
+```
+
+## الذاكرة والتعلم
+
+تمكين الوكلاء من تذكر التعاونات السابقة:
+
+```python
+agent = Agent(
+ role="Content Lead",
+ memory=True, # يتذكر التفاعلات السابقة
+ allow_delegation=True,
+ verbose=True
+)
+```
+
+مع تفعيل الذاكرة، يتعلم الوكلاء من التعاونات السابقة ويحسّنون قرارات التفويض بمرور الوقت.
+
+## الخطوات التالية
+
+- **جرّب الأمثلة**: ابدأ بمثال التعاون الأساسي
+- **جرّب أدوارًا مختلفة**: اختبر تركيبات أدوار وكلاء مختلفة
+- **راقب التفاعلات**: استخدم `verbose=True` لرؤية التعاون في العمل
+- **حسّن أوصاف المهام**: المهام الواضحة تؤدي إلى تعاون أفضل
+- **وسّع النطاق**: جرّب العمليات الهرمية للمشاريع المعقدة
+
+يحوّل التعاون وكلاء الذكاء الاصطناعي الفرديين إلى فرق قوية يمكنها معالجة التحديات المعقدة ومتعددة الأوجه معًا.
diff --git a/docs/v1.15.1/ar/concepts/crews.mdx b/docs/v1.15.1/ar/concepts/crews.mdx
new file mode 100644
index 000000000..05f643c90
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/crews.mdx
@@ -0,0 +1,245 @@
+---
+title: الأطقم
+description: فهم واستخدام الأطقم في إطار عمل CrewAI مع خصائص ووظائف شاملة.
+icon: people-group
+mode: "wide"
+---
+
+## نظرة عامة
+
+يمثل الطاقم في CrewAI مجموعة تعاونية من الوكلاء يعملون معًا لتحقيق مجموعة من المهام. يحدد كل طاقم استراتيجية تنفيذ المهام وتعاون الوكلاء وسير العمل العام.
+
+## خصائص الطاقم
+
+| الخاصية | المعامل | الوصف |
+| :------------------------------------ | :--------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **المهام** | `tasks` | قائمة المهام المعيّنة للطاقم. |
+| **الوكلاء** | `agents` | قائمة الوكلاء الذين يشكلون جزءًا من الطاقم. |
+| **العملية** _(اختياري)_ | `process` | تدفق العملية (مثل تسلسلي، هرمي) الذي يتبعه الطاقم. الافتراضي `sequential`. |
+| **الوضع المفصل** _(اختياري)_ | `verbose` | مستوى التفصيل في التسجيل أثناء التنفيذ. الافتراضي `False`. |
+| **LLM المدير** _(اختياري)_ | `manager_llm` | نموذج اللغة المستخدم بواسطة وكيل المدير في العملية الهرمية. **مطلوب عند استخدام العملية الهرمية.** |
+| **LLM استدعاء الدوال** _(اختياري)_ | `function_calling_llm` | إذا مُرر، سيستخدم الطاقم هذا LLM لاستدعاء دوال الأدوات لجميع الوكلاء. يمكن لكل وكيل أن يكون له LLM خاص يتجاوز LLM الطاقم. |
+| **التهيئة** _(اختياري)_ | `config` | إعدادات تهيئة اختيارية للطاقم، بتنسيق `Json` أو `Dict[str, Any]`. |
+| **الحد الأقصى لـ RPM** _(اختياري)_ | `max_rpm` | الحد الأقصى للطلبات في الدقيقة. الافتراضي `None`. |
+| **الذاكرة** _(اختياري)_ | `memory` | تُستخدم لتخزين ذاكرات التنفيذ (قصيرة المدى، طويلة المدى، ذاكرة الكيانات). |
+| **التخزين المؤقت** _(اختياري)_ | `cache` | يحدد ما إذا كان يُستخدم تخزين مؤقت لنتائج تنفيذ الأدوات. الافتراضي `True`. |
+| **المُضمّن** _(اختياري)_ | `embedder` | تهيئة المُضمّن المستخدم من قبل الطاقم. الافتراضي `{"provider": "openai"}`. |
+| **دالة الخطوة** _(اختياري)_ | `step_callback` | دالة تُستدعى بعد كل خطوة لكل وكيل. |
+| **دالة المهمة** _(اختياري)_ | `task_callback` | دالة تُستدعى بعد اكتمال كل مهمة. |
+| **مشاركة الطاقم** _(اختياري)_ | `share_crew` | ما إذا كنت تريد مشاركة معلومات الطاقم الكاملة وتنفيذه مع فريق CrewAI. |
+| **ملف سجل المخرجات** _(اختياري)_ | `output_log_file` | عيّن True لحفظ السجلات كـ logs.txt أو وفّر مسار ملف. الافتراضي `None`. |
+| **وكيل المدير** _(اختياري)_ | `manager_agent` | يعيّن وكيلًا مخصصًا سيُستخدم كمدير. |
+| **التخطيط** *(اختياري)* | `planning` | يضيف قدرة التخطيط للطاقم. |
+| **LLM التخطيط** *(اختياري)* | `planning_llm` | نموذج اللغة المستخدم بواسطة AgentPlanner في عملية التخطيط. |
+| **مصادر المعرفة** _(اختياري)_ | `knowledge_sources` | مصادر المعرفة المتاحة على مستوى الطاقم، يمكن لجميع الوكلاء الوصول إليها. |
+| **البث** _(اختياري)_ | `stream` | تفعيل مخرجات البث لتلقي تحديثات في الوقت الفعلي. الافتراضي `False`. |
+
+
+**الحد الأقصى لـ RPM للطاقم**: تعيّن خاصية `max_rpm` الحد الأقصى للطلبات في الدقيقة التي يمكن للطاقم تنفيذها لتجنب حدود المعدل وستتجاوز إعدادات `max_rpm` الفردية للوكلاء إذا عيّنتها.
+
+
+## إنشاء الأطقم
+
+هناك طريقتان رئيسيتان لإنشاء الأطقم في CrewAI: باستخدام **تهيئة JSONC (الموصى بها للـ crews الجديدة)** أو تعريفها **مباشرة في الكود** للمشاريع الكلاسيكية والحالات المتقدمة.
+
+### تهيئة JSONC (موصى بها)
+
+المشاريع الجديدة التي تُنشأ عبر `crewai create crew ` تستخدم `crew.jsonc` لإعدادات الـ crew والمهام، وملفًا منفصلًا لكل Agent داخل `agents/`. يكتشف `crewai run` ملف `crew.jsonc` أو `crew.json`، ويحمّل الـ Agents المشار إليها، ويطلب قيم placeholders الناقصة، ثم يبدأ الـ crew.
+
+```jsonc crew.jsonc
+{
+ "name": "Market Research Crew",
+ "agents": ["researcher", "analyst"],
+ "tasks": [
+ {
+ "name": "research",
+ "description": "Research {topic} and collect the most relevant facts.",
+ "expected_output": "Structured research notes about {topic}.",
+ "agent": "researcher"
+ },
+ {
+ "name": "analysis",
+ "description": "Analyze the research and write a concise report.",
+ "expected_output": "A markdown report with findings and recommendations.",
+ "agent": "analyst",
+ "context": ["research"],
+ "output_file": "output/report.md"
+ }
+ ],
+ "process": "sequential",
+ "verbose": true,
+ "memory": true,
+ "inputs": {
+ "topic": "AI Agents"
+ }
+}
+```
+
+كل عنصر في `agents` يُحل أولًا إلى `agents/.jsonc` ثم إلى `agents/.json`. للـ crews الهرمية، استخدم `"process": "hierarchical"` مع `manager_llm` أو `manager_agent`.
+
+
+شغّل مشاريع JSON crew من مصادر تثق بها فقط. أدوات `custom:` ومراجع `{"python": "module.attribute"}` تنفذ كود Python محليًا عند تحميل الـ crew.
+
+
+### تهيئة YAML الكلاسيكية
+
+المشاريع الكلاسيكية التي تُنشأ عبر `crewai create crew --classic` تستخدم `crew.py` و `config/agents.yaml` و `config/tasks.yaml` والمزيّنات `@CrewBase` و `@agent` و `@task` و `@crew`.
+
+تظل هذه الطريقة مدعومة للمشاريع الحالية المبنية بـ Python/YAML وللفِرق التي تحتاج تحكمًا صريحًا عبر decorators.
+
+```python code
+from crewai import Agent, Crew, Task, Process
+from crewai.project import CrewBase, agent, task, crew, before_kickoff, after_kickoff
+from crewai.agents.agent_builder.base_agent import BaseAgent
+from typing import List
+
+@CrewBase
+class YourCrewName:
+ """Description of your crew"""
+
+ agents: List[BaseAgent]
+ tasks: List[Task]
+
+ agents_config = 'config/agents.yaml'
+ tasks_config = 'config/tasks.yaml'
+
+ @before_kickoff
+ def prepare_inputs(self, inputs):
+ inputs['additional_data'] = "Some extra information"
+ return inputs
+
+ @after_kickoff
+ def process_output(self, output):
+ output.raw += "\nProcessed after kickoff."
+ return output
+
+ @agent
+ def agent_one(self) -> Agent:
+ return Agent(
+ config=self.agents_config['agent_one'], # type: ignore[index]
+ verbose=True
+ )
+
+ @task
+ def task_one(self) -> Task:
+ return Task(
+ config=self.tasks_config['task_one'] # type: ignore[index]
+ )
+
+ @crew
+ def crew(self) -> Crew:
+ return Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ verbose=True,
+ )
+```
+
+
+سيتم تنفيذ المهام بالترتيب الذي عُرّفت به.
+
+
+فئة `CrewBase`، مع هذه المزيّنات، تؤتمت جمع الوكلاء والمهام، مما يقلل الحاجة للإدارة اليدوية.
+
+### تعريف مباشر في الكود (بديل)
+
+بدلاً من ذلك، يمكنك تعريف الطاقم مباشرة في الكود بدون ملفات تهيئة YAML.
+
+## مخرجات الطاقم
+
+تُغلّف مخرجات الطاقم في فئة `CrewOutput`. توفر هذه الفئة طريقة منظمة للوصول إلى نتائج تنفيذ الطاقم، بما في ذلك تنسيقات متنوعة مثل السلاسل النصية الخام وJSON ونماذج Pydantic.
+
+### خصائص مخرجات الطاقم
+
+| الخاصية | المعامل | النوع | الوصف |
+| :--------------- | :------------- | :------------------------- | :--------------------------------------------------------------------------------------------------- |
+| **Raw** | `raw` | `str` | المخرجات الخام للطاقم. هذا هو التنسيق الافتراضي. |
+| **Pydantic** | `pydantic` | `Optional[BaseModel]` | كائن نموذج Pydantic يمثل المخرجات المنظمة. |
+| **JSON Dict** | `json_dict` | `Optional[Dict[str, Any]]` | قاموس يمثل مخرجات JSON. |
+| **Tasks Output** | `tasks_output` | `List[TaskOutput]` | قائمة كائنات `TaskOutput`، كل منها يمثل مخرجات مهمة. |
+| **Token Usage** | `token_usage` | `Dict[str, Any]` | ملخص استخدام الرموز. |
+
+## استخدام الذاكرة
+
+يمكن للأطقم استخدام الذاكرة (قصيرة المدى، طويلة المدى، وذاكرة الكيانات) لتحسين تنفيذها وتعلمها بمرور الوقت.
+
+## استخدام التخزين المؤقت
+
+يمكن استخدام التخزين المؤقت لتخزين نتائج تنفيذ الأدوات، مما يجعل العملية أكثر كفاءة.
+
+## مقاييس استخدام الطاقم
+
+بعد تنفيذ الطاقم، يمكنك الوصول إلى خاصية `usage_metrics` لعرض مقاييس استخدام نموذج اللغة (LLM) لجميع المهام المنفذة.
+
+```python Code
+crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])
+crew.kickoff()
+print(crew.usage_metrics)
+```
+
+## عملية تنفيذ الطاقم
+
+- **العملية التسلسلية**: تُنفذ المهام واحدة تلو الأخرى، مما يسمح بتدفق عمل خطي.
+- **العملية الهرمية**: ينسق وكيل مدير الطاقم، ويفوّض المهام ويتحقق من النتائج.
+
+### تشغيل الطاقم
+
+بمجرد تجميع طاقمك، ابدأ سير العمل بطريقة `kickoff()`.
+
+```python Code
+result = my_crew.kickoff()
+print(result)
+```
+
+### طرق مختلفة لتشغيل الطاقم
+
+#### الطرق المتزامنة
+
+- `kickoff()`: يبدأ عملية التنفيذ وفقًا لتدفق العملية المحدد.
+- `kickoff_for_each()`: ينفذ المهام بالتتابع لكل مدخل.
+
+#### الطرق غير المتزامنة
+
+| الطريقة | النوع | الوصف |
+|--------|------|-------------|
+| `akickoff()` | غير متزامن أصلي | async/await أصلي عبر سلسلة التنفيذ بأكملها |
+| `akickoff_for_each()` | غير متزامن أصلي | تنفيذ غير متزامن أصلي لكل مدخل في قائمة |
+| `kickoff_async()` | مبني على الخيوط | يغلّف التنفيذ المتزامن في `asyncio.to_thread` |
+| `kickoff_for_each_async()` | مبني على الخيوط | غير متزامن مبني على الخيوط لكل مدخل في قائمة |
+
+
+لأحمال العمل عالية التزامن، يُوصى بـ `akickoff()` و `akickoff_for_each()` لأنها تستخدم async أصلي.
+
+
+### بث تنفيذ الطاقم
+
+للرؤية في الوقت الفعلي لتنفيذ الطاقم، يمكنك تفعيل البث:
+
+```python Code
+crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ stream=True
+)
+
+streaming = crew.kickoff(inputs={"topic": "AI"})
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+result = streaming.result
+```
+
+### الإعادة من مهمة محددة
+
+يمكنك الآن الإعادة من مهمة محددة باستخدام أمر CLI `replay`.
+
+```shell
+crewai log-tasks-outputs
+```
+
+ثم للإعادة من مهمة محددة:
+
+```shell
+crewai replay -t
+```
diff --git a/docs/v1.15.1/ar/concepts/event-listener.mdx b/docs/v1.15.1/ar/concepts/event-listener.mdx
new file mode 100644
index 000000000..41be56cb8
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/event-listener.mdx
@@ -0,0 +1,236 @@
+---
+title: "مستمعو الأحداث"
+description: "الاستفادة من أحداث CrewAI لبناء تكاملات مخصصة ومراقبة"
+icon: spinner
+mode: "wide"
+---
+
+## نظرة عامة
+
+يوفر CrewAI نظام أحداث قوي يتيح لك الاستماع والتفاعل مع الأحداث المختلفة التي تحدث أثناء تنفيذ طاقمك. تُمكّنك هذه الميزة من بناء تكاملات مخصصة وحلول مراقبة وأنظمة تسجيل أو أي وظائف أخرى تحتاج للتشغيل بناءً على أحداث CrewAI الداخلية.
+
+## كيف يعمل
+
+يستخدم CrewAI بنية ناقل أحداث لإرسال الأحداث طوال دورة حياة التنفيذ. يُبنى نظام الأحداث على المكونات التالية:
+
+1. **CrewAIEventsBus**: ناقل أحداث فريد يدير تسجيل الأحداث وإرسالها
+2. **BaseEvent**: الفئة الأساسية لجميع الأحداث في النظام
+3. **BaseEventListener**: فئة أساسية مجردة لإنشاء مستمعي أحداث مخصصين
+
+عندما تحدث إجراءات محددة في CrewAI (مثل بدء تنفيذ طاقم، أو إكمال وكيل لمهمة، أو استخدام أداة)، يرسل النظام أحداثًا مقابلة. يمكنك تسجيل معالجات لهذه الأحداث لتنفيذ كود مخصص عند حدوثها.
+
+
+يوفر CrewAI AMP ميزة تتبع أوامر مدمجة تستفيد من نظام الأحداث لتتبع وتخزين وتصور جميع الأوامر والاستكمالات والبيانات الوصفية المرتبطة.
+
+
+
+مع تتبع الأوامر يمكنك:
+
+- عرض السجل الكامل لجميع الأوامر المرسلة إلى LLM
+- تتبع استخدام الرموز والتكاليف
+- تصحيح إخفاقات استدلال الوكيل
+- مشاركة تسلسلات الأوامر مع فريقك
+- مقارنة استراتيجيات الأوامر المختلفة
+- تصدير التتبعات للامتثال والتدقيق
+
+
+## إنشاء مستمع أحداث مخصص
+
+لإنشاء مستمع أحداث مخصص، تحتاج إلى:
+
+1. إنشاء فئة ترث من `BaseEventListener`
+2. تنفيذ طريقة `setup_listeners`
+3. تسجيل معالجات للأحداث التي تهمك
+4. إنشاء مثيل من مستمعك في الملف المناسب
+
+إليك مثالًا بسيطًا:
+
+```python
+from crewai.events import (
+ CrewKickoffStartedEvent,
+ CrewKickoffCompletedEvent,
+ AgentExecutionCompletedEvent,
+)
+from crewai.events import BaseEventListener
+
+class MyCustomListener(BaseEventListener):
+ def __init__(self):
+ super().__init__()
+
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(CrewKickoffStartedEvent)
+ def on_crew_started(source, event):
+ print(f"Crew '{event.crew_name}' has started execution!")
+
+ @crewai_event_bus.on(CrewKickoffCompletedEvent)
+ def on_crew_completed(source, event):
+ print(f"Crew '{event.crew_name}' has completed execution!")
+ print(f"Output: {event.output}")
+
+ @crewai_event_bus.on(AgentExecutionCompletedEvent)
+ def on_agent_execution_completed(source, event):
+ print(f"Agent '{event.agent.role}' completed task")
+ print(f"Output: {event.output}")
+```
+
+## تسجيل المستمع بشكل صحيح
+
+مجرد تعريف فئة المستمع ليس كافيًا. تحتاج لإنشاء مثيل منه والتأكد من استيراده في تطبيقك.
+
+```python
+# في ملف crew.py
+from crewai import Agent, Crew, Task
+from my_listeners import MyCustomListener
+
+# إنشاء مثيل من المستمع
+my_listener = MyCustomListener()
+
+class MyCustomCrew:
+ def crew(self):
+ return Crew(
+ agents=[...],
+ tasks=[...],
+ )
+```
+
+## أنواع الأحداث المتاحة
+
+يوفر CrewAI مجموعة واسعة من الأحداث يمكنك الاستماع إليها:
+
+### أحداث الطاقم
+
+- **CrewKickoffStartedEvent**: يُرسل عند بدء تنفيذ الطاقم
+- **CrewKickoffCompletedEvent**: يُرسل عند اكتمال تنفيذ الطاقم
+- **CrewKickoffFailedEvent**: يُرسل عند فشل تنفيذ الطاقم
+- **CrewTestStartedEvent**: يُرسل عند بدء اختبار الطاقم
+- **CrewTestCompletedEvent**: يُرسل عند اكتمال اختبار الطاقم
+- **CrewTestFailedEvent**: يُرسل عند فشل اختبار الطاقم
+- **CrewTrainStartedEvent**: يُرسل عند بدء تدريب الطاقم
+- **CrewTrainCompletedEvent**: يُرسل عند اكتمال تدريب الطاقم
+- **CrewTrainFailedEvent**: يُرسل عند فشل تدريب الطاقم
+
+### أحداث الوكيل
+
+- **AgentExecutionStartedEvent**: يُرسل عند بدء تنفيذ وكيل لمهمة
+- **AgentExecutionCompletedEvent**: يُرسل عند اكتمال تنفيذ وكيل لمهمة
+- **AgentExecutionErrorEvent**: يُرسل عند مواجهة وكيل لخطأ أثناء التنفيذ
+- **LiteAgentExecutionStartedEvent**: يُرسل عند بدء تنفيذ LiteAgent
+- **LiteAgentExecutionCompletedEvent**: يُرسل عند اكتمال تنفيذ LiteAgent
+
+### أحداث المهام
+
+- **TaskStartedEvent**: يُرسل عند بدء تنفيذ مهمة
+- **TaskCompletedEvent**: يُرسل عند اكتمال تنفيذ مهمة
+- **TaskFailedEvent**: يُرسل عند فشل تنفيذ مهمة
+
+### أحداث استخدام الأدوات
+
+- **ToolUsageStartedEvent**: يُرسل عند بدء تنفيذ أداة
+- **ToolUsageFinishedEvent**: يُرسل عند اكتمال تنفيذ أداة
+- **ToolUsageErrorEvent**: يُرسل عند مواجهة خطأ في تنفيذ أداة
+
+### أحداث MCP
+
+- **MCPConnectionStartedEvent**: يُرسل عند بدء الاتصال بخادم MCP
+- **MCPConnectionCompletedEvent**: يُرسل عند اكتمال الاتصال بخادم MCP
+- **MCPConnectionFailedEvent**: يُرسل عند فشل الاتصال بخادم MCP
+- **MCPToolExecutionStartedEvent**: يُرسل عند بدء تنفيذ أداة MCP
+- **MCPToolExecutionCompletedEvent**: يُرسل عند اكتمال تنفيذ أداة MCP
+- **MCPToolExecutionFailedEvent**: يُرسل عند فشل تنفيذ أداة MCP
+
+### أحداث المعرفة
+
+- **KnowledgeRetrievalStartedEvent**: يُرسل عند بدء استرجاع المعرفة
+- **KnowledgeRetrievalCompletedEvent**: يُرسل عند اكتمال استرجاع المعرفة
+- **KnowledgeQueryStartedEvent**: يُرسل عند بدء استعلام المعرفة
+- **KnowledgeQueryCompletedEvent**: يُرسل عند اكتمال استعلام المعرفة
+- **KnowledgeQueryFailedEvent**: يُرسل عند فشل استعلام المعرفة
+
+### أحداث حواجز LLM
+
+- **LLMGuardrailStartedEvent**: يُرسل عند بدء التحقق من الحاجز
+- **LLMGuardrailCompletedEvent**: يُرسل عند اكتمال التحقق من الحاجز
+- **LLMGuardrailFailedEvent**: يُرسل عند فشل التحقق من الحاجز
+
+### أحداث التدفق
+
+- **FlowCreatedEvent**: يُرسل عند إنشاء تدفق
+- **FlowStartedEvent**: يُرسل عند بدء تنفيذ تدفق
+- **FlowFinishedEvent**: يُرسل عند اكتمال تنفيذ تدفق
+- **FlowPausedEvent**: يُرسل عند إيقاف تدفق مؤقتًا بانتظار ملاحظات بشرية
+
+### أحداث LLM
+
+- **LLMCallStartedEvent**: يُرسل عند بدء استدعاء LLM
+- **LLMCallCompletedEvent**: يُرسل عند اكتمال استدعاء LLM
+- **LLMCallFailedEvent**: يُرسل عند فشل استدعاء LLM
+- **LLMStreamChunkEvent**: يُرسل لكل جزء مستلم أثناء بث استجابات LLM
+
+### أحداث الذاكرة
+
+- **MemoryQueryStartedEvent**: يُرسل عند بدء استعلام الذاكرة
+- **MemoryQueryCompletedEvent**: يُرسل عند اكتمال استعلام الذاكرة
+- **MemorySaveStartedEvent**: يُرسل عند بدء حفظ الذاكرة
+- **MemorySaveCompletedEvent**: يُرسل عند اكتمال حفظ الذاكرة
+
+### أحداث الاستدلال
+
+- **AgentReasoningStartedEvent**: يُرسل عند بدء وكيل الاستدلال حول مهمة
+- **AgentReasoningCompletedEvent**: يُرسل عند انتهاء عملية الاستدلال
+- **AgentReasoningFailedEvent**: يُرسل عند فشل عملية الاستدلال
+
+### أحداث A2A (وكيل إلى وكيل)
+
+- **A2ADelegationStartedEvent**: يُرسل عند بدء تفويض A2A
+- **A2ADelegationCompletedEvent**: يُرسل عند اكتمال تفويض A2A
+- **A2AConversationStartedEvent**: يُرسل عند بدء محادثة A2A متعددة الأدوار
+- **A2AConversationCompletedEvent**: يُرسل عند انتهاء محادثة A2A
+
+## هيكل معالج الأحداث
+
+يستقبل كل معالج حدث معاملين:
+
+1. **source**: الكائن الذي أرسل الحدث
+2. **event**: مثيل الحدث، يحتوي على بيانات خاصة بالحدث
+
+هيكل كائن الحدث يعتمد على نوع الحدث، لكن جميع الأحداث ترث من `BaseEvent` وتتضمن:
+
+- **timestamp**: الوقت الذي أُرسل فيه الحدث
+- **type**: معرّف نصي لنوع الحدث
+
+## الاستخدام المتقدم: المعالجات المحددة النطاق
+
+لمعالجة الأحداث المؤقتة، يمكنك استخدام مدير سياق `scoped_handlers`:
+
+```python
+from crewai.events import crewai_event_bus, CrewKickoffStartedEvent
+
+with crewai_event_bus.scoped_handlers():
+ @crewai_event_bus.on(CrewKickoffStartedEvent)
+ def temp_handler(source, event):
+ print("This handler only exists within this context")
+
+ # قم بشيء يرسل أحداثًا
+
+# خارج السياق، يتم إزالة المعالج المؤقت
+```
+
+## حالات الاستخدام
+
+يمكن استخدام مستمعي الأحداث لأغراض متنوعة:
+
+1. **التسجيل والمراقبة**: تتبع تنفيذ طاقمك وتسجيل الأحداث المهمة
+2. **التحليلات**: جمع بيانات عن أداء وسلوك طاقمك
+3. **التصحيح**: إعداد مستمعين مؤقتين لتصحيح مشاكل محددة
+4. **التكامل**: ربط CrewAI بأنظمة خارجية مثل منصات المراقبة وقواعد البيانات أو خدمات الإشعارات
+5. **السلوك المخصص**: تشغيل إجراءات مخصصة بناءً على أحداث محددة
+
+## أفضل الممارسات
+
+1. **اجعل المعالجات خفيفة**: يجب أن تكون معالجات الأحداث خفيفة وتتجنب العمليات الحاجبة
+2. **معالجة الأخطاء**: أدرج معالجة أخطاء مناسبة في معالجات الأحداث لمنع الاستثناءات من التأثير على التنفيذ الرئيسي
+3. **التنظيف**: إذا خصص مستمعك موارد، تأكد من تنظيفها بشكل صحيح
+4. **الاستماع الانتقائي**: استمع فقط للأحداث التي تحتاج فعلاً لمعالجتها
+5. **الاختبار**: اختبر مستمعي الأحداث بمعزل لضمان سلوكهم كما هو متوقع
+
+بالاستفادة من نظام أحداث CrewAI، يمكنك توسيع وظائفه ودمجه بسلاسة مع بنيتك التحتية الحالية.
diff --git a/docs/v1.15.1/ar/concepts/files.mdx b/docs/v1.15.1/ar/concepts/files.mdx
new file mode 100644
index 000000000..66516a093
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/files.mdx
@@ -0,0 +1,267 @@
+---
+title: الملفات
+description: تمرير الصور وملفات PDF والصوت والفيديو والنصوص إلى وكلائك للمعالجة متعددة الوسائط.
+icon: file-image
+---
+
+## نظرة عامة
+
+يدعم CrewAI مدخلات الملفات متعددة الوسائط الأصلية، مما يتيح لك تمرير الصور وملفات PDF والصوت والفيديو والنصوص مباشرة إلى وكلائك. يتم تنسيق الملفات تلقائيًا وفقًا لمتطلبات API لكل مزود LLM.
+
+
+يتطلب دعم الملفات حزمة `crewai-files` الاختيارية. ثبّتها بـ:
+
+```bash
+uv add 'crewai[file-processing]'
+```
+
+
+
+واجهة معالجة الملفات حاليًا في مرحلة الوصول المبكر.
+
+
+## أنواع الملفات
+
+يدعم CrewAI خمسة أنواع ملفات محددة بالإضافة إلى فئة `File` العامة التي تكتشف النوع تلقائيًا:
+
+| النوع | الفئة | حالات الاستخدام |
+|:-----|:------|:----------|
+| **صورة** | `ImageFile` | صور، لقطات شاشة، مخططات، رسوم بيانية |
+| **PDF** | `PDFFile` | مستندات، تقارير، أوراق بحثية |
+| **صوت** | `AudioFile` | تسجيلات صوتية، بودكاست، اجتماعات |
+| **فيديو** | `VideoFile` | تسجيلات شاشة، عروض تقديمية |
+| **نص** | `TextFile` | ملفات كود، سجلات، ملفات بيانات |
+| **عام** | `File` | اكتشاف تلقائي للنوع من المحتوى |
+
+```python
+from crewai_files import File, ImageFile, PDFFile, AudioFile, VideoFile, TextFile
+
+image = ImageFile(source="screenshot.png")
+pdf = PDFFile(source="report.pdf")
+audio = AudioFile(source="meeting.mp3")
+video = VideoFile(source="demo.mp4")
+text = TextFile(source="data.csv")
+
+file = File(source="document.pdf")
+```
+
+## مصادر الملفات
+
+يقبل معامل `source` أنواع إدخال متعددة ويكتشف تلقائيًا المعالج المناسب:
+
+### من مسار
+
+```python
+from crewai_files import ImageFile
+
+image = ImageFile(source="./images/chart.png")
+```
+
+### من عنوان URL
+
+```python
+from crewai_files import ImageFile
+
+image = ImageFile(source="https://example.com/image.png")
+```
+
+### من بايتات
+
+```python
+from crewai_files import ImageFile, FileBytes
+
+image_bytes = download_image_from_api()
+image = ImageFile(source=FileBytes(data=image_bytes, filename="downloaded.png"))
+image = ImageFile(source=image_bytes)
+```
+
+## استخدام الملفات
+
+يمكن تمرير الملفات على مستويات متعددة، حيث تأخذ المستويات الأكثر تحديدًا الأولوية.
+
+### مع الأطقم
+
+مرر الملفات عند تشغيل طاقم:
+
+```python
+from crewai import Crew
+from crewai_files import ImageFile
+
+crew = Crew(agents=[analyst], tasks=[analysis_task])
+
+result = crew.kickoff(
+ inputs={"topic": "Q4 Sales"},
+ input_files={
+ "chart": ImageFile(source="sales_chart.png"),
+ "report": PDFFile(source="quarterly_report.pdf"),
+ }
+)
+```
+
+### مع المهام
+
+أرفق الملفات بمهام محددة:
+
+```python
+from crewai import Task
+from crewai_files import ImageFile
+
+task = Task(
+ description="Analyze the sales chart and identify trends in {chart}",
+ expected_output="A summary of key trends",
+ input_files={
+ "chart": ImageFile(source="sales_chart.png"),
+ }
+)
+```
+
+### مع التدفقات
+
+مرر الملفات إلى التدفقات، والتي تنتقل تلقائيًا إلى الأطقم:
+
+```python
+from crewai.flow.flow import Flow, start
+from crewai_files import ImageFile
+
+class AnalysisFlow(Flow):
+ @start()
+ def analyze(self):
+ return self.analysis_crew.kickoff()
+
+flow = AnalysisFlow()
+result = flow.kickoff(
+ input_files={"image": ImageFile(source="data.png")}
+)
+```
+
+### مع الوكلاء المستقلين
+
+مرر الملفات مباشرة إلى تشغيل الوكيل:
+
+```python
+from crewai import Agent
+from crewai_files import ImageFile
+
+agent = Agent(
+ role="Image Analyst",
+ goal="Analyze images",
+ backstory="Expert at visual analysis",
+ llm="gpt-4o",
+)
+
+result = agent.kickoff(
+ messages="What's in this image?",
+ input_files={"photo": ImageFile(source="photo.jpg")},
+)
+```
+
+## أولوية الملفات
+
+عند تمرير الملفات على مستويات متعددة، تتجاوز المستويات الأكثر تحديدًا المستويات الأوسع:
+
+```
+Flow input_files < Crew input_files < Task input_files
+```
+
+على سبيل المثال، إذا عرّف كل من التدفق والمهمة ملفًا باسم `"chart"`، تُستخدم نسخة المهمة.
+
+## دعم المزودين
+
+تدعم المزودات المختلفة أنواع ملفات مختلفة. يقوم CrewAI تلقائيًا بتنسيق الملفات وفقًا لواجهة كل مزود.
+
+| المزود | صورة | PDF | صوت | فيديو | نص |
+|:---------|:-----:|:---:|:-----:|:-----:|:----:|
+| **OpenAI** (completions API) | ✓ | | | | |
+| **OpenAI** (responses API) | ✓ | ✓ | ✓ | | |
+| **Anthropic** (claude-3.x) | ✓ | ✓ | | | |
+| **Google Gemini** (gemini-1.5, 2.0, 2.5) | ✓ | ✓ | ✓ | ✓ | ✓ |
+| **AWS Bedrock** (claude-3) | ✓ | ✓ | | | |
+| **Azure OpenAI** (gpt-4o) | ✓ | | ✓ | | |
+
+
+تدعم نماذج Google Gemini جميع أنواع الملفات بما في ذلك الفيديو (حتى ساعة واحدة، 2 جيجابايت). استخدم Gemini عندما تحتاج لمعالجة محتوى الفيديو.
+
+
+
+إذا مررت نوع ملف لا يدعمه المزود (مثل الفيديو إلى OpenAI)، ستتلقى خطأ `UnsupportedFileTypeError`. اختر مزودك بناءً على أنواع الملفات التي تحتاج لمعالجتها.
+
+
+## كيف تُرسل الملفات
+
+يختار CrewAI تلقائيًا الطريقة المثلى لإرسال الملفات إلى كل مزود:
+
+| الطريقة | الوصف | متى تُستخدم |
+|:-------|:------------|:----------|
+| **Inline Base64** | الملف مضمّن مباشرة في الطلب | ملفات صغيرة (< 5 ميجابايت عادة) |
+| **File Upload API** | الملف يُرفع بشكل منفصل، يُشار إليه بمعرّف | ملفات كبيرة تتجاوز العتبة |
+| **URL Reference** | عنوان URL مباشر يُمرر إلى النموذج | مصدر الملف هو عنوان URL بالفعل |
+
+### طرق الإرسال حسب المزود
+
+| المزود | Inline Base64 | File Upload API | URL References |
+|:---------|:-------------:|:---------------:|:--------------:|
+| **OpenAI** | ✓ | ✓ (> 5 MB) | ✓ |
+| **Anthropic** | ✓ | ✓ (> 5 MB) | ✓ |
+| **Google Gemini** | ✓ | ✓ (> 20 MB) | ✓ |
+| **AWS Bedrock** | ✓ | | ✓ (S3 URIs) |
+| **Azure OpenAI** | ✓ | | ✓ |
+
+
+لا تحتاج لإدارة هذا بنفسك. يستخدم CrewAI تلقائيًا الطريقة الأكثر كفاءة بناءً على حجم الملف وقدرات المزود. المزودات بدون واجهات رفع الملفات تستخدم inline base64 لجميع الملفات.
+
+
+## أوضاع معالجة الملفات
+
+تحكم في كيفية معالجة الملفات عندما تتجاوز حدود المزود:
+
+```python
+from crewai_files import ImageFile, PDFFile
+
+image = ImageFile(source="large.png", mode="strict")
+image = ImageFile(source="large.png", mode="auto")
+image = ImageFile(source="large.png", mode="warn")
+pdf = PDFFile(source="large.pdf", mode="chunk")
+```
+
+## قيود المزودين
+
+لكل مزود حدود محددة لأحجام الملفات والأبعاد:
+
+### OpenAI
+- **الصور**: حد أقصى 20 ميجابايت، حتى 10 صور لكل طلب
+- **PDF**: حد أقصى 32 ميجابايت، حتى 100 صفحة
+- **الصوت**: حد أقصى 25 ميجابايت، حتى 25 دقيقة
+
+### Anthropic
+- **الصور**: حد أقصى 5 ميجابايت، أقصى 8000x8000 بكسل، حتى 100 صورة
+- **PDF**: حد أقصى 32 ميجابايت، حتى 100 صفحة
+
+### Google Gemini
+- **الصور**: حد أقصى 100 ميجابايت
+- **PDF**: حد أقصى 50 ميجابايت
+- **الصوت**: حد أقصى 100 ميجابايت، حتى 9.5 ساعة
+- **الفيديو**: حد أقصى 2 جيجابايت، حتى ساعة واحدة
+
+### AWS Bedrock
+- **الصور**: حد أقصى 4.5 ميجابايت، أقصى 8000x8000 بكسل
+- **PDF**: حد أقصى 3.75 ميجابايت، حتى 100 صفحة
+
+## الإشارة إلى الملفات في الأوامر
+
+استخدم اسم مفتاح الملف في أوصاف المهام للإشارة إلى الملفات:
+
+```python
+task = Task(
+ description="""
+ Analyze the provided materials:
+ 1. Review the chart in {sales_chart}
+ 2. Cross-reference with data in {quarterly_report}
+ 3. Summarize key findings
+ """,
+ expected_output="Analysis summary with key insights",
+ input_files={
+ "sales_chart": ImageFile(source="chart.png"),
+ "quarterly_report": PDFFile(source="report.pdf"),
+ }
+)
+```
diff --git a/docs/v1.15.1/ar/concepts/flows.mdx b/docs/v1.15.1/ar/concepts/flows.mdx
new file mode 100644
index 000000000..62d34b335
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/flows.mdx
@@ -0,0 +1,1163 @@
+---
+title: التدفقات
+description: تعلّم كيفية إنشاء وإدارة سير عمل الذكاء الاصطناعي باستخدام تدفقات CrewAI.
+icon: arrow-progress
+mode: "wide"
+---
+
+## نظرة عامة
+
+تدفقات CrewAI هي ميزة قوية مصممة لتبسيط إنشاء وإدارة سير عمل الذكاء الاصطناعي. تتيح التدفقات للمطورين دمج وتنسيق مهام البرمجة وفرق Crew بكفاءة، مما يوفر إطار عمل متين لبناء أتمتة ذكاء اصطناعي متطورة.
+
+تتيح لك التدفقات إنشاء سير عمل منظم يعتمد على الأحداث. فهي توفر طريقة سلسة لربط مهام متعددة وإدارة الحالة والتحكم في تدفق التنفيذ في تطبيقات الذكاء الاصطناعي الخاصة بك. باستخدام التدفقات، يمكنك بسهولة تصميم وتنفيذ عمليات متعددة الخطوات تستفيد من الإمكانيات الكاملة لـ CrewAI.
+
+1. **تبسيط إنشاء سير العمل**: ربط فرق Crew والمهام المتعددة بسهولة لإنشاء سير عمل ذكاء اصطناعي معقد.
+
+2. **إدارة الحالة**: تجعل التدفقات إدارة ومشاركة الحالة بين المهام المختلفة في سير العمل أمرًا سهلًا للغاية.
+
+3. **بنية تعتمد على الأحداث**: مبنية على نموذج يعتمد على الأحداث، مما يتيح سير عمل ديناميكي وسريع الاستجابة.
+
+4. **تحكم مرن في التدفق**: تنفيذ المنطق الشرطي والحلقات والتفرع ضمن سير العمل.
+
+## البدء
+
+لنقم بإنشاء تدفق بسيط حيث ستستخدم OpenAI لإنشاء مدينة عشوائية في مهمة واحدة ثم استخدام تلك المدينة لإنشاء حقيقة ممتعة في مهمة أخرى.
+
+```python Code
+
+from crewai.flow.flow import Flow, listen, start
+from dotenv import load_dotenv
+from litellm import completion
+
+load_dotenv()
+
+class ExampleFlow(Flow):
+ model = "gpt-4o-mini"
+
+ @start()
+ def generate_city(self):
+ print("Starting flow")
+ # Each flow state automatically gets a unique ID
+ print(f"Flow State ID: {self.state['id']}")
+
+ response = completion(
+ model=self.model,
+ messages=[
+ {
+ "role": "user",
+ "content": "Return the name of a random city in the world.",
+ },
+ ],
+ )
+
+ random_city = response["choices"][0]["message"]["content"]
+ # Store the city in our state
+ self.state["city"] = random_city
+ print(f"Random City: {random_city}")
+
+ return random_city
+
+ @listen(generate_city)
+ def generate_fun_fact(self, random_city):
+ response = completion(
+ model=self.model,
+ messages=[
+ {
+ "role": "user",
+ "content": f"Tell me a fun fact about {random_city}",
+ },
+ ],
+ )
+
+ fun_fact = response["choices"][0]["message"]["content"]
+ # Store the fun fact in our state
+ self.state["fun_fact"] = fun_fact
+ return fun_fact
+
+
+
+flow = ExampleFlow()
+flow.plot()
+result = flow.kickoff()
+
+print(f"Generated fun fact: {result}")
+```
+
+في المثال أعلاه، أنشأنا تدفقًا بسيطًا يولّد مدينة عشوائية باستخدام OpenAI ثم يولّد حقيقة ممتعة عن تلك المدينة. يتكون التدفق من مهمتين: `generate_city` و `generate_fun_fact`. مهمة `generate_city` هي نقطة البداية للتدفق، ومهمة `generate_fun_fact` تستمع لمخرجات مهمة `generate_city`.
+
+يتلقى كل مثيل من التدفق تلقائيًا معرّفًا فريدًا (UUID) في حالته، مما يساعد في تتبع وإدارة عمليات تنفيذ التدفق. يمكن للحالة أيضًا تخزين بيانات إضافية (مثل المدينة المولّدة والحقيقة الممتعة) التي تستمر طوال تنفيذ التدفق.
+
+عند تشغيل التدفق، سيقوم بما يلي:
+1. توليد معرّف فريد لحالة التدفق
+2. توليد مدينة عشوائية وتخزينها في الحالة
+3. توليد حقيقة ممتعة عن تلك المدينة وتخزينها في الحالة
+4. طباعة النتائج في وحدة التحكم
+
+يمكن أن يكون المعرّف الفريد للحالة والبيانات المخزّنة مفيدًا لتتبع عمليات تنفيذ التدفق والحفاظ على السياق بين المهام.
+
+**ملاحظة:** تأكد من إعداد ملف `.env` لتخزين `OPENAI_API_KEY` الخاص بك. هذا المفتاح ضروري للمصادقة على طلبات OpenAI API.
+
+### @start()
+
+يحدد المزخرف `@start()` نقاط الدخول للتدفق. يمكنك:
+
+- تعريف عدة نقاط بداية غير مشروطة: `@start()`
+- ربط البداية بدالة سابقة أو تسمية موجّه: `@start("method_or_label")`
+- توفير شرط قابل للاستدعاء للتحكم في وقت تنفيذ البداية
+
+جميع دوال `@start()` المستوفية للشروط ستُنفَّذ (غالبًا بالتوازي) عند بدء أو استئناف التدفق.
+
+### @listen()
+
+يُستخدم المزخرف `@listen()` لتحديد دالة كمستمع لمخرجات مهمة أخرى في التدفق. ستُنفَّذ الدالة المزخرفة بـ `@listen()` عندما تُصدر المهمة المحددة مخرجاتها. يمكن للدالة الوصول إلى مخرجات المهمة التي تستمع إليها كمعامل.
+
+#### الاستخدام
+
+يمكن استخدام المزخرف `@listen()` بعدة طرق:
+
+1. **الاستماع لدالة بالاسم**: يمكنك تمرير اسم الدالة التي تريد الاستماع إليها كسلسلة نصية. عند اكتمال تلك الدالة، سيتم تشغيل دالة المستمع.
+
+ ```python Code
+ @listen("generate_city")
+ def generate_fun_fact(self, random_city):
+ # Implementation
+ ```
+
+2. **الاستماع لدالة مباشرة**: يمكنك تمرير الدالة نفسها. عند اكتمال تلك الدالة، سيتم تشغيل دالة المستمع.
+ ```python Code
+ @listen(generate_city)
+ def generate_fun_fact(self, random_city):
+ # Implementation
+ ```
+
+### مخرجات التدفق
+
+الوصول إلى مخرجات التدفق والتعامل معها أمر أساسي لدمج سير عمل الذكاء الاصطناعي في التطبيقات أو الأنظمة الأكبر. توفر تدفقات CrewAI آليات مباشرة لاسترداد المخرجات النهائية والوصول إلى النتائج الوسيطة وإدارة الحالة العامة للتدفق.
+
+#### استرداد المخرجات النهائية
+
+عند تشغيل تدفق، يتم تحديد المخرجات النهائية بواسطة آخر دالة تكتمل. تُعيد دالة `kickoff()` مخرجات هذه الدالة الأخيرة.
+
+إليك كيفية الوصول إلى المخرجات النهائية:
+
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+
+class OutputExampleFlow(Flow):
+ @start()
+ def first_method(self):
+ return "Output from first_method"
+
+ @listen(first_method)
+ def second_method(self, first_output):
+ return f"Second method received: {first_output}"
+
+
+flow = OutputExampleFlow()
+flow.plot("my_flow_plot")
+final_output = flow.kickoff()
+
+print("---- Final Output ----")
+print(final_output)
+```
+
+```text Output
+---- Final Output ----
+Second method received: Output from first_method
+```
+
+
+
+
+في هذا المثال، `second_method` هي آخر دالة تكتمل، لذا ستكون مخرجاتها هي المخرجات النهائية للتدفق.
+ستُعيد دالة `kickoff()` المخرجات النهائية، التي تُطبع بعد ذلك في وحدة التحكم. ستولّد دالة `plot()` ملف HTML الذي سيساعدك على فهم التدفق.
+
+#### الوصول إلى الحالة وتحديثها
+
+بالإضافة إلى استرداد المخرجات النهائية، يمكنك أيضًا الوصول إلى الحالة وتحديثها داخل التدفق. يمكن استخدام الحالة لتخزين ومشاركة البيانات بين الدوال المختلفة في التدفق. بعد تشغيل التدفق، يمكنك الوصول إلى الحالة لاسترداد أي معلومات تمت إضافتها أو تحديثها أثناء التنفيذ.
+
+إليك مثال على كيفية تحديث الحالة والوصول إليها:
+
+
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+from pydantic import BaseModel
+
+class ExampleState(BaseModel):
+ counter: int = 0
+ message: str = ""
+
+class StateExampleFlow(Flow[ExampleState]):
+
+ @start()
+ def first_method(self):
+ self.state.message = "Hello from first_method"
+ self.state.counter += 1
+
+ @listen(first_method)
+ def second_method(self):
+ self.state.message += " - updated by second_method"
+ self.state.counter += 1
+ return self.state.message
+
+flow = StateExampleFlow()
+flow.plot("my_flow_plot")
+final_output = flow.kickoff()
+print(f"Final Output: {final_output}")
+print("Final State:")
+print(flow.state)
+```
+
+```text Output
+Final Output: Hello from first_method - updated by second_method
+Final State:
+counter=2 message='Hello from first_method - updated by second_method'
+```
+
+
+
+
+
+في هذا المثال، يتم تحديث الحالة بواسطة كل من `first_method` و `second_method`.
+بعد تشغيل التدفق، يمكنك الوصول إلى الحالة النهائية لرؤية التحديثات التي أجرتها هذه الدوال.
+
+من خلال ضمان إعادة مخرجات الدالة الأخيرة وتوفير الوصول إلى الحالة، تجعل تدفقات CrewAI من السهل دمج نتائج سير عمل الذكاء الاصطناعي في التطبيقات أو الأنظمة الأكبر،
+مع الحفاظ على الوصول إلى الحالة طوال تنفيذ التدفق.
+
+## مقاييس استخدام التدفق
+
+بعد اكتمال تنفيذ التدفق، يمكنك الوصول إلى الخاصية `usage_metrics` لعرض إجمالي استخدام التوكنات عبر **كل استدعاء لنموذج اللغة** يتم خلال التشغيل — بما في ذلك الاستدعاءات من كل فريق (Crew) ينظمه التدفق، والاستدعاءات داخل أدوات الـ Agents، والاستدعاءات المباشرة لـ `LLM.call(...)` من دوال التدفق. هذا هو المكافئ على جانب الـ SDK للإجماليات المعروضة في واجهة CrewAI Enterprise.
+
+```python Code
+from crewai import LLM
+from crewai.flow.flow import Flow, listen, start
+
+class UsageMetricsFlow(Flow):
+ @start()
+ def run_first_crew(self):
+ self.state.first_result = FirstCrew().crew().kickoff()
+
+ @listen(run_first_crew)
+ def call_llm_directly(self):
+ # استدعاء مباشر لنموذج اللغة — يُحسب أيضًا ضمن flow.usage_metrics
+ llm = LLM(model="openai/gpt-4o-mini")
+ self.state.summary = llm.call("لخّص النقاط الرئيسية.")
+
+ @listen(call_llm_directly)
+ def run_second_crew(self):
+ self.state.second_result = SecondCrew().crew().kickoff()
+
+flow = UsageMetricsFlow()
+flow.kickoff()
+
+print(flow.usage_metrics)
+# UsageMetrics(total_tokens=8579, prompt_tokens=6210, completion_tokens=2369,
+# cached_prompt_tokens=0, reasoning_tokens=0,
+# cache_creation_tokens=0, successful_requests=5)
+```
+
+
+ `flow.usage_metrics` **ليست** نفس `flow.kickoff().token_usage`. هذه الأخيرة
+ ترجع فقط `CrewOutput.token_usage` لـ **آخر** دالة `@listen` أعادت
+ `CrewOutput`، مما يعني أنها تعكس فقط الفريق الأخير وتتجاهل الفرق السابقة
+ وكذلك أي استدعاءات مباشرة لـ `LLM.call(...)`. استخدم `flow.usage_metrics`
+ كلما احتجت إلى الإجمالي **الكامل** للتوكنات لتنفيذ التدفق.
+
+
+كل حقل في [`UsageMetrics`](https://github.com/crewAIInc/crewAI/blob/main/lib/crewai/src/crewai/types/usage_metrics.py) المُعاد هو مجموع جميع استدعاءات نموذج اللغة التي حدثت خلال استدعاء واحد لـ `flow.kickoff()`. تتم إعادة تعيين العدادات عند الاستدعاء التالي لـ `kickoff()` (وفي كل تكرار من `kickoff_for_each`)، لذلك لن تتكرر العدّات عبر التشغيلات المتتالية. يمكن قراءة هذه الخاصية بأمان في أي وقت بعد اكتمال `kickoff()`؛ قراءتها أثناء التنفيذ تُرجع المجموع الجزئي المتراكم حتى تلك اللحظة.
+
+## إدارة حالة التدفق
+
+إدارة الحالة بفعالية أمر بالغ الأهمية لبناء سير عمل ذكاء اصطناعي موثوق وقابل للصيانة. توفر تدفقات CrewAI آليات قوية لإدارة الحالة غير المهيكلة والمهيكلة،
+مما يتيح للمطورين اختيار النهج الأنسب لاحتياجات تطبيقاتهم.
+
+### إدارة الحالة غير المهيكلة
+
+في إدارة الحالة غير المهيكلة، يتم تخزين جميع الحالات في خاصية `state` لفئة `Flow`.
+يوفر هذا النهج مرونة، مما يمكّن المطورين من إضافة أو تعديل خصائص الحالة أثناء التشغيل دون تحديد مخطط صارم.
+حتى مع الحالات غير المهيكلة، تولّد تدفقات CrewAI تلقائيًا معرّفًا فريدًا (UUID) لكل مثيل حالة وتحافظ عليه.
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+
+class UnstructuredExampleFlow(Flow):
+
+ @start()
+ def first_method(self):
+ # The state automatically includes an 'id' field
+ print(f"State ID: {self.state['id']}")
+ self.state['counter'] = 0
+ self.state['message'] = "Hello from structured flow"
+
+ @listen(first_method)
+ def second_method(self):
+ self.state['counter'] += 1
+ self.state['message'] += " - updated"
+
+ @listen(second_method)
+ def third_method(self):
+ self.state['counter'] += 1
+ self.state['message'] += " - updated again"
+
+ print(f"State after third_method: {self.state}")
+
+
+flow = UnstructuredExampleFlow()
+flow.plot("my_flow_plot")
+flow.kickoff()
+```
+
+
+
+**ملاحظة:** يتم توليد حقل `id` تلقائيًا والحفاظ عليه طوال تنفيذ التدفق. لا تحتاج إلى إدارته أو تعيينه يدويًا، وسيتم الحفاظ عليه حتى عند تحديث الحالة ببيانات جديدة.
+
+**النقاط الرئيسية:**
+
+- **المرونة:** يمكنك إضافة خصائص ديناميكيًا إلى `self.state` دون قيود محددة مسبقًا.
+- **البساطة:** مثالي لسير العمل البسيط حيث يكون هيكل الحالة بسيطًا أو متغيرًا بشكل كبير.
+
+### إدارة الحالة المهيكلة
+
+تستفيد إدارة الحالة المهيكلة من مخططات محددة مسبقًا لضمان الاتساق وسلامة الأنواع عبر سير العمل.
+باستخدام نماذج مثل `BaseModel` من Pydantic، يمكن للمطورين تحديد الشكل الدقيق للحالة، مما يتيح تحققًا أفضل وإكمالًا تلقائيًا في بيئات التطوير.
+
+تتلقى كل حالة في تدفقات CrewAI تلقائيًا معرّفًا فريدًا (UUID) للمساعدة في تتبع وإدارة مثيلات الحالة. يتم توليد هذا المعرّف وإدارته تلقائيًا بواسطة نظام التدفق.
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+from pydantic import BaseModel
+
+
+class ExampleState(BaseModel):
+ # Note: 'id' field is automatically added to all states
+ counter: int = 0
+ message: str = ""
+
+
+class StructuredExampleFlow(Flow[ExampleState]):
+
+ @start()
+ def first_method(self):
+ # Access the auto-generated ID if needed
+ print(f"State ID: {self.state.id}")
+ self.state.message = "Hello from structured flow"
+
+ @listen(first_method)
+ def second_method(self):
+ self.state.counter += 1
+ self.state.message += " - updated"
+
+ @listen(second_method)
+ def third_method(self):
+ self.state.counter += 1
+ self.state.message += " - updated again"
+
+ print(f"State after third_method: {self.state}")
+
+
+flow = StructuredExampleFlow()
+flow.kickoff()
+```
+
+
+
+**النقاط الرئيسية:**
+
+- **مخطط محدد:** يحدد `ExampleState` هيكل الحالة بوضوح، مما يعزز قابلية قراءة الكود وصيانته.
+- **سلامة الأنواع:** يضمن استخدام Pydantic التزام خصائص الحالة بالأنواع المحددة، مما يقلل من أخطاء وقت التشغيل.
+- **الإكمال التلقائي:** يمكن لبيئات التطوير المتكاملة توفير إكمال تلقائي أفضل وفحص أخطاء بناءً على نموذج الحالة المحدد.
+
+### الاختيار بين إدارة الحالة غير المهيكلة والمهيكلة
+
+- **استخدم إدارة الحالة غير المهيكلة عندما:**
+
+ - يكون حالة سير العمل بسيطة أو ديناميكية للغاية.
+ - تكون المرونة أولوية على تعريفات الحالة الصارمة.
+ - يكون النماذج الأولية السريعة مطلوبة دون عبء تحديد المخططات.
+
+- **استخدم إدارة الحالة المهيكلة عندما:**
+ - يتطلب سير العمل هيكل حالة محدد جيدًا ومتسق.
+ - تكون سلامة الأنواع والتحقق مهمتين لموثوقية تطبيقك.
+ - تريد الاستفادة من ميزات بيئة التطوير المتكاملة مثل الإكمال التلقائي وفحص الأنواع لتجربة مطور أفضل.
+
+من خلال توفير خيارات إدارة الحالة غير المهيكلة والمهيكلة، تمكّن تدفقات CrewAI المطورين من بناء سير عمل ذكاء اصطناعي مرن ومتين في آن واحد، ملبيةً مجموعة واسعة من متطلبات التطبيقات.
+
+## استمرارية التدفق
+
+يتيح مزخرف @persist الاستمرارية التلقائية للحالة في تدفقات CrewAI، مما يسمح لك بالحفاظ على حالة التدفق عبر عمليات إعادة التشغيل أو تنفيذات سير العمل المختلفة. يمكن تطبيق هذا المزخرف على مستوى الفئة أو مستوى الدالة، مما يوفر مرونة في كيفية إدارة استمرارية الحالة.
+
+### الاستمرارية على مستوى الفئة
+
+عند التطبيق على مستوى الفئة، يقوم مزخرف @persist باستمرارية حالات جميع دوال التدفق تلقائيًا:
+
+```python
+@persist # Using SQLiteFlowPersistence by default
+class MyFlow(Flow[MyState]):
+ @start()
+ def initialize_flow(self):
+ # This method will automatically have its state persisted
+ self.state.counter = 1
+ print("Initialized flow. State ID:", self.state.id)
+
+ @listen(initialize_flow)
+ def next_step(self):
+ # The state (including self.state.id) is automatically reloaded
+ self.state.counter += 1
+ print("Flow state is persisted. Counter:", self.state.counter)
+```
+
+### الاستمرارية على مستوى الدالة
+
+للتحكم الأكثر دقة، يمكنك تطبيق @persist على دوال محددة:
+
+```python
+class AnotherFlow(Flow[dict]):
+ @persist # Persists only this method's state
+ @start()
+ def begin(self):
+ if "runs" not in self.state:
+ self.state["runs"] = 0
+ self.state["runs"] += 1
+ print("Method-level persisted runs:", self.state["runs"])
+```
+
+### تفرع الحالة المستمرة
+
+يدعم `@persist` نمطين متميزين للترطيب في `kickoff` / `kickoff_async`:
+
+- `kickoff(inputs={"id": })` — **استئناف**: يحمّل أحدث لقطة لـ UUID المقدم ويستمر في الكتابة تحت نفس `flow_uuid`. يمتد التاريخ.
+- `kickoff(restore_from_state_id=)` — **تفرع**: يحمّل أحدث لقطة لـ UUID المقدم، يرطّب حالة التشغيل الجديد منها، ثم يعيّن `state.id` جديدًا (مولّدًا تلقائيًا، أو `inputs["id"]` إذا تم تثبيته). تذهب كتابات `@persist` للتشغيل الجديد تحت `state.id` الجديد؛ يتم الحفاظ على تاريخ تدفق المصدر.
+
+```python
+from crewai.flow.flow import Flow, start
+from crewai.flow.persistence import persist
+from pydantic import BaseModel
+
+class CounterState(BaseModel):
+ id: str = ""
+ counter: int = 0
+
+@persist
+class CounterFlow(Flow[CounterState]):
+ @start()
+ def step(self):
+ self.state.counter += 1
+ print(f"[id={self.state.id}] counter={self.state.counter}")
+
+# التشغيل 1: حالة جديدة، العداد 0 -> 1، محفوظ تحت flow_1.state.id
+flow_1 = CounterFlow()
+flow_1.kickoff()
+
+# التفرع: ترطيب من أحدث لقطة لـ flow_1، لكن باستخدام state.id جديد
+flow_2 = CounterFlow()
+flow_2.kickoff(restore_from_state_id=flow_1.state.id)
+# يبدأ flow_2.state.counter بـ 1 (مرطّب)، ثم تزيده step() إلى 2.
+# flow_2.state.id != flow_1.state.id؛ تاريخ flow_1 لم يتغيّر.
+```
+
+إذا لم يطابق `restore_from_state_id` المقدم أي حالة مستمرة، يعود kickoff بصمت إلى السلوك الافتراضي — نفس سلوك `inputs["id"]` عند عدم العثور عليه. الجمع بين `restore_from_state_id` و `from_checkpoint` يطلق `ValueError`؛ اختر مصدر ترطيب واحدًا. تثبيت `inputs["id"]` أثناء التفرع يشارك مفتاح الاستمرارية مع تدفق آخر — عادةً ما تريد استخدام `restore_from_state_id` فقط.
+
+### كيف تعمل
+
+1. **تعريف الحالة الفريد**
+ - تتلقى كل حالة تدفق UUID فريد تلقائيًا
+ - يتم الحفاظ على المعرّف عبر تحديثات الحالة واستدعاءات الدوال
+ - يدعم كلًا من الحالات المهيكلة (Pydantic BaseModel) وغير المهيكلة (القاموس)
+
+2. **واجهة SQLite الافتراضية**
+ - SQLiteFlowPersistence هي واجهة التخزين الافتراضية
+ - يتم حفظ الحالات تلقائيًا في قاعدة بيانات SQLite محلية
+ - معالجة أخطاء متينة تضمن رسائل واضحة في حالة فشل عمليات قاعدة البيانات
+
+3. **معالجة الأخطاء**
+ - رسائل خطأ شاملة لعمليات قاعدة البيانات
+ - تحقق تلقائي من الحالة أثناء الحفظ والتحميل
+ - ملاحظات واضحة عند مواجهة مشاكل في عمليات الاستمرارية
+
+### اعتبارات مهمة
+
+- **أنواع الحالة**: يتم دعم كل من الحالات المهيكلة (Pydantic BaseModel) وغير المهيكلة (القاموس)
+- **المعرّف التلقائي**: يتم إضافة حقل `id` تلقائيًا إذا لم يكن موجودًا
+- **استعادة الحالة**: يمكن للتدفقات الفاشلة أو المُعاد تشغيلها إعادة تحميل حالتها السابقة تلقائيًا
+- **التنفيذ المخصص**: يمكنك توفير تنفيذ FlowPersistence الخاص بك لاحتياجات التخزين المتخصصة
+
+### المزايا التقنية
+
+1. **تحكم دقيق من خلال الوصول المنخفض المستوى**
+ - وصول مباشر لعمليات الاستمرارية لحالات الاستخدام المتقدمة
+ - تحكم دقيق عبر مزخرفات الاستمرارية على مستوى الدوال
+ - قدرات مدمجة لفحص الحالة وتصحيح الأخطاء
+ - رؤية كاملة لتغييرات الحالة وعمليات الاستمرارية
+
+2. **موثوقية معززة**
+ - استعادة تلقائية للحالة بعد أعطال النظام أو إعادة التشغيل
+ - تحديثات حالة قائمة على المعاملات لسلامة البيانات
+ - معالجة أخطاء شاملة مع رسائل خطأ واضحة
+ - تحقق متين أثناء عمليات حفظ وتحميل الحالة
+
+3. **بنية قابلة للتوسع**
+ - واجهة استمرارية قابلة للتخصيص من خلال واجهة FlowPersistence
+ - دعم لحلول تخزين متخصصة تتجاوز SQLite
+ - متوافقة مع كل من الحالات المهيكلة (Pydantic) وغير المهيكلة (dict)
+ - تكامل سلس مع أنماط تدفق CrewAI الحالية
+
+تركز بنية نظام الاستمرارية على الدقة التقنية وخيارات التخصيص، مما يتيح للمطورين الحفاظ على التحكم الكامل في إدارة الحالة مع الاستفادة من ميزات الموثوقية المدمجة.
+
+## التحكم في التدفق
+
+### المنطق الشرطي: `or`
+
+تتيح لك دالة `or_` في التدفقات الاستماع لعدة دوال وتشغيل دالة المستمع عندما تُصدر أي من الدوال المحددة مخرجاتها.
+
+
+
+```python Code
+from crewai.flow.flow import Flow, listen, or_, start
+
+class OrExampleFlow(Flow):
+
+ @start()
+ def start_method(self):
+ return "Hello from the start method"
+
+ @listen(start_method)
+ def second_method(self):
+ return "Hello from the second method"
+
+ @listen(or_(start_method, second_method))
+ def logger(self, result):
+ print(f"Logger: {result}")
+
+
+
+flow = OrExampleFlow()
+flow.plot("my_flow_plot")
+flow.kickoff()
+```
+
+```text Output
+Logger: Hello from the start method
+Logger: Hello from the second method
+```
+
+
+
+
+
+عند تشغيل هذا التدفق، سيتم تشغيل دالة `logger` بواسطة مخرجات إما `start_method` أو `second_method`.
+تُستخدم دالة `or_` للاستماع لعدة دوال وتشغيل دالة المستمع عندما تُصدر أي من الدوال المحددة مخرجاتها.
+
+### المنطق الشرطي: `and`
+
+تتيح لك دالة `and_` في التدفقات الاستماع لعدة دوال وتشغيل دالة المستمع فقط عندما تُصدر جميع الدوال المحددة مخرجاتها.
+
+
+
+```python Code
+from crewai.flow.flow import Flow, and_, listen, start
+
+class AndExampleFlow(Flow):
+
+ @start()
+ def start_method(self):
+ self.state["greeting"] = "Hello from the start method"
+
+ @listen(start_method)
+ def second_method(self):
+ self.state["joke"] = "What do computers eat? Microchips."
+
+ @listen(and_(start_method, second_method))
+ def logger(self):
+ print("---- Logger ----")
+ print(self.state)
+
+flow = AndExampleFlow()
+flow.plot()
+flow.kickoff()
+```
+
+```text Output
+---- Logger ----
+{'greeting': 'Hello from the start method', 'joke': 'What do computers eat? Microchips.'}
+```
+
+
+
+
+
+عند تشغيل هذا التدفق، سيتم تشغيل دالة `logger` فقط عندما يُصدر كل من `start_method` و `second_method` مخرجاتهما.
+تُستخدم دالة `and_` للاستماع لعدة دوال وتشغيل دالة المستمع فقط عندما تُصدر جميع الدوال المحددة مخرجاتها.
+
+### الموجّه
+
+يتيح لك مزخرف `@router()` في التدفقات تحديد منطق توجيه شرطي بناءً على مخرجات دالة.
+يمكنك تحديد مسارات مختلفة بناءً على مخرجات الدالة، مما يتيح لك التحكم في تدفق التنفيذ ديناميكيًا.
+
+
+
+```python Code
+import random
+from crewai.flow.flow import Flow, listen, router, start
+from pydantic import BaseModel
+
+class ExampleState(BaseModel):
+ success_flag: bool = False
+
+class RouterFlow(Flow[ExampleState]):
+
+ @start()
+ def start_method(self):
+ print("Starting the structured flow")
+ random_boolean = random.choice([True, False])
+ self.state.success_flag = random_boolean
+
+ @router(start_method)
+ def second_method(self):
+ if self.state.success_flag:
+ return "success"
+ else:
+ return "failed"
+
+ @listen("success")
+ def third_method(self):
+ print("Third method running")
+
+ @listen("failed")
+ def fourth_method(self):
+ print("Fourth method running")
+
+
+flow = RouterFlow()
+flow.plot("my_flow_plot")
+flow.kickoff()
+```
+
+```text Output
+Starting the structured flow
+Third method running
+Fourth method running
+```
+
+
+
+
+
+في المثال أعلاه، تولّد `start_method` قيمة منطقية عشوائية وتعيّنها في الحالة.
+تستخدم `second_method` مزخرف `@router()` لتحديد منطق توجيه شرطي بناءً على قيمة المنطقية.
+إذا كانت القيمة `True`، تُعيد الدالة `"success"`، وإذا كانت `False`، تُعيد `"failed"`.
+تستمع `third_method` و `fourth_method` لمخرجات `second_method` وتُنفَّذ بناءً على القيمة المُعادة.
+
+عند تشغيل هذا التدفق، ستتغير المخرجات بناءً على القيمة المنطقية العشوائية المولّدة بواسطة `start_method`.
+
+### الإنسان في الحلقة (التغذية الراجعة البشرية)
+
+
+يتطلب مزخرف `@human_feedback` **CrewAI الإصدار 1.8.0 أو أعلى**.
+
+
+يتيح مزخرف `@human_feedback` سير عمل يتضمن تدخلًا بشريًا من خلال إيقاف تنفيذ التدفق مؤقتًا لجمع تغذية راجعة من إنسان. هذا مفيد لبوابات الموافقة ومراجعة الجودة ونقاط القرار التي تتطلب حكمًا بشريًا.
+
+```python Code
+from crewai.flow.flow import Flow, start, listen
+from crewai.flow.human_feedback import human_feedback, HumanFeedbackResult
+
+class ReviewFlow(Flow):
+ @start()
+ @human_feedback(
+ message="Do you approve this content?",
+ emit=["approved", "rejected", "needs_revision"],
+ llm="gpt-4o-mini",
+ default_outcome="needs_revision",
+ )
+ def generate_content(self):
+ return "Content to be reviewed..."
+
+ @listen("approved")
+ def on_approval(self, result: HumanFeedbackResult):
+ print(f"Approved! Feedback: {result.feedback}")
+
+ @listen("rejected")
+ def on_rejection(self, result: HumanFeedbackResult):
+ print(f"Rejected. Reason: {result.feedback}")
+```
+
+عند تحديد `emit`، يتم تفسير التغذية الراجعة الحرة للإنسان بواسطة LLM وتُختصر إلى إحدى النتائج المحددة، والتي تُشغل بعد ذلك مزخرف `@listen` المقابل.
+
+يمكنك أيضًا استخدام `@human_feedback` دون توجيه لجمع التغذية الراجعة ببساطة:
+
+```python Code
+@start()
+@human_feedback(message="Any comments on this output?")
+def my_method(self):
+ return "Output for review"
+
+@listen(my_method)
+def next_step(self, result: HumanFeedbackResult):
+ # Access feedback via result.feedback
+ # Access original output via result.output
+ pass
+```
+
+يمكنك الوصول إلى جميع التغذيات الراجعة المُجمّعة أثناء التدفق عبر `self.last_human_feedback` (الأحدث) أو `self.human_feedback_history` (جميع التغذيات الراجعة كقائمة).
+
+للحصول على دليل كامل حول التغذية الراجعة البشرية في التدفقات، بما في ذلك **التغذية الراجعة غير المتزامنة/غير الحاجبة** مع مزودين مخصصين (Slack، webhooks، إلخ)، انظر [التغذية الراجعة البشرية في التدفقات](/ar/learn/human-feedback-in-flows).
+
+## إضافة Agents إلى التدفقات
+
+يمكن دمج Agents بسلاسة في تدفقاتك، مما يوفر بديلًا خفيف الوزن لفرق Crew الكاملة عندما تحتاج إلى تنفيذ مهام أبسط وأكثر تركيزًا. إليك مثال على كيفية استخدام Agent ضمن تدفق لإجراء أبحاث السوق:
+
+```python
+import asyncio
+from typing import Any, Dict, List
+
+from crewai_tools import SerperDevTool
+from pydantic import BaseModel, Field
+
+from crewai.agent import Agent
+from crewai.flow.flow import Flow, listen, start
+
+
+# Define a structured output format
+class MarketAnalysis(BaseModel):
+ key_trends: List[str] = Field(description="List of identified market trends")
+ market_size: str = Field(description="Estimated market size")
+ competitors: List[str] = Field(description="Major competitors in the space")
+
+
+# Define flow state
+class MarketResearchState(BaseModel):
+ product: str = ""
+ analysis: MarketAnalysis | None = None
+
+
+# Create a flow class
+class MarketResearchFlow(Flow[MarketResearchState]):
+ @start()
+ def initialize_research(self) -> Dict[str, Any]:
+ print(f"Starting market research for {self.state.product}")
+ return {"product": self.state.product}
+
+ @listen(initialize_research)
+ async def analyze_market(self) -> Dict[str, Any]:
+ # Create an Agent for market research
+ analyst = Agent(
+ role="Market Research Analyst",
+ goal=f"Analyze the market for {self.state.product}",
+ backstory="You are an experienced market analyst with expertise in "
+ "identifying market trends and opportunities.",
+ tools=[SerperDevTool()],
+ verbose=True,
+ )
+
+ # Define the research query
+ query = f"""
+ Research the market for {self.state.product}. Include:
+ 1. Key market trends
+ 2. Market size
+ 3. Major competitors
+
+ Format your response according to the specified structure.
+ """
+
+ # Execute the analysis with structured output format
+ result = await analyst.kickoff_async(query, response_format=MarketAnalysis)
+ if result.pydantic:
+ print("result", result.pydantic)
+ else:
+ print("result", result)
+
+ # Return the analysis to update the state
+ return {"analysis": result.pydantic}
+
+ @listen(analyze_market)
+ def present_results(self, analysis) -> None:
+ print("\nMarket Analysis Results")
+ print("=====================")
+
+ if isinstance(analysis, dict):
+ # If we got a dict with 'analysis' key, extract the actual analysis object
+ market_analysis = analysis.get("analysis")
+ else:
+ market_analysis = analysis
+
+ if market_analysis and isinstance(market_analysis, MarketAnalysis):
+ print("\nKey Market Trends:")
+ for trend in market_analysis.key_trends:
+ print(f"- {trend}")
+
+ print(f"\nMarket Size: {market_analysis.market_size}")
+
+ print("\nMajor Competitors:")
+ for competitor in market_analysis.competitors:
+ print(f"- {competitor}")
+ else:
+ print("No structured analysis data available.")
+ print("Raw analysis:", analysis)
+
+
+# Usage example
+async def run_flow():
+ flow = MarketResearchFlow()
+ flow.plot("MarketResearchFlowPlot")
+ result = await flow.kickoff_async(inputs={"product": "AI-powered chatbots"})
+ return result
+
+
+# Run the flow
+if __name__ == "__main__":
+ asyncio.run(run_flow())
+```
+
+
+
+يوضح هذا المثال عدة ميزات رئيسية لاستخدام Agents في التدفقات:
+
+1. **المخرجات المهيكلة**: استخدام نماذج Pydantic لتحديد تنسيق المخرجات المتوقع (`MarketAnalysis`) يضمن سلامة الأنواع والبيانات المهيكلة في جميع أنحاء التدفق.
+
+2. **إدارة الحالة**: تحافظ حالة التدفق (`MarketResearchState`) على السياق بين الخطوات وتخزّن كلًا من المدخلات والمخرجات.
+
+3. **تكامل الأدوات**: يمكن لـ Agents استخدام أدوات (مثل `WebsiteSearchTool`) لتعزيز قدراتهم.
+
+## إضافة فرق Crew إلى التدفقات
+
+إنشاء تدفق مع فرق Crew متعددة في CrewAI أمر مباشر.
+
+يمكنك إنشاء مشروع CrewAI جديد يتضمن جميع الهيكلية اللازمة لإنشاء تدفق مع فرق Crew متعددة عن طريق تشغيل الأمر التالي:
+
+```bash
+crewai create flow name_of_flow
+```
+
+سيولّد هذا الأمر مشروع CrewAI جديد مع هيكل المجلدات اللازم. يتضمن المشروع المولّد فريق Crew مُعد مسبقًا يُسمى `poem_crew` ويعمل بالفعل. يستخدم الـ embedded crew الابتدائي بنية Python/YAML الكلاسيكية؛ أما crews المستقلة الجديدة التي تُنشأ عبر `crewai create crew` فتستخدم بنية JSON-first.
+
+### هيكل المجلدات
+
+بعد تشغيل أمر `crewai create flow name_of_flow`، سترى هيكل مجلدات مشابه للتالي:
+
+| المجلد/الملف | الوصف |
+| :--------------------- | :----------------------------------------------------------------- |
+| `name_of_flow/` | المجلد الجذر للتدفق. |
+| ├── `crews/` | يحتوي على مجلدات لفرق Crew المحددة. |
+| │ └── `poem_crew/` | مجلد لـ "poem_crew" مع إعداداته وسكربتاته. |
+| │ ├── `config/` | مجلد ملفات الإعداد لـ "poem_crew". |
+| │ │ ├── `agents.yaml` | ملف YAML يحدد الـ Agents لـ "poem_crew". |
+| │ │ └── `tasks.yaml` | ملف YAML يحدد المهام لـ "poem_crew". |
+| │ ├── `poem_crew.py` | سكربت وظائف "poem_crew". |
+| ├── `tools/` | مجلد للأدوات الإضافية المُستخدمة في التدفق. |
+| │ └── `custom_tool.py` | تنفيذ أداة مخصصة. |
+| ├── `main.py` | السكربت الرئيسي لتشغيل التدفق. |
+| ├── `README.md` | وصف المشروع والتعليمات. |
+| ├── `pyproject.toml` | ملف إعداد تبعيات المشروع والإعدادات. |
+| └── `.gitignore` | يحدد الملفات والمجلدات المراد تجاهلها في التحكم بالإصدارات. |
+
+### بناء فرق Crew الخاصة بك
+
+في مجلد `crews`، يمكنك تحديد فرق Crew متعددة. سيكون لكل فريق مجلده الخاص الذي يحتوي على ملفات الإعداد وملف تعريف الفريق. على سبيل المثال، يحتوي مجلد `poem_crew` على:
+
+- `config/agents.yaml`: يحدد الـ Agents للفريق.
+- `config/tasks.yaml`: يحدد المهام للفريق.
+- `poem_crew.py`: يحتوي على تعريف الفريق، بما في ذلك الـ Agents والمهام والفريق نفسه.
+
+يمكنك نسخ ولصق وتعديل `poem_crew` لإنشاء crews كلاسيكية مضمّنة أخرى.
+
+للـ crews المضمّنة بنمط JSON-first، استخدم مجلدًا يحتوي على `crew.jsonc` و `agents/*.jsonc`:
+
+```text
+crews/
+└── research_crew/
+ ├── agents/
+ │ └── researcher.jsonc
+ └── crew.jsonc
+```
+
+ثم حمّلها من خطوة في Flow:
+
+```python
+from pathlib import Path
+from crewai.project import load_crew
+
+crew, default_inputs = load_crew(
+ Path(__file__).parent / "crews" / "research_crew" / "crew.jsonc"
+)
+result = crew.kickoff(inputs={**default_inputs, "topic": "AI Agents"})
+```
+
+### ربط فرق Crew في `main.py`
+
+ملف `main.py` هو حيث تنشئ التدفق وتربط فرق Crew معًا. يمكنك تحديد التدفق باستخدام فئة `Flow` والمزخرفات `@start` و `@listen` لتحديد تدفق التنفيذ.
+
+إليك مثال على كيفية ربط `poem_crew` في ملف `main.py`:
+
+```python Code
+#!/usr/bin/env python
+from random import randint
+
+from pydantic import BaseModel
+from crewai.flow.flow import Flow, listen, start
+from .crews.poem_crew.poem_crew import PoemCrew
+
+
+class PoemState(BaseModel):
+ sentence_count: int = 1
+ poem: str = ""
+
+class PoemFlow(Flow[PoemState]):
+
+ @start()
+ def generate_sentence_count(self):
+ print("Generating sentence count")
+ self.state.sentence_count = randint(1, 5)
+
+ @listen(generate_sentence_count)
+ def generate_poem(self):
+ print("Generating poem")
+ result = PoemCrew().crew().kickoff(inputs={"sentence_count": self.state.sentence_count})
+
+ print("Poem generated", result.raw)
+ self.state.poem = result.raw
+
+ @listen(generate_poem)
+ def save_poem(self):
+ print("Saving poem")
+ with open("poem.txt", "w") as f:
+ f.write(self.state.poem)
+
+def kickoff():
+ poem_flow = PoemFlow()
+ poem_flow.kickoff()
+
+
+def plot():
+ poem_flow = PoemFlow()
+ poem_flow.plot("PoemFlowPlot")
+
+if __name__ == "__main__":
+ kickoff()
+ plot()
+```
+
+في هذا المثال، تحدد فئة `PoemFlow` تدفقًا يولّد عدد الجمل، ويستخدم `PoemCrew` لتوليد قصيدة، ثم يحفظ القصيدة في ملف. يتم بدء التدفق باستدعاء دالة `kickoff()`. سيتم توليد PoemFlowPlot بواسطة دالة `plot()`.
+
+
+
+### تشغيل التدفق
+
+(اختياري) قبل تشغيل التدفق، يمكنك تثبيت التبعيات بتشغيل:
+
+```bash
+crewai install
+```
+
+بمجرد تثبيت جميع التبعيات، تحتاج إلى تفعيل البيئة الافتراضية بتشغيل:
+
+```bash
+source .venv/bin/activate
+```
+
+بعد تفعيل البيئة الافتراضية، يمكنك تشغيل التدفق بتنفيذ أحد الأوامر التالية:
+
+```bash
+crewai run
+```
+
+أو
+
+```bash
+uv run kickoff
+```
+
+سيُنفَّذ التدفق، ويجب أن ترى المخرجات في وحدة التحكم.
+
+## رسم التدفقات
+
+يمكن أن يوفر تصوير سير عمل الذكاء الاصطناعي رؤى قيمة حول هيكل ومسارات تنفيذ تدفقاتك. تقدم CrewAI أداة تصوير قوية تتيح لك إنشاء رسوم بيانية تفاعلية لتدفقاتك، مما يسهّل فهم وتحسين سير عمل الذكاء الاصطناعي.
+
+### ما هي الرسوم البيانية؟
+
+الرسوم البيانية في CrewAI هي تمثيلات بصرية لسير عمل الذكاء الاصطناعي. تعرض المهام المختلفة واتصالاتها وتدفق البيانات بينها. يساعد هذا التصوير في فهم تسلسل العمليات وتحديد الاختناقات وضمان توافق منطق سير العمل مع توقعاتك.
+
+### كيفية إنشاء رسم بياني
+
+توفر CrewAI طريقتين مريحتين لإنشاء رسوم بيانية لتدفقاتك:
+
+#### الخيار 1: استخدام دالة `plot()`
+
+إذا كنت تعمل مباشرة مع مثيل تدفق، يمكنك إنشاء رسم بياني باستدعاء دالة `plot()` على كائن التدفق. ستُنشئ هذه الدالة ملف HTML يحتوي على الرسم البياني التفاعلي لتدفقك.
+
+```python Code
+# Assuming you have a flow instance
+flow.plot("my_flow_plot")
+```
+
+سيُنشئ هذا ملفًا باسم `my_flow_plot.html` في مجلدك الحالي. يمكنك فتح هذا الملف في متصفح ويب لعرض الرسم البياني التفاعلي.
+
+#### الخيار 2: استخدام سطر الأوامر
+
+إذا كنت تعمل ضمن مشروع CrewAI منظم، يمكنك إنشاء رسم بياني باستخدام سطر الأوامر. هذا مفيد بشكل خاص للمشاريع الأكبر حيث تريد تصوير إعداد التدفق بالكامل.
+
+```bash
+crewai flow plot
+```
+
+سيُنشئ هذا الأمر ملف HTML مع الرسم البياني لتدفقك، مشابهًا لدالة `plot()`. سيتم حفظ الملف في مجلد مشروعك، ويمكنك فتحه في متصفح ويب لاستكشاف التدفق.
+
+### فهم الرسم البياني
+
+سيعرض الرسم البياني المولّد عُقدًا تمثل المهام في تدفقك، مع حواف موجّهة تشير إلى تدفق التنفيذ. الرسم البياني تفاعلي، مما يتيح لك التكبير والتصغير والتمرير فوق العقد لرؤية تفاصيل إضافية.
+
+من خلال تصوير تدفقاتك، يمكنك الحصول على فهم أوضح لهيكل سير العمل، مما يسهّل تصحيح الأخطاء وتحسين عمليات الذكاء الاصطناعي والتواصل بشأنها مع الآخرين.
+
+### الخلاصة
+
+رسم تدفقاتك هو ميزة قوية في CrewAI تعزز قدرتك على تصميم وإدارة سير عمل الذكاء الاصطناعي المعقدة. سواء اخترت استخدام دالة `plot()` أو سطر الأوامر، فإن إنشاء الرسوم البيانية سيوفر لك تمثيلًا بصريًا لسير عملك، مما يساعد في التطوير والعرض.
+
+## الخطوات التالية
+
+إذا كنت مهتمًا باستكشاف أمثلة إضافية للتدفقات، لدينا مجموعة متنوعة من التوصيات في مستودع الأمثلة. إليك أربعة أمثلة تدفق محددة، كل منها يعرض حالات استخدام فريدة لمساعدتك في مطابقة نوع مشكلتك الحالية مع مثال محدد:
+
+1. **تدفق الرد التلقائي على البريد الإلكتروني**: يوضح هذا المثال حلقة لا نهائية حيث تعمل مهمة خلفية باستمرار لأتمتة ردود البريد الإلكتروني. إنها حالة استخدام رائعة للمهام التي تحتاج إلى التنفيذ بشكل متكرر دون تدخل يدوي. [عرض المثال](https://github.com/crewAIInc/crewAI-examples/tree/main/email_auto_responder_flow)
+
+2. **تدفق تقييم العملاء المحتملين**: يعرض هذا التدفق إضافة تغذية راجعة بشرية والتعامل مع فروع شرطية مختلفة باستخدام الموجّه. إنه مثال ممتاز لكيفية دمج اتخاذ القرارات الديناميكية والرقابة البشرية في سير عملك. [عرض المثال](https://github.com/crewAIInc/crewAI-examples/tree/main/lead-score-flow)
+
+3. **تدفق كتابة كتاب**: يتفوق هذا المثال في ربط فرق Crew متعددة معًا، حيث تُستخدم مخرجات فريق واحد بواسطة فريق آخر. على وجه التحديد، يقوم فريق واحد بوضع مخطط لكتاب كامل، ويقوم فريق آخر بإنشاء فصول بناءً على المخطط. في النهاية، يتم ربط كل شيء لإنتاج كتاب كامل. هذا التدفق مثالي للعمليات المعقدة متعددة الخطوات التي تتطلب تنسيقًا بين مهام مختلفة. [عرض المثال](https://github.com/crewAIInc/crewAI-examples/tree/main/write_a_book_with_flows)
+
+4. **تدفق مساعد الاجتماعات**: يوضح هذا التدفق كيفية بث حدث واحد لتشغيل إجراءات متابعة متعددة. على سبيل المثال، بعد اكتمال اجتماع، يمكن للتدفق تحديث لوحة Trello وإرسال رسالة Slack وحفظ النتائج. إنه مثال رائع للتعامل مع نتائج متعددة من حدث واحد، مما يجعله مثاليًا لإدارة المهام الشاملة وأنظمة الإشعارات. [عرض المثال](https://github.com/crewAIInc/crewAI-examples/tree/main/meeting_assistant_flow)
+
+من خلال استكشاف هذه الأمثلة، يمكنك الحصول على رؤى حول كيفية الاستفادة من تدفقات CrewAI لحالات استخدام متنوعة، من أتمتة المهام المتكررة إلى إدارة العمليات المعقدة متعددة الخطوات مع اتخاذ القرارات الديناميكية والتغذية الراجعة البشرية.
+
+أيضًا، شاهد فيديو YouTube الخاص بنا حول كيفية استخدام التدفقات في CrewAI أدناه!
+
+
+
+## تشغيل التدفقات
+
+هناك طريقتان لتشغيل التدفق:
+
+### استخدام واجهة Flow API
+
+يمكنك تشغيل تدفق برمجيًا عن طريق إنشاء مثيل من فئة التدفق واستدعاء دالة `kickoff()`:
+
+```python
+flow = ExampleFlow()
+result = flow.kickoff()
+```
+
+### بث تنفيذ التدفق
+
+للحصول على رؤية فورية لتنفيذ التدفق، يمكنك تفعيل البث لتلقي المخرجات فور توليدها:
+
+```python
+class StreamingFlow(Flow):
+ stream = True # Enable streaming
+
+ @start()
+ def research(self):
+ # Your flow implementation
+ pass
+
+# Iterate over streaming output
+flow = StreamingFlow()
+streaming = flow.kickoff()
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+# Access final result
+result = streaming.result
+```
+
+تعرّف على المزيد حول البث في دليل [بث تنفيذ التدفق](/ar/learn/streaming-flow-execution).
+
+## الذاكرة في التدفقات
+
+يتمتع كل تدفق تلقائيًا بإمكانية الوصول إلى نظام [الذاكرة](/concepts/memory) الموحد في CrewAI. يمكنك تخزين الذكريات واسترجاعها واستخراجها مباشرة داخل أي دالة تدفق باستخدام ثلاث دوال مساعدة مدمجة.
+
+### الدوال المدمجة
+
+| الدالة | الوصف |
+| :--- | :--- |
+| `self.remember(content, **kwargs)` | تخزين المحتوى في الذاكرة. تقبل `scope` و `categories` و `metadata` و `importance` اختياريًا. |
+| `self.recall(query, **kwargs)` | استرجاع الذكريات ذات الصلة. تقبل `scope` و `categories` و `limit` و `depth` اختياريًا. |
+| `self.extract_memories(content)` | تفكيك النص الخام إلى عبارات ذاكرة منفصلة ومستقلة. |
+
+يتم إنشاء مثيل `Memory()` افتراضي تلقائيًا عند تهيئة التدفق. يمكنك أيضًا تمرير مثيل مخصص:
+
+```python
+from crewai.flow.flow import Flow
+from crewai import Memory
+
+custom_memory = Memory(
+ recency_weight=0.5,
+ recency_half_life_days=7,
+ embedder={"provider": "ollama", "config": {"model_name": "mxbai-embed-large"}},
+)
+
+flow = MyFlow(memory=custom_memory)
+```
+
+### مثال: تدفق البحث والتحليل
+
+```python
+from crewai.flow.flow import Flow, listen, start
+
+
+class ResearchAnalysisFlow(Flow):
+ @start()
+ def gather_data(self):
+ # Simulate research findings
+ findings = (
+ "PostgreSQL handles 10k concurrent connections with connection pooling. "
+ "MySQL caps at around 5k. MongoDB scales horizontally but adds complexity."
+ )
+
+ # Extract atomic facts and remember each one
+ memories = self.extract_memories(findings)
+ for mem in memories:
+ self.remember(mem, scope="/research/databases")
+
+ return findings
+
+ @listen(gather_data)
+ def analyze(self, raw_findings):
+ # Recall relevant past research (from this run or previous runs)
+ past = self.recall("database performance and scaling", limit=10, depth="shallow")
+
+ context_lines = [f"- {m.record.content}" for m in past]
+ context = "\n".join(context_lines) if context_lines else "No prior context."
+
+ return {
+ "new_findings": raw_findings,
+ "prior_context": context,
+ "total_memories": len(past),
+ }
+
+
+flow = ResearchAnalysisFlow()
+result = flow.kickoff()
+print(result)
+```
+
+نظرًا لأن الذاكرة تستمر عبر عمليات التشغيل (مدعومة بـ LanceDB على القرص)، فإن خطوة `analyze` ستستدعي النتائج من عمليات التنفيذ السابقة أيضًا -- مما يتيح تدفقات تتعلم وتراكم المعرفة بمرور الوقت.
+
+انظر [وثائق الذاكرة](/concepts/memory) لمزيد من التفاصيل حول النطاقات والشرائح والتسجيل المركب وإعداد المُضمِّن والمزيد.
+
+### استخدام CLI
+
+بدءًا من الإصدار 0.103.0، يمكنك تشغيل التدفقات باستخدام أمر `crewai run`:
+
+```shell
+crewai run
+```
+
+يكتشف هذا الأمر تلقائيًا ما إذا كان مشروعك تدفقًا (بناءً على إعداد `type = "flow"` في pyproject.toml الخاص بك) ويشغّله وفقًا لذلك. هذه هي الطريقة الموصى بها لتشغيل التدفقات من سطر الأوامر.
+
+أمر `crewai flow kickoff` القديم deprecated. استخدم `crewai run` لكل من فرق Crew والتدفقات.
diff --git a/docs/v1.15.1/ar/concepts/knowledge.mdx b/docs/v1.15.1/ar/concepts/knowledge.mdx
new file mode 100644
index 000000000..807e0801e
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/knowledge.mdx
@@ -0,0 +1,1095 @@
+---
+title: المعرفة
+description: ما هي المعرفة في CrewAI وكيفية استخدامها.
+icon: book
+mode: "wide"
+---
+
+## نظرة عامة
+
+المعرفة في CrewAI هي نظام قوي يتيح لوكلاء الذكاء الاصطناعي الوصول إلى مصادر المعلومات الخارجية واستخدامها أثناء مهامهم.
+فكّر فيها كمنح وكلائك مكتبة مرجعية يمكنهم الرجوع إليها أثناء العمل.
+
+
+ الفوائد الرئيسية لاستخدام المعرفة:
+ - تعزيز الوكلاء بمعلومات خاصة بالمجال
+ - دعم القرارات ببيانات من العالم الحقيقي
+ - الحفاظ على السياق عبر المحادثات
+ - بناء الاستجابات على معلومات واقعية
+
+
+## أمثلة البدء السريع
+
+
+لمصادر المعرفة المستندة إلى الملفات، تأكد من وضع ملفاتك في مجلد `knowledge` في جذر مشروعك.
+أيضًا، استخدم المسارات النسبية من مجلد `knowledge` عند إنشاء المصدر.
+
+
+### إعداد عميل المتجه (RAG)
+
+يوفر CrewAI تجريدًا لعميل RAG محايد بالنسبة للمزود لمتاجر المتجهات. المزود الافتراضي هو ChromaDB، ويتم دعم Qdrant أيضًا. يمكنك التبديل بين المزودين باستخدام أدوات الإعداد.
+
+المدعوم حاليًا:
+- ChromaDB (افتراضي)
+- 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
+```
+
+عميل RAG هذا منفصل عن التخزين المدمج في المعرفة. استخدمه عندما تحتاج إلى تحكم مباشر في متجر المتجهات أو خطوط أنابيب استرجاع مخصصة.
+
+### مثال المعرفة النصية الأساسية
+
+```python Code
+from crewai import Agent, Task, Crew, Process, LLM
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Create a knowledge source
+content = "Users name is John. He is 30 years old and lives in San Francisco."
+string_source = StringKnowledgeSource(content=content)
+
+# Create an LLM with a temperature of 0 to ensure deterministic outputs
+llm = LLM(model="gpt-4o-mini", temperature=0)
+
+# Create an agent with the knowledge store
+agent = Agent(
+ role="About User",
+ goal="You know everything about the user.",
+ backstory="You are a master at understanding people and their preferences.",
+ verbose=True,
+ allow_delegation=False,
+ llm=llm,
+)
+
+task = Task(
+ description="Answer the following questions about the user: {question}",
+ expected_output="An answer to the question.",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+ process=Process.sequential,
+ knowledge_sources=[string_source], # Enable knowledge by adding the sources here
+)
+
+result = crew.kickoff(inputs={"question": "What city does John live in and how old is he?"})
+```
+
+### مثال معرفة محتوى الويب
+
+
+ تحتاج إلى تثبيت `docling` لكي يعمل المثال التالي: `uv add docling`
+
+
+```python Code
+from crewai import LLM, Agent, Crew, Process, Task
+from crewai.knowledge.source.crew_docling_source import CrewDoclingSource
+
+# Create a knowledge source from web content
+content_source = CrewDoclingSource(
+ file_paths=[
+ "https://lilianweng.github.io/posts/2024-11-28-reward-hacking",
+ "https://lilianweng.github.io/posts/2024-07-07-hallucination",
+ ],
+)
+
+# Create an LLM with a temperature of 0 to ensure deterministic outputs
+llm = LLM(model="gpt-4o-mini", temperature=0)
+
+# Create an agent with the knowledge store
+agent = Agent(
+ role="About papers",
+ goal="You know everything about the papers.",
+ backstory="You are a master at understanding papers and their content.",
+ verbose=True,
+ allow_delegation=False,
+ llm=llm,
+)
+
+task = Task(
+ description="Answer the following questions about the papers: {question}",
+ expected_output="An answer to the question.",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+ process=Process.sequential,
+ knowledge_sources=[content_source],
+)
+
+result = crew.kickoff(
+ inputs={"question": "What is the reward hacking paper about? Be sure to provide sources."}
+)
+```
+
+## مصادر المعرفة المدعومة
+
+يدعم CrewAI أنواعًا متعددة من مصادر المعرفة جاهزة للاستخدام:
+
+
+
+ - سلاسل نصية خام
+ - ملفات نصية (.txt)
+ - مستندات PDF
+
+
+ - ملفات CSV
+ - جداول بيانات Excel
+ - مستندات JSON
+
+
+
+### مصدر معرفة الملفات النصية
+```python
+from crewai.knowledge.source.text_file_knowledge_source import TextFileKnowledgeSource
+
+text_source = TextFileKnowledgeSource(
+ file_paths=["document.txt", "another.txt"]
+)
+```
+
+### مصدر معرفة PDF
+```python
+from crewai.knowledge.source.pdf_knowledge_source import PDFKnowledgeSource
+
+pdf_source = PDFKnowledgeSource(
+ file_paths=["document.pdf", "another.pdf"]
+)
+```
+
+### مصدر معرفة CSV
+```python
+from crewai.knowledge.source.csv_knowledge_source import CSVKnowledgeSource
+
+csv_source = CSVKnowledgeSource(
+ file_paths=["data.csv"]
+)
+```
+
+### مصدر معرفة Excel
+```python
+from crewai.knowledge.source.excel_knowledge_source import ExcelKnowledgeSource
+
+excel_source = ExcelKnowledgeSource(
+ file_paths=["spreadsheet.xlsx"]
+)
+```
+
+### مصدر معرفة JSON
+```python
+from crewai.knowledge.source.json_knowledge_source import JSONKnowledgeSource
+
+json_source = JSONKnowledgeSource(
+ file_paths=["data.json"]
+)
+```
+
+
+ يُرجى التأكد من إنشاء مجلد ./knowledge. يجب وضع جميع ملفات المصادر (مثل .txt و .pdf و .xlsx و .json) في هذا المجلد للإدارة المركزية.
+
+
+## معرفة Agent مقابل معرفة Crew: دليل شامل
+
+
+**فهم مستويات المعرفة**: يدعم CrewAI المعرفة على مستوى كل من Agent و Crew. يوضح هذا القسم بالضبط كيف يعمل كل منهما، ومتى يتم تهيئتهما، ويعالج المفاهيم الخاطئة الشائعة حول التبعيات.
+
+
+### كيف تعمل تهيئة المعرفة فعليًا
+
+إليك ما يحدث بالضبط عند استخدام المعرفة:
+
+#### معرفة على مستوى Agent (مستقلة)
+```python
+from crewai import Agent, Task, Crew
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Agent with its own knowledge - NO crew knowledge needed
+specialist_knowledge = StringKnowledgeSource(
+ content="Specialized technical information for this agent only"
+)
+
+specialist_agent = Agent(
+ role="Technical Specialist",
+ goal="Provide technical expertise",
+ backstory="Expert in specialized technical domains",
+ knowledge_sources=[specialist_knowledge] # Agent-specific knowledge
+)
+
+task = Task(
+ description="Answer technical questions",
+ agent=specialist_agent,
+ expected_output="Technical answer"
+)
+
+# No crew-level knowledge required
+crew = Crew(
+ agents=[specialist_agent],
+ tasks=[task]
+)
+
+result = crew.kickoff() # Agent knowledge works independently
+```
+
+#### ما يحدث أثناء `crew.kickoff()`
+
+عند استدعاء `crew.kickoff()`، إليك التسلسل الدقيق:
+
+```python
+# During kickoff
+for agent in self.agents:
+ agent.crew = self # Agent gets reference to crew
+ agent.set_knowledge(crew_embedder=self.embedder) # Agent knowledge initialized
+ agent.create_agent_executor()
+```
+
+#### استقلالية التخزين
+
+يستخدم كل مستوى معرفة مجموعات تخزين مستقلة:
+
+```python
+# Agent knowledge storage
+agent_collection_name = agent.role # e.g., "Technical Specialist"
+
+# Crew knowledge storage
+crew_collection_name = "crew"
+
+# Both stored in same ChromaDB instance but different collections
+# Path: ~/.local/share/CrewAI/{project}/knowledge/
+# ├── crew/ # Crew knowledge collection
+# ├── Technical Specialist/ # Agent knowledge collection
+# └── Another Agent Role/ # Another agent's collection
+```
+
+### أمثلة عملية كاملة
+
+#### المثال 1: معرفة Agent فقط
+```python
+from crewai import Agent, Task, Crew
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Agent-specific knowledge
+agent_knowledge = StringKnowledgeSource(
+ content="Agent-specific information that only this agent needs"
+)
+
+agent = Agent(
+ role="Specialist",
+ goal="Use specialized knowledge",
+ backstory="Expert with specific knowledge",
+ knowledge_sources=[agent_knowledge],
+ embedder={ # Agent can have its own embedder
+ "provider": "openai",
+ "config": {"model": "text-embedding-3-small"}
+ }
+)
+
+task = Task(
+ description="Answer using your specialized knowledge",
+ agent=agent,
+ expected_output="Answer based on agent knowledge"
+)
+
+# No crew knowledge needed
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff() # Works perfectly
+```
+
+#### المثال 2: معرفة Agent و Crew معًا
+```python
+# Crew-wide knowledge (shared by all agents)
+crew_knowledge = StringKnowledgeSource(
+ content="Company policies and general information for all agents"
+)
+
+# Agent-specific knowledge
+specialist_knowledge = StringKnowledgeSource(
+ content="Technical specifications only the specialist needs"
+)
+
+specialist = Agent(
+ role="Technical Specialist",
+ goal="Provide technical expertise",
+ backstory="Technical expert",
+ knowledge_sources=[specialist_knowledge] # Agent-specific
+)
+
+generalist = Agent(
+ role="General Assistant",
+ goal="Provide general assistance",
+ backstory="General helper"
+ # No agent-specific knowledge
+)
+
+crew = Crew(
+ agents=[specialist, generalist],
+ tasks=[...],
+ knowledge_sources=[crew_knowledge] # Crew-wide knowledge
+)
+
+# Result:
+# - specialist gets: crew_knowledge + specialist_knowledge
+# - generalist gets: crew_knowledge only
+```
+
+#### المثال 3: عدة Agents بمعارف مختلفة
+```python
+# Different knowledge for different agents
+sales_knowledge = StringKnowledgeSource(content="Sales procedures and pricing")
+tech_knowledge = StringKnowledgeSource(content="Technical documentation")
+support_knowledge = StringKnowledgeSource(content="Support procedures")
+
+sales_agent = Agent(
+ role="Sales Representative",
+ knowledge_sources=[sales_knowledge],
+ embedder={"provider": "openai", "config": {"model": "text-embedding-3-small"}}
+)
+
+tech_agent = Agent(
+ role="Technical Expert",
+ knowledge_sources=[tech_knowledge],
+ embedder={"provider": "ollama", "config": {"model": "mxbai-embed-large"}}
+)
+
+support_agent = Agent(
+ role="Support Specialist",
+ knowledge_sources=[support_knowledge]
+ # Will use crew embedder as fallback
+)
+
+crew = Crew(
+ agents=[sales_agent, tech_agent, support_agent],
+ tasks=[...],
+ embedder={ # Fallback embedder for agents without their own
+ "provider": "google-generativeai",
+ "config": {"model_name": "gemini-embedding-001"}
+ }
+)
+
+# Each agent gets only their specific knowledge
+# Each can use different embedding providers
+```
+
+
+على عكس الاسترجاع من قاعدة بيانات متجهات باستخدام أداة، فإن الوكلاء المُحمّلين مسبقًا بالمعرفة لن يحتاجوا إلى شخصية أو مهمة استرجاع.
+ما عليك سوى إضافة مصادر المعرفة ذات الصلة التي يحتاجها Agent أو Crew للعمل.
+
+يمكن إضافة مصادر المعرفة على مستوى Agent أو Crew.
+مصادر المعرفة على مستوى Crew سيستخدمها **جميع الوكلاء** في الفريق.
+مصادر المعرفة على مستوى Agent سيستخدمها **الوكيل المحدد** المُحمّل بالمعرفة.
+
+
+## إعداد المعرفة
+
+يمكنك تهيئة إعداد المعرفة لـ Crew أو Agent.
+
+```python Code
+from crewai.knowledge.knowledge_config import KnowledgeConfig
+
+knowledge_config = KnowledgeConfig(results_limit=10, score_threshold=0.5)
+
+agent = Agent(
+ ...
+ knowledge_config=knowledge_config
+)
+```
+
+
+ `results_limit`: هو عدد المستندات ذات الصلة المُعادة. القيمة الافتراضية هي 3.
+ `score_threshold`: هو الحد الأدنى لدرجة اعتبار المستند ذا صلة. القيمة الافتراضية هي 0.35.
+
+
+## معاملات المعرفة المدعومة
+
+
+ قائمة مصادر المعرفة التي توفر المحتوى للتخزين والاستعلام. يمكن أن تشمل ملفات PDF و CSV و Excel و JSON والملفات النصية أو المحتوى النصي.
+
+
+ اسم المجموعة التي سيتم تخزين المعرفة فيها. يُستخدم لتحديد مجموعات معرفة مختلفة. القيمة الافتراضية هي "knowledge" إذا لم يتم تحديدها.
+
+
+إعداد تخزين مخصص لإدارة كيفية تخزين المعرفة واسترجاعها. إذا لم يتم تحديده، سيتم إنشاء تخزين افتراضي.
+
+
+## شفافية تخزين المعرفة
+
+
+**فهم تخزين المعرفة**: يخزّن CrewAI مصادر المعرفة تلقائيًا في مجلدات خاصة بالمنصة باستخدام ChromaDB للتخزين المتجهي. فهم هذه المواقع والإعدادات الافتراضية يساعد في النشر في بيئة الإنتاج وتصحيح الأخطاء وإدارة التخزين.
+
+
+### أين يخزّن CrewAI ملفات المعرفة
+
+بشكل افتراضي، يستخدم CrewAI نفس نظام التخزين مثل الذاكرة، حيث يخزّن المعرفة في مجلدات خاصة بالمنصة:
+
+#### مواقع التخزين الافتراضية حسب المنصة
+
+**macOS:**
+```
+~/Library/Application Support/CrewAI/{project_name}/
+└── knowledge/ # Knowledge ChromaDB files
+ ├── chroma.sqlite3 # ChromaDB metadata
+ ├── {collection_id}/ # Vector embeddings
+ └── knowledge_{collection}/ # Named collections
+```
+
+**Linux:**
+```
+~/.local/share/CrewAI/{project_name}/
+└── knowledge/
+ ├── chroma.sqlite3
+ ├── {collection_id}/
+ └── knowledge_{collection}/
+```
+
+**Windows:**
+```
+C:\Users\{username}\AppData\Local\CrewAI\{project_name}\
+└── knowledge\
+ ├── chroma.sqlite3
+ ├── {collection_id}\
+ └── knowledge_{collection}\
+```
+
+### معرفة موقع تخزين المعرفة
+
+لرؤية المكان الذي يخزّن فيه CrewAI ملفات المعرفة بالضبط:
+
+```python
+from crewai.utilities.paths import db_storage_path
+import os
+
+# Get the knowledge storage path
+knowledge_path = os.path.join(db_storage_path(), "knowledge")
+print(f"Knowledge storage location: {knowledge_path}")
+
+# List knowledge collections and files
+if os.path.exists(knowledge_path):
+ print("\nKnowledge storage contents:")
+ for item in os.listdir(knowledge_path):
+ item_path = os.path.join(knowledge_path, item)
+ if os.path.isdir(item_path):
+ print(f"📁 Collection: {item}/")
+ # Show collection contents
+ try:
+ for subitem in os.listdir(item_path):
+ print(f" └── {subitem}")
+ except PermissionError:
+ print(f" └── (permission denied)")
+ else:
+ print(f"📄 {item}")
+else:
+ print("No knowledge storage found yet.")
+```
+
+### التحكم في مواقع تخزين المعرفة
+
+#### الخيار 1: متغير البيئة (موصى به)
+```python
+import os
+from crewai import Crew
+
+# Set custom storage location for all CrewAI data
+os.environ["CREWAI_STORAGE_DIR"] = "./my_project_storage"
+
+# All knowledge will now be stored in ./my_project_storage/knowledge/
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ knowledge_sources=[...]
+)
+```
+
+#### الخيار 2: تخزين معرفة مخصص
+```python
+from crewai.knowledge.storage.knowledge_storage import KnowledgeStorage
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Create custom storage with specific embedder
+custom_storage = KnowledgeStorage(
+ embedder={
+ "provider": "ollama",
+ "config": {"model": "mxbai-embed-large"}
+ },
+ collection_name="my_custom_knowledge"
+)
+
+# Use with knowledge sources
+knowledge_source = StringKnowledgeSource(
+ content="Your knowledge content here"
+)
+knowledge_source.storage = custom_storage
+```
+
+#### الخيار 3: تخزين معرفة خاص بالمشروع
+```python
+import os
+from pathlib import Path
+
+# Store knowledge in project directory
+project_root = Path(__file__).parent
+knowledge_dir = project_root / "knowledge_storage"
+
+os.environ["CREWAI_STORAGE_DIR"] = str(knowledge_dir)
+
+# Now all knowledge will be stored in your project directory
+```
+
+### سلوك مزود التضمين الافتراضي
+
+
+**مزود التضمين الافتراضي**: يستخدم CrewAI افتراضيًا تضمينات OpenAI (`text-embedding-3-small`) لتخزين المعرفة، حتى عند استخدام مزودي LLM مختلفين. يمكنك تخصيص هذا بسهولة ليتوافق مع إعدادك.
+
+
+#### فهم السلوك الافتراضي
+```python
+from crewai import Agent, Crew, LLM
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# When using Claude as your LLM...
+agent = Agent(
+ role="Researcher",
+ goal="Research topics",
+ backstory="Expert researcher",
+ llm=LLM(provider="anthropic", model="claude-3-sonnet") # Using Claude
+)
+
+# CrewAI will still use OpenAI embeddings by default for knowledge
+# This ensures consistency but may not match your LLM provider preference
+knowledge_source = StringKnowledgeSource(content="Research data...")
+
+crew = Crew(
+ agents=[agent],
+ tasks=[...],
+ knowledge_sources=[knowledge_source]
+ # Default: Uses OpenAI embeddings even with Claude LLM
+)
+```
+
+#### تخصيص مزودي تضمين المعرفة
+```python
+# Option 1: Use Voyage AI (recommended by Anthropic for Claude users)
+crew = Crew(
+ agents=[agent],
+ tasks=[...],
+ knowledge_sources=[knowledge_source],
+ embedder={
+ "provider": "voyageai", # Recommended for Claude users
+ "config": {
+ "api_key": "your-voyage-api-key",
+ "model": "voyage-3" # or "voyage-3-large" for best quality
+ }
+ }
+)
+
+# Option 2: Use local embeddings (no external API calls)
+crew = Crew(
+ agents=[agent],
+ tasks=[...],
+ knowledge_sources=[knowledge_source],
+ embedder={
+ "provider": "ollama",
+ "config": {
+ "model": "mxbai-embed-large",
+ "url": "http://localhost:11434/api/embeddings"
+ }
+ }
+)
+
+# Option 3: Agent-level embedding customization
+agent = Agent(
+ role="Researcher",
+ goal="Research topics",
+ backstory="Expert researcher",
+ knowledge_sources=[knowledge_source],
+ embedder={
+ "provider": "google-generativeai",
+ "config": {
+ "model_name": "gemini-embedding-001",
+ "api_key": "your-google-key"
+ }
+ }
+)
+```
+
+#### إعداد تضمينات Azure OpenAI
+
+عند استخدام تضمينات Azure OpenAI:
+1. تأكد من نشر نموذج التضمين في منصة Azure أولًا
+2. ثم تحتاج إلى استخدام الإعداد التالي:
+
+```python
+agent = Agent(
+ role="Researcher",
+ goal="Research topics",
+ backstory="Expert researcher",
+ knowledge_sources=[knowledge_source],
+ embedder={
+ "provider": "azure",
+ "config": {
+ "api_key": "your-azure-api-key",
+ "model": "text-embedding-ada-002", # change to the model you are using and is deployed in Azure
+ "api_base": "https://your-azure-endpoint.openai.azure.com/",
+ "api_version": "2024-02-01"
+ }
+ }
+)
+```
+
+## الميزات المتقدمة
+
+### إعادة صياغة الاستعلام
+
+ينفذ CrewAI آلية إعادة صياغة استعلام ذكية لتحسين استرجاع المعرفة. عندما يحتاج وكيل إلى البحث في مصادر المعرفة، يتم تحويل موجّه المهمة الخام تلقائيًا إلى استعلام بحث أكثر فعالية.
+
+#### كيف تعمل إعادة صياغة الاستعلام
+
+1. عندما ينفذ وكيل مهمة بمصادر معرفة متاحة، يتم تشغيل دالة `_get_knowledge_search_query`
+2. يُستخدم LLM الخاص بالوكيل لتحويل موجّه المهمة الأصلي إلى استعلام بحث محسّن
+3. يُستخدم هذا الاستعلام المحسّن بعد ذلك لاسترجاع المعلومات ذات الصلة من مصادر المعرفة
+
+#### فوائد إعادة صياغة الاستعلام
+
+
+
+ من خلال التركيز على المفاهيم الرئيسية وإزالة المحتوى غير ذي الصلة، تساعد إعادة صياغة الاستعلام في استرجاع معلومات أكثر صلة.
+
+
+ تم تصميم الاستعلامات المُعاد صياغتها لتكون أكثر تحديدًا ووعيًا بالسياق لاسترجاع قاعدة بيانات المتجهات.
+
+
+
+#### مثال
+
+```python
+# Original task prompt
+task_prompt = "Answer the following questions about the user's favorite movies: What movie did John watch last week? Format your answer in JSON."
+
+# Behind the scenes, this might be rewritten as:
+rewritten_query = "What movies did John watch last week?"
+```
+
+الاستعلام المُعاد صياغته أكثر تركيزًا على الحاجة الأساسية للمعلومات ويزيل التعليمات غير ذات الصلة حول تنسيق المخرجات.
+
+
+ هذه الآلية تلقائية بالكامل ولا تتطلب أي إعداد من المستخدمين. يُستخدم LLM الخاص بالوكيل لتنفيذ إعادة صياغة الاستعلام، لذا فإن استخدام LLM أكثر قدرة يمكن أن يحسّن جودة الاستعلامات المُعاد صياغتها.
+
+
+### أحداث المعرفة
+
+يُصدر CrewAI أحداثًا أثناء عملية استرجاع المعرفة يمكنك الاستماع إليها باستخدام نظام الأحداث. تتيح لك هذه الأحداث مراقبة وتصحيح أخطاء وتحليل كيفية استرجاع المعرفة واستخدامها بواسطة وكلائك.
+
+#### أحداث المعرفة المتاحة
+
+- **KnowledgeRetrievalStartedEvent**: يُصدر عندما يبدأ وكيل في استرجاع المعرفة من المصادر
+- **KnowledgeRetrievalCompletedEvent**: يُصدر عند اكتمال استرجاع المعرفة، بما في ذلك الاستعلام المُستخدم والمحتوى المُسترجع
+- **KnowledgeQueryStartedEvent**: يُصدر عند بدء استعلام مصادر المعرفة
+- **KnowledgeQueryCompletedEvent**: يُصدر عند اكتمال الاستعلام بنجاح
+- **KnowledgeQueryFailedEvent**: يُصدر عند فشل استعلام مصادر المعرفة
+- **KnowledgeSearchQueryFailedEvent**: يُصدر عند فشل استعلام بحث
+
+#### مثال: مراقبة استرجاع المعرفة
+
+```python
+from crewai.events import (
+ KnowledgeRetrievalStartedEvent,
+ KnowledgeRetrievalCompletedEvent,
+ BaseEventListener,
+)
+
+class KnowledgeMonitorListener(BaseEventListener):
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(KnowledgeRetrievalStartedEvent)
+ def on_knowledge_retrieval_started(source, event):
+ print(f"Agent '{event.agent.role}' started retrieving knowledge")
+
+ @crewai_event_bus.on(KnowledgeRetrievalCompletedEvent)
+ def on_knowledge_retrieval_completed(source, event):
+ print(f"Agent '{event.agent.role}' completed knowledge retrieval")
+ print(f"Query: {event.query}")
+ print(f"Retrieved {len(event.retrieved_knowledge)} knowledge chunks")
+
+# Create an instance of your listener
+knowledge_monitor = KnowledgeMonitorListener()
+```
+
+لمزيد من المعلومات حول استخدام الأحداث، انظر وثائق [مستمعي الأحداث](/ar/concepts/event-listener).
+
+### مصادر المعرفة المخصصة
+
+يتيح لك CrewAI إنشاء مصادر معرفة مخصصة لأي نوع من البيانات عن طريق توسيع فئة `BaseKnowledgeSource`. لنقم بإنشاء مثال عملي يجلب ويعالج مقالات أخبار الفضاء.
+
+#### مثال مصدر معرفة أخبار الفضاء
+
+
+
+```python Code
+from crewai import Agent, Task, Crew, Process, LLM
+from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
+import requests
+from datetime import datetime
+from typing import Dict, Any
+from pydantic import BaseModel, Field
+
+class SpaceNewsKnowledgeSource(BaseKnowledgeSource):
+ """Knowledge source that fetches data from Space News API."""
+
+ api_endpoint: str = Field(description="API endpoint URL")
+ limit: int = Field(default=10, description="Number of articles to fetch")
+
+ def load_content(self) -> Dict[Any, str]:
+ """Fetch and format space news articles."""
+ try:
+ response = requests.get(
+ f"{self.api_endpoint}?limit={self.limit}"
+ )
+ response.raise_for_status()
+
+ data = response.json()
+ articles = data.get('results', [])
+
+ formatted_data = self.validate_content(articles)
+ return {self.api_endpoint: formatted_data}
+ except Exception as e:
+ raise ValueError(f"Failed to fetch space news: {str(e)}")
+
+ def validate_content(self, articles: list) -> str:
+ """Format articles into readable text."""
+ formatted = "Space News Articles:\n\n"
+ for article in articles:
+ formatted += f"""
+ Title: {article['title']}
+ Published: {article['published_at']}
+ Summary: {article['summary']}
+ News Site: {article['news_site']}
+ URL: {article['url']}
+ -------------------"""
+ return formatted
+
+ def add(self) -> None:
+ """Process and store the articles."""
+ content = self.load_content()
+ for _, text in content.items():
+ chunks = self._chunk_text(text)
+ self.chunks.extend(chunks)
+
+ self._save_documents()
+
+# Create knowledge source
+recent_news = SpaceNewsKnowledgeSource(
+ api_endpoint="https://api.spaceflightnewsapi.net/v4/articles",
+ limit=10,
+)
+
+# Create specialized agent
+space_analyst = Agent(
+ role="Space News Analyst",
+ goal="Answer questions about space news accurately and comprehensively",
+ backstory="""You are a space industry analyst with expertise in space exploration,
+ satellite technology, and space industry trends. You excel at answering questions
+ about space news and providing detailed, accurate information.""",
+ knowledge_sources=[recent_news],
+ llm=LLM(model="gpt-4", temperature=0.0)
+)
+
+# Create task that handles user questions
+analysis_task = Task(
+ description="Answer this question about space news: {user_question}",
+ expected_output="A detailed answer based on the recent space news articles",
+ agent=space_analyst
+)
+
+# Create and run the crew
+crew = Crew(
+ agents=[space_analyst],
+ tasks=[analysis_task],
+ verbose=True,
+ process=Process.sequential
+)
+
+# Example usage
+result = crew.kickoff(
+ inputs={"user_question": "What are the latest developments in space exploration?"}
+)
+```
+
+```output Output
+# Agent: Space News Analyst
+## Task: Answer this question about space news: What are the latest developments in space exploration?
+
+
+# Agent: Space News Analyst
+## Final Answer:
+The latest developments in space exploration, based on recent space news articles, include the following:
+
+1. SpaceX has received the final regulatory approvals to proceed with the second integrated Starship/Super Heavy launch, scheduled for as soon as the morning of Nov. 17, 2023. This is a significant step in SpaceX's ambitious plans for space exploration and colonization. [Source: SpaceNews](https://spacenews.com/starship-cleared-for-nov-17-launch/)
+
+2. SpaceX has also informed the US Federal Communications Commission (FCC) that it plans to begin launching its first next-generation Starlink Gen2 satellites. This represents a major upgrade to the Starlink satellite internet service, which aims to provide high-speed internet access worldwide. [Source: Teslarati](https://www.teslarati.com/spacex-first-starlink-gen2-satellite-launch-2022/)
+
+3. AI startup Synthetaic has raised $15 million in Series B funding. The company uses artificial intelligence to analyze data from space and air sensors, which could have significant applications in space exploration and satellite technology. [Source: SpaceNews](https://spacenews.com/ai-startup-synthetaic-raises-15-million-in-series-b-funding/)
+
+4. The Space Force has formally established a unit within the U.S. Indo-Pacific Command, marking a permanent presence in the Indo-Pacific region. This could have significant implications for space security and geopolitics. [Source: SpaceNews](https://spacenews.com/space-force-establishes-permanent-presence-in-indo-pacific-region/)
+
+5. Slingshot Aerospace, a space tracking and data analytics company, is expanding its network of ground-based optical telescopes to increase coverage of low Earth orbit. This could improve our ability to track and analyze objects in low Earth orbit, including satellites and space debris. [Source: SpaceNews](https://spacenews.com/slingshots-space-tracking-network-to-extend-coverage-of-low-earth-orbit/)
+
+6. The National Natural Science Foundation of China has outlined a five-year project for researchers to study the assembly of ultra-large spacecraft. This could lead to significant advancements in spacecraft technology and space exploration capabilities. [Source: SpaceNews](https://spacenews.com/china-researching-challenges-of-kilometer-scale-ultra-large-spacecraft/)
+
+7. The Center for AEroSpace Autonomy Research (CAESAR) at Stanford University is focusing on spacecraft autonomy. The center held a kickoff event on May 22, 2024, to highlight the industry, academia, and government collaboration it seeks to foster. This could lead to significant advancements in autonomous spacecraft technology. [Source: SpaceNews](https://spacenews.com/stanford-center-focuses-on-spacecraft-autonomy/)
+```
+
+
+
+## تصحيح الأخطاء واستكشاف المشاكل
+
+### تصحيح مشاكل المعرفة
+
+#### التحقق من تهيئة معرفة Agent
+```python
+from crewai import Agent, Crew, Task
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+knowledge_source = StringKnowledgeSource(content="Test knowledge")
+
+agent = Agent(
+ role="Test Agent",
+ goal="Test knowledge",
+ backstory="Testing",
+ knowledge_sources=[knowledge_source]
+)
+
+crew = Crew(agents=[agent], tasks=[Task(...)])
+
+# Before kickoff - knowledge not initialized
+print(f"Before kickoff - Agent knowledge: {getattr(agent, 'knowledge', None)}")
+
+crew.kickoff()
+
+# After kickoff - knowledge initialized
+print(f"After kickoff - Agent knowledge: {agent.knowledge}")
+print(f"Agent knowledge collection: {agent.knowledge.storage.collection_name}")
+print(f"Number of sources: {len(agent.knowledge.sources)}")
+```
+
+#### التحقق من مواقع تخزين المعرفة
+```python
+import os
+from crewai.utilities.paths import db_storage_path
+
+# Check storage structure
+storage_path = db_storage_path()
+knowledge_path = os.path.join(storage_path, "knowledge")
+
+if os.path.exists(knowledge_path):
+ print("Knowledge collections found:")
+ for collection in os.listdir(knowledge_path):
+ collection_path = os.path.join(knowledge_path, collection)
+ if os.path.isdir(collection_path):
+ print(f" - {collection}/")
+ # Show collection contents
+ for item in os.listdir(collection_path):
+ print(f" └── {item}")
+```
+
+#### اختبار استرجاع المعرفة
+```python
+# Test agent knowledge retrieval
+if hasattr(agent, 'knowledge') and agent.knowledge:
+ test_query = ["test query"]
+ results = agent.knowledge.query(test_query)
+ print(f"Agent knowledge results: {len(results)} documents found")
+
+ # Test crew knowledge retrieval (if exists)
+ if hasattr(crew, 'knowledge') and crew.knowledge:
+ crew_results = crew.query_knowledge(test_query)
+ print(f"Crew knowledge results: {len(crew_results)} documents found")
+```
+
+#### فحص مجموعات المعرفة
+```python
+import chromadb
+from crewai.utilities.paths import db_storage_path
+import os
+
+# Connect to CrewAI's knowledge ChromaDB
+knowledge_path = os.path.join(db_storage_path(), "knowledge")
+
+if os.path.exists(knowledge_path):
+ client = chromadb.PersistentClient(path=knowledge_path)
+ collections = client.list_collections()
+
+ print("Knowledge Collections:")
+ for collection in collections:
+ print(f" - {collection.name}: {collection.count()} documents")
+
+ # Sample a few documents to verify content
+ if collection.count() > 0:
+ sample = collection.peek(limit=2)
+ print(f" Sample content: {sample['documents'][0][:100]}...")
+else:
+ print("No knowledge storage found")
+```
+
+#### التحقق من معالجة المعرفة
+```python
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Create a test knowledge source
+test_source = StringKnowledgeSource(
+ content="Test knowledge content for debugging",
+ chunk_size=100, # Small chunks for testing
+ chunk_overlap=20
+)
+
+# Check chunking behavior
+print(f"Original content length: {len(test_source.content)}")
+print(f"Chunk size: {test_source.chunk_size}")
+print(f"Chunk overlap: {test_source.chunk_overlap}")
+
+# Process and inspect chunks
+test_source.add()
+print(f"Number of chunks created: {len(test_source.chunks)}")
+for i, chunk in enumerate(test_source.chunks[:3]): # Show first 3 chunks
+ print(f"Chunk {i+1}: {chunk[:50]}...")
+```
+
+### مشاكل تخزين المعرفة الشائعة
+
+**أخطاء "الملف غير موجود":**
+```python
+# Ensure files are in the correct location
+from crewai.utilities.constants import KNOWLEDGE_DIRECTORY
+import os
+
+knowledge_dir = KNOWLEDGE_DIRECTORY # Usually "knowledge"
+file_path = os.path.join(knowledge_dir, "your_file.pdf")
+
+if not os.path.exists(file_path):
+ print(f"File not found: {file_path}")
+ print(f"Current working directory: {os.getcwd()}")
+ print(f"Expected knowledge directory: {os.path.abspath(knowledge_dir)}")
+```
+
+**أخطاء "عدم تطابق أبعاد التضمين":**
+```python
+# This happens when switching embedding providers
+# Reset knowledge storage to clear old embeddings
+crew.reset_memories(command_type='knowledge')
+
+# Or use consistent embedding providers
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ knowledge_sources=[...],
+ embedder={"provider": "openai", "config": {"model": "text-embedding-3-small"}}
+)
+```
+
+**أخطاء "رفض إذن ChromaDB":**
+```bash
+# Fix storage permissions
+chmod -R 755 ~/.local/share/CrewAI/
+```
+
+**المعرفة لا تستمر بين عمليات التشغيل:**
+```python
+# Verify storage location consistency
+import os
+from crewai.utilities.paths import db_storage_path
+
+print("CREWAI_STORAGE_DIR:", os.getenv("CREWAI_STORAGE_DIR"))
+print("Computed storage path:", db_storage_path())
+print("Knowledge path:", os.path.join(db_storage_path(), "knowledge"))
+```
+
+### أوامر إعادة تعيين المعرفة
+
+```python
+# Reset only agent-specific knowledge
+crew.reset_memories(command_type='agent_knowledge')
+
+# Reset both crew and agent knowledge
+crew.reset_memories(command_type='knowledge')
+
+# CLI commands
+# crewai reset-memories --agent-knowledge # Agent knowledge only
+# crewai reset-memories --knowledge # All knowledge
+```
+
+### مسح المعرفة
+
+إذا كنت بحاجة إلى مسح المعرفة المخزّنة في CrewAI، يمكنك استخدام أمر `crewai reset-memories` مع خيار `--knowledge`.
+
+```bash Command
+crewai reset-memories --knowledge
+```
+
+هذا مفيد عندما تكون قد حدّثت مصادر المعرفة وتريد التأكد من أن الوكلاء يستخدمون أحدث المعلومات.
+
+## أفضل الممارسات
+
+
+
+ - حافظ على أحجام القطع مناسبة لنوع المحتوى
+ - ضع في اعتبارك تداخل المحتوى للحفاظ على السياق
+ - نظّم المعلومات ذات الصلة في مصادر معرفة منفصلة
+
+
+
+ - اضبط أحجام القطع بناءً على تعقيد المحتوى
+ - أعدّ نماذج تضمين مناسبة
+ - ضع في اعتبارك استخدام مزودي تضمين محليين لمعالجة أسرع
+
+
+
+ - مع هيكل الملفات النموذجي الذي يوفره CrewAI، يتم تضمين مصادر المعرفة في كل مرة يتم فيها تشغيل kickoff.
+ - إذا كانت مصادر المعرفة كبيرة، فإن هذا يؤدي إلى عدم كفاءة وزيادة وقت الاستجابة، حيث يتم تضمين نفس البيانات في كل مرة.
+ - لحل هذه المشكلة، قم بتهيئة معامل knowledge مباشرة بدلاً من معامل knowledge_sources.
+ - رابط للمشكلة للحصول على فكرة كاملة [Github Issue](https://github.com/crewAIInc/crewAI/issues/2755)
+
+
+
+ - استخدم المعرفة على مستوى Agent للمعلومات الخاصة بالدور
+ - استخدم المعرفة على مستوى Crew للمعلومات المشتركة التي يحتاجها جميع الوكلاء
+ - عيّن المُضمّنات على مستوى Agent إذا كنت بحاجة إلى استراتيجيات تضمين مختلفة
+ - استخدم تسمية مجموعات متسقة بالحفاظ على أدوار Agent وصفية
+ - اختبر تهيئة المعرفة بالتحقق من agent.knowledge بعد kickoff
+ - راقب مواقع التخزين لفهم أين يتم تخزين المعرفة
+ - أعد تعيين المعرفة بشكل مناسب باستخدام أنواع الأوامر الصحيحة
+
+
+
+ - عيّن `CREWAI_STORAGE_DIR` إلى موقع معروف في الإنتاج
+ - اختر مزودي تضمين صريحين ليتوافقوا مع إعداد LLM وتجنب تعارضات مفاتيح API
+ - راقب حجم تخزين المعرفة مع نموه مع إضافات المستندات
+ - نظّم مصادر المعرفة حسب المجال أو الغرض باستخدام أسماء المجموعات
+ - ضمّن مجلدات المعرفة في استراتيجيات النسخ الاحتياطي والنشر
+ - عيّن أذونات ملفات مناسبة لملفات المعرفة ومجلدات التخزين
+ - استخدم متغيرات البيئة لمفاتيح API والإعدادات الحساسة
+
+
diff --git a/docs/v1.15.1/ar/concepts/llms.mdx b/docs/v1.15.1/ar/concepts/llms.mdx
new file mode 100644
index 000000000..67b09281b
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/llms.mdx
@@ -0,0 +1,1513 @@
+---
+title: 'نماذج اللغة الكبيرة (LLMs)'
+description: 'دليل شامل لإعداد واستخدام نماذج اللغة الكبيرة (LLMs) في مشاريع CrewAI'
+icon: 'microchip-ai'
+mode: "wide"
+---
+
+## نظرة عامة
+
+يتكامل CrewAI مع مزودي LLM متعددين من خلال حزم SDK الأصلية للمزودين، مما يمنحك المرونة لاختيار النموذج المناسب لحالة الاستخدام الخاصة بك. سيساعدك هذا الدليل على فهم كيفية إعداد واستخدام مزودي LLM المختلفين في مشاريع CrewAI.
+
+
+## ما هي نماذج اللغة الكبيرة؟
+
+نماذج اللغة الكبيرة (LLMs) هي الذكاء الأساسي وراء وكلاء CrewAI. تمكّن الوكلاء من فهم السياق واتخاذ القرارات وتوليد استجابات شبيهة بالبشر. إليك ما تحتاج معرفته:
+
+
+
+ نماذج اللغة الكبيرة هي أنظمة ذكاء اصطناعي مدربة على كميات هائلة من البيانات النصية. تدعم ذكاء وكلاء CrewAI، مما يمكّنهم من فهم وتوليد نصوص شبيهة بالبشر.
+
+
+ تحدد نافذة السياق مقدار النص الذي يمكن لـ LLM معالجته في وقت واحد. النوافذ الأكبر (مثل 128K رمز) تتيح سياقًا أكثر لكنها قد تكون أكثر تكلفة وأبطأ.
+
+
+ تتحكم درجة الحرارة (0.0 إلى 1.0) في عشوائية الاستجابة. القيم المنخفضة (مثل 0.2) تنتج مخرجات أكثر تركيزًا وحتمية، بينما القيم الأعلى (مثل 0.8) تزيد الإبداع والتنوع.
+
+
+ يقدم كل مزود LLM (مثل OpenAI و Anthropic و Google) نماذج مختلفة بقدرات وأسعار وميزات متفاوتة. اختر بناءً على احتياجاتك من الدقة والسرعة والتكلفة.
+
+
+
+## إعداد LLM الخاص بك
+
+هناك أماكن مختلفة في كود CrewAI حيث يمكنك تحديد النموذج المُستخدم. بمجرد تحديد النموذج، ستحتاج إلى توفير الإعداد (مثل مفتاح API) لكل مزود نموذج تستخدمه. انظر قسم [أمثلة إعداد المزودين](#أمثلة-إعداد-المزودين) لمزودك.
+
+
+
+ أبسط طريقة للبدء. عيّن النموذج في بيئتك مباشرة، من خلال ملف `.env` أو في كود تطبيقك. إذا استخدمت `crewai create` لبدء مشروعك، سيكون مُعيّنًا بالفعل.
+
+ ```bash .env
+ MODEL=model-id # e.g. gpt-4o, gemini-2.0-flash, claude-3-sonnet-...
+
+ # Be sure to set your API keys here too. See the Provider
+ # section below.
+ ```
+
+
+ لا تقم أبدًا بتأكيد مفاتيح API في التحكم بالإصدارات. استخدم ملفات البيئة (.env) أو إدارة أسرار نظامك.
+
+
+
+ أنشئ ملف YAML لتعريف إعدادات الوكلاء. هذه الطريقة رائعة للتحكم بالإصدارات والتعاون بين الفريق:
+
+ ```yaml agents.yaml {6}
+ researcher:
+ role: Research Specialist
+ goal: Conduct comprehensive research and analysis
+ backstory: A dedicated research professional with years of experience
+ verbose: true
+ llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude...
+ # (see provider configuration examples below for more)
+ ```
+
+
+ يتيح لك إعداد YAML:
+ - التحكم بإصدارات إعدادات الوكلاء
+ - التبديل بسهولة بين النماذج المختلفة
+ - مشاركة الإعدادات بين أعضاء الفريق
+ - توثيق خيارات النماذج وأغراضها
+
+
+
+ لأقصى مرونة، أعدّ LLMs مباشرة في كود Python:
+
+ ```python {4,8}
+ from crewai import LLM
+
+ # Basic configuration
+ llm = LLM(model="model-id-here") # gpt-4o, gemini-2.0-flash, anthropic/claude...
+
+ # Advanced configuration with detailed parameters
+ llm = LLM(
+ model="model-id-here", # gpt-4o, gemini-2.0-flash, anthropic/claude...
+ temperature=0.7, # Higher for more creative outputs
+ timeout=120, # Seconds to wait for response
+ max_tokens=4000, # Maximum length of response
+ top_p=0.9, # Nucleus sampling parameter
+ frequency_penalty=0.1 , # Reduce repetition
+ presence_penalty=0.1, # Encourage topic diversity
+ response_format={"type": "json"}, # For structured outputs
+ seed=42 # For reproducible results
+ )
+ ```
+
+
+ شرح المعاملات:
+ - `temperature`: تتحكم في العشوائية (0.0-1.0)
+ - `timeout`: أقصى وقت انتظار للاستجابة
+ - `max_tokens`: تحدد طول الاستجابة
+ - `top_p`: بديل لدرجة الحرارة للعينات
+ - `frequency_penalty`: تقلل تكرار الكلمات
+ - `presence_penalty`: تشجع موضوعات جديدة
+ - `response_format`: تحدد هيكل المخرجات
+ - `seed`: تضمن مخرجات متسقة
+
+
+
+
+
+ يوفر CrewAI تكاملات SDK أصلية لـ OpenAI و Anthropic و Google (Gemini API) و Azure و AWS Bedrock و Snowflake Cortex -- لا حاجة لتثبيت إضافي بخلاف الملحقات الخاصة بالمزود (مثل `uv add "crewai[openai]"`).
+
+ جميع المزودين الآخرين مدعومون بواسطة **LiteLLM**. إذا كنت تخطط لاستخدام أي منهم، أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+## أمثلة إعداد المزودين
+
+يدعم CrewAI العديد من مزودي LLM، كل منهم يقدم ميزات فريدة وطرق مصادقة وقدرات نماذج.
+في هذا القسم، ستجد أمثلة مفصلة تساعدك في اختيار وإعداد وتحسين LLM الأنسب لاحتياجات مشروعك.
+
+
+
+ يوفر CrewAI تكاملًا أصليًا مع OpenAI من خلال OpenAI Python SDK.
+
+ ```toml Code
+ # Required
+ OPENAI_API_KEY=sk-...
+
+ # Optional
+ OPENAI_BASE_URL=
+ ```
+
+ **الاستخدام الأساسي:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="openai/gpt-4o",
+ api_key="your-api-key", # Or set OPENAI_API_KEY
+ temperature=0.7,
+ max_tokens=4000
+ )
+ ```
+
+ **الإعداد المتقدم:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="openai/gpt-4o",
+ api_key="your-api-key",
+ base_url="https://api.openai.com/v1", # Optional custom endpoint
+ organization="org-...", # Optional organization ID
+ project="proj_...", # Optional project ID
+ temperature=0.7,
+ max_tokens=4000,
+ max_completion_tokens=4000, # For newer models
+ top_p=0.9,
+ frequency_penalty=0.1,
+ presence_penalty=0.1,
+ stop=["END"],
+ seed=42, # For reproducible outputs
+ stream=True, # Enable streaming
+ timeout=60.0, # Request timeout in seconds
+ max_retries=3, # Maximum retry attempts
+ logprobs=True, # Return log probabilities
+ top_logprobs=5, # Number of most likely tokens
+ reasoning_effort="medium" # For o1 models: low, medium, high
+ )
+ ```
+
+ **المخرجات المهيكلة:**
+ ```python Code
+ from pydantic import BaseModel
+ from crewai import LLM
+
+ class ResponseFormat(BaseModel):
+ name: str
+ age: int
+ summary: str
+
+ llm = LLM(
+ model="openai/gpt-4o",
+ )
+ ```
+
+ **متغيرات البيئة المدعومة:**
+ - `OPENAI_API_KEY`: مفتاح OpenAI API (مطلوب)
+ - `OPENAI_BASE_URL`: عنوان URL مخصص لـ OpenAI API (اختياري)
+
+ **الميزات:**
+ - دعم استدعاء الدوال الأصلي (باستثناء نماذج o1)
+ - مخرجات منظمة مع JSON schema
+ - دعم البث للاستجابات في الوقت الفعلي
+ - تتبع استخدام الرموز
+ - دعم تسلسلات التوقف (باستثناء نماذج o1)
+ - احتمالات السجل لرؤى على مستوى الرموز
+ - التحكم في جهد الاستدلال لنماذج o1
+
+ **النماذج المدعومة:**
+
+ | النموذج | نافذة السياق | الأفضل لـ |
+ |---------------------|------------------|-----------------------------------------------|
+ | gpt-4.1 | 1M tokens | أحدث نموذج بقدرات محسّنة |
+ | gpt-4.1-mini | 1M tokens | إصدار فعال بسياق كبير |
+ | gpt-4.1-nano | 1M tokens | متغير فائق الكفاءة |
+ | gpt-4o | 128,000 tokens | محسّن للسرعة والذكاء |
+ | gpt-4o-mini | 200,000 tokens | فعال من حيث التكلفة بسياق كبير |
+ | gpt-4-turbo | 128,000 tokens | المحتوى الطويل، تحليل المستندات |
+ | gpt-4 | 8,192 tokens | مهام الدقة العالية، الاستدلال المعقد |
+ | o1 | 200,000 tokens | الاستدلال المتقدم، حل المشكلات المعقدة |
+ | o1-preview | 128,000 tokens | معاينة قدرات الاستدلال |
+ | o1-mini | 128,000 tokens | نموذج استدلال فعال |
+ | o3-mini | 200,000 tokens | نموذج استدلال خفيف |
+ | o4-mini | 200,000 tokens | استدلال فعال من الجيل التالي |
+
+ **Responses API:**
+
+ تقدم OpenAI واجهتي API: Chat Completions (الافتراضية) و Responses API الأحدث. تم تصميم Responses API من الأساس مع دعم أصلي متعدد الوسائط -- النص والصور والصوت واستدعاءات الدوال كلها مكوّنات أساسية. توفر أداءً أفضل مع نماذج الاستدلال وتدعم ميزات إضافية مثل السلسلة التلقائية والأدوات المدمجة.
+
+ ```python Code
+ from crewai import LLM
+
+ # Use the Responses API instead of Chat Completions
+ llm = LLM(
+ model="openai/gpt-4o",
+ api="responses", # Enable Responses API
+ store=True, # Store responses for multi-turn (optional)
+ auto_chain=True, # Auto-chain for reasoning models (optional)
+ )
+ ```
+
+ **معاملات Responses API:**
+ - `api`: عيّن إلى `"responses"` لاستخدام Responses API (الافتراضي: `"completions"`)
+ - `instructions`: تعليمات على مستوى النظام (Responses API فقط)
+ - `store`: ما إذا كان يجب تخزين الاستجابات للمحادثات متعددة الأدوار
+ - `previous_response_id`: معرّف الاستجابة السابقة للمحادثات متعددة الأدوار
+ - `include`: بيانات إضافية لتضمينها في الاستجابة (مثل `["reasoning.encrypted_content"]`)
+ - `builtin_tools`: قائمة أدوات OpenAI المدمجة: `"web_search"`, `"file_search"`, `"code_interpreter"`, `"computer_use"`
+ - `parse_tool_outputs`: إعادة `ResponsesAPIResult` منظمة مع مخرجات أدوات مدمجة محللة
+ - `auto_chain`: تتبع واستخدام معرّفات الاستجابة تلقائيًا للمحادثات متعددة الأدوار
+ - `auto_chain_reasoning`: تتبع عناصر الاستدلال المشفرة للامتثال لـ ZDR
+
+
+ استخدم Responses API للمشاريع الجديدة، خاصة عند العمل مع نماذج الاستدلال (o1, o3, o4) أو عندما تحتاج دعمًا أصليًا متعدد الوسائط لـ [الملفات](/ar/concepts/files).
+
+
+ **ملاحظة:** لاستخدام OpenAI، ثبّت التبعيات المطلوبة:
+ ```bash
+ uv add "crewai[openai]"
+ ```
+
+
+
+ توفر Meta Llama API الوصول إلى عائلة نماذج اللغة الكبيرة من Meta.
+ الـ API متاحة عبر [Meta Llama API](https://llama.developer.meta.com?utm_source=partner-crewai&utm_medium=website).
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+
+ ```toml Code
+ # Meta Llama API Key Configuration
+ LLAMA_API_KEY=LLM|your_api_key_here
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ from crewai import LLM
+
+ # Initialize Meta Llama LLM
+ llm = LLM(
+ model="meta_llama/Llama-4-Scout-17B-16E-Instruct-FP8",
+ temperature=0.8,
+ stop=["END"],
+ seed=42
+ )
+ ```
+
+ جميع النماذج المدرجة هنا https://llama.developer.meta.com/docs/models/ مدعومة.
+
+ | معرّف النموذج | طول سياق الإدخال | طول سياق المخرجات | وسائط الإدخال | وسائط المخرجات |
+ | --- | --- | --- | --- | --- |
+ | `meta_llama/Llama-4-Scout-17B-16E-Instruct-FP8` | 128k | 4028 | نص، صورة | نص |
+ | `meta_llama/Llama-4-Maverick-17B-128E-Instruct-FP8` | 128k | 4028 | نص، صورة | نص |
+ | `meta_llama/Llama-3.3-70B-Instruct` | 128k | 4028 | نص | نص |
+ | `meta_llama/Llama-3.3-8B-Instruct` | 128k | 4028 | نص | نص |
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ يوفر CrewAI تكاملًا أصليًا مع Snowflake Cortex REST API عبر endpoint Chat Completions المتوافق مع OpenAI. تستخدم نماذج `snowflake/...` هذا المسار بدون fallback إلى LiteLLM. يدعم Snowflake Cortex في CrewAI حاليًا Chat Completions فقط، لذلك استخدم وضع `api` الافتراضي ولا تضبط `api="responses"`.
+
+ ```toml Code
+ # Required
+ SNOWFLAKE_PAT=
+ SNOWFLAKE_ACCOUNT_URL=https://.snowflakecomputing.com
+
+ # Alternative account configuration
+ SNOWFLAKE_ACCOUNT=
+ ```
+
+ **الاستخدام الأساسي:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="snowflake/openai-gpt-4.1",
+ temperature=0.7,
+ max_completion_tokens=1024,
+ )
+ ```
+
+ **نماذج Claude على Cortex:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="snowflake/claude-sonnet-4-5",
+ max_completion_tokens=1024,
+ stream=True,
+ )
+ ```
+
+ **متغيرات البيئة المدعومة:**
+ - `SNOWFLAKE_PAT` أو `SNOWFLAKE_TOKEN` أو `SNOWFLAKE_JWT`: الرمز المستخدم كاعتماد Bearer
+ - `SNOWFLAKE_ACCOUNT_URL`: عنوان URL الكامل لحساب Snowflake
+ - `SNOWFLAKE_ACCOUNT` أو `SNOWFLAKE_ACCOUNT_ID` أو `SNOWFLAKE_ACCOUNT_IDENTIFIER`: معرف الحساب المستخدم لبناء URL
+
+ تستخدم طلبات Snowflake REST الدور الافتراضي للمستخدم. تأكد من أن هذا الدور لديه `SNOWFLAKE.CORTEX_USER` أو `SNOWFLAKE.CORTEX_REST_API_USER`. لا يتطلب endpoint Cortex REST Chat Completions معاملات database أو schema أو warehouse أو role صريح.
+
+ **الميزات:**
+ - اختيار provider أصلي باستخدام `model="snowflake/"`
+ - Chat Completions مع streaming وبدونه فقط؛ `api="responses"` غير مدعوم
+ - تتبع استخدام الرموز
+ - استدعاء الدوال لنماذج OpenAI و Claude المستضافة في Snowflake
+ - إزالة assistant prefill النهائي غير الصالح تلقائيًا لنماذج Claude في Snowflake
+
+
+
+ يوفر CrewAI تكاملًا أصليًا مع Anthropic من خلال Anthropic Python SDK.
+
+ ```toml Code
+ # Required
+ ANTHROPIC_API_KEY=sk-ant-...
+ ```
+
+ **الاستخدام الأساسي:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="anthropic/claude-3-5-sonnet-20241022",
+ api_key="your-api-key", # Or set ANTHROPIC_API_KEY
+ max_tokens=4096 # Required for Anthropic
+ )
+ ```
+
+ **الإعداد المتقدم:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="anthropic/claude-3-5-sonnet-20241022",
+ api_key="your-api-key",
+ base_url="https://api.anthropic.com", # Optional custom endpoint
+ temperature=0.7,
+ max_tokens=4096, # Required parameter
+ top_p=0.9,
+ stop_sequences=["END", "STOP"], # Anthropic uses stop_sequences
+ stream=True, # Enable streaming
+ timeout=60.0, # Request timeout in seconds
+ max_retries=3 # Maximum retry attempts
+ )
+ ```
+
+ **التفكير الموسّع (Claude Sonnet 4 وما بعده):**
+
+ يدعم CrewAI ميزة التفكير الموسّع من Anthropic، التي تتيح لـ Claude التفكير في المشكلات بطريقة أكثر شبهًا بالبشر قبل الاستجابة. مفيد بشكل خاص لمهام الاستدلال والتحليل وحل المشكلات المعقدة.
+
+ ```python Code
+ from crewai import LLM
+
+ # Enable extended thinking with default settings
+ llm = LLM(
+ model="anthropic/claude-sonnet-4",
+ thinking={"type": "enabled"},
+ max_tokens=10000
+ )
+
+ # Configure thinking with budget control
+ llm = LLM(
+ model="anthropic/claude-sonnet-4",
+ thinking={
+ "type": "enabled",
+ "budget_tokens": 5000 # Limit thinking tokens
+ },
+ max_tokens=10000
+ )
+ ```
+
+ **خيارات إعداد التفكير:**
+ - `type`: عيّن إلى `"enabled"` لتفعيل وضع التفكير الموسّع
+ - `budget_tokens` (اختياري): أقصى رموز للتفكير (يساعد في التحكم بالتكاليف)
+
+ **النماذج التي تدعم التفكير الموسّع:**
+ - `claude-sonnet-4` والنماذج الأحدث
+ - `claude-3-7-sonnet` (مع قدرات التفكير الموسّع)
+
+ **متى تستخدم التفكير الموسّع:**
+ - الاستدلال المعقد وحل المشكلات متعددة الخطوات
+ - الحسابات الرياضية والبراهين
+ - تحليل الكود وتصحيح الأخطاء
+ - التخطيط الاستراتيجي واتخاذ القرارات
+ - البحث والمهام التحليلية
+
+ **ملاحظة:** يستهلك التفكير الموسّع رموزًا إضافية لكنه يمكن أن يحسّن جودة الاستجابة بشكل كبير للمهام المعقدة.
+
+ **متغيرات البيئة المدعومة:**
+ - `ANTHROPIC_API_KEY`: مفتاح Anthropic API (مطلوب)
+
+ **الميزات:**
+ - دعم استخدام الأدوات الأصلي لنماذج Claude 3+
+ - دعم التفكير الموسّع لـ Claude Sonnet 4+
+ - دعم البث للاستجابات في الوقت الفعلي
+ - معالجة تلقائية لرسائل النظام
+ - تسلسلات التوقف للتحكم في المخرجات
+ - تتبع استخدام الرموز
+ - محادثات استخدام أدوات متعددة الأدوار
+
+ **ملاحظات مهمة:**
+ - `max_tokens` معامل **مطلوب** لجميع نماذج Anthropic
+ - يستخدم Claude `stop_sequences` بدلاً من `stop`
+ - يتم التعامل مع رسائل النظام بشكل منفصل عن رسائل المحادثة
+ - يجب أن تكون الرسالة الأولى من المستخدم (يتم التعامل معها تلقائيًا)
+ - يجب أن تتناوب الرسائل بين المستخدم والمساعد
+
+ **النماذج المدعومة:**
+
+ | النموذج | نافذة السياق | الأفضل لـ |
+ |------------------------------|------------------|-----------------------------------------------|
+ | claude-sonnet-4 | 200,000 tokens | الأحدث مع قدرات التفكير الموسّع |
+ | claude-3-7-sonnet | 200,000 tokens | الاستدلال المتقدم والمهام الوكيلية |
+ | claude-3-5-sonnet-20241022 | 200,000 tokens | أحدث Sonnet بأفضل أداء |
+ | claude-3-5-haiku | 200,000 tokens | نموذج سريع وصغير للاستجابات السريعة |
+ | claude-3-opus | 200,000 tokens | الأكثر قدرة للمهام المعقدة |
+ | claude-3-sonnet | 200,000 tokens | توازن بين الذكاء والسرعة |
+ | claude-3-haiku | 200,000 tokens | الأسرع للمهام البسيطة |
+ | claude-2.1 | 200,000 tokens | سياق موسّع، هلوسات أقل |
+ | claude-2 | 100,000 tokens | نموذج متعدد الاستخدامات |
+ | claude-instant | 100,000 tokens | سريع وفعال من حيث التكلفة للمهام اليومية |
+
+ **ملاحظة:** لاستخدام Anthropic، ثبّت التبعيات المطلوبة:
+ ```bash
+ uv add "crewai[anthropic]"
+ ```
+
+
+
+ يوفر CrewAI تكاملًا أصليًا مع Google Gemini من خلال Google Gen AI Python SDK.
+
+ عيّن مفتاح API في ملف `.env`. إذا كنت بحاجة إلى مفتاح، تحقق من [AI Studio](https://aistudio.google.com/apikey).
+
+ ```toml .env
+ # Required (one of the following)
+ GOOGLE_API_KEY=
+ GEMINI_API_KEY=
+
+ # For Vertex AI Express mode (API key authentication)
+ GOOGLE_GENAI_USE_VERTEXAI=true
+ GOOGLE_API_KEY=
+
+ # For Vertex AI with service account
+ GOOGLE_CLOUD_PROJECT=
+ GOOGLE_CLOUD_LOCATION= # Defaults to us-central1
+ ```
+
+ **الاستخدام الأساسي:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini/gemini-2.0-flash",
+ api_key="your-api-key", # Or set GOOGLE_API_KEY/GEMINI_API_KEY
+ temperature=0.7
+ )
+ ```
+
+ **الإعداد المتقدم:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini/gemini-2.5-flash",
+ api_key="your-api-key",
+ temperature=0.7,
+ top_p=0.9,
+ top_k=40, # Top-k sampling parameter
+ max_output_tokens=8192,
+ stop_sequences=["END", "STOP"],
+ stream=True, # Enable streaming
+ safety_settings={
+ "HARM_CATEGORY_HARASSMENT": "BLOCK_NONE",
+ "HARM_CATEGORY_HATE_SPEECH": "BLOCK_NONE"
+ }
+ )
+ ```
+
+ **وضع Vertex AI Express (مصادقة بمفتاح API):**
+
+ يتيح لك وضع Vertex AI Express استخدام Vertex AI مع مصادقة بسيطة بمفتاح API بدلاً من بيانات اعتماد حساب الخدمة. هذه أسرع طريقة للبدء مع Vertex AI.
+
+ لتفعيل وضع Express، عيّن متغيري البيئة في ملف `.env`:
+ ```toml .env
+ GOOGLE_GENAI_USE_VERTEXAI=true
+ GOOGLE_API_KEY=
+ ```
+
+ ثم استخدم LLM كالمعتاد:
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini/gemini-2.0-flash",
+ temperature=0.7
+ )
+ ```
+
+
+ للحصول على مفتاح API لوضع Express:
+ - مستخدمو Google Cloud الجدد: احصل على [مفتاح API لوضع Express](https://cloud.google.com/vertex-ai/generative-ai/docs/start/quickstart?usertype=apikey)
+ - مستخدمو Google Cloud الحاليون: احصل على [مفتاح Google Cloud API مرتبط بحساب خدمة](https://cloud.google.com/docs/authentication/api-keys)
+
+ لمزيد من التفاصيل، انظر [وثائق وضع Vertex AI Express](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/start/quickstart?usertype=apikey).
+
+
+ **إعداد Vertex AI (حساب خدمة):**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini/gemini-1.5-pro",
+ project="your-gcp-project-id",
+ location="us-central1" # GCP region
+ )
+ ```
+
+ **متغيرات البيئة المدعومة:**
+ - `GOOGLE_API_KEY` أو `GEMINI_API_KEY`: مفتاح Google API (مطلوب لـ Gemini API ووضع Vertex AI Express)
+ - `GOOGLE_GENAI_USE_VERTEXAI`: عيّن إلى `true` لاستخدام Vertex AI (مطلوب لوضع Express)
+ - `GOOGLE_CLOUD_PROJECT`: معرّف مشروع Google Cloud (لـ Vertex AI مع حساب خدمة)
+ - `GOOGLE_CLOUD_LOCATION`: موقع GCP (الافتراضي `us-central1`)
+
+ **الميزات:**
+ - دعم استدعاء الدوال الأصلي لنماذج Gemini 1.5+ و 2.x
+ - دعم البث للاستجابات في الوقت الفعلي
+ - قدرات متعددة الوسائط (نص، صور، فيديو)
+ - إعداد إعدادات الأمان
+ - دعم لكل من Gemini API و Vertex AI
+ - معالجة تلقائية لتعليمات النظام
+ - تتبع استخدام الرموز
+
+ **نماذج Gemini:**
+
+ | النموذج | نافذة السياق | الأفضل لـ |
+ |--------------------------------|-----------------|-------------------------------------------------------------------|
+ | gemini-2.5-flash | 1M tokens | التفكير التكيفي، كفاءة التكلفة |
+ | gemini-2.5-pro | 1M tokens | التفكير والاستدلال المحسّن، الفهم متعدد الوسائط |
+ | gemini-2.0-flash | 1M tokens | ميزات الجيل التالي، السرعة، التفكير |
+ | gemini-2.0-flash-thinking | 32,768 tokens | الاستدلال المتقدم مع عملية التفكير |
+ | gemini-2.0-flash-lite | 1M tokens | كفاءة التكلفة ووقت الاستجابة المنخفض |
+ | gemini-1.5-pro | 2M tokens | الأفضل أداءً، الاستدلال المنطقي، البرمجة |
+ | gemini-1.5-flash | 1M tokens | نموذج متعدد الوسائط متوازن، جيد لمعظم المهام |
+ | gemini-1.5-flash-8b | 1M tokens | الأسرع والأكثر كفاءة من حيث التكلفة |
+ | gemini-1.0-pro | 32,768 tokens | نموذج الجيل السابق |
+
+ **ملاحظة:** لاستخدام Google Gemini، ثبّت التبعيات المطلوبة:
+ ```bash
+ uv add "crewai[google-genai]"
+ ```
+
+ القائمة الكاملة للنماذج متاحة في [وثائق نماذج Gemini](https://ai.google.dev/gemini-api/docs/models).
+
+
+
+ احصل على بيانات الاعتماد من Google Cloud Console واحفظها في ملف JSON، ثم حمّلها بالكود التالي:
+ ```python Code
+ import json
+
+ file_path = 'path/to/vertex_ai_service_account.json'
+
+ # Load the JSON file
+ with open(file_path, 'r') as file:
+ vertex_credentials = json.load(file)
+
+ # Convert the credentials to a JSON string
+ vertex_credentials_json = json.dumps(vertex_credentials)
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini-1.5-pro-latest", # or vertex_ai/gemini-1.5-pro-latest
+ temperature=0.7,
+ vertex_credentials=vertex_credentials_json
+ )
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ يوفر CrewAI تكاملًا أصليًا مع Azure AI Inference و Azure OpenAI من خلال Azure AI Inference Python SDK.
+
+ ```toml Code
+ # Required
+ AZURE_API_KEY=
+ AZURE_ENDPOINT=
+
+ # Optional
+ AZURE_API_VERSION= # Defaults to 2024-06-01
+ ```
+
+ **الاستخدام الأساسي:**
+ ```python Code
+ llm = LLM(
+ model="azure/gpt-4",
+ api_key="", # Or set AZURE_API_KEY
+ endpoint="",
+ api_version="2024-06-01"
+ )
+ ```
+
+ **ملاحظة:** لاستخدام Azure AI Inference، ثبّت التبعيات المطلوبة:
+ ```bash
+ uv add "crewai[azure-ai-inference]"
+ ```
+
+
+
+ يوفر CrewAI تكاملًا أصليًا مع AWS Bedrock من خلال boto3 SDK باستخدام Converse API.
+
+ ```toml Code
+ # Required
+ AWS_ACCESS_KEY_ID=
+ AWS_SECRET_ACCESS_KEY=
+
+ # Optional
+ AWS_SESSION_TOKEN= # For temporary credentials
+ AWS_DEFAULT_REGION= # Defaults to us-east-1
+ AWS_REGION_NAME= # Alternative configuration for backwards compatibility with LiteLLM. Defaults to us-east-1
+ ```
+
+ **الاستخدام الأساسي:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
+ region_name="us-east-1"
+ )
+ ```
+
+ **الإعداد المتقدم:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
+ aws_access_key_id="your-access-key", # Or set AWS_ACCESS_KEY_ID
+ aws_secret_access_key="your-secret-key", # Or set AWS_SECRET_ACCESS_KEY
+ aws_session_token="your-session-token", # For temporary credentials
+ region_name="us-east-1",
+ temperature=0.7,
+ max_tokens=4096,
+ top_p=0.9,
+ top_k=250, # For Claude models
+ stop_sequences=["END", "STOP"],
+ stream=True, # Enable streaming
+ guardrail_config={ # Optional content filtering
+ "guardrailIdentifier": "your-guardrail-id",
+ "guardrailVersion": "1"
+ },
+ additional_model_request_fields={ # Model-specific parameters
+ "top_k": 250
+ }
+ )
+ ```
+
+ **متغيرات البيئة المدعومة:**
+ - `AWS_ACCESS_KEY_ID`: مفتاح وصول AWS (مطلوب)
+ - `AWS_SECRET_ACCESS_KEY`: مفتاح AWS السري (مطلوب)
+ - `AWS_SESSION_TOKEN`: رمز جلسة AWS لبيانات الاعتماد المؤقتة (اختياري)
+ - `AWS_DEFAULT_REGION`: منطقة AWS (الافتراضي `us-east-1`)
+ - `AWS_REGION_NAME`: منطقة AWS (الافتراضي `us-east-1`). إعداد بديل للتوافق مع LiteLLM
+
+ **الميزات:**
+ - دعم استدعاء الأدوات الأصلي عبر Converse API
+ - استجابات بث وبدون بث
+ - معالجة أخطاء شاملة مع منطق إعادة المحاولة
+ - إعداد حواجز الحماية لتصفية المحتوى
+ - معاملات خاصة بالنموذج عبر `additional_model_request_fields`
+ - تتبع استخدام الرموز وتسجيل سبب التوقف
+ - دعم جميع نماذج Bedrock الأساسية
+ - معالجة تلقائية لتنسيق المحادثة
+
+ **ملاحظات مهمة:**
+ - يستخدم Converse API الحديث للوصول الموحد للنماذج
+ - معالجة تلقائية لمتطلبات المحادثة الخاصة بالنموذج
+ - يتم التعامل مع رسائل النظام بشكل منفصل عن المحادثة
+ - يجب أن تكون الرسالة الأولى من المستخدم (يتم التعامل معها تلقائيًا)
+ - بعض النماذج (مثل Cohere) تتطلب أن تنتهي المحادثة برسالة المستخدم
+
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) هو خدمة مُدارة توفر الوصول إلى نماذج أساسية متعددة من أبرز شركات الذكاء الاصطناعي عبر واجهة API موحدة.
+
+ | النموذج | نافذة السياق | الأفضل لـ |
+ |-------------------------|----------------------|-------------------------------------------------------------------|
+ | Amazon Nova Pro | حتى 300k tokens | أداء عالٍ، نموذج يوازن بين الدقة والسرعة والفعالية من حيث التكلفة عبر مهام متنوعة. |
+ | Amazon Nova Micro | حتى 128k tokens | نموذج نصي فقط عالي الأداء وفعال من حيث التكلفة ومحسّن لأقل وقت استجابة. |
+ | Amazon Nova Lite | حتى 300k tokens | معالجة متعددة الوسائط بأسعار معقولة للصور والفيديو والنص مع قدرات في الوقت الفعلي. |
+ | Claude 3.7 Sonnet | حتى 128k tokens | الأفضل أداءً للاستدلال المعقد والبرمجة ووكلاء الذكاء الاصطناعي |
+ | Claude 3.5 Sonnet v2 | حتى 200k tokens | نموذج متطور متخصص في هندسة البرمجيات والقدرات الوكيلية والتفاعل مع الحاسوب بتكلفة محسّنة. |
+ | Claude 3.5 Sonnet | حتى 200k tokens | نموذج عالي الأداء يقدم ذكاءً واستدلالًا فائقين عبر مهام متنوعة مع توازن مثالي بين السرعة والتكلفة. |
+ | Claude 3.5 Haiku | حتى 200k tokens | نموذج متعدد الوسائط سريع وصغير محسّن للاستجابات السريعة والتفاعلات الشبيهة بالبشر |
+ | Claude 3 Sonnet | حتى 200k tokens | نموذج متعدد الوسائط يوازن بين الذكاء والسرعة للنشر بكميات كبيرة. |
+ | Claude 3 Haiku | حتى 200k tokens | نموذج متعدد الوسائط صغير وسريع محسّن للاستجابات السريعة والتفاعلات المحادثية الطبيعية |
+ | Claude 3 Opus | حتى 200k tokens | أكثر النماذج متعددة الوسائط تقدمًا يتفوق في المهام المعقدة بالاستدلال الشبيه بالبشر والفهم السياقي الفائق. |
+ | Claude 2.1 | حتى 200k tokens | إصدار محسّن بنافذة سياق موسّعة وموثوقية محسّنة وهلوسات أقل لتطبيقات النصوص الطويلة وRAG |
+ | Claude | حتى 100k tokens | نموذج متعدد الاستخدامات يتفوق في الحوار المتقدم والمحتوى الإبداعي واتباع التعليمات الدقيقة. |
+ | Claude Instant | حتى 100k tokens | نموذج سريع وفعال من حيث التكلفة للمهام اليومية مثل الحوار والتحليل والتلخيص والأسئلة والأجوبة |
+ | Llama 3.1 405B Instruct | حتى 128k tokens | نموذج LLM متقدم لتوليد البيانات الاصطناعية والتقطير والاستدلال لروبوتات المحادثة والبرمجة والمهام المتخصصة. |
+ | Llama 3.1 70B Instruct | حتى 128k tokens | يدعم المحادثات المعقدة مع فهم سياقي فائق واستدلال وتوليد نص. |
+ | Llama 3.1 8B Instruct | حتى 128k tokens | نموذج متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | Llama 3 70B Instruct | حتى 8k tokens | يدعم المحادثات المعقدة مع فهم سياقي فائق واستدلال وتوليد نص. |
+ | Llama 3 8B Instruct | حتى 8k tokens | نموذج LLM متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | Titan Text G1 - Lite | حتى 4k tokens | نموذج خفيف وفعال من حيث التكلفة محسّن لمهام اللغة الإنجليزية والضبط الدقيق مع التركيز على التلخيص وتوليد المحتوى. |
+ | Titan Text G1 - Express | حتى 8k tokens | نموذج متعدد الاستخدامات لمهام اللغة العامة والمحادثة وتطبيقات RAG مع دعم الإنجليزية وأكثر من 100 لغة. |
+ | Cohere Command | حتى 4k tokens | نموذج متخصص في اتباع أوامر المستخدم وتقديم حلول عملية للمؤسسات. |
+ | Jurassic-2 Mid | حتى 8,191 tokens | نموذج فعال من حيث التكلفة يوازن بين الجودة والسعر لمهام اللغة المتنوعة مثل الأسئلة والأجوبة والتلخيص وتوليد المحتوى. |
+ | Jurassic-2 Ultra | حتى 8,191 tokens | نموذج لتوليد النص المتقدم والفهم، يتفوق في المهام المعقدة مثل التحليل وإنشاء المحتوى. |
+ | Jamba-Instruct | حتى 256k tokens | نموذج بنافذة سياق موسّعة محسّن لتوليد النص الفعال من حيث التكلفة والتلخيص والأسئلة والأجوبة. |
+ | Mistral 7B Instruct | حتى 32k tokens | نموذج LLM يتبع التعليمات ويكمل الطلبات ويولد نصًا إبداعيًا. |
+ | Mistral 8x7B Instruct | حتى 32k tokens | نموذج LLM بمعمارية MOE يتبع التعليمات ويكمل الطلبات ويولد نصًا إبداعيًا. |
+ | DeepSeek R1 | 32,768 tokens | نموذج استدلال متقدم |
+
+ **ملاحظة:** لاستخدام AWS Bedrock، ثبّت التبعيات المطلوبة:
+ ```bash
+ uv add "crewai[bedrock]"
+ ```
+
+
+
+ ```toml Code
+ AWS_ACCESS_KEY_ID=
+ AWS_SECRET_ACCESS_KEY=
+ AWS_DEFAULT_REGION=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="sagemaker/"
+ )
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ MISTRAL_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="mistral/mistral-large-latest",
+ temperature=0.7
+ )
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ NVIDIA_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="nvidia_nim/meta/llama3-70b-instruct",
+ temperature=0.7
+ )
+ ```
+
+ يوفر Nvidia NIM مجموعة شاملة من النماذج لحالات الاستخدام المتنوعة، من المهام ذات الأغراض العامة إلى التطبيقات المتخصصة.
+
+ | النموذج | نافذة السياق | الأفضل لـ |
+ |-------------------------------------------------------------------------|----------------|-------------------------------------------------------------------|
+ | nvidia/mistral-nemo-minitron-8b-8k-instruct | 8,192 tokens | نموذج لغة صغير متطور يقدم دقة فائقة لروبوتات المحادثة والمساعدين الافتراضيين وتوليد المحتوى. |
+ | nvidia/nemotron-4-mini-hindi-4b-instruct | 4,096 tokens | نموذج لغة صغير ثنائي اللغة هندي-إنجليزي للاستدلال على الجهاز، مصمم خصيصًا للغة الهندية. |
+ | nvidia/llama-3.1-nemotron-70b-instruct | 128k tokens | مخصص لتعزيز فائدة الاستجابات |
+ | nvidia/llama3-chatqa-1.5-8b | 128k tokens | نموذج LLM متقدم لتوليد استجابات عالية الجودة ومدركة للسياق لروبوتات المحادثة ومحركات البحث. |
+ | nvidia/llama3-chatqa-1.5-70b | 128k tokens | نموذج LLM متقدم لتوليد استجابات عالية الجودة ومدركة للسياق لروبوتات المحادثة ومحركات البحث. |
+ | nvidia/vila | 128k tokens | نموذج رؤية-لغة متعدد الوسائط يفهم النص والصور والفيديو وينشئ استجابات غنية بالمعلومات |
+ | nvidia/neva-22 | 4,096 tokens | نموذج رؤية-لغة متعدد الوسائط يفهم النص والصور ويولد استجابات غنية بالمعلومات |
+ | nvidia/nemotron-mini-4b-instruct | 8,192 tokens | مهام ذات أغراض عامة |
+ | nvidia/usdcode-llama3-70b-instruct | 128k tokens | نموذج LLM متطور يجيب على استعلامات معرفة OpenUSD ويولد كود USD-Python. |
+ | nvidia/nemotron-4-340b-instruct | 4,096 tokens | ينشئ بيانات اصطناعية متنوعة تحاكي خصائص بيانات العالم الحقيقي. |
+ | meta/codellama-70b | 100k tokens | نموذج LLM قادر على توليد الكود من اللغة الطبيعية والعكس. |
+ | meta/llama2-70b | 4,096 tokens | نموذج لغة كبير متطور قادر على توليد النص والكود استجابة للمطالبات. |
+ | meta/llama3-8b-instruct | 8,192 tokens | نموذج LLM متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | meta/llama3-70b-instruct | 8,192 tokens | يدعم المحادثات المعقدة مع فهم سياقي فائق واستدلال وتوليد نص. |
+ | meta/llama-3.1-8b-instruct | 128k tokens | نموذج متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | meta/llama-3.1-70b-instruct | 128k tokens | يدعم المحادثات المعقدة مع فهم سياقي فائق واستدلال وتوليد نص. |
+ | meta/llama-3.1-405b-instruct | 128k tokens | نموذج LLM متقدم لتوليد البيانات الاصطناعية والتقطير والاستدلال لروبوتات المحادثة والبرمجة والمهام المتخصصة. |
+ | meta/llama-3.2-1b-instruct | 128k tokens | نموذج لغة صغير متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | meta/llama-3.2-3b-instruct | 128k tokens | نموذج لغة صغير متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | meta/llama-3.2-11b-vision-instruct | 128k tokens | نموذج لغة صغير متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | meta/llama-3.2-90b-vision-instruct | 128k tokens | نموذج لغة صغير متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | google/gemma-7b | 8,192 tokens | نموذج متطور لتوليد النص وفهمه وتحويله وتوليد الكود. |
+ | google/gemma-2b | 8,192 tokens | نموذج متطور لتوليد النص وفهمه وتحويله وتوليد الكود. |
+ | google/codegemma-7b | 8,192 tokens | نموذج متطور مبني على Gemma-7B من Google متخصص في توليد الكود وإكماله. |
+ | google/codegemma-1.1-7b | 8,192 tokens | نموذج برمجة متقدم لتوليد الكود وإكماله والاستدلال واتباع التعليمات. |
+ | google/recurrentgemma-2b | 8,192 tokens | نموذج لغة بمعمارية تكرارية جديدة لاستدلال أسرع عند توليد تسلسلات طويلة. |
+ | google/gemma-2-9b-it | 8,192 tokens | نموذج متطور لتوليد النص وفهمه وتحويله وتوليد الكود. |
+ | google/gemma-2-27b-it | 8,192 tokens | نموذج متطور لتوليد النص وفهمه وتحويله وتوليد الكود. |
+ | google/gemma-2-2b-it | 8,192 tokens | نموذج متطور لتوليد النص وفهمه وتحويله وتوليد الكود. |
+ | google/deplot | 512 tokens | نموذج فهم لغة بصرية بلقطة واحدة يترجم صور الرسوم البيانية إلى جداول. |
+ | google/paligemma | 8,192 tokens | نموذج لغة بصري بارع في استيعاب مدخلات النص والصور لإنتاج استجابات غنية بالمعلومات. |
+ | mistralai/mistral-7b-instruct-v0.2 | 32k tokens | نموذج LLM يتبع التعليمات ويكمل الطلبات ويولد نصًا إبداعيًا. |
+ | mistralai/mixtral-8x7b-instruct-v0.1 | 8,192 tokens | نموذج LLM بمعمارية MOE يتبع التعليمات ويكمل الطلبات ويولد نصًا إبداعيًا. |
+ | mistralai/mistral-large | 4,096 tokens | ينشئ بيانات اصطناعية متنوعة تحاكي خصائص بيانات العالم الحقيقي. |
+ | mistralai/mixtral-8x22b-instruct-v0.1 | 8,192 tokens | ينشئ بيانات اصطناعية متنوعة تحاكي خصائص بيانات العالم الحقيقي. |
+ | mistralai/mistral-7b-instruct-v0.3 | 32k tokens | نموذج LLM يتبع التعليمات ويكمل الطلبات ويولد نصًا إبداعيًا. |
+ | nv-mistralai/mistral-nemo-12b-instruct | 128k tokens | أكثر نموذج لغة تقدمًا للاستدلال والبرمجة والمهام متعددة اللغات؛ يعمل على وحدة GPU واحدة. |
+ | mistralai/mamba-codestral-7b-v0.1 | 256k tokens | نموذج للكتابة والتفاعل مع الكود عبر مجموعة واسعة من لغات البرمجة والمهام. |
+ | microsoft/phi-3-mini-128k-instruct | 128K tokens | نموذج LLM مفتوح خفيف ومتطور مع مهارات قوية في الرياضيات والاستدلال المنطقي. |
+ | microsoft/phi-3-mini-4k-instruct | 4,096 tokens | نموذج LLM مفتوح خفيف ومتطور مع مهارات قوية في الرياضيات والاستدلال المنطقي. |
+ | microsoft/phi-3-small-8k-instruct | 8,192 tokens | نموذج LLM مفتوح خفيف ومتطور مع مهارات قوية في الرياضيات والاستدلال المنطقي. |
+ | microsoft/phi-3-small-128k-instruct | 128K tokens | نموذج LLM مفتوح خفيف ومتطور مع مهارات قوية في الرياضيات والاستدلال المنطقي. |
+ | microsoft/phi-3-medium-4k-instruct | 4,096 tokens | نموذج LLM مفتوح خفيف ومتطور مع مهارات قوية في الرياضيات والاستدلال المنطقي. |
+ | microsoft/phi-3-medium-128k-instruct | 128K tokens | نموذج LLM مفتوح خفيف ومتطور مع مهارات قوية في الرياضيات والاستدلال المنطقي. |
+ | microsoft/phi-3.5-mini-instruct | 128K tokens | نموذج LLM خفيف متعدد اللغات يدعم تطبيقات الذكاء الاصطناعي في البيئات المحدودة بالكمون والذاكرة والحوسبة |
+ | microsoft/phi-3.5-moe-instruct | 128K tokens | نموذج LLM متقدم يعتمد على معمارية خليط الخبراء لتوليد محتوى فعال حوسبيًا |
+ | microsoft/kosmos-2 | 1,024 tokens | نموذج متعدد الوسائط رائد مصمم لفهم العناصر المرئية في الصور والاستدلال عليها. |
+ | microsoft/phi-3-vision-128k-instruct | 128k tokens | نموذج متعدد الوسائط مفتوح متطور يتفوق في الاستدلال عالي الجودة من الصور. |
+ | microsoft/phi-3.5-vision-instruct | 128k tokens | نموذج متعدد الوسائط مفتوح متطور يتفوق في الاستدلال عالي الجودة من الصور. |
+ | databricks/dbrx-instruct | 12k tokens | نموذج LLM للأغراض العامة بأداء متطور في فهم اللغة والبرمجة وRAG. |
+ | snowflake/arctic | 1,024 tokens | يقدم استدلالًا عالي الكفاءة لتطبيقات المؤسسات مع التركيز على توليد SQL والبرمجة. |
+ | aisingapore/sea-lion-7b-instruct | 4,096 tokens | نموذج LLM لتمثيل وخدمة التنوع اللغوي والثقافي لجنوب شرق آسيا |
+ | ibm/granite-8b-code-instruct | 4,096 tokens | نموذج LLM لبرمجة البرمجيات لتوليد الكود وإكماله وشرحه والتحويل متعدد الأدوار. |
+ | ibm/granite-34b-code-instruct | 8,192 tokens | نموذج LLM لبرمجة البرمجيات لتوليد الكود وإكماله وشرحه والتحويل متعدد الأدوار. |
+ | ibm/granite-3.0-8b-instruct | 4,096 tokens | نموذج لغة صغير متقدم يدعم RAG والتلخيص والتصنيف والكود والذكاء الاصطناعي الوكيلي |
+ | ibm/granite-3.0-3b-a800m-instruct | 4,096 tokens | نموذج خليط خبراء عالي الكفاءة لـ RAG والتلخيص واستخراج الكيانات والتصنيف |
+ | mediatek/breeze-7b-instruct | 4,096 tokens | ينشئ بيانات اصطناعية متنوعة تحاكي خصائص بيانات العالم الحقيقي. |
+ | upstage/solar-10.7b-instruct | 4,096 tokens | يتفوق في مهام NLP، خاصة في اتباع التعليمات والاستدلال والرياضيات. |
+ | writer/palmyra-med-70b-32k | 32k tokens | نموذج LLM رائد للاستجابات الدقيقة والمناسبة للسياق في المجال الطبي. |
+ | writer/palmyra-med-70b | 32k tokens | نموذج LLM رائد للاستجابات الدقيقة والمناسبة للسياق في المجال الطبي. |
+ | writer/palmyra-fin-70b-32k | 32k tokens | نموذج LLM متخصص في التحليل المالي وإعداد التقارير ومعالجة البيانات |
+ | 01-ai/yi-large | 32k tokens | نموذج قوي مدرب على الإنجليزية والصينية لمهام متنوعة بما في ذلك روبوتات المحادثة والكتابة الإبداعية. |
+ | deepseek-ai/deepseek-coder-6.7b-instruct | 2k tokens | نموذج برمجة قوي يقدم قدرات متقدمة في توليد الكود وإكماله وملء الفراغات |
+ | rakuten/rakutenai-7b-instruct | 1,024 tokens | نموذج LLM متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | rakuten/rakutenai-7b-chat | 1,024 tokens | نموذج LLM متطور مع فهم اللغة واستدلال فائق وتوليد النص. |
+ | baichuan-inc/baichuan2-13b-chat | 4,096 tokens | يدعم المحادثة بالصينية والإنجليزية والبرمجة والرياضيات واتباع التعليمات وحل الألغاز |
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+
+ يتيح لك NVIDIA NIM تشغيل نماذج LLM قوية محليًا على جهاز Windows باستخدام WSL2 (نظام Windows الفرعي لـ Linux).
+ يتيح لك هذا النهج الاستفادة من وحدة GPU من NVIDIA لاستدلال ذكاء اصطناعي خاص وآمن وفعال من حيث التكلفة دون الاعتماد على الخدمات السحابية.
+ مثالي لسيناريوهات التطوير والاختبار أو الإنتاج حيث تكون خصوصية البيانات أو القدرات غير المتصلة مطلوبة.
+
+ إليك دليلًا خطوة بخطوة لإعداد نموذج NVIDIA NIM محلي:
+
+ 1. اتبع تعليمات التثبيت من [موقع NVIDIA](https://docs.nvidia.com/nim/wsl2/latest/getting-started.html)
+
+ 2. ثبّت النموذج المحلي. لـ Llama 3.1-8b اتبع [التعليمات](https://build.nvidia.com/meta/llama-3_1-8b-instruct/deploy)
+
+ 3. أعدّ نماذج crewai المحلية:
+
+ ```python Code
+ from crewai.llm import LLM
+
+ local_nvidia_nim_llm = LLM(
+ model="openai/meta/llama-3.1-8b-instruct", # it's an openai-api compatible model
+ base_url="http://localhost:8000/v1",
+ api_key="", # api_key is required, but you can use any text
+ )
+
+ # Then you can use it in your crew:
+
+ @CrewBase
+ class MyCrew():
+ # ...
+
+ @agent
+ def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config['researcher'], # type: ignore[index]
+ llm=local_nvidia_nim_llm
+ )
+
+ # ...
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+
+ ```toml Code
+ GROQ_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="groq/llama-3.2-90b-text-preview",
+ temperature=0.7
+ )
+ ```
+ | النموذج | نافذة السياق | الأفضل لـ |
+ |-------------------|------------------|--------------------------------------------|
+ | Llama 3.1 70B/8B | 131,072 tokens | مهام عالية الأداء بسياق كبير |
+ | Llama 3.2 Series | 8,192 tokens | مهام ذات أغراض عامة |
+ | Mixtral 8x7B | 32,768 tokens | أداء متوازن وسياق جيد |
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ # Required
+ WATSONX_URL=
+ WATSONX_APIKEY=
+ WATSONX_PROJECT_ID=
+
+ # Optional
+ WATSONX_TOKEN=
+ WATSONX_DEPLOYMENT_SPACE_ID=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="watsonx/meta-llama/llama-3-1-70b-instruct",
+ base_url="https://api.watsonx.ai/v1"
+ )
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ 1. ثبّت Ollama: [ollama.ai](https://ollama.ai/)
+ 2. شغّل نموذجًا: `ollama run llama3`
+ 3. أعدّ:
+
+ ```python Code
+ llm = LLM(
+ model="ollama/llama3:70b",
+ base_url="http://localhost:11434"
+ )
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ FIREWORKS_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="fireworks_ai/accounts/fireworks/models/llama-v3-70b-instruct",
+ temperature=0.7
+ )
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ PERPLEXITY_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="llama-3.1-sonar-large-128k-online",
+ base_url="https://api.perplexity.ai/"
+ )
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ HF_TOKEN=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="huggingface/meta-llama/Meta-Llama-3.1-8B-Instruct"
+ )
+ ```
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+
+ ```toml Code
+ SAMBANOVA_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="sambanova/Meta-Llama-3.1-8B-Instruct",
+ temperature=0.7
+ )
+ ```
+ | النموذج | نافذة السياق | الأفضل لـ |
+ |--------------------|------------------------|----------------------------------------------|
+ | Llama 3.1 70B/8B | حتى 131,072 tokens | مهام عالية الأداء بسياق كبير |
+ | Llama 3.1 405B | 8,192 tokens | أداء عالٍ وجودة مخرجات |
+ | Llama 3.2 Series | 8,192 tokens | مهام عامة ومتعددة الوسائط |
+ | Llama 3.3 70B | حتى 131,072 tokens | أداء عالٍ وجودة مخرجات |
+ | Qwen2 familly | 8,192 tokens | أداء عالٍ وجودة مخرجات |
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ # Required
+ CEREBRAS_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="cerebras/llama3.1-70b",
+ temperature=0.7,
+ max_tokens=8192
+ )
+ ```
+
+
+ ميزات Cerebras:
+ - سرعات استدلال عالية
+ - أسعار تنافسية
+ - توازن جيد بين السرعة والجودة
+ - دعم نوافذ سياق طويلة
+
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ OPENROUTER_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="openrouter/deepseek/deepseek-r1",
+ base_url="https://openrouter.ai/api/v1",
+ api_key=OPENROUTER_API_KEY
+ )
+ ```
+
+
+ نماذج Open Router:
+ - openrouter/deepseek/deepseek-r1
+ - openrouter/deepseek/deepseek-chat
+
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ عيّن متغيرات البيئة التالية في ملف `.env`:
+ ```toml Code
+ NEBIUS_API_KEY=
+ ```
+
+ مثال الاستخدام في مشروع CrewAI:
+ ```python Code
+ llm = LLM(
+ model="nebius/Qwen/Qwen3-30B-A3B"
+ )
+ ```
+
+
+ ميزات Nebius AI Studio:
+ - مجموعة كبيرة من النماذج مفتوحة المصدر
+ - حدود معدل أعلى
+ - أسعار تنافسية
+ - توازن جيد بين السرعة والجودة
+
+
+ **ملاحظة:** يستخدم هذا المزود LiteLLM. أضفه كتبعية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+## بث الاستجابات
+
+يدعم CrewAI بث الاستجابات من LLMs، مما يتيح لتطبيقك تلقي ومعالجة المخرجات في الوقت الفعلي فور توليدها.
+
+
+
+ فعّل البث بتعيين معامل `stream` إلى `True` عند تهيئة LLM:
+
+ ```python
+ from crewai import LLM
+
+ # Create an LLM with streaming enabled
+ llm = LLM(
+ model="openai/gpt-4o",
+ stream=True # Enable streaming
+ )
+ ```
+
+ عند تفعيل البث، يتم تسليم الاستجابات في أجزاء فور توليدها، مما يخلق تجربة مستخدم أكثر استجابة.
+
+
+
+ يُصدر CrewAI أحداثًا لكل جزء يتم تلقيه أثناء البث:
+
+ ```python
+ from crewai.events import (
+ LLMStreamChunkEvent
+ )
+ from crewai.events import BaseEventListener
+
+ class MyCustomListener(BaseEventListener):
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(LLMStreamChunkEvent)
+ def on_llm_stream_chunk(self, event: LLMStreamChunkEvent):
+ # Process each chunk as it arrives
+ print(f"Received chunk: {event.chunk}")
+
+ my_listener = MyCustomListener()
+ ```
+
+
+ [انقر هنا](/ar/concepts/event-listener#event-listeners) لمزيد من التفاصيل
+
+
+
+
+ جميع أحداث LLM في CrewAI تتضمن معلومات Agent والمهمة، مما يتيح لك تتبع وتصفية تفاعلات LLM بواسطة وكلاء أو مهام محددة:
+
+ ```python
+ from crewai import LLM, Agent, Task, Crew
+ from crewai.events import LLMStreamChunkEvent
+ from crewai.events import BaseEventListener
+
+ class MyCustomListener(BaseEventListener):
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(LLMStreamChunkEvent)
+ def on_llm_stream_chunk(source, event):
+ if researcher.id == event.agent_id:
+ print("\n==============\n Got event:", event, "\n==============\n")
+
+
+ my_listener = MyCustomListener()
+
+ llm = LLM(model="gpt-4o-mini", temperature=0, stream=True)
+
+ researcher = Agent(
+ role="About User",
+ goal="You know everything about the user.",
+ backstory="""You are a master at understanding people and their preferences.""",
+ llm=llm,
+ )
+
+ search = Task(
+ description="Answer the following questions about the user: {question}",
+ expected_output="An answer to the question.",
+ agent=researcher,
+ )
+
+ crew = Crew(agents=[researcher], tasks=[search])
+
+ result = crew.kickoff(
+ inputs={"question": "..."}
+ )
+ ```
+
+
+ هذه الميزة مفيدة بشكل خاص لـ:
+ - تصحيح سلوكيات وكلاء محددة
+ - تسجيل استخدام LLM حسب نوع المهمة
+ - مراجعة أي الوكلاء يجرون أنواع استدعاءات LLM
+ - مراقبة أداء مهام محددة
+
+
+
+
+## استدعاءات LLM غير المتزامنة
+
+يدعم CrewAI استدعاءات LLM غير المتزامنة لأداء وتزامن محسّنين في سير عمل الذكاء الاصطناعي. تتيح لك الاستدعاءات غير المتزامنة تشغيل طلبات LLM متعددة بشكل متزامن دون حجب، مما يجعلها مثالية لتطبيقات الإنتاجية العالية وعمليات الوكلاء المتوازية.
+
+
+
+ استخدم دالة `acall` لطلبات LLM غير المتزامنة:
+
+ ```python
+ import asyncio
+ from crewai import LLM
+
+ async def main():
+ llm = LLM(model="openai/gpt-4o")
+
+ # Single async call
+ response = await llm.acall("What is the capital of France?")
+ print(response)
+
+ asyncio.run(main())
+ ```
+
+ تدعم دالة `acall` جميع المعاملات نفسها كدالة `call` المتزامنة، بما في ذلك الرسائل والأدوات ودوال الاسترجاع.
+
+
+
+ اجمع بين الاستدعاءات غير المتزامنة والبث للاستجابات المتزامنة في الوقت الفعلي:
+
+ ```python
+ import asyncio
+ from crewai import LLM
+
+ async def stream_async():
+ llm = LLM(model="openai/gpt-4o", stream=True)
+
+ response = await llm.acall("Write a short story about AI")
+
+ print(response)
+
+ asyncio.run(stream_async())
+ ```
+
+
+
+## استدعاءات LLM المهيكلة
+
+يدعم CrewAI الاستجابات المهيكلة من استدعاءات LLM من خلال السماح لك بتحديد `response_format` باستخدام نموذج Pydantic. يمكّن هذا الإطار من تحليل المخرجات والتحقق منها تلقائيًا، مما يسهّل دمج الاستجابة في تطبيقك دون معالجة لاحقة يدوية.
+
+```python Code
+from crewai import LLM
+
+class Dog(BaseModel):
+ name: str
+ age: int
+ breed: str
+
+
+llm = LLM(model="gpt-4o", response_format=Dog)
+
+response = llm.call(
+ "Analyze the following messages and return the name, age, and breed. "
+ "Meet Kona! She is 3 years old and is a black german shepherd."
+)
+print(response)
+
+# Output:
+# Dog(name='Kona', age=3, breed='black german shepherd')
+```
+
+## الميزات المتقدمة والتحسين
+
+تعلّم كيفية الاستفادة القصوى من إعداد LLM:
+
+
+
+ يتضمن CrewAI ميزات إدارة سياق ذكية:
+
+ ```python
+ from crewai import LLM
+
+ # CrewAI automatically handles:
+ # 1. Token counting and tracking
+ # 2. Content summarization when needed
+ # 3. Task splitting for large contexts
+
+ llm = LLM(
+ model="gpt-4",
+ max_tokens=4000, # Limit response length
+ )
+ ```
+
+
+ أفضل الممارسات لإدارة السياق:
+ 1. اختر نماذج بنوافذ سياق مناسبة
+ 2. عالج المدخلات الطويلة مسبقًا عند الإمكان
+ 3. استخدم التقسيم للمستندات الكبيرة
+ 4. راقب استخدام الرموز لتحسين التكاليف
+
+
+
+
+
+
+ اختر نافذة السياق المناسبة لمهمتك:
+ - المهام الصغيرة (حتى 4K رمز): النماذج القياسية
+ - المهام المتوسطة (بين 4K-32K): النماذج المحسّنة
+ - المهام الكبيرة (أكثر من 32K): نماذج السياق الكبير
+
+ ```python
+ # Configure model with appropriate settings
+ llm = LLM(
+ model="openai/gpt-4-turbo-preview",
+ temperature=0.7, # Adjust based on task
+ max_tokens=4096, # Set based on output needs
+ timeout=300 # Longer timeout for complex tasks
+ )
+ ```
+
+ - درجة حرارة منخفضة (0.1 إلى 0.3) للاستجابات الواقعية
+ - درجة حرارة عالية (0.7 إلى 0.9) للمهام الإبداعية
+
+
+
+
+ 1. راقب استخدام الرموز
+ 2. نفّذ تحديد المعدل
+ 3. استخدم التخزين المؤقت عند الإمكان
+ 4. عيّن حدود max_tokens مناسبة
+
+
+
+
+ تذكّر مراقبة استخدام الرموز بانتظام وضبط إعداداتك حسب الحاجة لتحسين التكاليف والأداء.
+
+
+
+
+ يستخدم CrewAI داخليًا حزم SDK أصلية لاستدعاءات LLM، مما يتيح لك إسقاط معاملات إضافية غير مطلوبة لحالة الاستخدام الخاصة بك. يمكن أن يساعد هذا في تبسيط كودك وتقليل تعقيد إعداد LLM.
+
+ ```python
+ from crewai import LLM
+ import os
+
+ os.environ["OPENAI_API_KEY"] = ""
+
+ o3_llm = LLM(
+ model="o3",
+ drop_params=True,
+ additional_drop_params=["stop"]
+ )
+ ```
+
+
+
+ يوفر CrewAI معترضات رسائل لعدة مزودين، مما يتيح لك الربط بدورات الطلب/الاستجابة على مستوى طبقة النقل.
+
+ **المزودون المدعومون:**
+ - OpenAI
+ - Anthropic
+
+ **الاستخدام الأساسي:**
+ ```python
+import httpx
+from crewai import LLM
+from crewai.llms.hooks import BaseInterceptor
+
+class CustomInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
+ """Custom interceptor to modify requests and responses."""
+
+ def on_outbound(self, request: httpx.Request) -> httpx.Request:
+ """Print request before sending to the LLM provider."""
+ print(request)
+ return request
+
+ def on_inbound(self, response: httpx.Response) -> httpx.Response:
+ """Process response after receiving from the LLM provider."""
+ print(f"Status: {response.status_code}")
+ print(f"Response time: {response.elapsed}")
+ return response
+
+# Use the interceptor with an LLM
+llm = LLM(
+ model="openai/gpt-4o",
+ interceptor=CustomInterceptor()
+)
+ ```
+
+ **ملاحظات مهمة:**
+ - يجب على كلتا الدالتين إعادة الكائن المستلم أو نوعه.
+ - تعديل الكائنات المستلمة قد يؤدي إلى سلوك غير متوقع أو أعطال في التطبيق.
+ - ليس كل المزودين يدعمون المعترضات -- تحقق من قائمة المزودين المدعومين أعلاه
+
+
+ تعمل المعترضات على مستوى طبقة النقل. مفيدة بشكل خاص لـ:
+ - تحويل الرسائل وتصفيتها
+ - تصحيح تفاعلات API
+
+
+
+
+## المشاكل الشائعة والحلول
+
+
+
+
+ يمكن حل معظم مشاكل المصادقة بالتحقق من تنسيق مفتاح API وأسماء متغيرات البيئة.
+
+
+ ```bash
+ # OpenAI
+ OPENAI_API_KEY=sk-...
+
+ # Anthropic
+ ANTHROPIC_API_KEY=sk-ant-...
+ ```
+
+
+
+ ضمّن دائمًا بادئة المزود في أسماء النماذج
+
+
+ ```python
+ # Correct
+ llm = LLM(model="openai/gpt-4")
+
+ # Incorrect
+ llm = LLM(model="gpt-4")
+ ```
+
+
+
+ استخدم نماذج سياق أكبر للمهام الواسعة
+
+
+ ```python
+ # Large context model
+ llm = LLM(model="openai/gpt-4o") # 128K tokens
+ ```
+
+
diff --git a/docs/v1.15.1/ar/concepts/memory.mdx b/docs/v1.15.1/ar/concepts/memory.mdx
new file mode 100644
index 000000000..541f2967a
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/memory.mdx
@@ -0,0 +1,878 @@
+---
+title: الذاكرة
+description: الاستفادة من نظام الذاكرة الموحد في CrewAI لتعزيز قدرات الوكلاء.
+icon: database
+mode: "wide"
+---
+
+## نظرة عامة
+
+يوفر CrewAI **نظام ذاكرة موحد** -- فئة `Memory` واحدة تستبدل أنواع الذاكرة المنفصلة (قصيرة المدى، طويلة المدى، ذاكرة الكيانات، والخارجية) بواجهة برمجة تطبيقات ذكية واحدة. تستخدم الذاكرة LLM لتحليل المحتوى عند الحفظ (استنتاج النطاق والفئات والأهمية) وتدعم الاسترجاع متعدد العمق مع تسجيل مركب يمزج بين التشابه الدلالي والحداثة والأهمية.
+
+يمكنك استخدام الذاكرة بأربع طرق: **مستقلة** (سكربتات، دفاتر ملاحظات)، **مع فرق Crew**، **مع Agents**، أو **داخل التدفقات**.
+
+## البدء السريع
+
+```python
+from crewai import Memory
+
+memory = Memory()
+
+# Store -- the LLM infers scope, categories, and importance
+memory.remember("We decided to use PostgreSQL for the user database.")
+
+# Retrieve -- results ranked by composite score (semantic + recency + importance)
+matches = memory.recall("What database did we choose?")
+for m in matches:
+ print(f"[{m.score:.2f}] {m.record.content}")
+
+# Tune scoring for a fast-moving project
+memory = Memory(recency_weight=0.5, recency_half_life_days=7)
+
+# Forget
+memory.forget(scope="/project/old")
+
+# Explore the self-organized scope tree
+print(memory.tree())
+print(memory.info("/"))
+```
+
+## أربع طرق لاستخدام الذاكرة
+
+### مستقلة
+
+استخدم الذاكرة في السكربتات ودفاتر الملاحظات وأدوات سطر الأوامر أو كقاعدة معرفة مستقلة -- لا حاجة لوكلاء أو فرق Crew.
+
+```python
+from crewai import Memory
+
+memory = Memory()
+
+# Build up knowledge
+memory.remember("The API rate limit is 1000 requests per minute.")
+memory.remember("Our staging environment uses port 8080.")
+memory.remember("The team agreed to use feature flags for all new releases.")
+
+# Later, recall what you need
+matches = memory.recall("What are our API limits?", limit=5)
+for m in matches:
+ print(f"[{m.score:.2f}] {m.record.content}")
+
+# Extract atomic facts from a longer text
+raw = """Meeting notes: We decided to migrate from MySQL to PostgreSQL
+next quarter. The budget is $50k. Sarah will lead the migration."""
+
+facts = memory.extract_memories(raw)
+# ["Migration from MySQL to PostgreSQL planned for next quarter",
+# "Database migration budget is $50k",
+# "Sarah will lead the database migration"]
+
+for fact in facts:
+ memory.remember(fact)
+```
+
+### مع فرق Crew
+
+مرّر `memory=True` للإعدادات الافتراضية، أو مرّر مثيل `Memory` مُعدّ للسلوك المخصص.
+
+```python
+from crewai import Crew, Agent, Task, Process, Memory
+
+# Option 1: Default memory
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ process=Process.sequential,
+ memory=True,
+ verbose=True,
+)
+
+# Option 2: Custom memory with tuned scoring
+memory = Memory(
+ recency_weight=0.4,
+ semantic_weight=0.4,
+ importance_weight=0.2,
+ recency_half_life_days=14,
+)
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ memory=memory,
+)
+```
+
+عند استخدام `memory=True`، ينشئ الفريق مثيل `Memory()` افتراضيًا ويمرر إعداد `embedder` الخاص بالفريق تلقائيًا. يشترك جميع الوكلاء في الفريق في ذاكرة الفريق ما لم يكن لدى الوكيل ذاكرته الخاصة.
+
+بعد كل مهمة، يستخرج الفريق تلقائيًا حقائق منفصلة من مخرجات المهمة ويخزّنها. قبل كل مهمة، يسترجع الوكيل السياق ذا الصلة من الذاكرة ويحقنه في موجّه المهمة.
+
+### مع Agents
+
+يمكن للوكلاء استخدام ذاكرة الفريق المشتركة (افتراضيًا) أو تلقي عرض محدد النطاق للسياق الخاص.
+
+```python
+from crewai import Agent, Memory
+
+memory = Memory()
+
+# Researcher gets a private scope -- only sees /agent/researcher
+researcher = Agent(
+ role="Researcher",
+ goal="Find and analyze information",
+ backstory="Expert researcher with attention to detail",
+ memory=memory.scope("/agent/researcher"),
+)
+
+# Writer uses crew shared memory (no agent-level memory set)
+writer = Agent(
+ role="Writer",
+ goal="Produce clear, well-structured content",
+ backstory="Experienced technical writer",
+ # memory not set -- uses crew._memory when crew has memory enabled
+)
+```
+
+يمنح هذا النمط الباحث نتائج خاصة بينما يقرأ الكاتب من ذاكرة الفريق المشتركة.
+
+### مع التدفقات
+
+كل تدفق يحتوي على ذاكرة مدمجة. استخدم `self.remember()` و `self.recall()` و `self.extract_memories()` داخل أي دالة تدفق.
+
+```python
+from crewai.flow.flow import Flow, listen, start
+
+class ResearchFlow(Flow):
+ @start()
+ def gather_data(self):
+ findings = "PostgreSQL handles 10k concurrent connections. MySQL caps at 5k."
+ self.remember(findings, scope="/research/databases")
+ return findings
+
+ @listen(gather_data)
+ def write_report(self, findings):
+ # Recall past research to provide context
+ past = self.recall("database performance benchmarks")
+ context = "\n".join(f"- {m.record.content}" for m in past)
+ return f"Report:\nNew findings: {findings}\nPrevious context:\n{context}"
+```
+
+انظر [وثائق التدفقات](/concepts/flows) لمزيد من المعلومات حول الذاكرة في التدفقات.
+
+
+## النطاقات الهرمية
+
+### ما هي النطاقات
+
+يتم تنظيم الذكريات في شجرة هرمية من النطاقات، مشابهة لنظام الملفات. كل نطاق هو مسار مثل `/` أو `/project/alpha` أو `/agent/researcher/findings`.
+
+```
+/
+ /company
+ /company/engineering
+ /company/product
+ /project
+ /project/alpha
+ /project/beta
+ /agent
+ /agent/researcher
+ /agent/writer
+```
+
+توفر النطاقات **ذاكرة تعتمد على السياق** -- عند الاسترجاع ضمن نطاق، تبحث فقط في ذلك الفرع من الشجرة، مما يحسّن كلًا من الدقة والأداء.
+
+### كيف يعمل استنتاج النطاق
+
+عند استدعاء `remember()` دون تحديد نطاق، يحلل LLM المحتوى وشجرة النطاقات الحالية، ثم يقترح أفضل موضع. إذا لم يكن هناك نطاق حالي مناسب، ينشئ واحدًا جديدًا. بمرور الوقت، تنمو شجرة النطاقات عضويًا من المحتوى نفسه -- لا تحتاج إلى تصميم مخطط مسبقًا.
+
+```python
+memory = Memory()
+
+# LLM infers scope from content
+memory.remember("We chose PostgreSQL for the user database.")
+# -> might be placed under /project/decisions or /engineering/database
+
+# You can also specify scope explicitly
+memory.remember("Sprint velocity is 42 points", scope="/team/metrics")
+```
+
+### تصوير شجرة النطاقات
+
+```python
+print(memory.tree())
+# / (15 records)
+# /project (8 records)
+# /project/alpha (5 records)
+# /project/beta (3 records)
+# /agent (7 records)
+# /agent/researcher (4 records)
+# /agent/writer (3 records)
+
+print(memory.info("/project/alpha"))
+# ScopeInfo(path='/project/alpha', record_count=5,
+# categories=['architecture', 'database'],
+# oldest_record=datetime(...), newest_record=datetime(...),
+# child_scopes=[])
+```
+
+### MemoryScope: عروض الأشجار الفرعية
+
+يقيّد `MemoryScope` جميع العمليات على فرع من الشجرة. يمكن للوكيل أو الكود الذي يستخدمه الرؤية والكتابة فقط ضمن تلك الشجرة الفرعية.
+
+```python
+memory = Memory()
+
+# Create a scope for a specific agent
+agent_memory = memory.scope("/agent/researcher")
+
+# Everything is relative to /agent/researcher
+agent_memory.remember("Found three relevant papers on LLM memory.")
+# -> stored under /agent/researcher
+
+agent_memory.recall("relevant papers")
+# -> searches only under /agent/researcher
+
+# Narrow further with subscope
+project_memory = agent_memory.subscope("project-alpha")
+# -> /agent/researcher/project-alpha
+```
+
+### أفضل الممارسات لتصميم النطاقات
+
+- **ابدأ بشكل مسطح، ودع LLM ينظّم.** لا تبالغ في هندسة تسلسل النطاقات مسبقًا. ابدأ بـ `memory.remember(content)` ودع استنتاج النطاق في LLM ينشئ الهيكل مع تراكم المحتوى.
+
+- **استخدم أنماط `/{entity_type}/{identifier}`.** تنشأ التسلسلات الطبيعية من أنماط مثل `/project/alpha` و `/agent/researcher` و `/company/engineering` و `/customer/acme-corp`.
+
+- **حدد النطاق حسب الاهتمام، وليس حسب نوع البيانات.** استخدم `/project/alpha/decisions` بدلاً من `/decisions/project/alpha`. هذا يبقي المحتوى ذا الصلة معًا.
+
+- **حافظ على العمق ضحلًا (2-3 مستويات).** النطاقات المتداخلة بعمق تصبح متفرقة جدًا. `/project/alpha/architecture` جيد؛ `/project/alpha/architecture/decisions/databases/postgresql` عميق جدًا.
+
+- **استخدم النطاقات الصريحة عندما تعرف، ودع LLM يستنتج عندما لا تعرف.** إذا كنت تخزّن قرار مشروع معروف، مرّر `scope="/project/alpha/decisions"`. إذا كنت تخزّن مخرجات وكيل حرة الشكل، اترك النطاق ودع LLM يحدده.
+
+### أمثلة حالات الاستخدام
+
+**فريق متعدد المشاريع:**
+```python
+memory = Memory()
+# Each project gets its own branch
+memory.remember("Using microservices architecture", scope="/project/alpha/architecture")
+memory.remember("GraphQL API for client apps", scope="/project/beta/api")
+
+# Recall across all projects
+memory.recall("API design decisions")
+
+# Or within a specific project
+memory.recall("API design", scope="/project/beta")
+```
+
+**سياق خاص لكل وكيل مع معرفة مشتركة:**
+```python
+memory = Memory()
+
+# Researcher has private findings
+researcher_memory = memory.scope("/agent/researcher")
+
+# Writer can read from both its own scope and shared company knowledge
+writer_view = memory.slice(
+ scopes=["/agent/writer", "/company/knowledge"],
+ read_only=True,
+)
+```
+
+**دعم العملاء (سياق لكل عميل):**
+```python
+memory = Memory()
+
+# Each customer gets isolated context
+memory.remember("Prefers email communication", scope="/customer/acme-corp")
+memory.remember("On enterprise plan, 50 seats", scope="/customer/acme-corp")
+
+# Shared product docs are accessible to all agents
+memory.remember("Rate limit is 1000 req/min on enterprise plan", scope="/product/docs")
+```
+
+
+## شرائح الذاكرة
+
+### ما هي الشرائح
+
+`MemorySlice` هو عرض عبر نطاقات متعددة، ربما متباعدة. على عكس النطاق (الذي يقيّد على شجرة فرعية واحدة)، تتيح لك الشريحة الاسترجاع من عدة فروع في وقت واحد.
+
+### متى تستخدم الشرائح مقابل النطاقات
+
+- **النطاق**: استخدمه عندما يجب تقييد وكيل أو كتلة كود على شجرة فرعية واحدة. مثال: وكيل يرى فقط `/agent/researcher`.
+- **الشريحة**: استخدمها عندما تحتاج إلى دمج السياق من عدة فروع. مثال: وكيل يقرأ من نطاقه الخاص بالإضافة إلى معرفة الشركة المشتركة.
+
+### شرائح القراءة فقط
+
+النمط الأكثر شيوعًا: منح وكيل إمكانية القراءة من فروع متعددة دون السماح له بالكتابة في المناطق المشتركة.
+
+```python
+memory = Memory()
+
+# Agent can recall from its own scope AND company knowledge,
+# but cannot write to company knowledge
+agent_view = memory.slice(
+ scopes=["/agent/researcher", "/company/knowledge"],
+ read_only=True,
+)
+
+matches = agent_view.recall("company security policies", limit=5)
+# Searches both /agent/researcher and /company/knowledge, merges and ranks results
+
+agent_view.remember("new finding") # Raises PermissionError (read-only)
+```
+
+### شرائح القراءة والكتابة
+
+عند تعطيل القراءة فقط، يمكنك الكتابة في أي من النطاقات المضمّنة، لكن يجب تحديد النطاق صراحة.
+
+```python
+view = memory.slice(scopes=["/team/alpha", "/team/beta"], read_only=False)
+
+# Must specify scope when writing
+view.remember("Cross-team decision", scope="/team/alpha", categories=["decisions"])
+```
+
+
+## التسجيل المركب
+
+يتم ترتيب نتائج الاسترجاع بواسطة مزيج مرجّح من ثلاث إشارات:
+
+```
+composite = semantic_weight * similarity + recency_weight * decay + importance_weight * importance
+```
+
+حيث:
+- **similarity** = `1 / (1 + distance)` من فهرس المتجهات (0 إلى 1)
+- **decay** = `0.5^(age_days / half_life_days)` -- اضمحلال أُسي (1.0 لليوم، 0.5 عند نصف العمر)
+- **importance** = درجة أهمية السجل (0 إلى 1)، يتم تعيينها وقت الترميز
+
+قم بإعدادها مباشرة على منشئ `Memory`:
+
+```python
+# Sprint retrospective: favor recent memories, short half-life
+memory = Memory(
+ recency_weight=0.5,
+ semantic_weight=0.3,
+ importance_weight=0.2,
+ recency_half_life_days=7,
+)
+
+# Architecture knowledge base: favor important memories, long half-life
+memory = Memory(
+ recency_weight=0.1,
+ semantic_weight=0.5,
+ importance_weight=0.4,
+ recency_half_life_days=180,
+)
+```
+
+يتضمن كل `MemoryMatch` قائمة `match_reasons` حتى تتمكن من رؤية سبب ترتيب نتيجة معينة في موضعها (مثل `["semantic", "recency", "importance"]`).
+
+
+## طبقة تحليل LLM
+
+تستخدم الذاكرة LLM بثلاث طرق:
+
+1. **عند الحفظ** -- عندما تحذف النطاق أو الفئات أو الأهمية، يحلل LLM المحتوى ويقترح النطاق والفئات والأهمية والبيانات الوصفية (الكيانات والتواريخ والموضوعات).
+2. **عند الاسترجاع** -- للاسترجاع العميق/التلقائي، يحلل LLM الاستعلام (الكلمات المفتاحية، تلميحات الوقت، النطاقات المقترحة، التعقيد) لتوجيه الاسترجاع.
+3. **استخراج الذكريات** -- `extract_memories(content)` يقسم النص الخام (مثل مخرجات المهمة) إلى عبارات ذاكرة منفصلة. يستخدم الوكلاء هذا قبل استدعاء `remember()` على كل عبارة حتى يتم تخزين حقائق ذرية بدلاً من كتلة كبيرة واحدة.
+
+جميع التحليلات تتدهور بسلاسة عند فشل LLM -- انظر [سلوك الفشل](#سلوك-الفشل).
+
+
+## توحيد الذاكرة
+
+عند حفظ محتوى جديد، يتحقق خط أنابيب الترميز تلقائيًا من وجود سجلات مماثلة في التخزين. إذا كان التشابه أعلى من `consolidation_threshold` (الافتراضي 0.85)، يقرر LLM ما يجب فعله:
+
+- **keep** -- السجل الحالي لا يزال دقيقًا وغير مكرر.
+- **update** -- يجب تحديث السجل الحالي بمعلومات جديدة (يوفر LLM المحتوى المدمج).
+- **delete** -- السجل الحالي قديم أو تم استبداله أو تناقضه.
+- **insert_new** -- ما إذا كان يجب إدراج المحتوى الجديد أيضًا كسجل منفصل.
+
+هذا يمنع تراكم النسخ المكررة. على سبيل المثال، إذا حفظت "CrewAI ensures reliable operation" ثلاث مرات، يتعرف التوحيد على النسخ المكررة ويحتفظ بسجل واحد فقط.
+
+### إزالة التكرار داخل الدفعة
+
+عند استخدام `remember_many()`، تتم مقارنة العناصر داخل نفس الدفعة مع بعضها البعض قبل الوصول إلى التخزين. إذا كان تشابه جيب التمام >= `batch_dedup_threshold` (الافتراضي 0.98)، يتم إسقاط العنصر الأحدث بصمت. هذا يلتقط النسخ المكررة الدقيقة أو شبه الدقيقة داخل دفعة واحدة دون أي استدعاءات LLM (رياضيات متجهات خالصة).
+
+```python
+# Only 2 records are stored (the third is a near-duplicate of the first)
+memory.remember_many([
+ "CrewAI supports complex workflows.",
+ "Python is a great language.",
+ "CrewAI supports complex workflows.", # dropped by intra-batch dedup
+])
+```
+
+
+## الحفظ غير الحاجب
+
+`remember_many()` **غير حاجب** -- يقدم خط أنابيب الترميز إلى خيط خلفي ويعود فورًا. هذا يعني أن الوكيل يمكنه المتابعة إلى المهمة التالية بينما يتم حفظ الذكريات.
+
+```python
+# Returns immediately -- save happens in background
+memory.remember_many(["Fact A.", "Fact B.", "Fact C."])
+
+# recall() automatically waits for pending saves before searching
+matches = memory.recall("facts") # sees all 3 records
+```
+
+### حاجز القراءة
+
+كل استدعاء `recall()` يستدعي تلقائيًا `drain_writes()` قبل البحث، مما يضمن أن الاستعلام يرى دائمًا أحدث السجلات المستمرة. هذا شفاف -- لا تحتاج أبدًا إلى التفكير فيه.
+
+### إيقاف الفريق
+
+عند انتهاء الفريق، يستنزف `kickoff()` جميع عمليات حفظ الذاكرة المعلقة في كتلة `finally` الخاصة به، لذا لا تُفقد أي عمليات حفظ حتى لو اكتمل الفريق بينما عمليات الحفظ الخلفية قيد التنفيذ.
+
+### الاستخدام المستقل
+
+للسكربتات أو دفاتر الملاحظات حيث لا توجد دورة حياة فريق، استدعِ `drain_writes()` أو `close()` صراحة:
+
+```python
+memory = Memory()
+memory.remember_many(["Fact A.", "Fact B."])
+
+# Option 1: Wait for pending saves
+memory.drain_writes()
+
+# Option 2: Drain and shut down the background pool
+memory.close()
+```
+
+
+## المصدر والخصوصية
+
+يمكن لكل سجل ذاكرة أن يحمل علامة `source` لتتبع المصدر وعلامة `private` للتحكم في الوصول.
+
+### تتبع المصدر
+
+يحدد معامل `source` من أين جاءت الذاكرة:
+
+```python
+# Tag memories with their origin
+memory.remember("User prefers dark mode", source="user:alice")
+memory.remember("System config updated", source="admin")
+memory.remember("Agent found a bug", source="agent:debugger")
+
+# Recall only memories from a specific source
+matches = memory.recall("user preferences", source="user:alice")
+```
+
+### الذكريات الخاصة
+
+الذكريات الخاصة مرئية فقط للاسترجاع عندما يتطابق `source`:
+
+```python
+# Store a private memory
+memory.remember("Alice's API key is sk-...", source="user:alice", private=True)
+
+# This recall sees the private memory (source matches)
+matches = memory.recall("API key", source="user:alice")
+
+# This recall does NOT see it (different source)
+matches = memory.recall("API key", source="user:bob")
+
+# Admin access: see all private records regardless of source
+matches = memory.recall("API key", include_private=True)
+```
+
+هذا مفيد بشكل خاص في النشرات متعددة المستخدمين أو المؤسسية حيث يجب عزل ذكريات المستخدمين المختلفين.
+
+
+## RecallFlow (الاسترجاع العميق)
+
+يدعم `recall()` عمقين:
+
+- **`depth="shallow"`** -- بحث متجهي مباشر مع تسجيل مركب. سريع (~200 مللي ثانية)، بدون استدعاءات LLM.
+- **`depth="deep"` (افتراضي)** -- يشغل RecallFlow متعدد الخطوات: تحليل الاستعلام، اختيار النطاق، بحث متجهي متوازٍ، توجيه قائم على الثقة، واستكشاف متكرر اختياري عندما تكون الثقة منخفضة.
+
+**تخطي LLM الذكي**: الاستعلامات الأقصر من `query_analysis_threshold` (الافتراضي 200 حرف) تتخطى تحليل LLM للاستعلام بالكامل، حتى في الوضع العميق. الاستعلامات القصيرة مثل "ما قاعدة البيانات التي نستخدمها؟" هي بالفعل عبارات بحث جيدة -- تحليل LLM يضيف قيمة قليلة. هذا يوفر ~1-3 ثوانٍ لكل استرجاع للاستعلامات القصيرة النموذجية. فقط الاستعلامات الأطول (مثل أوصاف المهام الكاملة) تمر عبر تقطير LLM إلى استعلامات فرعية مستهدفة.
+
+```python
+# Shallow: pure vector search, no LLM
+matches = memory.recall("What did we decide?", limit=10, depth="shallow")
+
+# Deep (default): intelligent retrieval with LLM analysis for long queries
+matches = memory.recall(
+ "Summarize all architecture decisions from this quarter",
+ limit=10,
+ depth="deep",
+)
+```
+
+عتبات الثقة التي تتحكم في موجّه RecallFlow قابلة للإعداد:
+
+```python
+memory = Memory(
+ confidence_threshold_high=0.9, # Only synthesize when very confident
+ confidence_threshold_low=0.4, # Explore deeper more aggressively
+ exploration_budget=2, # Allow up to 2 exploration rounds
+ query_analysis_threshold=200, # Skip LLM for queries shorter than this
+)
+```
+
+
+## إعداد المُضمِّن
+
+تحتاج الذاكرة إلى نموذج تضمين لتحويل النص إلى متجهات للبحث الدلالي. يمكنك إعداده بثلاث طرق.
+
+### التمرير إلى Memory مباشرة
+
+```python
+from crewai import Memory
+
+# As a config dict
+memory = Memory(embedder={"provider": "openai", "config": {"model_name": "text-embedding-3-small"}})
+
+# As a pre-built callable
+from crewai.rag.embeddings.factory import build_embedder
+embedder = build_embedder({"provider": "ollama", "config": {"model_name": "mxbai-embed-large"}})
+memory = Memory(embedder=embedder)
+```
+
+### عبر إعداد مُضمِّن Crew
+
+عند استخدام `memory=True`، يتم تمرير إعداد `embedder` الخاص بالفريق:
+
+```python
+from crewai import Crew
+
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ memory=True,
+ embedder={"provider": "openai", "config": {"model_name": "text-embedding-3-small"}},
+)
+```
+
+### أمثلة المزودين
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "openai",
+ "config": {
+ "model_name": "text-embedding-3-small",
+ # "api_key": "sk-...", # or set OPENAI_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "ollama",
+ "config": {
+ "model_name": "mxbai-embed-large",
+ "url": "http://localhost:11434/api/embeddings",
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "azure",
+ "config": {
+ "deployment_id": "your-embedding-deployment",
+ "api_key": "your-azure-api-key",
+ "api_base": "https://your-resource.openai.azure.com",
+ "api_version": "2024-02-01",
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "google-generativeai",
+ "config": {
+ "model_name": "gemini-embedding-001",
+ # "api_key": "...", # or set GOOGLE_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "google-vertex",
+ "config": {
+ "model_name": "gemini-embedding-001",
+ "project_id": "your-gcp-project-id",
+ "location": "us-central1",
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "cohere",
+ "config": {
+ "model_name": "embed-english-v3.0",
+ # "api_key": "...", # or set COHERE_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "voyageai",
+ "config": {
+ "model": "voyage-3",
+ # "api_key": "...", # or set VOYAGE_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "amazon-bedrock",
+ "config": {
+ "model_name": "amazon.titan-embed-text-v1",
+ # Uses default AWS credentials (boto3 session)
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "huggingface",
+ "config": {
+ "model_name": "sentence-transformers/all-MiniLM-L6-v2",
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "jina",
+ "config": {
+ "model_name": "jina-embeddings-v2-base-en",
+ # "api_key": "...", # or set JINA_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "watsonx",
+ "config": {
+ "model_id": "ibm/slate-30m-english-rtrvr",
+ "api_key": "your-watsonx-api-key",
+ "project_id": "your-project-id",
+ "url": "https://us-south.ml.cloud.ibm.com",
+ },
+})
+```
+
+
+
+```python
+# Pass any callable that takes a list of strings and returns a list of vectors
+def my_embedder(texts: list[str]) -> list[list[float]]:
+ # Your embedding logic here
+ return [[0.1, 0.2, ...] for _ in texts]
+
+memory = Memory(embedder=my_embedder)
+```
+
+
+
+### مرجع المزودين
+
+| المزود | المفتاح | النموذج النموذجي | ملاحظات |
+| :--- | :--- | :--- | :--- |
+| OpenAI | `openai` | `text-embedding-3-small` | افتراضي. عيّن `OPENAI_API_KEY`. |
+| Ollama | `ollama` | `mxbai-embed-large` | محلي، لا حاجة لمفتاح API. |
+| Azure OpenAI | `azure` | `text-embedding-ada-002` | يتطلب `deployment_id`. |
+| Google AI | `google-generativeai` | `gemini-embedding-001` | عيّن `GOOGLE_API_KEY`. |
+| Google Vertex | `google-vertex` | `gemini-embedding-001` | يتطلب `project_id`. |
+| Cohere | `cohere` | `embed-english-v3.0` | دعم قوي متعدد اللغات. |
+| VoyageAI | `voyageai` | `voyage-3` | محسّن للاسترجاع. |
+| AWS Bedrock | `amazon-bedrock` | `amazon.titan-embed-text-v1` | يستخدم بيانات اعتماد boto3. |
+| Hugging Face | `huggingface` | `all-MiniLM-L6-v2` | sentence-transformers محلي. |
+| Jina | `jina` | `jina-embeddings-v2-base-en` | عيّن `JINA_API_KEY`. |
+| IBM WatsonX | `watsonx` | `ibm/slate-30m-english-rtrvr` | يتطلب `project_id`. |
+| Sentence Transformer | `sentence-transformer` | `all-MiniLM-L6-v2` | محلي، لا حاجة لمفتاح API. |
+| مخصص | `custom` | -- | يتطلب `embedding_callable`. |
+
+
+## إعداد LLM
+
+تستخدم الذاكرة LLM لتحليل الحفظ (استنتاج النطاق والفئات والأهمية)، وقرارات التوحيد، وتحليل استعلام الاسترجاع العميق. يمكنك إعداد النموذج المُستخدم.
+
+```python
+from crewai import Memory, LLM
+
+# Default: gpt-4o-mini
+memory = Memory()
+
+# Use a different OpenAI model
+memory = Memory(llm="gpt-4o")
+
+# Use Anthropic
+memory = Memory(llm="anthropic/claude-3-haiku-20240307")
+
+# Use Ollama for fully local/private analysis
+memory = Memory(llm="ollama/llama3.2")
+
+# Use Google Gemini
+memory = Memory(llm="gemini/gemini-2.0-flash")
+
+# Pass a pre-configured LLM instance with custom settings
+llm = LLM(model="gpt-4o", temperature=0)
+memory = Memory(llm=llm)
+```
+
+يتم تهيئة LLM **بشكل كسول** -- يتم إنشاؤه فقط عند الحاجة لأول مرة. هذا يعني أن `Memory()` لا يفشل أبدًا في وقت الإنشاء، حتى لو لم تكن مفاتيح API مُعيّنة. تظهر الأخطاء فقط عند استدعاء LLM فعليًا (مثلاً عند الحفظ بدون نطاق/فئات صريحة، أو أثناء الاسترجاع العميق).
+
+للتشغيل المحلي/الخاص بالكامل، استخدم نموذجًا محليًا لكل من LLM والمُضمِّن:
+
+```python
+memory = Memory(
+ llm="ollama/llama3.2",
+ embedder={"provider": "ollama", "config": {"model_name": "mxbai-embed-large"}},
+)
+```
+
+
+## واجهة التخزين
+
+- **الافتراضي**: LanceDB، مخزّن تحت `./.crewai/memory` (أو `$CREWAI_STORAGE_DIR/memory` إذا تم تعيين متغير البيئة، أو المسار الذي تمرره كـ `storage="path/to/dir"`).
+- **واجهة مخصصة**: نفّذ بروتوكول `StorageBackend` (انظر `crewai.memory.storage.backend`) ومرّر مثيلًا إلى `Memory(storage=your_backend)`.
+
+
+## الاستكشاف
+
+فحص التسلسل الهرمي للنطاقات والفئات والسجلات:
+
+```python
+memory.tree() # Formatted tree of scopes and record counts
+memory.tree("/project", max_depth=2) # Subtree view
+memory.info("/project") # ScopeInfo: record_count, categories, oldest/newest
+memory.list_scopes("/") # Immediate child scopes
+memory.list_categories() # Category names and counts
+memory.list_records(scope="/project/alpha", limit=20) # Records in a scope, newest first
+```
+
+
+## سلوك الفشل
+
+إذا فشل LLM أثناء التحليل (خطأ شبكة، حد معدل، استجابة غير صالحة)، تتدهور الذاكرة بسلاسة:
+
+- **تحليل الحفظ** -- يتم تسجيل تحذير ولا يزال يتم تخزين الذاكرة مع النطاق الافتراضي `/`، فئات فارغة، وأهمية `0.5`.
+- **استخراج الذكريات** -- يتم تخزين المحتوى الكامل كذاكرة واحدة حتى لا يُفقد شيء.
+- **تحليل الاستعلام** -- يتراجع الاسترجاع إلى اختيار نطاق بسيط وبحث متجهي حتى تستمر في الحصول على نتائج.
+
+لا يتم رفع أي استثناء لفشل التحليل هذه؛ فقط فشل التخزين أو المُضمِّن سيرفع استثناءً.
+
+
+## ملاحظة حول الخصوصية
+
+يتم إرسال محتوى الذاكرة إلى LLM المُعدّ للتحليل (النطاق/الفئات/الأهمية عند الحفظ، تحليل الاستعلام والاسترجاع العميق الاختياري). للبيانات الحساسة، استخدم LLM محليًا (مثل Ollama) أو تأكد من أن مزودك يلبي متطلبات الامتثال الخاصة بك.
+
+
+## أحداث الذاكرة
+
+جميع عمليات الذاكرة تُصدر أحداثًا مع `source_type="unified_memory"`. يمكنك الاستماع للتوقيت والأخطاء والمحتوى.
+
+| الحدث | الوصف | الخصائص الرئيسية |
+| :---- | :---------- | :------------- |
+| **MemoryQueryStartedEvent** | بداية الاستعلام | `query`, `limit` |
+| **MemoryQueryCompletedEvent** | نجاح الاستعلام | `query`, `results`, `query_time_ms` |
+| **MemoryQueryFailedEvent** | فشل الاستعلام | `query`, `error` |
+| **MemorySaveStartedEvent** | بداية الحفظ | `value`, `metadata` |
+| **MemorySaveCompletedEvent** | نجاح الحفظ | `value`, `save_time_ms` |
+| **MemorySaveFailedEvent** | فشل الحفظ | `value`, `error` |
+| **MemoryRetrievalStartedEvent** | بداية استرجاع الوكيل | `task_id` |
+| **MemoryRetrievalCompletedEvent** | اكتمال استرجاع الوكيل | `task_id`, `memory_content`, `retrieval_time_ms` |
+
+مثال: مراقبة وقت الاستعلام:
+
+```python
+from crewai.events import BaseEventListener, MemoryQueryCompletedEvent
+
+class MemoryMonitor(BaseEventListener):
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(MemoryQueryCompletedEvent)
+ def on_done(source, event):
+ if getattr(event, "source_type", None) == "unified_memory":
+ print(f"Query '{event.query}' completed in {event.query_time_ms:.0f}ms")
+```
+
+
+## استكشاف المشاكل
+
+**الذاكرة لا تستمر؟**
+- تأكد من أن مسار التخزين قابل للكتابة (الافتراضي `./.crewai/memory`). مرّر `storage="./your_path"` لاستخدام مجلد مختلف، أو عيّن متغير البيئة `CREWAI_STORAGE_DIR`.
+- عند استخدام فريق، تأكد من تعيين `memory=True` أو `memory=Memory(...)`.
+
+**الاسترجاع بطيء؟**
+- استخدم `depth="shallow"` لسياق الوكيل الروتيني. احتفظ بـ `depth="deep"` للاستعلامات المعقدة.
+- زد `query_analysis_threshold` لتخطي تحليل LLM لمزيد من الاستعلامات.
+
+**أخطاء تحليل LLM في السجلات؟**
+- لا تزال الذاكرة تحفظ/تسترجع بإعدادات افتراضية آمنة. تحقق من مفاتيح API وحدود المعدل وتوفر النموذج إذا كنت تريد تحليل LLM كاملاً.
+
+**أخطاء حفظ خلفية في السجلات؟**
+- عمليات حفظ الذاكرة تعمل في خيط خلفي. تُصدر الأخطاء كـ `MemorySaveFailedEvent` لكنها لا تعطل الوكيل. تحقق من السجلات للسبب الجذري (عادة مشاكل اتصال LLM أو المُضمِّن).
+
+**تعارضات الكتابة المتزامنة؟**
+- عمليات LanceDB مُتسلسلة بقفل مشترك وتُعاد تلقائيًا عند التعارض. هذا يتعامل مع مثيلات `Memory` المتعددة التي تشير إلى نفس قاعدة البيانات (مثل ذاكرة وكيل + ذاكرة فريق). لا حاجة لإجراء.
+
+**تصفح الذاكرة من الطرفية:**
+```bash
+crewai memory # Opens the TUI browser
+crewai memory --storage-path ./my_memory # Point to a specific directory
+```
+
+**إعادة تعيين الذاكرة (مثلاً للاختبارات):**
+```python
+crew.reset_memories(command_type="memory") # Resets unified memory
+# Or on a Memory instance:
+memory.reset() # All scopes
+memory.reset(scope="/project/old") # Only that subtree
+```
+
+
+## مرجع الإعداد
+
+جميع الإعدادات تُمرر كمعاملات كلمة مفتاحية إلى `Memory(...)`. كل معامل له قيمة افتراضية معقولة.
+
+| المعامل | الافتراضي | الوصف |
+| :--- | :--- | :--- |
+| `llm` | `"gpt-4o-mini"` | LLM للتحليل (اسم نموذج أو مثيل `BaseLLM`). |
+| `storage` | `"lancedb"` | واجهة التخزين (`"lancedb"`، سلسلة مسار، أو مثيل `StorageBackend`). |
+| `embedder` | `None` (افتراضي OpenAI) | المُضمِّن (قاموس إعداد، دالة قابلة للاستدعاء، أو `None` لافتراضي OpenAI). |
+| `recency_weight` | `0.3` | وزن الحداثة في الدرجة المركبة. |
+| `semantic_weight` | `0.5` | وزن التشابه الدلالي في الدرجة المركبة. |
+| `importance_weight` | `0.2` | وزن الأهمية في الدرجة المركبة. |
+| `recency_half_life_days` | `30` | أيام لتنصيف درجة الحداثة (اضمحلال أُسي). |
+| `consolidation_threshold` | `0.85` | التشابه الذي يُشغّل فوقه التوحيد عند الحفظ. عيّن إلى `1.0` للتعطيل. |
+| `consolidation_limit` | `5` | أقصى عدد سجلات حالية للمقارنة أثناء التوحيد. |
+| `default_importance` | `0.5` | الأهمية المُعيّنة عندما لا تُوفَّر ويتم تخطي تحليل LLM. |
+| `batch_dedup_threshold` | `0.98` | تشابه جيب التمام لإسقاط النسخ شبه المكررة داخل دفعة `remember_many()`. |
+| `confidence_threshold_high` | `0.8` | ثقة الاسترجاع التي تُعاد فوقها النتائج مباشرة. |
+| `confidence_threshold_low` | `0.5` | ثقة الاسترجاع التي يُشغّل تحتها استكشاف أعمق. |
+| `complex_query_threshold` | `0.7` | للاستعلامات المعقدة، استكشف أعمق تحت هذه الثقة. |
+| `exploration_budget` | `1` | عدد جولات الاستكشاف المدفوعة بـ LLM أثناء الاسترجاع العميق. |
+| `query_analysis_threshold` | `200` | الاستعلامات الأقصر من هذا (بالأحرف) تتخطى تحليل LLM أثناء الاسترجاع العميق. |
diff --git a/docs/v1.15.1/ar/concepts/planning.mdx b/docs/v1.15.1/ar/concepts/planning.mdx
new file mode 100644
index 000000000..12f5ef117
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/planning.mdx
@@ -0,0 +1,155 @@
+---
+title: التخطيط
+description: تعرّف على كيفية إضافة التخطيط إلى طاقم CrewAI وتحسين أدائه.
+icon: ruler-combined
+mode: "wide"
+---
+
+## نظرة عامة
+
+تتيح لك ميزة التخطيط في CrewAI إضافة قدرة التخطيط إلى طاقمك. عند تفعيلها، قبل كل تكرار للطاقم،
+يتم إرسال جميع معلومات الطاقم إلى AgentPlanner الذي يخطط للمهام خطوة بخطوة، ويُضاف هذا المخطط إلى وصف كل مهمة.
+
+### استخدام ميزة التخطيط
+
+البدء بميزة التخطيط سهل جدًا، الخطوة الوحيدة المطلوبة هي إضافة `planning=True` إلى طاقمك:
+
+
+```python Code
+from crewai import Crew, Agent, Task, Process
+
+# تجميع طاقمك مع قدرات التخطيط
+my_crew = Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ planning=True,
+)
+```
+
+
+من هذه النقطة فصاعدًا، سيكون التخطيط مفعّلًا في طاقمك، وسيتم تخطيط المهام قبل كل تكرار.
+
+
+عند تفعيل التخطيط، سيستخدم CrewAI `gpt-4o-mini` كنموذج LLM افتراضي للتخطيط، مما يتطلب مفتاح API صالحًا من OpenAI. نظرًا لأن وكلاءك قد يستخدمون نماذج LLM مختلفة، فقد يسبب ذلك ارتباكًا إذا لم يكن لديك مفتاح OpenAI API مهيأ أو إذا كنت تواجه سلوكًا غير متوقع متعلقًا باستدعاءات LLM API.
+
+
+#### LLM التخطيط
+
+يمكنك الآن تحديد نموذج LLM الذي سيُستخدم لتخطيط المهام.
+
+عند تشغيل مثال الحالة الأساسية، سترى شيئًا مشابهًا للمخرجات أدناه، والتي تمثل مخرجات `AgentPlanner`
+المسؤول عن إنشاء المنطق التدريجي لإضافته إلى مهام الوكلاء.
+
+
+```python Code
+from crewai import Crew, Agent, Task, Process
+
+# تجميع طاقمك مع قدرات التخطيط ونموذج LLM مخصص
+my_crew = Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ planning=True,
+ planning_llm="gpt-4o"
+)
+
+# تشغيل الطاقم
+my_crew.kickoff()
+```
+
+```markdown Result
+[2024-07-15 16:49:11][INFO]: Planning the crew execution
+**Step-by-Step Plan for Task Execution**
+
+**Task Number 1: Conduct a thorough research about AI LLMs**
+
+**Agent:** AI LLMs Senior Data Researcher
+
+**Agent Goal:** Uncover cutting-edge developments in AI LLMs
+
+**Task Expected Output:** A list with 10 bullet points of the most relevant information about AI LLMs
+
+**Task Tools:** None specified
+
+**Agent Tools:** None specified
+
+**Step-by-Step Plan:**
+
+1. **Define Research Scope:**
+
+ - Determine the specific areas of AI LLMs to focus on, such as advancements in architecture, use cases, ethical considerations, and performance metrics.
+
+2. **Identify Reliable Sources:**
+
+ - List reputable sources for AI research, including academic journals, industry reports, conferences (e.g., NeurIPS, ACL), AI research labs (e.g., OpenAI, Google AI), and online databases (e.g., IEEE Xplore, arXiv).
+
+3. **Collect Data:**
+
+ - Search for the latest papers, articles, and reports published in 2024 and early 2025.
+ - Use keywords like "Large Language Models 2025", "AI LLM advancements", "AI ethics 2025", etc.
+
+4. **Analyze Findings:**
+
+ - Read and summarize the key points from each source.
+ - Highlight new techniques, models, and applications introduced in the past year.
+
+5. **Organize Information:**
+
+ - Categorize the information into relevant topics (e.g., new architectures, ethical implications, real-world applications).
+ - Ensure each bullet point is concise but informative.
+
+6. **Create the List:**
+
+ - Compile the 10 most relevant pieces of information into a bullet point list.
+ - Review the list to ensure clarity and relevance.
+
+**Expected Output:**
+
+A list with 10 bullet points of the most relevant information about AI LLMs.
+
+---
+
+**Task Number 2: Review the context you got and expand each topic into a full section for a report**
+
+**Agent:** AI LLMs Reporting Analyst
+
+**Agent Goal:** Create detailed reports based on AI LLMs data analysis and research findings
+
+**Task Expected Output:** A fully fledged report with the main topics, each with a full section of information. Formatted as markdown without '```'
+
+**Task Tools:** None specified
+
+**Agent Tools:** None specified
+
+**Step-by-Step Plan:**
+
+1. **Review the Bullet Points:**
+ - Carefully read through the list of 10 bullet points provided by the AI LLMs Senior Data Researcher.
+
+2. **Outline the Report:**
+ - Create an outline with each bullet point as a main section heading.
+ - Plan sub-sections under each main heading to cover different aspects of the topic.
+
+3. **Research Further Details:**
+ - For each bullet point, conduct additional research if necessary to gather more detailed information.
+ - Look for case studies, examples, and statistical data to support each section.
+
+4. **Write Detailed Sections:**
+ - Expand each bullet point into a comprehensive section.
+ - Ensure each section includes an introduction, detailed explanation, examples, and a conclusion.
+ - Use markdown formatting for headings, subheadings, lists, and emphasis.
+
+5. **Review and Edit:**
+ - Proofread the report for clarity, coherence, and correctness.
+ - Make sure the report flows logically from one section to the next.
+ - Format the report according to markdown standards.
+
+6. **Finalize the Report:**
+ - Ensure the report is complete with all sections expanded and detailed.
+ - Double-check formatting and make any necessary adjustments.
+
+**Expected Output:**
+A fully fledged report with the main topics, each with a full section of information. Formatted as markdown without '```'.
+```
+
diff --git a/docs/v1.15.1/ar/concepts/processes.mdx b/docs/v1.15.1/ar/concepts/processes.mdx
new file mode 100644
index 000000000..a49ecc227
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/processes.mdx
@@ -0,0 +1,66 @@
+---
+title: العمليات
+description: دليل تفصيلي حول إدارة سير العمل من خلال العمليات في CrewAI، مع تفاصيل التنفيذ المحدّثة.
+icon: bars-staggered
+mode: "wide"
+---
+
+## نظرة عامة
+
+
+ تنسّق العمليات تنفيذ المهام بواسطة الوكلاء، على غرار إدارة المشاريع في الفرق البشرية.
+ تضمن هذه العمليات توزيع المهام وتنفيذها بكفاءة، وفقًا لاستراتيجية محددة مسبقًا.
+
+
+## تنفيذات العمليات
+
+- **تسلسلي**: ينفذ المهام بالتتابع، مما يضمن إكمال المهام بتقدم منظم.
+- **هرمي**: ينظم المهام في تسلسل إداري هرمي، حيث يتم تفويض المهام وتنفيذها بناءً على سلسلة أوامر منظمة. يجب تحديد نموذج لغة المدير (`manager_llm`) أو وكيل مدير مخصص (`manager_agent`) في الطاقم لتفعيل العملية الهرمية، مما يسهّل إنشاء وإدارة المهام من قبل المدير.
+
+## دور العمليات في العمل الجماعي
+تُمكّن العمليات الوكلاء الأفراد من العمل كوحدة متماسكة، مما يبسّط جهودهم لتحقيق أهداف مشتركة بكفاءة وتناسق.
+
+## تعيين العمليات للطاقم
+لتعيين عملية لطاقم، حدد نوع العملية عند إنشاء الطاقم لتعيين استراتيجية التنفيذ. للعملية الهرمية، تأكد من تحديد `manager_llm` أو `manager_agent` لوكيل المدير.
+
+```python
+from crewai import Crew, Process
+
+# مثال: إنشاء طاقم بعملية تسلسلية
+crew = Crew(
+ agents=my_agents,
+ tasks=my_tasks,
+ process=Process.sequential
+)
+
+# مثال: إنشاء طاقم بعملية هرمية
+# تأكد من توفير manager_llm أو manager_agent
+crew = Crew(
+ agents=my_agents,
+ tasks=my_tasks,
+ process=Process.hierarchical,
+ manager_llm="gpt-4o"
+ # أو
+ # manager_agent=my_manager_agent
+)
+```
+**ملاحظة:** تأكد من تعريف `my_agents` و `my_tasks` قبل إنشاء كائن `Crew`، وللعملية الهرمية، يُعد `manager_llm` أو `manager_agent` مطلوبًا أيضًا.
+
+## العملية التسلسلية
+
+تعكس هذه الطريقة سير عمل الفريق الديناميكي، وتتقدم عبر المهام بطريقة مدروسة ومنهجية. يتبع تنفيذ المهام الترتيب المحدد مسبقًا في قائمة المهام، حيث يعمل ناتج مهمة واحدة كسياق للمهمة التالية.
+
+لتخصيص سياق المهمة، استخدم معامل `context` في فئة `Task` لتحديد المخرجات التي يجب استخدامها كسياق للمهام اللاحقة.
+
+## العملية الهرمية
+
+تحاكي التسلسل الهرمي المؤسسي، حيث يسمح CrewAI بتحديد وكيل مدير مخصص أو إنشاء واحد تلقائيًا، مما يتطلب تحديد نموذج لغة المدير (`manager_llm`). يشرف هذا الوكيل على تنفيذ المهام، بما في ذلك التخطيط والتفويض والتحقق. لا يتم تعيين المهام مسبقًا؛ يخصص المدير المهام للوكلاء بناءً على قدراتهم، ويراجع المخرجات، ويقيّم اكتمال المهام.
+
+## فئة Process: نظرة عامة مفصلة
+
+تم تنفيذ فئة `Process` كتعداد (`Enum`)، مما يضمن أمان الأنواع ويقيّد قيم العملية على الأنواع المحددة (`sequential`، `hierarchical`).
+
+## الخلاصة
+
+التعاون المنظم الذي تسهّله العمليات داخل CrewAI ضروري لتمكين العمل الجماعي المنهجي بين الوكلاء.
+تم تحديث هذه الوثائق لتعكس أحدث الميزات والتحسينات، مما يضمن وصول المستخدمين إلى أحدث المعلومات وأكثرها شمولاً.
diff --git a/docs/v1.15.1/ar/concepts/production-architecture.mdx b/docs/v1.15.1/ar/concepts/production-architecture.mdx
new file mode 100644
index 000000000..9dee3a734
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/production-architecture.mdx
@@ -0,0 +1,162 @@
+---
+title: بنية الإنتاج
+description: أفضل الممارسات لبناء تطبيقات ذكاء اصطناعي جاهزة للإنتاج مع CrewAI
+icon: server
+mode: "wide"
+---
+
+# عقلية التدفق أولاً
+
+عند بناء تطبيقات ذكاء اصطناعي إنتاجية مع CrewAI، **نوصي بالبدء بتدفق (Flow)**.
+
+بينما يمكن تشغيل أطقم أو وكلاء فرديين، فإن تغليفهم في تدفق يوفر الهيكل اللازم لتطبيق متين وقابل للتوسع.
+
+## لماذا التدفقات؟
+
+1. **إدارة الحالة**: توفر التدفقات طريقة مدمجة لإدارة الحالة عبر مراحل مختلفة من تطبيقك. هذا ضروري لتمرير البيانات بين الأطقم والحفاظ على السياق ومعالجة مدخلات المستخدم.
+2. **التحكم**: تتيح لك التدفقات تحديد مسارات تنفيذ دقيقة، بما في ذلك الحلقات والشرطيات ومنطق التفريع. هذا أساسي لمعالجة الحالات الاستثنائية وضمان سلوك تطبيقك بشكل متوقع.
+3. **المراقبة**: توفر التدفقات هيكلًا واضحًا يسهّل تتبع التنفيذ وتصحيح الأخطاء ومراقبة الأداء. نوصي باستخدام [تتبع CrewAI](/ar/observability/tracing) للحصول على رؤى تفصيلية. ما عليك سوى تشغيل `crewai login` لتفعيل ميزات المراقبة المجانية.
+
+## البنية
+
+يبدو تطبيق CrewAI الإنتاجي النموذجي هكذا:
+
+```mermaid
+graph TD
+ Start((Start)) --> Flow[Flow Orchestrator]
+ Flow --> State{State Management}
+ State --> Step1[Step 1: Data Gathering]
+ Step1 --> Crew1[Research Crew]
+ Crew1 --> State
+ State --> Step2{Condition Check}
+ Step2 -- "Valid" --> Step3[Step 3: Execution]
+ Step3 --> Crew2[Action Crew]
+ Step2 -- "Invalid" --> End((End))
+ Crew2 --> End
+```
+
+### 1. فئة التدفق
+فئة `Flow` هي نقطة الدخول. تحدد مخطط الحالة والطرق التي تنفذ منطقك.
+
+```python
+from crewai.flow.flow import Flow, listen, start
+from pydantic import BaseModel
+
+class AppState(BaseModel):
+ user_input: str = ""
+ research_results: str = ""
+ final_report: str = ""
+
+class ProductionFlow(Flow[AppState]):
+ @start()
+ def gather_input(self):
+ # ... منطق الحصول على المدخلات ...
+ pass
+
+ @listen(gather_input)
+ def run_research_crew(self):
+ # ... تشغيل طاقم ...
+ pass
+```
+
+### 2. إدارة الحالة
+استخدم نماذج Pydantic لتعريف حالتك. يضمن هذا أمان الأنواع ويوضح البيانات المتاحة في كل مرحلة.
+
+- **اجعلها بسيطة**: خزّن فقط ما تحتاجه للاستمرار بين المراحل.
+- **استخدم بيانات منظمة**: تجنب القواميس غير المنظمة قدر الإمكان.
+
+### 3. الأطقم كوحدات عمل
+فوّض المهام المعقدة إلى الأطقم. يجب أن يكون الطاقم مركّزًا على هدف محدد (مثل "البحث في موضوع"، "كتابة مقال مدونة").
+
+- **لا تبالغ في هندسة الأطقم**: اجعلها مركّزة.
+- **مرر الحالة بشكل صريح**: مرر البيانات الضرورية من حالة التدفق إلى مدخلات الطاقم.
+
+```python
+ @listen(gather_input)
+ def run_research_crew(self):
+ crew = ResearchCrew()
+ result = crew.kickoff(inputs={"topic": self.state.user_input})
+ self.state.research_results = result.raw
+```
+
+## عناصر التحكم الأولية
+
+استفد من عناصر التحكم الأولية في CrewAI لإضافة المتانة والتحكم إلى أطقمك.
+
+### 1. حواجز المهام
+استخدم [حواجز المهام](/ar/concepts/tasks#task-guardrails) للتحقق من مخرجات المهام قبل قبولها. يضمن هذا أن وكلاءك ينتجون نتائج عالية الجودة.
+
+```python
+def validate_content(result: TaskOutput) -> Tuple[bool, Any]:
+ if len(result.raw) < 100:
+ return (False, "Content is too short. Please expand.")
+ return (True, result.raw)
+
+task = Task(
+ ...,
+ guardrail=validate_content
+)
+```
+
+### 2. المخرجات المنظمة
+استخدم دائمًا المخرجات المنظمة (`output_pydantic` أو `output_json`) عند تمرير البيانات بين المهام أو إلى تطبيقك. يمنع هذا أخطاء التحليل ويضمن أمان الأنواع.
+
+```python
+class ResearchResult(BaseModel):
+ summary: str
+ sources: List[str]
+
+task = Task(
+ ...,
+ output_pydantic=ResearchResult
+)
+```
+
+### 3. خطافات LLM
+استخدم [خطافات LLM](/ar/learn/llm-hooks) لفحص أو تعديل الرسائل قبل إرسالها إلى LLM، أو لتنقية الاستجابات.
+
+```python
+@before_llm_call
+def log_request(context):
+ print(f"Agent {context.agent.role} is calling the LLM...")
+```
+
+## أنماط النشر
+
+عند نشر تدفقك، ضع في اعتبارك ما يلي:
+
+### CrewAI Enterprise
+أسهل طريقة لنشر تدفقك هي استخدام CrewAI Enterprise. تتعامل مع البنية التحتية والمصادقة والمراقبة نيابة عنك.
+
+راجع [دليل النشر](/ar/enterprise/guides/deploy-to-amp) للبدء.
+
+```bash
+crewai deploy create
+```
+
+### التنفيذ غير المتزامن
+للمهام طويلة التشغيل، استخدم `kickoff_async` لتجنب حظر واجهتك البرمجية.
+
+### الاستمرارية
+استخدم مزيّن `@persist` لحفظ حالة تدفقك في قاعدة بيانات. يتيح لك هذا استئناف التنفيذ إذا تعطلت العملية أو إذا كنت بحاجة لانتظار مدخلات بشرية.
+
+```python
+@persist
+class ProductionFlow(Flow[AppState]):
+ # ...
+```
+
+افتراضيًا، يستأنف `@persist` تدفقًا عند توفير `kickoff(inputs={"id": })`، مما يمدّ نفس تاريخ `flow_uuid`. لـ **تفرع** تدفق مستمر إلى نسبٍ جديد — ترطيب الحالة من تشغيل سابق ولكن الكتابة تحت `state.id` جديد — مرّر `restore_from_state_id`:
+
+```python
+flow.kickoff(restore_from_state_id="")
+```
+
+يحصل التشغيل الجديد على `state.id` جديد (مولّد تلقائيًا، أو `inputs["id"]` إذا تم تثبيته) لذا لا تمتد كتابات `@persist` الخاصة به إلى تاريخ المصدر. الجمع مع `from_checkpoint` يطلق `ValueError`؛ اختر مصدر ترطيب واحدًا.
+
+## الخلاصة
+
+- **ابدأ بتدفق.**
+- **حدد حالة واضحة.**
+- **استخدم الأطقم للمهام المعقدة.**
+- **انشر مع API واستمرارية.**
diff --git a/docs/v1.15.1/ar/concepts/reasoning.mdx b/docs/v1.15.1/ar/concepts/reasoning.mdx
new file mode 100644
index 000000000..33ec1d6e7
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/reasoning.mdx
@@ -0,0 +1,148 @@
+---
+title: الاستدلال
+description: "تعرّف على كيفية تفعيل واستخدام استدلال الوكيل لتحسين تنفيذ المهام."
+icon: brain
+mode: "wide"
+---
+
+## نظرة عامة
+
+استدلال الوكيل هو ميزة تتيح للوكلاء التأمل في المهمة وإنشاء خطة قبل التنفيذ. يساعد هذا الوكلاء على التعامل مع المهام بشكل أكثر منهجية ويضمن استعدادهم لأداء العمل المطلوب.
+
+## الاستخدام
+
+لتفعيل الاستدلال لوكيل، ما عليك سوى تعيين `reasoning=True` عند إنشاء الوكيل:
+
+```python
+from crewai import Agent
+
+agent = Agent(
+ role="Data Analyst",
+ goal="Analyze complex datasets and provide insights",
+ backstory="You are an experienced data analyst with expertise in finding patterns in complex data.",
+ reasoning=True, # تفعيل الاستدلال
+ max_reasoning_attempts=3 # اختياري: تعيين حد أقصى لمحاولات الاستدلال
+)
+```
+
+## كيف يعمل
+
+عند تفعيل الاستدلال، قبل تنفيذ المهمة، سيقوم الوكيل بما يلي:
+
+1. التأمل في المهمة وإنشاء خطة مفصلة
+2. تقييم ما إذا كان مستعدًا لتنفيذ المهمة
+3. تحسين الخطة حسب الحاجة حتى يصبح مستعدًا أو يصل إلى max_reasoning_attempts
+4. حقن خطة الاستدلال في وصف المهمة قبل التنفيذ
+
+تساعد هذه العملية الوكيل على تقسيم المهام المعقدة إلى خطوات يمكن إدارتها وتحديد التحديات المحتملة قبل البدء.
+
+## خيارات التهيئة
+
+
+ تفعيل أو تعطيل الاستدلال
+
+
+
+ الحد الأقصى لعدد المحاولات لتحسين الخطة قبل المتابعة بالتنفيذ. إذا كانت القيمة None (الافتراضي)، سيستمر الوكيل في التحسين حتى يصبح مستعدًا.
+
+
+## مثال
+
+إليك مثالًا كاملًا:
+
+```python
+from crewai import Agent, Task, Crew
+
+# إنشاء وكيل مع تفعيل الاستدلال
+analyst = Agent(
+ role="Data Analyst",
+ goal="Analyze data and provide insights",
+ backstory="You are an expert data analyst.",
+ reasoning=True,
+ max_reasoning_attempts=3 # اختياري: تعيين حد لمحاولات الاستدلال
+)
+
+# إنشاء مهمة
+analysis_task = Task(
+ description="Analyze the provided sales data and identify key trends.",
+ expected_output="A report highlighting the top 3 sales trends.",
+ agent=analyst
+)
+
+# إنشاء طاقم وتشغيل المهمة
+crew = Crew(agents=[analyst], tasks=[analysis_task])
+result = crew.kickoff()
+
+print(result)
+```
+
+## معالجة الأخطاء
+
+صُممت عملية الاستدلال لتكون متينة، مع معالجة أخطاء مدمجة. إذا حدث خطأ أثناء الاستدلال، سيتابع الوكيل تنفيذ المهمة بدون خطة الاستدلال. يضمن هذا إمكانية تنفيذ المهام حتى في حالة فشل عملية الاستدلال.
+
+إليك كيفية التعامل مع الأخطاء المحتملة في الكود الخاص بك:
+
+```python
+from crewai import Agent, Task
+import logging
+
+# إعداد التسجيل لالتقاط أي أخطاء في الاستدلال
+logging.basicConfig(level=logging.INFO)
+
+# إنشاء وكيل مع تفعيل الاستدلال
+agent = Agent(
+ role="Data Analyst",
+ goal="Analyze data and provide insights",
+ reasoning=True,
+ max_reasoning_attempts=3
+)
+
+# إنشاء مهمة
+task = Task(
+ description="Analyze the provided sales data and identify key trends.",
+ expected_output="A report highlighting the top 3 sales trends.",
+ agent=agent
+)
+
+# تنفيذ المهمة
+# إذا حدث خطأ أثناء الاستدلال، سيتم تسجيله وسيستمر التنفيذ
+result = agent.execute_task(task)
+```
+
+## مثال على مخرجات الاستدلال
+
+إليك مثالًا على شكل خطة الاستدلال لمهمة تحليل البيانات:
+
+```
+Task: Analyze the provided sales data and identify key trends.
+
+Reasoning Plan:
+I'll analyze the sales data to identify the top 3 trends.
+
+1. Understanding of the task:
+ I need to analyze sales data to identify key trends that would be valuable for business decision-making.
+
+2. Key steps I'll take:
+ - First, I'll examine the data structure to understand what fields are available
+ - Then I'll perform exploratory data analysis to identify patterns
+ - Next, I'll analyze sales by time periods to identify temporal trends
+ - I'll also analyze sales by product categories and customer segments
+ - Finally, I'll identify the top 3 most significant trends
+
+3. Approach to challenges:
+ - If the data has missing values, I'll decide whether to fill or filter them
+ - If the data has outliers, I'll investigate whether they're valid data points or errors
+ - If trends aren't immediately obvious, I'll apply statistical methods to uncover patterns
+
+4. Use of available tools:
+ - I'll use data analysis tools to explore and visualize the data
+ - I'll use statistical tools to identify significant patterns
+ - I'll use knowledge retrieval to access relevant information about sales analysis
+
+5. Expected outcome:
+ A concise report highlighting the top 3 sales trends with supporting evidence from the data.
+
+READY: I am ready to execute the task.
+```
+
+تساعد خطة الاستدلال هذه الوكيل على تنظيم نهجه تجاه المهمة، والنظر في التحديات المحتملة، وضمان تقديم المخرجات المتوقعة.
diff --git a/docs/v1.15.1/ar/concepts/skills.mdx b/docs/v1.15.1/ar/concepts/skills.mdx
new file mode 100644
index 000000000..89f29a90a
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/skills.mdx
@@ -0,0 +1,306 @@
+---
+title: المهارات
+description: حزم المهارات المبنية على نظام الملفات التي تحقن خبرة المجال والتعليمات في إرشادات الوكلاء.
+icon: bolt
+mode: "wide"
+---
+
+## نظرة عامة
+
+المهارات هي مجلدات مستقلة توفر للوكلاء **تعليمات وإرشادات ومواد مرجعية خاصة بالمجال**. تُعرّف كل مهارة بملف `SKILL.md` يحتوي على بيانات وصفية YAML ومحتوى Markdown.
+
+عند التفعيل، يتم حقن تعليمات المهارة مباشرة في إرشادات مهمة الوكيل — مما يمنح الوكيل خبرة دون الحاجة لأي تغييرات في الكود.
+
+
+**المهارات ليست أدوات.** هذه هي نقطة الارتباك الأكثر شيوعًا.
+
+- **المهارات** تحقن *تعليمات وسياق* في إرشادات الوكيل. تخبر الوكيل *كيف يفكر* في مشكلة ما.
+- **الأدوات** تمنح الوكيل *دوال قابلة للاستدعاء* لاتخاذ إجراءات (البحث، قراءة الملفات، استدعاء APIs).
+
+غالبًا ما تحتاج **كليهما**: مهارات للخبرة، وأدوات للإجراء. يتم تكوينهما بشكل مستقل ويُكمّلان بعضهما.
+
+
+---
+
+## البداية السريعة
+
+### 1. إنشاء مجلد المهارة
+
+```
+skills/
+└── code-review/
+ ├── SKILL.md # مطلوب — التعليمات
+ ├── references/ # اختياري — مستندات مرجعية
+ │ └── style-guide.md
+ └── scripts/ # اختياري — سكربتات قابلة للتنفيذ
+```
+
+### 2. كتابة SKILL.md الخاص بك
+
+```markdown
+---
+name: code-review
+description: Guidelines for conducting thorough code reviews with focus on security and performance.
+metadata:
+ author: your-team
+ version: "1.0"
+---
+
+## إرشادات مراجعة الكود
+
+عند مراجعة الكود، اتبع قائمة التحقق هذه:
+
+1. **الأمان**: تحقق من ثغرات الحقن وتجاوز المصادقة وكشف البيانات
+2. **الأداء**: ابحث عن استعلامات N+1 والتخصيصات غير الضرورية والاستدعاءات المحظورة
+3. **القابلية للقراءة**: تأكد من وضوح التسمية والتعليقات المناسبة والأسلوب المتسق
+4. **الاختبارات**: تحقق من تغطية اختبار كافية للوظائف الجديدة
+
+### مستويات الخطورة
+- **حرج**: ثغرات أمنية، مخاطر فقدان البيانات → حظر الدمج
+- **رئيسي**: مشاكل أداء، أخطاء منطقية → طلب تغييرات
+- **ثانوي**: مسائل أسلوبية، اقتراحات تسمية → الموافقة مع تعليقات
+```
+
+### 3. ربطها بوكيل
+
+```python
+from crewai import Agent
+from crewai_tools import GithubSearchTool, FileReadTool
+
+reviewer = Agent(
+ role="Senior Code Reviewer",
+ goal="Review pull requests for quality and security issues",
+ backstory="Staff engineer with expertise in secure coding practices.",
+ skills=["./skills"], # يحقن إرشادات المراجعة
+ tools=[GithubSearchTool(), FileReadTool()], # يسمح للوكيل بقراءة الكود
+)
+```
+
+الوكيل الآن لديه **خبرة** (من المهارة) و**قدرات** (من الأدوات) معًا.
+
+---
+
+## المهارات + الأدوات: العمل معًا
+
+إليك أنماط شائعة توضح كيف تُكمّل المهارات والأدوات بعضهما:
+
+### النمط 1: مهارات فقط (خبرة المجال، بدون إجراءات مطلوبة)
+
+استخدم عندما يحتاج الوكيل لتعليمات محددة لكن لا يحتاج لاستدعاء خدمات خارجية:
+
+```python
+agent = Agent(
+ role="Technical Writer",
+ goal="Write clear API documentation",
+ backstory="Expert technical writer",
+ skills=["./skills/api-docs-style"], # إرشادات وقوالب الكتابة
+ # لا حاجة لأدوات — الوكيل يكتب بناءً على السياق المقدم
+)
+```
+
+### النمط 2: أدوات فقط (إجراءات، بدون خبرة خاصة)
+
+استخدم عندما يحتاج الوكيل لاتخاذ إجراءات لكن لا يحتاج لتعليمات مجال محددة:
+
+```python
+from crewai_tools import SerperDevTool, ScrapeWebsiteTool
+
+agent = Agent(
+ role="Web Researcher",
+ goal="Find information about a topic",
+ backstory="Skilled at finding information online",
+ tools=[SerperDevTool(), ScrapeWebsiteTool()], # يمكنه البحث والاستخراج
+ # لا حاجة لمهارات — البحث العام لا يحتاج إرشادات خاصة
+)
+```
+
+### النمط 3: مهارات + أدوات (خبرة وإجراءات)
+
+النمط الأكثر شيوعًا في العالم الحقيقي. المهارة توفر *كيف* تقترب من العمل؛ الأدوات توفر *ما* يمكن للوكيل فعله:
+
+```python
+from crewai_tools import SerperDevTool, FileReadTool, CodeInterpreterTool
+
+analyst = Agent(
+ role="Security Analyst",
+ goal="Audit infrastructure for vulnerabilities",
+ backstory="Expert in cloud security and compliance",
+ skills=["./skills/security-audit"], # منهجية وقوائم تحقق التدقيق
+ tools=[
+ SerperDevTool(), # البحث عن ثغرات معروفة
+ FileReadTool(), # قراءة ملفات التكوين
+ CodeInterpreterTool(), # تشغيل سكربتات التحليل
+ ],
+)
+```
+
+### النمط 4: مهارات + MCP
+
+المهارات تعمل مع خوادم MCP بنفس الطريقة التي تعمل بها مع الأدوات:
+
+```python
+agent = Agent(
+ role="Data Analyst",
+ goal="Analyze customer data and generate reports",
+ backstory="Expert data analyst with strong statistical background",
+ skills=["./skills/data-analysis"], # منهجية التحليل
+ mcps=["https://data-warehouse.example.com/sse"], # وصول بيانات عن بُعد
+)
+```
+
+### النمط 5: مهارات + تطبيقات
+
+المهارات يمكن أن توجّه كيف يستخدم الوكيل تكاملات المنصة:
+
+```python
+agent = Agent(
+ role="Customer Support Agent",
+ goal="Respond to customer inquiries professionally",
+ backstory="Experienced support representative",
+ skills=["./skills/support-playbook"], # قوالب الردود وقواعد التصعيد
+ apps=["gmail", "zendesk"], # يمكنه إرسال رسائل بريد وتحديث التذاكر
+)
+```
+
+---
+
+## المهارات على مستوى الطاقم
+
+يمكن تعيين المهارات على الطاقم لتُطبّق على **جميع الوكلاء**:
+
+```python
+from crewai import Crew
+
+crew = Crew(
+ agents=[researcher, writer, reviewer],
+ tasks=[research_task, write_task, review_task],
+ skills=["./skills"], # جميع الوكلاء يحصلون على هذه المهارات
+)
+```
+
+المهارات على مستوى الوكيل لها الأولوية — إذا تم اكتشاف نفس المهارة في كلا المستويين، يتم استخدام نسخة الوكيل.
+
+---
+
+## تنسيق SKILL.md
+
+```markdown
+---
+name: my-skill
+description: وصف قصير لما تفعله هذه المهارة ومتى تُستخدم.
+license: Apache-2.0 # اختياري
+compatibility: crewai>=0.1.0 # اختياري
+metadata: # اختياري
+ author: your-name
+ version: "1.0"
+allowed-tools: web-search file-read # اختياري، تجريبي
+---
+
+التعليمات للوكيل تُكتب هنا. يتم حقن محتوى Markdown هذا
+في إرشادات الوكيل عند تفعيل المهارة.
+```
+
+### حقول البيانات الوصفية
+
+| الحقل | مطلوب | الوصف |
+| :-------------- | :------- | :----------------------------------------------------------------------- |
+| `name` | نعم | 1-64 حرف. أحرف صغيرة أبجدية رقمية وشرطات. يجب أن يطابق اسم المجلد. |
+| `description` | نعم | 1-1024 حرف. يصف ما تفعله المهارة ومتى تُستخدم. |
+| `license` | لا | اسم الترخيص أو مرجع لملف ترخيص مضمّن. |
+| `compatibility` | لا | حد أقصى 500 حرف. متطلبات البيئة (منتجات، حزم، شبكة). |
+| `metadata` | لا | تعيين مفتاح-قيمة نصي عشوائي. |
+| `allowed-tools` | لا | قائمة أدوات معتمدة مسبقًا مفصولة بمسافات. تجريبي. |
+
+---
+
+## هيكل المجلد
+
+```
+my-skill/
+├── SKILL.md # مطلوب — البيانات الوصفية + التعليمات
+├── scripts/ # اختياري — سكربتات قابلة للتنفيذ
+├── references/ # اختياري — مستندات مرجعية
+└── assets/ # اختياري — ملفات ثابتة (إعدادات، بيانات)
+```
+
+يجب أن يتطابق اسم المجلد مع حقل `name` في `SKILL.md`. مجلدات `scripts/` و `references/` و `assets/` متاحة في مسار المهارة `path` للوكلاء الذين يحتاجون للإشارة إلى الملفات مباشرة.
+
+---
+
+## المهارات المحمّلة مسبقًا
+
+للمزيد من التحكم، يمكنك اكتشاف المهارات وتفعيلها برمجيًا:
+
+```python
+from pathlib import Path
+from crewai.skills import discover_skills, activate_skill
+
+# اكتشاف جميع المهارات في مجلد
+skills = discover_skills(Path("./skills"))
+
+# تفعيلها (تحميل محتوى SKILL.md الكامل)
+activated = [activate_skill(s) for s in skills]
+
+# تمرير إلى وكيل
+agent = Agent(
+ role="Researcher",
+ goal="Find relevant information",
+ backstory="An expert researcher.",
+ skills=activated,
+)
+```
+
+---
+
+## كيف يتم تحميل المهارات
+
+تستخدم المهارات **الكشف التدريجي** — تحمّل فقط ما هو مطلوب في كل مرحلة:
+
+| المرحلة | ما يتم تحميله | متى |
+| :--------- | :------------------------------------ | :------------------ |
+| الاكتشاف | الاسم، الوصف، حقول البيانات الوصفية | `discover_skills()` |
+| التفعيل | نص محتوى SKILL.md الكامل | `activate_skill()` |
+
+أثناء التنفيذ العادي للوكيل (تمرير مسارات المجلدات عبر `skills=["./skills"]`)، يتم اكتشاف المهارات وتفعيلها تلقائيًا. التحميل التدريجي مهم فقط عند استخدام الواجهة البرمجية.
+
+---
+
+## المهارات مقابل المعرفة
+
+كلا المهارات والمعرفة تُعدّل إرشادات الوكيل، لكنهما يخدمان أغراضًا مختلفة:
+
+| الجانب | المهارات | المعرفة |
+| :--- | :--- | :--- |
+| **ما توفره** | تعليمات، إجراءات، إرشادات | حقائق، بيانات، معلومات |
+| **كيف تُخزّن** | ملفات Markdown (SKILL.md) | مُضمّنة في مخزن متجهي (ChromaDB) |
+| **كيف تُسترجع** | يتم حقن المحتوى الكامل في الإرشادات | البحث الدلالي يجد الأجزاء ذات الصلة |
+| **الأفضل لـ** | المنهجيات، قوائم التحقق، أدلة الأسلوب | مستندات الشركة، معلومات المنتج، بيانات مرجعية |
+| **يُعيّن عبر** | `skills=["./skills"]` | `knowledge_sources=[source]` |
+
+**القاعدة العامة:** إذا كان الوكيل يحتاج لاتباع *عملية*، استخدم مهارة. إذا كان يحتاج للرجوع إلى *بيانات*، استخدم المعرفة.
+
+---
+
+## الأسئلة الشائعة
+
+
+
+ يعتمد على حالة الاستخدام. المهارات والأدوات **مستقلتان** — يمكنك استخدام أيّ منهما أو كليهما أو لا شيء.
+
+ - **مهارات فقط**: عندما يحتاج الوكيل خبرة لكن لا يحتاج إجراءات خارجية (مثال: الكتابة بإرشادات أسلوبية)
+ - **أدوات فقط**: عندما يحتاج الوكيل إجراءات لكن لا يحتاج منهجية خاصة (مثال: بحث بسيط على الويب)
+ - **كليهما**: عندما يحتاج الوكيل خبرة وإجراءات (مثال: تدقيق أمني بقوائم تحقق محددة وقدرة على فحص الكود)
+
+
+
+ **لا.** حقل `allowed-tools` في SKILL.md هو بيانات وصفية تجريبية فقط — لا يُنشئ أو يحقن أي أدوات. يجب عليك دائمًا تعيين الأدوات بشكل منفصل عبر `tools=[]` أو `mcps=[]` أو `apps=[]`.
+
+
+
+ المهارة على مستوى الوكيل لها الأولوية. يتم إزالة التكرار حسب الاسم — مهارات الوكيل تُعالج أولاً، لذا إذا ظهر نفس اسم المهارة في كلا المستويين، تُستخدم نسخة الوكيل.
+
+
+
+ هناك تحذير ناعم عند 50,000 حرف، لكن بدون حد صارم. حافظ على تركيز المهارات وإيجازها للحصول على أفضل النتائج — الحقن الكبيرة في الإرشادات قد تُشتت انتباه الوكيل.
+
+
diff --git a/docs/v1.15.1/ar/concepts/tasks.mdx b/docs/v1.15.1/ar/concepts/tasks.mdx
new file mode 100644
index 000000000..e1fa1027c
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/tasks.mdx
@@ -0,0 +1,1120 @@
+---
+title: المهام
+description: دليل مفصل حول إدارة وإنشاء المهام ضمن إطار عمل CrewAI.
+icon: list-check
+mode: "wide"
+---
+
+## نظرة عامة
+
+في إطار عمل CrewAI، المهمة (`Task`) هي تكليف محدد يُنجزه وكيل (`Agent`).
+
+توفر المهام جميع التفاصيل اللازمة للتنفيذ، مثل الوصف والوكيل المسؤول والأدوات المطلوبة والمزيد، مما يسهّل مجموعة واسعة من تعقيدات الإجراءات.
+
+يمكن أن تكون المهام في CrewAI تعاونية، تتطلب عمل وكلاء متعددين معًا. تتم إدارة ذلك من خلال خصائص المهمة ويتم تنسيقه بواسطة عملية Crew، مما يعزز العمل الجماعي والكفاءة.
+
+
+يتضمن CrewAI AMP منشئ مهام مرئي في Crew Studio يبسّط إنشاء المهام المعقدة وربطها. صمم تدفقات مهامك بصريًا واختبرها في الوقت الفعلي دون كتابة كود.
+
+
+
+يتيح منشئ المهام المرئي:
+
+- إنشاء المهام بالسحب والإفلات
+- تبعيات المهام المرئية والتدفق
+- الاختبار والتحقق في الوقت الفعلي
+- المشاركة والتعاون بسهولة
+
+
+### تدفق تنفيذ المهام
+
+يمكن تنفيذ المهام بطريقتين:
+
+- **تسلسلي**: تُنفَّذ المهام بالترتيب الذي تم تعريفها به
+- **هرمي**: تُعيَّن المهام للوكلاء بناءً على أدوارهم وخبراتهم
+
+يتم تحديد تدفق التنفيذ عند إنشاء الفريق:
+
+```python Code
+crew = Crew(
+ agents=[agent1, agent2],
+ tasks=[task1, task2],
+ process=Process.sequential # or Process.hierarchical
+)
+```
+
+## خصائص المهمة
+
+| الخاصية | المعاملات | النوع | الوصف |
+| :------------------------------------- | :---------------------- | :-------------------------- | :-------------------------------------------------------------------------------------------------------------- |
+| **الوصف** | `description` | `str` | بيان واضح وموجز لما تستلزمه المهمة. |
+| **المخرجات المتوقعة** | `expected_output` | `str` | وصف مفصل لما يبدو عليه إتمام المهمة. |
+| **الاسم** _(اختياري)_ | `name` | `Optional[str]` | معرّف اسمي للمهمة. |
+| **الوكيل** _(اختياري)_ | `agent` | `Optional[BaseAgent]` | الوكيل المسؤول عن تنفيذ المهمة. |
+| **الأدوات** _(اختياري)_ | `tools` | `List[BaseTool]` | الأدوات/الموارد التي يقتصر الوكيل على استخدامها لهذه المهمة. |
+| **السياق** _(اختياري)_ | `context` | `Optional[List["Task"]]` | مهام أخرى ستُستخدم مخرجاتها كسياق لهذه المهمة. |
+| **التنفيذ غير المتزامن** _(اختياري)_ | `async_execution` | `Optional[bool]` | ما إذا كان يجب تنفيذ المهمة بشكل غير متزامن. الافتراضي False. |
+| **المدخلات البشرية** _(اختياري)_ | `human_input` | `Optional[bool]` | ما إذا كان يجب أن يراجع إنسان الإجابة النهائية للوكيل. الافتراضي False. |
+| **Markdown** _(اختياري)_ | `markdown` | `Optional[bool]` | ما إذا كان يجب أن توجّه المهمة الوكيل لإعادة الإجابة النهائية بتنسيق Markdown. الافتراضي False. |
+| **الإعداد** _(اختياري)_ | `config` | `Optional[Dict[str, Any]]` | معاملات إعداد خاصة بالمهمة. |
+| **ملف المخرجات** _(اختياري)_ | `output_file` | `Optional[str]` | مسار الملف لتخزين مخرجات المهمة. |
+| **إنشاء المجلد** _(اختياري)_ | `create_directory` | `Optional[bool]` | ما إذا كان يجب إنشاء المجلد لـ output_file إذا لم يكن موجودًا. الافتراضي True. |
+| **مخرجات JSON** _(اختياري)_ | `output_json` | `Optional[Type[BaseModel]]` | نموذج Pydantic لهيكلة مخرجات JSON. |
+| **مخرجات Pydantic** _(اختياري)_ | `output_pydantic` | `Optional[Type[BaseModel]]` | نموذج Pydantic لمخرجات المهمة. |
+| **دالة الاسترجاع** _(اختياري)_ | `callback` | `Optional[Any]` | دالة/كائن يُنفَّذ بعد اكتمال المهمة. |
+| **حارس** _(اختياري)_ | `guardrail` | `Optional[Callable]` | دالة للتحقق من مخرجات المهمة قبل الانتقال إلى المهمة التالية. |
+| **حراس** _(اختياري)_ | `guardrails` | `Optional[List[Callable]]` | قائمة حراس للتحقق من مخرجات المهمة قبل الانتقال إلى المهمة التالية. |
+| **أقصى محاولات الحارس** _(اختياري)_ | `guardrail_max_retries` | `Optional[int]` | الحد الأقصى لعدد المحاولات عند فشل التحقق من الحارس. الافتراضي 3. |
+
+
+ خاصية المهمة `max_retries` مهملة وستتم إزالتها في v1.0.0.
+ استخدم `guardrail_max_retries` بدلاً منها للتحكم في محاولات الإعادة عند فشل الحارس.
+
+
+## إنشاء المهام
+
+هناك طريقتان شائعتان لإنشاء المهام في CrewAI: باستخدام **تهيئة JSONC (الموصى بها للـ crews الجديدة)** أو تعريفها **مباشرة في الكود**.
+
+### تهيئة JSONC (موصى بها)
+
+المشاريع الجديدة التي تُنشأ عبر `crewai create crew ` تعرّف المهام في `crew.jsonc`.
+
+````jsonc crew.jsonc
+{
+ "name": "Research Crew",
+ "agents": ["researcher", "reporting_analyst"],
+ "tasks": [
+ {
+ "name": "research_task",
+ "description": "Conduct thorough research about {topic}.",
+ "expected_output": "A list of the most relevant information about {topic}.",
+ "agent": "researcher"
+ },
+ {
+ "name": "reporting_task",
+ "description": "Review the research and expand it into a detailed report.",
+ "expected_output": "A polished markdown report.",
+ "agent": "reporting_analyst",
+ "context": ["research_task"],
+ "markdown": true,
+ "output_file": "report.md"
+ }
+ ],
+ "inputs": {
+ "topic": "AI Agents"
+ }
+}
+````
+
+كل مهمة تحتاج إلى `description` و `expected_output`. يجب أن يطابق `agent` اسم Agent مذكورًا في `agents`. يشير `context` إلى أسماء مهام سابقة فقط؛ وترفض الإشارات إلى مهام لاحقة.
+
+### إعداد YAML الكلاسيكي
+
+المشاريع الكلاسيكية التي تُنشأ عبر `crewai create crew --classic` تستخدم `config/tasks.yaml` وفئة `@CrewBase` في `crew.py`.
+
+يظل إعداد YAML مدعومًا للمشاريع الحالية المبنية بـ Python/YAML وللفِرق التي تفضل تعريف المهام من خلال فئة `@CrewBase`.
+
+بعد إنشاء مشروع كلاسيكي، انتقل إلى ملف `src//config/tasks.yaml` وعدّل القالب ليتوافق مع متطلبات مهامك المحددة.
+
+
+المتغيرات في ملفات YAML (مثل `{topic}`) سيتم استبدالها بالقيم من مدخلاتك عند تشغيل الفريق:
+```python Code
+crew.kickoff(inputs={'topic': 'AI Agents'})
+```
+
+
+إليك مثال على كيفية إعداد المهام باستخدام YAML:
+
+````yaml tasks.yaml
+research_task:
+ description: >
+ Conduct a thorough research about {topic}
+ Make sure you find any interesting and relevant information given
+ the current year is 2025.
+ expected_output: >
+ A list with 10 bullet points of the most relevant information about {topic}
+ agent: researcher
+
+reporting_task:
+ description: >
+ Review the context you got and expand each topic into a full section for a report.
+ Make sure the report is detailed and contains any and all relevant information.
+ expected_output: >
+ A fully fledge reports with the mains topics, each with a full section of information.
+ Formatted as markdown without '```'
+ agent: reporting_analyst
+ markdown: true
+ output_file: report.md
+````
+
+لاستخدام إعداد YAML هذا في كودك، أنشئ فئة فريق ترث من `CrewBase`:
+
+```python crew.py
+# src//crew.py
+
+from crewai import Agent, Crew, Process, Task
+from crewai.project import CrewBase, agent, crew, task
+from crewai_tools import SerperDevTool
+
+@CrewBase
+class LatestAiDevelopmentCrew():
+ """LatestAiDevelopment crew"""
+
+ @agent
+ def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config['researcher'], # type: ignore[index]
+ verbose=True,
+ tools=[SerperDevTool()]
+ )
+
+ @agent
+ def reporting_analyst(self) -> Agent:
+ return Agent(
+ config=self.agents_config['reporting_analyst'], # type: ignore[index]
+ verbose=True
+ )
+
+ @task
+ def research_task(self) -> Task:
+ return Task(
+ config=self.tasks_config['research_task'] # type: ignore[index]
+ )
+
+ @task
+ def reporting_task(self) -> Task:
+ return Task(
+ config=self.tasks_config['reporting_task'] # type: ignore[index]
+ )
+
+ @crew
+ def crew(self) -> Crew:
+ return Crew(
+ agents=[
+ self.researcher(),
+ self.reporting_analyst()
+ ],
+ tasks=[
+ self.research_task(),
+ self.reporting_task()
+ ],
+ process=Process.sequential
+ )
+```
+
+
+ يجب أن تتطابق الأسماء المستخدمة في ملفات YAML (`agents.yaml` و `tasks.yaml`)
+ مع أسماء الدوال في كود Python الخاص بك.
+
+
+### تعريف مباشر في الكود (بديل)
+
+بدلاً من ذلك، يمكنك تعريف المهام مباشرة في كودك دون استخدام إعداد YAML:
+
+```python task.py
+from crewai import Task
+
+research_task = Task(
+ description="""
+ Conduct a thorough research about AI Agents.
+ Make sure you find any interesting and relevant information given
+ the current year is 2025.
+ """,
+ expected_output="""
+ A list with 10 bullet points of the most relevant information about AI Agents
+ """,
+ agent=researcher
+)
+
+reporting_task = Task(
+ description="""
+ Review the context you got and expand each topic into a full section for a report.
+ Make sure the report is detailed and contains any and all relevant information.
+ """,
+ expected_output="""
+ A fully fledge reports with the mains topics, each with a full section of information.
+ """,
+ agent=reporting_analyst,
+ markdown=True, # Enable markdown formatting for the final output
+ output_file="report.md"
+)
+```
+
+
+ حدد وكيلًا (`agent`) مباشرة للتعيين أو دع عملية CrewAI `hierarchical`
+ تقرر بناءً على الأدوار والتوفر وغيرها.
+
+
+## مخرجات المهمة
+
+فهم مخرجات المهام أمر بالغ الأهمية لبناء سير عمل ذكاء اصطناعي فعال. يوفر CrewAI طريقة منظمة للتعامل مع نتائج المهام من خلال فئة `TaskOutput`، التي تدعم تنسيقات مخرجات متعددة ويمكن تمريرها بسهولة بين المهام.
+
+يتم تغليف مخرجات المهمة في إطار عمل CrewAI داخل فئة `TaskOutput`. توفر هذه الفئة طريقة منظمة للوصول إلى نتائج المهمة، بما في ذلك تنسيقات متنوعة مثل المخرجات الخام و JSON ونماذج Pydantic.
+
+بشكل افتراضي، سيتضمن `TaskOutput` المخرجات `raw` فقط. سيتضمن `TaskOutput` مخرجات `pydantic` أو `json_dict` فقط إذا تم إعداد كائن `Task` الأصلي مع `output_pydantic` أو `output_json` على التوالي.
+
+### خصائص مخرجات المهمة
+
+| الخاصية | المعاملات | النوع | الوصف |
+| :---------------- | :-------------- | :------------------------- | :------------------------------------------------------------------------------------------------- |
+| **الوصف** | `description` | `str` | وصف المهمة. |
+| **الملخص** | `summary` | `Optional[str]` | ملخص المهمة، يُنشأ تلقائيًا من أول 10 كلمات من الوصف. |
+| **الخام** | `raw` | `str` | المخرجات الخام للمهمة. هذا هو التنسيق الافتراضي للمخرجات. |
+| **Pydantic** | `pydantic` | `Optional[BaseModel]` | كائن نموذج Pydantic يمثل المخرجات المنظمة للمهمة. |
+| **قاموس JSON** | `json_dict` | `Optional[Dict[str, Any]]` | قاموس يمثل مخرجات JSON للمهمة. |
+| **الوكيل** | `agent` | `str` | الوكيل الذي نفذ المهمة. |
+| **تنسيق المخرجات**| `output_format` | `OutputFormat` | تنسيق مخرجات المهمة، مع خيارات تشمل RAW و JSON و Pydantic. الافتراضي هو RAW. |
+| **الرسائل** | `messages` | `list[LLMMessage]` | الرسائل من آخر تنفيذ للمهمة. |
+
+### دوال وخصائص المهمة
+
+| الدالة/الخاصية | الوصف |
+| :-------------- | :------------------------------------------------------------------------------------------------ |
+| **json** | تُعيد تمثيل سلسلة JSON لمخرجات المهمة إذا كان تنسيق المخرجات JSON. |
+| **to_dict** | تحوّل مخرجات JSON و Pydantic إلى قاموس. |
+| **str** | تُعيد التمثيل النصي لمخرجات المهمة، مع أولوية Pydantic ثم JSON ثم الخام. |
+
+### الوصول إلى مخرجات المهمة
+
+بمجرد تنفيذ المهمة، يمكن الوصول إلى مخرجاتها من خلال خاصية `output` لكائن `Task`. توفر فئة `TaskOutput` طرقًا متنوعة للتفاعل مع هذه المخرجات وعرضها.
+
+#### مثال
+
+```python Code
+# Example task
+task = Task(
+ description='Find and summarize the latest AI news',
+ expected_output='A bullet list summary of the top 5 most important AI news',
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+# Execute the crew
+crew = Crew(
+ agents=[research_agent],
+ tasks=[task],
+ verbose=True
+)
+
+result = crew.kickoff()
+
+# Accessing the task output
+task_output = task.output
+
+print(f"Task Description: {task_output.description}")
+print(f"Task Summary: {task_output.summary}")
+print(f"Raw Output: {task_output.raw}")
+if task_output.json_dict:
+ print(f"JSON Output: {json.dumps(task_output.json_dict, indent=2)}")
+if task_output.pydantic:
+ print(f"Pydantic Output: {task_output.pydantic}")
+```
+
+## تنسيق مخرجات Markdown
+
+يتيح معامل `markdown` تنسيق Markdown تلقائي لمخرجات المهام. عند تعيينه إلى `True`، ستوجّه المهمة الوكيل لتنسيق الإجابة النهائية باستخدام صيغة Markdown الصحيحة.
+
+### استخدام تنسيق Markdown
+
+```python Code
+# Example task with markdown formatting enabled
+formatted_task = Task(
+ description="Create a comprehensive report on AI trends",
+ expected_output="A well-structured report with headers, sections, and bullet points",
+ agent=reporter_agent,
+ markdown=True # Enable automatic markdown formatting
+)
+```
+
+عند تعيين `markdown=True`، سيتلقى الوكيل تعليمات إضافية لتنسيق المخرجات باستخدام:
+
+- `#` للعناوين
+- `**text**` للنص العريض
+- `*text*` للنص المائل
+- `-` أو `*` للقوائم النقطية
+- `` `code` `` للكود المضمّن
+- ` `language ``` لكتل الكود
+
+### إعداد YAML مع Markdown
+
+```yaml tasks.yaml
+analysis_task:
+ description: >
+ Analyze the market data and create a detailed report
+ expected_output: >
+ A comprehensive analysis with charts and key findings
+ agent: analyst
+ markdown: true # Enable markdown formatting
+ output_file: analysis.md
+```
+
+### فوائد مخرجات Markdown
+
+- **تنسيق متسق**: يضمن اتباع جميع المخرجات لاتفاقيات Markdown الصحيحة
+- **قابلية قراءة أفضل**: محتوى منظم مع عناوين وقوائم وتأكيد
+- **جاهز للتوثيق**: يمكن استخدام المخرجات مباشرة في أنظمة التوثيق
+- **توافق عبر المنصات**: Markdown مدعوم عالميًا
+
+
+ يتم إضافة تعليمات تنسيق Markdown تلقائيًا إلى موجّه المهمة
+ عند تعيين `markdown=True`، لذا لا تحتاج إلى تحديد متطلبات التنسيق
+ في وصف المهمة.
+
+
+## تبعيات المهام والسياق
+
+يمكن للمهام الاعتماد على مخرجات مهام أخرى باستخدام خاصية `context`. على سبيل المثال:
+
+```python Code
+research_task = Task(
+ description="Research the latest developments in AI",
+ expected_output="A list of recent AI developments",
+ agent=researcher
+)
+
+analysis_task = Task(
+ description="Analyze the research findings and identify key trends",
+ expected_output="Analysis report of AI trends",
+ agent=analyst,
+ context=[research_task] # This task will wait for research_task to complete
+)
+```
+
+## حراس المهام
+
+توفر حراس المهام طريقة للتحقق من مخرجات المهام وتحويلها قبل
+تمريرها إلى المهمة التالية. تساعد هذه الميزة في ضمان جودة البيانات وتوفر
+تغذية راجعة للوكلاء عندما لا تستوفي مخرجاتهم معايير محددة.
+
+يدعم CrewAI نوعين من الحراس:
+
+1. **حراس قائمون على الدوال**: دوال Python مع منطق تحقق مخصص، تمنحك تحكمًا كاملاً في عملية التحقق وتضمن نتائج موثوقة وحتمية.
+
+2. **حراس قائمون على LLM**: أوصاف نصية تستخدم LLM الخاص بالوكيل للتحقق من المخرجات بناءً على معايير لغة طبيعية. مثالية لمتطلبات التحقق المعقدة أو الذاتية.
+
+### الحراس القائمون على الدوال
+
+لإضافة حارس قائم على الدوال إلى مهمة، قدم دالة تحقق من خلال معامل `guardrail`:
+
+```python Code
+from typing import Tuple, Union, Dict, Any
+from crewai import TaskOutput
+
+def validate_blog_content(result: TaskOutput) -> Tuple[bool, Any]:
+ """Validate blog content meets requirements."""
+ try:
+ # Check word count
+ word_count = len(result.raw.split())
+ if word_count > 200:
+ return (False, "Blog content exceeds 200 words")
+
+ # Additional validation logic here
+ return (True, result.raw.strip())
+ except Exception as e:
+ return (False, "Unexpected error during validation")
+
+blog_task = Task(
+ description="Write a blog post about AI",
+ expected_output="A blog post under 200 words",
+ agent=blog_agent,
+ guardrail=validate_blog_content # Add the guardrail function
+)
+```
+
+### الحراس القائمون على LLM (أوصاف نصية)
+
+بدلاً من كتابة دوال تحقق مخصصة، يمكنك استخدام أوصاف نصية تستفيد من التحقق القائم على LLM. عندما تقدم سلسلة نصية لمعامل `guardrail` أو `guardrails`، ينشئ CrewAI تلقائيًا `LLMGuardrail` يستخدم LLM الخاص بالوكيل للتحقق من المخرجات بناءً على وصفك.
+
+**المتطلبات**:
+
+- يجب أن يكون للمهمة وكيل (`agent`) مُعيّن (يستخدم الحارس LLM الخاص بالوكيل)
+- قدم سلسلة نصية واضحة ووصفية تشرح معايير التحقق
+
+```python Code
+from crewai import Task
+
+# Single LLM-based guardrail
+blog_task = Task(
+ description="Write a blog post about AI",
+ expected_output="A blog post under 200 words",
+ agent=blog_agent,
+ guardrail="The blog post must be under 200 words and contain no technical jargon"
+)
+```
+
+الحراس القائمون على LLM مفيدون بشكل خاص لـ:
+
+- **منطق التحقق المعقد** الذي يصعب التعبير عنه برمجيًا
+- **المعايير الذاتية** مثل النبرة والأسلوب أو تقييمات الجودة
+- **متطلبات اللغة الطبيعية** التي يسهل وصفها أكثر من برمجتها
+
+سيقوم حارس LLM بما يلي:
+
+1. تحليل مخرجات المهمة مقابل وصفك
+2. إعادة `(True, output)` إذا امتثلت المخرجات للمعايير
+3. إعادة `(False, feedback)` مع تغذية راجعة محددة إذا فشل التحقق
+
+**مثال مع معايير تحقق مفصلة**:
+
+```python Code
+research_task = Task(
+ description="Research the latest developments in quantum computing",
+ expected_output="A comprehensive research report",
+ agent=researcher_agent,
+ guardrail="""
+ The research report must:
+ - Be at least 1000 words long
+ - Include at least 5 credible sources
+ - Cover both technical and practical applications
+ - Be written in a professional, academic tone
+ - Avoid speculation or unverified claims
+ """
+)
+```
+
+### حراس متعددون
+
+يمكنك تطبيق حراس متعددين على مهمة باستخدام معامل `guardrails`. تُنفَّذ الحراس المتعددون بالتسلسل، حيث يتلقى كل حارس المخرجات من السابق. يتيح لك هذا سلسلة خطوات التحقق والتحويل.
+
+يقبل معامل `guardrails`:
+
+- قائمة من دوال الحراس أو أوصاف نصية
+- حارس واحد (دالة أو سلسلة نصية) (مثل `guardrail`)
+
+**ملاحظة**: إذا تم تقديم `guardrails`، فإنه يأخذ الأولوية على `guardrail`. سيتم تجاهل معامل `guardrail` عند تعيين `guardrails`.
+
+```python Code
+from typing import Tuple, Any
+from crewai import TaskOutput, Task
+
+def validate_word_count(result: TaskOutput) -> Tuple[bool, Any]:
+ """Validate word count is within limits."""
+ word_count = len(result.raw.split())
+ if word_count < 100:
+ return (False, f"Content too short: {word_count} words. Need at least 100 words.")
+ if word_count > 500:
+ return (False, f"Content too long: {word_count} words. Maximum is 500 words.")
+ return (True, result.raw)
+
+def validate_no_profanity(result: TaskOutput) -> Tuple[bool, Any]:
+ """Check for inappropriate language."""
+ profanity_words = ["badword1", "badword2"] # Example list
+ content_lower = result.raw.lower()
+ for word in profanity_words:
+ if word in content_lower:
+ return (False, f"Inappropriate language detected: {word}")
+ return (True, result.raw)
+
+def format_output(result: TaskOutput) -> Tuple[bool, Any]:
+ """Format and clean the output."""
+ formatted = result.raw.strip()
+ # Capitalize first letter
+ formatted = formatted[0].upper() + formatted[1:] if formatted else formatted
+ return (True, formatted)
+
+# Apply multiple guardrails sequentially
+blog_task = Task(
+ description="Write a blog post about AI",
+ expected_output="A well-formatted blog post between 100-500 words",
+ agent=blog_agent,
+ guardrails=[
+ validate_word_count, # First: validate length
+ validate_no_profanity, # Second: check content
+ format_output # Third: format the result
+ ],
+ guardrail_max_retries=3
+)
+```
+
+في هذا المثال، تُنفَّذ الحراس بالترتيب:
+
+1. `validate_word_count` يتحقق من عدد الكلمات
+2. `validate_no_profanity` يتحقق من اللغة غير الملائمة (باستخدام المخرجات من الخطوة 1)
+3. `format_output` ينسّق النتيجة النهائية (باستخدام المخرجات من الخطوة 2)
+
+إذا فشل أي حارس، يتم إرسال الخطأ إلى الوكيل، وتُعاد المهمة حتى `guardrail_max_retries` مرة.
+
+**مزج الحراس القائمين على الدوال و LLM**:
+
+يمكنك الجمع بين الحراس القائمين على الدوال والنصية في نفس القائمة:
+
+```python Code
+from typing import Tuple, Any
+from crewai import TaskOutput, Task
+
+def validate_word_count(result: TaskOutput) -> Tuple[bool, Any]:
+ """Validate word count is within limits."""
+ word_count = len(result.raw.split())
+ if word_count < 100:
+ return (False, f"Content too short: {word_count} words. Need at least 100 words.")
+ if word_count > 500:
+ return (False, f"Content too long: {word_count} words. Maximum is 500 words.")
+ return (True, result.raw)
+
+# Mix function-based and LLM-based guardrails
+blog_task = Task(
+ description="Write a blog post about AI",
+ expected_output="A well-formatted blog post between 100-500 words",
+ agent=blog_agent,
+ guardrails=[
+ validate_word_count, # Function-based: precise word count check
+ "The content must be engaging and suitable for a general audience", # LLM-based: subjective quality check
+ "The writing style should be clear, concise, and free of technical jargon" # LLM-based: style validation
+ ],
+ guardrail_max_retries=3
+)
+```
+
+يجمع هذا النهج بين دقة التحقق البرمجي ومرونة التقييم القائم على LLM للمعايير الذاتية.
+
+### متطلبات دالة الحارس
+
+1. **توقيع الدالة**:
+
+ - يجب أن تقبل معاملًا واحدًا بالضبط (مخرجات المهمة)
+ - يجب أن تُعيد tuple من `(bool, Any)`
+ - يُوصى بتلميحات الأنواع لكنها اختيارية
+
+2. **قيم الإعادة**:
+ - عند النجاح: تُعيد tuple من `(bool, Any)`. مثال: `(True, validated_result)`
+ - عند الفشل: تُعيد tuple من `(bool, str)`. مثال: `(False, "Error message explain the failure")`
+
+### أفضل ممارسات معالجة الأخطاء
+
+1. **استجابات أخطاء منظمة**:
+
+```python Code
+from crewai import TaskOutput, LLMGuardrail
+
+def validate_with_context(result: TaskOutput) -> Tuple[bool, Any]:
+ try:
+ # Main validation logic
+ validated_data = perform_validation(result)
+ return (True, validated_data)
+ except ValidationError as e:
+ return (False, f"VALIDATION_ERROR: {str(e)}")
+ except Exception as e:
+ return (False, str(e))
+```
+
+2. **فئات الأخطاء**:
+
+ - استخدم رموز خطأ محددة
+ - ضمّن السياق ذا الصلة
+ - قدم تغذية راجعة قابلة للتنفيذ
+
+3. **سلسلة التحقق**:
+
+```python Code
+from typing import Any, Dict, List, Tuple, Union
+from crewai import TaskOutput
+
+def complex_validation(result: TaskOutput) -> Tuple[bool, Any]:
+ """Chain multiple validation steps."""
+ # Step 1: Basic validation
+ if not result:
+ return (False, "Empty result")
+
+ # Step 2: Content validation
+ try:
+ validated = validate_content(result)
+ if not validated:
+ return (False, "Invalid content")
+
+ # Step 3: Format validation
+ formatted = format_output(validated)
+ return (True, formatted)
+ except Exception as e:
+ return (False, str(e))
+```
+
+### التعامل مع نتائج الحارس
+
+عندما يُعيد حارس `(False, error)`:
+
+1. يتم إرسال الخطأ إلى الوكيل
+2. يحاول الوكيل إصلاح المشكلة
+3. تتكرر العملية حتى:
+ - يُعيد الحارس `(True, result)`
+ - يتم الوصول إلى الحد الأقصى للمحاولات (`guardrail_max_retries`)
+
+مثال مع معالجة إعادة المحاولة:
+
+```python Code
+from typing import Optional, Tuple, Union
+from crewai import TaskOutput, Task
+
+def validate_json_output(result: TaskOutput) -> Tuple[bool, Any]:
+ """Validate and parse JSON output."""
+ try:
+ # Try to parse as JSON
+ data = json.loads(result)
+ return (True, data)
+ except json.JSONDecodeError as e:
+ return (False, "Invalid JSON format")
+
+task = Task(
+ description="Generate a JSON report",
+ expected_output="A valid JSON object",
+ agent=analyst,
+ guardrail=validate_json_output,
+ guardrail_max_retries=3 # Limit retry attempts
+)
+```
+
+## الحصول على مخرجات منظمة ومتسقة من المهام
+
+
+ من المهم أيضًا ملاحظة أن مخرجات المهمة الأخيرة في الفريق
+ تصبح المخرجات النهائية للفريق نفسه.
+
+
+### استخدام `output_pydantic`
+
+تتيح لك خاصية `output_pydantic` تحديد نموذج Pydantic يجب أن تتوافق معه مخرجات المهمة. هذا يضمن أن المخرجات ليست منظمة فحسب، بل تم التحقق منها وفقًا لنموذج Pydantic.
+
+إليك مثال يوضح كيفية استخدام output_pydantic:
+
+```python Code
+import json
+
+from crewai import Agent, Crew, Process, Task
+from pydantic import BaseModel
+
+
+class Blog(BaseModel):
+ title: str
+ content: str
+
+
+blog_agent = Agent(
+ role="Blog Content Generator Agent",
+ goal="Generate a blog title and content",
+ backstory="""You are an expert content creator, skilled in crafting engaging and informative blog posts.""",
+ verbose=False,
+ allow_delegation=False,
+ llm="gpt-4o",
+)
+
+task1 = Task(
+ description="""Create a blog title and content on a given topic. Make sure the content is under 200 words.""",
+ expected_output="A compelling blog title and well-written content.",
+ agent=blog_agent,
+ output_pydantic=Blog,
+)
+
+# Instantiate your crew with a sequential process
+crew = Crew(
+ agents=[blog_agent],
+ tasks=[task1],
+ verbose=True,
+ process=Process.sequential,
+)
+
+result = crew.kickoff()
+
+# Option 1: Accessing Properties Using Dictionary-Style Indexing
+print("Accessing Properties - Option 1")
+title = result["title"]
+content = result["content"]
+print("Title:", title)
+print("Content:", content)
+
+# Option 2: Accessing Properties Directly from the Pydantic Model
+print("Accessing Properties - Option 2")
+title = result.pydantic.title
+content = result.pydantic.content
+print("Title:", title)
+print("Content:", content)
+
+# Option 3: Accessing Properties Using the to_dict() Method
+print("Accessing Properties - Option 3")
+output_dict = result.to_dict()
+title = output_dict["title"]
+content = output_dict["content"]
+print("Title:", title)
+print("Content:", content)
+
+# Option 4: Printing the Entire Blog Object
+print("Accessing Properties - Option 5")
+print("Blog:", result)
+
+```
+
+في هذا المثال:
+
+- يتم تعريف نموذج Pydantic Blog مع حقلي title و content.
+- تستخدم المهمة task1 خاصية output_pydantic لتحديد أن مخرجاتها يجب أن تتوافق مع نموذج Blog.
+- بعد تنفيذ الفريق، يمكنك الوصول إلى المخرجات المنظمة بعدة طرق كما هو موضح.
+
+#### شرح الوصول إلى المخرجات
+
+1. الفهرسة بأسلوب القاموس: يمكنك الوصول مباشرة إلى الحقول باستخدام result["field_name"]. يعمل هذا لأن فئة CrewOutput تنفذ دالة **getitem**.
+2. مباشرة من نموذج Pydantic: الوصول إلى الخصائص مباشرة من كائن result.pydantic.
+3. باستخدام دالة to_dict(): تحويل المخرجات إلى قاموس والوصول إلى الحقول.
+4. طباعة الكائن بالكامل: ببساطة اطبع كائن result لرؤية المخرجات المنظمة.
+
+### استخدام `output_json`
+
+تتيح لك خاصية `output_json` تحديد المخرجات المتوقعة بتنسيق JSON. هذا يضمن أن مخرجات المهمة هي هيكل JSON صالح يمكن تحليله واستخدامه بسهولة في تطبيقك.
+
+إليك مثال يوضح كيفية استخدام `output_json`:
+
+```python Code
+import json
+
+from crewai import Agent, Crew, Process, Task
+from pydantic import BaseModel
+
+
+# Define the Pydantic model for the blog
+class Blog(BaseModel):
+ title: str
+ content: str
+
+
+# Define the agent
+blog_agent = Agent(
+ role="Blog Content Generator Agent",
+ goal="Generate a blog title and content",
+ backstory="""You are an expert content creator, skilled in crafting engaging and informative blog posts.""",
+ verbose=False,
+ allow_delegation=False,
+ llm="gpt-4o",
+)
+
+# Define the task with output_json set to the Blog model
+task1 = Task(
+ description="""Create a blog title and content on a given topic. Make sure the content is under 200 words.""",
+ expected_output="A JSON object with 'title' and 'content' fields.",
+ agent=blog_agent,
+ output_json=Blog,
+)
+
+# Instantiate the crew with a sequential process
+crew = Crew(
+ agents=[blog_agent],
+ tasks=[task1],
+ verbose=True,
+ process=Process.sequential,
+)
+
+# Kickoff the crew to execute the task
+result = crew.kickoff()
+
+# Option 1: Accessing Properties Using Dictionary-Style Indexing
+print("Accessing Properties - Option 1")
+title = result["title"]
+content = result["content"]
+print("Title:", title)
+print("Content:", content)
+
+# Option 2: Printing the Entire Blog Object
+print("Accessing Properties - Option 2")
+print("Blog:", result)
+```
+
+في هذا المثال:
+
+- يتم تعريف نموذج Pydantic Blog مع حقلي title و content، الذي يُستخدم لتحديد هيكل مخرجات JSON.
+- تستخدم المهمة task1 خاصية output_json للإشارة إلى أنها تتوقع مخرجات JSON متوافقة مع نموذج Blog.
+- بعد تنفيذ الفريق، يمكنك الوصول إلى مخرجات JSON المنظمة بطريقتين كما هو موضح.
+
+#### شرح الوصول إلى المخرجات
+
+1. الوصول إلى الخصائص باستخدام الفهرسة بأسلوب القاموس: يمكنك الوصول إلى الحقول مباشرة باستخدام result["field_name"]. هذا ممكن لأن فئة CrewOutput تنفذ دالة **getitem**، مما يتيح لك معاملة المخرجات كقاموس. في هذا الخيار، نسترد title و content من النتيجة.
+2. طباعة كائن Blog بالكامل: بطباعة result، تحصل على التمثيل النصي لكائن CrewOutput. نظرًا لأن دالة **str** منفذة لإعادة مخرجات JSON، سيعرض هذا المخرجات الكاملة كسلسلة منسقة تمثل كائن Blog.
+
+---
+
+باستخدام output_pydantic أو output_json، تضمن أن مهامك تنتج مخرجات بتنسيق متسق ومنظم، مما يسهّل معالجة البيانات واستخدامها داخل تطبيقك أو عبر مهام متعددة.
+
+## دمج الأدوات مع المهام
+
+استفد من أدوات [CrewAI Toolkit](https://github.com/joaomdmoura/crewai-tools) و [LangChain Tools](https://python.langchain.com/docs/integrations/tools) لتحسين أداء المهام وتفاعل الوكلاء.
+
+## إنشاء مهمة بأدوات
+
+```python Code
+import os
+os.environ["OPENAI_API_KEY"] = "Your Key"
+os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
+
+from crewai import Agent, Task, Crew
+from crewai_tools import SerperDevTool
+
+research_agent = Agent(
+ role='Researcher',
+ goal='Find and summarize the latest AI news',
+ backstory="""You're a researcher at a large company.
+ You're responsible for analyzing data and providing insights
+ to the business.""",
+ verbose=True
+)
+
+# to perform a semantic search for a specified query from a text's content across the internet
+search_tool = SerperDevTool()
+
+task = Task(
+ description='Find and summarize the latest AI news',
+ expected_output='A bullet list summary of the top 5 most important AI news',
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+crew = Crew(
+ agents=[research_agent],
+ tasks=[task],
+ verbose=True
+)
+
+result = crew.kickoff()
+print(result)
+```
+
+يوضح هذا كيف يمكن للمهام ذات الأدوات المحددة تجاوز المجموعة الافتراضية للوكيل لتنفيذ مهام مخصصة.
+
+## الإشارة إلى مهام أخرى
+
+في CrewAI، يتم تمرير مخرجات مهمة واحدة تلقائيًا إلى المهمة التالية، لكن يمكنك تحديد مخرجات مهام بعينها، بما في ذلك عدة مهام، لاستخدامها كسياق لمهمة أخرى.
+
+هذا مفيد عندما تكون لديك مهمة تعتمد على مخرجات مهمة أخرى لا يتم تنفيذها مباشرة بعدها. يتم ذلك من خلال خاصية `context` للمهمة:
+
+```python Code
+# ...
+
+research_ai_task = Task(
+ description="Research the latest developments in AI",
+ expected_output="A list of recent AI developments",
+ async_execution=True,
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+research_ops_task = Task(
+ description="Research the latest developments in AI Ops",
+ expected_output="A list of recent AI Ops developments",
+ async_execution=True,
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+write_blog_task = Task(
+ description="Write a full blog post about the importance of AI and its latest news",
+ expected_output="Full blog post that is 4 paragraphs long",
+ agent=writer_agent,
+ context=[research_ai_task, research_ops_task]
+)
+
+#...
+```
+
+## التنفيذ غير المتزامن
+
+يمكنك تعريف مهمة ليتم تنفيذها بشكل غير متزامن. هذا يعني أن الفريق لن ينتظر اكتمالها للمتابعة مع المهمة التالية. هذا مفيد للمهام التي تستغرق وقتًا طويلاً، أو التي ليست حاسمة لتنفيذ المهام التالية.
+
+يمكنك بعد ذلك استخدام خاصية `context` لتحديد في مهمة مستقبلية أنها يجب أن تنتظر اكتمال مخرجات المهمة غير المتزامنة.
+
+```python Code
+#...
+
+list_ideas = Task(
+ description="List of 5 interesting ideas to explore for an article about AI.",
+ expected_output="Bullet point list of 5 ideas for an article.",
+ agent=researcher,
+ async_execution=True # Will be executed asynchronously
+)
+
+list_important_history = Task(
+ description="Research the history of AI and give me the 5 most important events.",
+ expected_output="Bullet point list of 5 important events.",
+ agent=researcher,
+ async_execution=True # Will be executed asynchronously
+)
+
+write_article = Task(
+ description="Write an article about AI, its history, and interesting ideas.",
+ expected_output="A 4 paragraph article about AI.",
+ agent=writer,
+ context=[list_ideas, list_important_history] # Will wait for the output of the two tasks to be completed
+)
+
+#...
+```
+
+## آلية دالة الاسترجاع
+
+يتم تنفيذ دالة الاسترجاع بعد اكتمال المهمة، مما يتيح تشغيل إجراءات أو إشعارات بناءً على نتيجة المهمة.
+
+```python Code
+# ...
+
+def callback_function(output: TaskOutput):
+ # Do something after the task is completed
+ # Example: Send an email to the manager
+ print(f"""
+ Task completed!
+ Task: {output.description}
+ Output: {output.raw}
+ """)
+
+research_task = Task(
+ description='Find and summarize the latest AI news',
+ expected_output='A bullet list summary of the top 5 most important AI news',
+ agent=research_agent,
+ tools=[search_tool],
+ callback=callback_function
+)
+
+#...
+```
+
+## الوصول إلى مخرجات مهمة محددة
+
+بمجرد انتهاء الفريق من التشغيل، يمكنك الوصول إلى مخرجات مهمة محددة باستخدام خاصية `output` لكائن المهمة:
+
+```python Code
+# ...
+task1 = Task(
+ description='Find and summarize the latest AI news',
+ expected_output='A bullet list summary of the top 5 most important AI news',
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+#...
+
+crew = Crew(
+ agents=[research_agent],
+ tasks=[task1, task2, task3],
+ verbose=True
+)
+
+result = crew.kickoff()
+
+# Returns a TaskOutput object with the description and results of the task
+print(f"""
+ Task completed!
+ Task: {task1.output.description}
+ Output: {task1.output.raw}
+""")
+```
+
+## آلية تجاوز الأدوات
+
+تحديد الأدوات في مهمة يتيح التكيف الديناميكي لقدرات الوكيل، مما يؤكد مرونة CrewAI.
+
+## آليات معالجة الأخطاء والتحقق
+
+أثناء إنشاء المهام وتنفيذها، توجد آليات تحقق معينة لضمان متانة وموثوقية خصائص المهمة. تشمل على سبيل المثال لا الحصر:
+
+- ضمان تعيين نوع مخرجات واحد فقط لكل مهمة للحفاظ على توقعات مخرجات واضحة.
+- منع التعيين اليدوي لخاصية `id` للحفاظ على سلامة نظام المعرّفات الفريدة.
+
+تساعد عمليات التحقق هذه في الحفاظ على اتساق وموثوقية تنفيذ المهام ضمن إطار عمل crewAI.
+
+## إنشاء المجلدات عند حفظ الملفات
+
+يتحكم معامل `create_directory` فيما إذا كان يجب على CrewAI إنشاء المجلدات تلقائيًا عند حفظ مخرجات المهام في ملفات. هذه الميزة مفيدة بشكل خاص لتنظيم المخرجات وضمان هيكلة مسارات الملفات بشكل صحيح، خاصة عند العمل مع تسلسلات مشاريع معقدة.
+
+### السلوك الافتراضي
+
+بشكل افتراضي، `create_directory=True`، مما يعني أن CrewAI سينشئ تلقائيًا أي مجلدات مفقودة في مسار ملف المخرجات:
+
+```python Code
+# Default behavior - directories are created automatically
+report_task = Task(
+ description='Generate a comprehensive market analysis report',
+ expected_output='A detailed market analysis with charts and insights',
+ agent=analyst_agent,
+ output_file='reports/2025/market_analysis.md', # Creates 'reports/2025/' if it doesn't exist
+ markdown=True
+)
+```
+
+### تعطيل إنشاء المجلدات
+
+إذا كنت تريد منع الإنشاء التلقائي للمجلدات والتأكد من وجود المجلد مسبقًا، عيّن `create_directory=False`:
+
+```python Code
+# Strict mode - directory must already exist
+strict_output_task = Task(
+ description='Save critical data that requires existing infrastructure',
+ expected_output='Data saved to pre-configured location',
+ agent=data_agent,
+ output_file='secure/vault/critical_data.json',
+ create_directory=False # Will raise RuntimeError if 'secure/vault/' doesn't exist
+)
+```
+
+### إعداد YAML
+
+يمكنك أيضًا إعداد هذا السلوك في تعريفات مهام YAML:
+
+```yaml tasks.yaml
+analysis_task:
+ description: >
+ Generate quarterly financial analysis
+ expected_output: >
+ A comprehensive financial report with quarterly insights
+ agent: financial_analyst
+ output_file: reports/quarterly/q4_2024_analysis.pdf
+ create_directory: true # Automatically create 'reports/quarterly/' directory
+
+audit_task:
+ description: >
+ Perform compliance audit and save to existing audit directory
+ expected_output: >
+ A compliance audit report
+ agent: auditor
+ output_file: audit/compliance_report.md
+ create_directory: false # Directory must already exist
+```
+
+### حالات الاستخدام
+
+**إنشاء المجلدات تلقائيًا (`create_directory=True`):**
+
+- بيئات التطوير والنماذج الأولية
+- إنشاء تقارير ديناميكية مع مجلدات قائمة على التاريخ
+- سير عمل آلي حيث قد يختلف هيكل المجلدات
+- تطبيقات متعددة المستأجرين مع مجلدات خاصة بالمستخدمين
+
+**إدارة المجلدات يدويًا (`create_directory=False`):**
+
+- بيئات الإنتاج مع ضوابط نظام ملفات صارمة
+- التطبيقات الحساسة أمنيًا حيث يجب إعداد المجلدات مسبقًا
+- الأنظمة ذات متطلبات أذونات محددة
+- بيئات الامتثال حيث يتم مراقبة إنشاء المجلدات
+
+### معالجة الأخطاء
+
+عندما يكون `create_directory=False` والمجلد غير موجود، سيرفع CrewAI خطأ `RuntimeError`:
+
+```python Code
+try:
+ result = crew.kickoff()
+except RuntimeError as e:
+ # Handle missing directory error
+ print(f"Directory creation failed: {e}")
+ # Create directory manually or use fallback location
+```
+
+شاهد الفيديو أدناه لمعرفة كيفية استخدام المخرجات المنظمة في CrewAI:
+
+
+
+## الخلاصة
+
+المهام هي القوة الدافعة وراء إجراءات الوكلاء في CrewAI.
+من خلال تعريف المهام ونتائجها بشكل صحيح، تمهّد الطريق لعمل وكلاء الذكاء الاصطناعي بفعالية، سواء بشكل مستقل أو كوحدة تعاونية.
+تجهيز المهام بالأدوات المناسبة وفهم عملية التنفيذ واتباع ممارسات التحقق المتينة أمور حاسمة لتعظيم إمكانات CrewAI،
+وضمان إعداد الوكلاء بفعالية لتكليفاتهم وتنفيذ المهام كما هو مقصود.
diff --git a/docs/v1.15.1/ar/concepts/testing.mdx b/docs/v1.15.1/ar/concepts/testing.mdx
new file mode 100644
index 000000000..061dc7fb3
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/testing.mdx
@@ -0,0 +1,49 @@
+---
+title: الاختبار
+description: تعرّف على كيفية اختبار طاقم CrewAI وتقييم أدائه.
+icon: vial
+mode: "wide"
+---
+
+## نظرة عامة
+
+يُعد الاختبار جزءًا حيويًا من عملية التطوير، ومن الضروري التأكد من أن طاقمك يعمل كما هو متوقع. مع CrewAI، يمكنك اختبار طاقمك وتقييم أدائه بسهولة باستخدام إمكانيات الاختبار المدمجة.
+
+### استخدام ميزة الاختبار
+
+أضفنا أمر CLI `crewai test` لتسهيل اختبار طاقمك. سيقوم هذا الأمر بتشغيل طاقمك لعدد محدد من التكرارات وتوفير مقاييس أداء مفصلة. المعاملات هي `n_iterations` و `model`، وهي اختيارية وتكون قيمها الافتراضية 2 و `gpt-4o-mini` على التوالي. حاليًا، المزود الوحيد المتاح هو OpenAI.
+
+```bash
+crewai test
+```
+
+إذا أردت تشغيل المزيد من التكرارات أو استخدام نموذج مختلف، يمكنك تحديد المعاملات هكذا:
+
+```bash
+crewai test --n_iterations 5 --model gpt-4o
+```
+
+أو باستخدام الصيغة المختصرة:
+
+```bash
+crewai test -n 5 -m gpt-4o
+```
+
+عند تشغيل أمر `crewai test`، سيتم تنفيذ الطاقم للعدد المحدد من التكرارات، وستُعرض مقاييس الأداء في نهاية التشغيل.
+
+سيظهر جدول الدرجات في النهاية لعرض أداء الطاقم من حيث المقاييس التالية:
+
+
**درجات المهام (1-10 الأعلى أفضل)**
+
+| المهام/الطاقم/الوكلاء | التشغيل 1 | التشغيل 2 | المجموع المتوسط | الوكلاء | معلومات إضافية |
+|:------------------|:-----:|:-----:|:----------:|:------------------------------:|:---------------------------------|
+| المهمة 1 | 9.0 | 9.5 | **9.2** | Professional Insights | |
+| | | | | Researcher | |
+| المهمة 2 | 9.0 | 10.0 | **9.5** | Company Profile Investigator | |
+| المهمة 3 | 9.0 | 9.0 | **9.0** | Automation Insights | |
+| | | | | Specialist | |
+| المهمة 4 | 9.0 | 9.0 | **9.0** | Final Report Compiler | Automation Insights Specialist |
+| الطاقم | 9.00 | 9.38 | **9.2** | | |
+| زمن التنفيذ (ثانية) | 126 | 145 | **135** | | |
+
+يوضح المثال أعلاه نتائج الاختبار لتشغيلين للطاقم مع مهمتين، مع الدرجة الإجمالية المتوسطة لكل مهمة والطاقم ككل.
diff --git a/docs/v1.15.1/ar/concepts/tools.mdx b/docs/v1.15.1/ar/concepts/tools.mdx
new file mode 100644
index 000000000..2740f723d
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/tools.mdx
@@ -0,0 +1,290 @@
+---
+title: الأدوات
+description: فهم واستخدام الأدوات ضمن إطار عمل CrewAI لتعاون الوكلاء وتنفيذ المهام.
+icon: screwdriver-wrench
+mode: "wide"
+---
+
+## نظرة عامة
+
+تُمكّن أدوات CrewAI الوكلاء بقدرات تتراوح من البحث على الويب وتحليل البيانات إلى التعاون وتفويض المهام بين الزملاء.
+توضح هذه الوثائق كيفية إنشاء هذه الأدوات ودمجها والاستفادة منها ضمن إطار عمل CrewAI، بما في ذلك التركيز على أدوات التعاون.
+
+
+ الأدوات تمنح الوكلاء **دوال قابلة للاستدعاء** لاتخاذ إجراءات. تعمل جنبًا إلى جنب مع [MCP](/ar/mcp/overview) (خوادم أدوات عن بُعد) و[التطبيقات](/ar/concepts/agent-capabilities) (تكاملات المنصة) و[المهارات](/ar/concepts/skills) (خبرة المجال) و[المعرفة](/ar/concepts/knowledge) (حقائق مُسترجعة). راجع نظرة عامة على [قدرات الوكيل](/ar/concepts/agent-capabilities) لفهم متى تستخدم كل نوع.
+
+
+## ما هي الأداة؟
+
+الأداة في CrewAI هي مهارة أو وظيفة يمكن للوكلاء استخدامها لأداء إجراءات مختلفة.
+يشمل ذلك أدوات من [مجموعة أدوات CrewAI](https://github.com/joaomdmoura/crewai-tools) و[أدوات LangChain](https://python.langchain.com/docs/integrations/tools)،
+مما يُمكّن كل شيء من عمليات البحث البسيطة إلى التفاعلات المعقدة والعمل الجماعي الفعال بين الوكلاء.
+
+
+يوفر CrewAI AMP مستودع أدوات شامل مع تكاملات جاهزة لأنظمة الأعمال الشائعة وواجهات API. انشر الوكلاء مع أدوات المؤسسة في دقائق بدلاً من أيام.
+
+يتضمن مستودع أدوات المؤسسة:
+
+- موصلات جاهزة لأنظمة المؤسسة الشائعة
+- واجهة إنشاء أدوات مخصصة
+- إمكانيات التحكم في الإصدارات والمشاركة
+- ميزات الأمان والامتثال
+
+
+## الخصائص الرئيسية للأدوات
+
+- **المنفعة**: مصممة لمهام مثل البحث على الويب وتحليل البيانات وإنشاء المحتوى وتعاون الوكلاء.
+- **التكامل**: تعزز قدرات الوكلاء من خلال دمج الأدوات بسلاسة في سير عملهم.
+- **القابلية للتخصيص**: توفر المرونة لتطوير أدوات مخصصة أو استخدام الأدوات الموجودة، لتلبية الاحتياجات المحددة للوكلاء.
+- **معالجة الأخطاء**: تتضمن آليات معالجة أخطاء قوية لضمان التشغيل السلس.
+- **آلية التخزين المؤقت**: تتميز بتخزين مؤقت ذكي لتحسين الأداء وتقليل العمليات المتكررة.
+- **الدعم غير المتزامن**: تتعامل مع الأدوات المتزامنة وغير المتزامنة، مما يُمكّن العمليات غير الحاجبة.
+
+## استخدام أدوات CrewAI
+
+لتعزيز قدرات وكلائك بأدوات CrewAI، ابدأ بتثبيت حزمة الأدوات الإضافية:
+
+```bash
+pip install 'crewai[tools]'
+```
+
+إليك مثالًا يوضح استخدامها:
+
+```python Code
+import os
+from crewai import Agent, Task, Crew
+# استيراد أدوات crewAI
+from crewai_tools import (
+ DirectoryReadTool,
+ FileReadTool,
+ SerperDevTool,
+ WebsiteSearchTool
+)
+
+# إعداد مفاتيح API
+os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
+os.environ["OPENAI_API_KEY"] = "Your Key"
+
+# إنشاء الأدوات
+docs_tool = DirectoryReadTool(directory='./blog-posts')
+file_tool = FileReadTool()
+search_tool = SerperDevTool()
+web_rag_tool = WebsiteSearchTool()
+
+# إنشاء الوكلاء
+researcher = Agent(
+ role='Market Research Analyst',
+ goal='Provide up-to-date market analysis of the AI industry',
+ backstory='An expert analyst with a keen eye for market trends.',
+ tools=[search_tool, web_rag_tool],
+ verbose=True
+)
+
+writer = Agent(
+ role='Content Writer',
+ goal='Craft engaging blog posts about the AI industry',
+ backstory='A skilled writer with a passion for technology.',
+ tools=[docs_tool, file_tool],
+ verbose=True
+)
+
+# تعريف المهام
+research = Task(
+ description='Research the latest trends in the AI industry and provide a summary.',
+ expected_output='A summary of the top 3 trending developments in the AI industry with a unique perspective on their significance.',
+ agent=researcher
+)
+
+write = Task(
+ description='Write an engaging blog post about the AI industry, based on the research analyst\'s summary. Draw inspiration from the latest blog posts in the directory.',
+ expected_output='A 4-paragraph blog post formatted in markdown with engaging, informative, and accessible content, avoiding complex jargon.',
+ agent=writer,
+ output_file='blog-posts/new_post.md'
+)
+
+# تجميع طاقم مع تفعيل التخطيط
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research, write],
+ verbose=True,
+ planning=True,
+)
+
+# تنفيذ المهام
+crew.kickoff()
+```
+
+## أدوات CrewAI المتاحة
+
+- **معالجة الأخطاء**: جميع الأدوات مبنية بقدرات معالجة الأخطاء، مما يسمح للوكلاء بإدارة الاستثناءات بسلاسة ومتابعة مهامهم.
+- **آلية التخزين المؤقت**: جميع الأدوات تدعم التخزين المؤقت، مما يُمكّن الوكلاء من إعادة استخدام النتائج المحصلة سابقًا بكفاءة، مما يقلل الحمل على الموارد الخارجية ويسرّع وقت التنفيذ. يمكنك أيضًا تحديد تحكم أدق في آلية التخزين المؤقت باستخدام خاصية `cache_function` على الأداة.
+
+إليك قائمة بالأدوات المتاحة وأوصافها:
+
+| الأداة | الوصف |
+| :------------------------------- | :--------------------------------------------------------------------------------------------- |
+| **ApifyActorsTool** | أداة تدمج Apify Actors مع سير عملك لمهام استخراج البيانات من الويب والأتمتة. |
+| **BrowserbaseLoadTool** | أداة للتفاعل مع المتصفحات واستخراج البيانات منها. |
+| **CodeDocsSearchTool** | أداة RAG محسّنة للبحث في وثائق الكود والمستندات التقنية ذات الصلة. |
+| **CodeInterpreterTool** | أداة لتفسير كود Python. |
+| **ComposioTool** | تُمكّن استخدام أدوات Composio. |
+| **CSVSearchTool** | أداة RAG مصممة للبحث في ملفات CSV، مخصصة للتعامل مع البيانات المنظمة. |
+| **DALL-E Tool** | أداة لإنشاء الصور باستخدام DALL-E API. |
+| **DirectorySearchTool** | أداة RAG للبحث في المجلدات، مفيدة للتنقل في أنظمة الملفات. |
+| **DOCXSearchTool** | أداة RAG للبحث في مستندات DOCX، مثالية لمعالجة ملفات Word. |
+| **DirectoryReadTool** | تسهّل قراءة ومعالجة هياكل المجلدات ومحتوياتها. |
+| **ExaSearchTool** | أداة مصممة لإجراء عمليات بحث شاملة عبر مصادر بيانات متنوعة. |
+| **FileReadTool** | تُمكّن قراءة واستخراج البيانات من الملفات، مع دعم تنسيقات ملفات متنوعة. |
+| **FirecrawlSearchTool** | أداة للبحث في صفحات الويب باستخدام Firecrawl وإرجاع النتائج. |
+| **FirecrawlCrawlWebsiteTool** | أداة لزحف صفحات الويب باستخدام Firecrawl. |
+| **FirecrawlScrapeWebsiteTool** | أداة لاستخراج محتوى عناوين URL لصفحات الويب باستخدام Firecrawl. |
+| **GithubSearchTool** | أداة RAG للبحث في مستودعات GitHub، مفيدة لبحث الكود والوثائق. |
+| **SerperDevTool** | أداة متخصصة لأغراض التطوير، مع وظائف محددة قيد التطوير. |
+| **TXTSearchTool** | أداة RAG مركّزة على البحث في ملفات النص (.txt)، مناسبة للبيانات غير المنظمة. |
+| **JSONSearchTool** | أداة RAG مصممة للبحث في ملفات JSON، تخدم التعامل مع البيانات المنظمة. |
+| **LlamaIndexTool** | تُمكّن استخدام أدوات LlamaIndex. |
+| **MDXSearchTool** | أداة RAG مخصصة للبحث في ملفات Markdown (MDX)، مفيدة للوثائق. |
+| **PDFSearchTool** | أداة RAG للبحث في مستندات PDF، مثالية لمعالجة المستندات الممسوحة ضوئيًا. |
+| **PGSearchTool** | أداة RAG محسّنة للبحث في قواعد بيانات PostgreSQL، مناسبة لاستعلامات قواعد البيانات. |
+| **Vision Tool** | أداة لإنشاء الصور باستخدام DALL-E API. |
+| **RagTool** | أداة RAG للأغراض العامة قادرة على التعامل مع مصادر وأنواع بيانات متنوعة. |
+| **ScrapeElementFromWebsiteTool** | تُمكّن استخراج عناصر محددة من المواقع، مفيدة لاستخراج البيانات المستهدف. |
+| **ScrapeWebsiteTool** | تسهّل استخراج المواقع بالكامل، مثالية لجمع البيانات الشامل. |
+| **WebsiteSearchTool** | أداة RAG للبحث في محتوى المواقع، محسّنة لاستخراج بيانات الويب. |
+| **XMLSearchTool** | أداة RAG مصممة للبحث في ملفات XML، مناسبة لتنسيقات البيانات المنظمة. |
+| **YoutubeChannelSearchTool** | أداة RAG للبحث في قنوات YouTube، مفيدة لتحليل محتوى الفيديو. |
+| **YoutubeVideoSearchTool** | أداة RAG للبحث في مقاطع فيديو YouTube، مثالية لاستخراج بيانات الفيديو. |
+
+## إنشاء أدواتك الخاصة
+
+
+ يمكن للمطورين إنشاء `أدوات مخصصة` مصممة خصيصًا لاحتياجات وكلائهم أو
+ استخدام الخيارات الجاهزة.
+
+
+هناك طريقتان رئيسيتان لإنشاء أداة CrewAI:
+
+### الوراثة من `BaseTool`
+
+```python Code
+from crewai.tools import BaseTool
+from pydantic import BaseModel, Field
+
+class MyToolInput(BaseModel):
+ """Input schema for MyCustomTool."""
+ argument: str = Field(..., description="Description of the argument.")
+
+class MyCustomTool(BaseTool):
+ name: str = "Name of my tool"
+ description: str = "What this tool does. It's vital for effective utilization."
+ args_schema: Type[BaseModel] = MyToolInput
+
+ def _run(self, argument: str) -> str:
+ # منطق أداتك هنا
+ return "Tool's result"
+```
+
+## دعم الأدوات غير المتزامنة
+
+يدعم CrewAI الأدوات غير المتزامنة، مما يتيح لك تنفيذ أدوات تجري عمليات غير حاجبة مثل طلبات الشبكة وعمليات الإدخال/الإخراج على الملفات أو عمليات async أخرى بدون حجب مسار التنفيذ الرئيسي.
+
+### إنشاء أدوات غير متزامنة
+
+يمكنك إنشاء أدوات غير متزامنة بطريقتين:
+
+#### 1. استخدام مزيّن `tool` مع دوال Async
+
+```python Code
+from crewai.tools import tool
+
+@tool("fetch_data_async")
+async def fetch_data_async(query: str) -> str:
+ """Asynchronously fetch data based on the query."""
+ # محاكاة عملية غير متزامنة
+ await asyncio.sleep(1)
+ return f"Data retrieved for {query}"
+```
+
+#### 2. تنفيذ طرق Async في فئات الأدوات المخصصة
+
+```python Code
+from crewai.tools import BaseTool
+
+class AsyncCustomTool(BaseTool):
+ name: str = "async_custom_tool"
+ description: str = "An asynchronous custom tool"
+
+ async def _run(self, query: str = "") -> str:
+ """Asynchronously run the tool"""
+ # تنفيذك غير المتزامن هنا
+ await asyncio.sleep(1)
+ return f"Processed {query} asynchronously"
+```
+
+### استخدام الأدوات غير المتزامنة
+
+تعمل الأدوات غير المتزامنة بسلاسة في كل من سير عمل الطاقم القياسي وسير عمل التدفق:
+
+```python Code
+# في طاقم قياسي
+agent = Agent(role="researcher", tools=[async_custom_tool])
+
+# في تدفق
+class MyFlow(Flow):
+ @start()
+ async def begin(self):
+ crew = Crew(agents=[agent])
+ result = await crew.kickoff_async()
+ return result
+```
+
+يتعامل إطار عمل CrewAI تلقائيًا مع تنفيذ الأدوات المتزامنة وغير المتزامنة، لذا لا تحتاج للقلق بشأن كيفية استدعائها بشكل مختلف.
+
+### استخدام مزيّن `tool`
+
+```python Code
+from crewai.tools import tool
+@tool("Name of my tool")
+def my_tool(question: str) -> str:
+ """Clear description for what this tool is useful for, your agent will need this information to use it."""
+ # منطق الدالة هنا
+ return "Result from your custom tool"
+```
+
+### آلية التخزين المؤقت المخصصة
+
+
+ يمكن للأدوات اختياريًا تنفيذ `cache_function` لضبط سلوك
+ التخزين المؤقت. تحدد هذه الدالة متى يتم تخزين النتائج مؤقتًا بناءً على شروط
+ محددة، مما يوفر تحكمًا دقيقًا في منطق التخزين المؤقت.
+
+
+```python Code
+from crewai.tools import tool
+
+@tool
+def multiplication_tool(first_number: int, second_number: int) -> str:
+ """Useful for when you need to multiply two numbers together."""
+ return first_number * second_number
+
+def cache_func(args, result):
+ # في هذه الحالة، نخزّن النتيجة مؤقتًا فقط إذا كانت من مضاعفات 2
+ cache = result % 2 == 0
+ return cache
+
+multiplication_tool.cache_function = cache_func
+
+writer1 = Agent(
+ role="Writer",
+ goal="You write lessons of math for kids.",
+ backstory="You're an expert in writing and you love to teach kids but you know nothing of math.",
+ tools=[multiplication_tool],
+ allow_delegation=False,
+ )
+ #...
+```
+
+## الخلاصة
+
+الأدوات محورية في توسيع قدرات وكلاء CrewAI، مما يمكّنهم من تنفيذ مجموعة واسعة من المهام والتعاون بفعالية.
+عند بناء حلول مع CrewAI، استفد من كل من الأدوات المخصصة والموجودة لتمكين وكلائك وتعزيز نظام الذكاء الاصطناعي البيئي. فكّر في استخدام معالجة الأخطاء وآليات التخزين المؤقت ومرونة معاملات الأدوات لتحسين أداء وقدرات وكلائك.
diff --git a/docs/v1.15.1/ar/concepts/training.mdx b/docs/v1.15.1/ar/concepts/training.mdx
new file mode 100644
index 000000000..019532348
--- /dev/null
+++ b/docs/v1.15.1/ar/concepts/training.mdx
@@ -0,0 +1,197 @@
+---
+title: التدريب
+description: تعرّف على كيفية تدريب وكلاء CrewAI من خلال تقديم ملاحظات مبكرة والحصول على نتائج متسقة.
+icon: dumbbell
+mode: "wide"
+---
+
+## نظرة عامة
+
+تتيح لك ميزة التدريب في CrewAI تدريب وكلاء الذكاء الاصطناعي باستخدام واجهة سطر الأوامر (CLI).
+بتشغيل الأمر `crewai train -n `، يمكنك تحديد عدد التكرارات لعملية التدريب.
+
+أثناء التدريب، يستخدم CrewAI تقنيات لتحسين أداء وكلائك مع التغذية الراجعة البشرية.
+يساعد هذا الوكلاء على تحسين فهمهم واتخاذ القرارات وحل المشكلات.
+
+### تدريب طاقمك باستخدام CLI
+
+لاستخدام ميزة التدريب، اتبع الخطوات التالية:
+
+1. افتح الطرفية أو موجه الأوامر.
+2. انتقل إلى المجلد حيث يقع مشروع CrewAI.
+3. شغّل الأمر التالي:
+
+```shell
+crewai train -n -f
+```
+
+ استبدل `` بعدد تكرارات التدريب المرغوب و`` باسم الملف المناسب المنتهي بـ `.pkl`.
+
+
+
+ إذا حذفت `-f`، فإن المخرجات تُحفظ افتراضيًا في `trained_agents_data.pkl` في مجلد العمل الحالي. يمكنك تمرير مسار مطلق للتحكم في مكان كتابة الملف.
+
+
+### تدريب طاقمك برمجيًا
+
+لتدريب طاقمك برمجيًا، استخدم الخطوات التالية:
+
+1. حدد عدد التكرارات للتدريب.
+2. حدد معاملات الإدخال لعملية التدريب.
+3. نفّذ أمر التدريب داخل كتلة try-except للتعامل مع الأخطاء المحتملة.
+
+```python Code
+n_iterations = 2
+inputs = {"topic": "CrewAI Training"}
+filename = "your_model.pkl"
+
+try:
+ YourCrewName_Crew().crew().train(
+ n_iterations=n_iterations,
+ inputs=inputs,
+ filename=filename
+ )
+
+except Exception as e:
+ raise Exception(f"An error occurred while training the crew: {e}")
+```
+
+## كيف تُستخدم بيانات التدريب من قبل الوكلاء
+
+يستخدم CrewAI مخرجات التدريب بطريقتين: أثناء التدريب لدمج ملاحظاتك البشرية، وبعد التدريب لتوجيه الوكلاء باقتراحات موحدة.
+
+### تدفق بيانات التدريب
+
+```mermaid
+flowchart TD
+ A["Start training CLI: crewai train -n -f or Python: crew.train(...)"] --> B["Setup training mode - task.human_input = true - disable delegation - init training_data.pkl + trained file"]
+
+ subgraph "Iterations"
+ direction LR
+ C["Iteration i initial_output"] --> D["User human_feedback"]
+ D --> E["improved_output"]
+ E --> F["Append to training_data.pkl by agent_id and iteration"]
+ end
+
+ B --> C
+ F --> G{"More iterations?"}
+ G -- "Yes" --> C
+ G -- "No" --> H["Evaluate per agent aggregate iterations"]
+
+ H --> I["Consolidate suggestions[] + quality + final_summary"]
+ I --> J["Save by agent role to trained file (default: trained_agents_data.pkl)"]
+
+ J --> K["Normal (non-training) runs"]
+ K --> L["Auto-load suggestions from trained_agents_data.pkl"]
+ L --> M["Append to prompt for consistent improvements"]
+```
+
+### أثناء تشغيلات التدريب
+
+- في كل تكرار، يسجل النظام لكل وكيل:
+ - `initial_output`: الإجابة الأولى للوكيل
+ - `human_feedback`: ملاحظاتك المضمّنة عند الطلب
+ - `improved_output`: إجابة المتابعة للوكيل بعد الملاحظات
+- تُخزن هذه البيانات في ملف عمل باسم `training_data.pkl` مفهرس بمعرّف الوكيل الداخلي والتكرار.
+- أثناء نشاط التدريب، يُلحق الوكيل تلقائيًا ملاحظاتك البشرية السابقة بأمره لتطبيق تلك التعليمات في المحاولات اللاحقة ضمن جلسة التدريب.
+ التدريب تفاعلي: تُعيّن المهام `human_input = true`، لذا سيتوقف التشغيل في بيئة غير تفاعلية بانتظار مدخلات المستخدم.
+
+### بعد اكتمال التدريب
+
+- عند انتهاء `train(...)`، يقيّم CrewAI بيانات التدريب المجمعة لكل وكيل وينتج نتيجة موحدة تحتوي على:
+ - `suggestions`: تعليمات واضحة وقابلة للتنفيذ مستخلصة من ملاحظاتك والفرق بين المخرجات الأولية/المحسنة
+ - `quality`: درجة من 0-10 تعكس التحسن
+ - `final_summary`: مجموعة خطوات عمل تفصيلية للمهام المستقبلية
+- تُحفظ هذه النتائج الموحدة في اسم الملف الذي تمرره إلى `train(...)` (الافتراضي عبر CLI هو `trained_agents_data.pkl`). تُفهرس الإدخالات بدور الوكيل `role` لتطبيقها عبر الجلسات.
+- أثناء التنفيذ العادي (غير التدريب)، يحمّل كل وكيل تلقائيًا `suggestions` الموحدة ويلحقها بأمر المهمة كتعليمات إلزامية. يمنحك هذا تحسينات متسقة بدون تغيير تعريفات الوكلاء.
+
+### ملخص الملفات
+
+- `training_data.pkl` (مؤقت، لكل جلسة):
+ - الهيكل: `agent_id -> { iteration_number: { initial_output, human_feedback, improved_output } }`
+ - الغرض: التقاط البيانات الخام والملاحظات البشرية أثناء التدريب
+ - الموقع: يُحفظ في مجلد العمل الحالي (CWD)
+- `trained_agents_data.pkl` (أو اسم ملفك المخصص):
+ - الهيكل: `agent_role -> { suggestions: string[], quality: number, final_summary: string }`
+ - الغرض: استمرار التوجيه الموحد للتشغيلات المستقبلية
+ - الموقع: يُكتب في CWD افتراضيًا؛ استخدم `-f` لتعيين مسار مخصص (بما في ذلك المطلق)
+
+## اعتبارات نماذج اللغة الصغيرة
+
+
+ عند استخدام نماذج لغة أصغر (≤7 مليار معامل) لتقييم بيانات التدريب، كن على علم أنها قد تواجه تحديات في إنتاج مخرجات منظمة واتباع التعليمات المعقدة.
+
+
+### قيود النماذج الصغيرة في تقييم التدريب
+
+
+
+ غالبًا ما تواجه النماذج الأصغر صعوبة في إنتاج استجابات JSON صالحة مطلوبة لتقييمات التدريب المنظمة، مما يؤدي إلى أخطاء تحليل وبيانات غير مكتملة.
+
+
+ قد توفر النماذج تحت 7 مليار معامل تقييمات أقل دقة مع عمق استدلال محدود مقارنة بالنماذج الأكبر.
+
+
+ قد لا تُتبع معايير تقييم التدريب المعقدة بالكامل أو تُراعى من قبل النماذج الأصغر.
+
+
+ قد تفتقر التقييمات عبر تكرارات تدريب متعددة إلى الاتساق مع النماذج الأصغر.
+
+
+
+### توصيات للتدريب
+
+
+
+ لجودة تدريب مثالية وتقييمات موثوقة، نوصي بشدة باستخدام نماذج بحد أدنى 7 مليار معامل أو أكبر:
+
+ ```python
+ from crewai import Agent, Crew, Task, LLM
+
+ # الحد الأدنى الموصى به لتقييم التدريب
+ llm = LLM(model="mistral/open-mistral-7b")
+
+ # خيارات أفضل لتقييم تدريب موثوق
+ llm = LLM(model="anthropic/claude-3-sonnet-20240229-v1:0")
+ llm = LLM(model="gpt-4o")
+
+ # استخدم هذا LLM مع وكلائك
+ agent = Agent(
+ role="Training Evaluator",
+ goal="Provide accurate training feedback",
+ llm=llm
+ )
+ ```
+
+
+ توفر النماذج الأكثر قوة ملاحظات أعلى جودة مع استدلال أفضل، مما يؤدي إلى تكرارات تدريب أكثر فعالية.
+
+
+
+ إذا كان يجب عليك استخدام نماذج أصغر لتقييم التدريب، كن على علم بهذه القيود:
+
+ ```python
+ # استخدام نموذج أصغر (توقع بعض القيود)
+ llm = LLM(model="huggingface/microsoft/Phi-3-mini-4k-instruct")
+ ```
+
+
+ بينما يتضمن CrewAI تحسينات للنماذج الصغيرة، توقع نتائج تقييم أقل موثوقية ودقة قد تتطلب تدخلاً بشريًا أكبر أثناء التدريب.
+
+
+
+
+### نقاط مهمة يجب ملاحظتها
+
+- **متطلب العدد الصحيح الموجب:** تأكد من أن عدد التكرارات (`n_iterations`) هو عدد صحيح موجب. سيرمي الكود `ValueError` إذا لم يتحقق هذا الشرط.
+- **متطلب اسم الملف:** تأكد من أن اسم الملف ينتهي بـ `.pkl`. سيرمي الكود `ValueError` إذا لم يتحقق هذا الشرط.
+- **معالجة الأخطاء:** يتعامل الكود مع أخطاء العمليات الفرعية والاستثناءات غير المتوقعة، ويوفر رسائل خطأ للمستخدم.
+- يُطبق التوجيه المدرّب في وقت الأمر؛ لا يعدّل تهيئة وكيل Python/YAML.
+- يحمّل الوكلاء تلقائيًا الاقتراحات المدربة من ملف باسم `trained_agents_data.pkl` الموجود في مجلد العمل الحالي. إذا درّبت إلى اسم ملف مختلف، أعد تسميته إلى `trained_agents_data.pkl` قبل التشغيل، أو اضبط المحمّل في الكود.
+- يمكنك تغيير اسم ملف المخرجات عند استدعاء `crewai train` بـ `-f/--filename`. المسارات المطلقة مدعومة إذا أردت الحفظ خارج CWD.
+
+من المهم ملاحظة أن عملية التدريب قد تستغرق بعض الوقت، اعتمادًا على تعقيد وكلائك وستتطلب أيضًا ملاحظاتك في كل تكرار.
+
+بمجرد اكتمال التدريب، سيكون وكلاؤك مجهزين بقدرات ومعرفة محسّنة، وجاهزين لمعالجة المهام المعقدة وتقديم رؤى أكثر اتساقًا وقيمة.
+
+تذكر تحديث وإعادة تدريب وكلائك بانتظام لضمان بقائهم على اطلاع بأحدث المعلومات والتطورات في المجال.
diff --git a/docs/v1.15.1/ar/enterprise/features/agent-control-plane/monitoring.mdx b/docs/v1.15.1/ar/enterprise/features/agent-control-plane/monitoring.mdx
new file mode 100644
index 000000000..db1b2c712
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/agent-control-plane/monitoring.mdx
@@ -0,0 +1,112 @@
+---
+title: "راقب أتمتاتك"
+description: "راقب صحة الأسطول واستهلاك LLM وسلوك كل أتمتة من تبويب Automations."
+sidebarTitle: "المراقبة"
+icon: "gauge"
+mode: "wide"
+---
+
+
+ **تنقل وثائق ACP (إصدار تجريبي)**
+
+ - [نظرة عامة](/ar/enterprise/features/agent-control-plane/overview)
+ - **المراقبة** *(أنت هنا)*
+ - [القواعد](/ar/enterprise/features/agent-control-plane/rules)
+
+
+## نظرة عامة
+
+تبويب **Automations** هو عرض العمليات للقراءة فقط في [Agent Control Plane](/ar/enterprise/features/agent-control-plane/overview). يجمع بين بطاقتَي مقاييس و sankey تفاعلي وجدولين فرعيين — **Automations** و **Consumption** — يمكنك البحث والتصفية والفرز فيهما.
+
+
+ 
+
+
+تحترم جميع المخططات والجداول مُحدّد **آخر 24 ساعة / الأسبوع الماضي / آخر 30 يوماً** في أعلى اليمين. تقارن قيم الفرق النافذة المختارة بالنافذة السابقة بنفس الطول.
+
+
+ تعرض الصفوف بيانات فقط لعمليات النشر على **crewAI v1.13 أو أحدث** — تظهر عمليات النشر الأقدم في لافتة *"We've detected N other automations that we can't display"* أسفل sankey ولا تساهم بأي مقاييس حتى يتم تحديثها وإعادة نشرها. راجع [نظرة عامة — المتطلبات](/ar/enterprise/features/agent-control-plane/overview#المتطلبات).
+
+
+## لوحة المعلومات
+
+يحتوي رأس الصفحة على بطاقتَي مقاييس و sankey تفاعلي. النقر على أي من البطاقتين يبدّل sankey بين وضعَين:
+
+- **وضع الصحة** — `إجمالي الأتمتات → حِزم الحالة (Critical / Warning / Healthy)`. انقر على حِزمة لتصفية جدول Automations إلى عمليات النشر تلك فقط.
+- **وضع الاستهلاك** — `مزودو النماذج → الأتمتات → التكلفة الإجمالية`. انقر على مزود لتصفية جدول Consumption إلى ذلك المزود.
+
+| البطاقة | ما تعرضه |
+|------|---------------|
+| **Automations** | الأتمتات `active` (والعدد الإجمالي)، إجمالي `errors` في النافذة، `active executions` الحالية (والإجمالي في النافذة)، مع الفرق مقابل الفترة السابقة. |
+| **Consumption** | إجمالي `cost` و `tokens used`، مع فرق التكلفة مقابل الفترة السابقة. |
+
+
+ 
+
+
+## جدول Automations
+
+التبويب الفرعي **Automations** هو تفصيل صحة الأسطول لكل deployment. كل صف هو crew أو flow منشور.
+
+
+ 
+
+
+| العمود | ما يعرضه |
+|--------|---------------|
+| **Automation** | اسم الـ deployment وأي وسوم مُسنَدة إليه (مثل `production`، `financial`). |
+| **Last execution** | الوقت المنقضي منذ آخر تنفيذ. |
+| **Health Status Breakdown** | شريط مكدّس بنسب `Critical` / `Warning` / `Healthy` لعمليات التنفيذ في النافذة. |
+| **Executions with Errors** | إجمالي عمليات التنفيذ الفاشلة في النافذة. |
+| **PII detection applied** | `Yes` إذا كان هناك تكوين PII لكل deployment أو [قاعدة PII](/ar/enterprise/features/agent-control-plane/rules) مطابِقة نشطة. |
+| **Executions** | إجمالي عمليات التنفيذ في النافذة. |
+| **Last updated** | متى أُعيد نشر الـ deployment آخر مرة. |
+| **Crew Version** | إصدار `crewai` الذي يُبلِّغ عنه الـ deployment. يشير أيقونة المعلومات بجانب الإصدارات الأقل من `1.13` إلى صفوف لا يمكنها المساهمة بالمقاييس. |
+
+ابحث بالاسم، صفِّ حسب `Status` (`Healthy` / `Warning` / `Critical`)، وافرز بأي رأس عمود. انقر على اسم الـ deployment لفتح **لوحة الأتمتة**.
+
+## جدول Consumption
+
+التبويب الفرعي **Consumption** هو تفصيل إنفاق LLM واستخدام الرموز لكل deployment.
+
+
+ 
+
+
+| العمود | ما يعرضه |
+|--------|---------------|
+| **Automation** | اسم الـ deployment. |
+| **Last execution** | الوقت المنقضي منذ آخر تنفيذ. |
+| **Tokens used** | صف واحد لكل مزود LLM تستخدمه هذه الأتمتة، مع الفرق مقابل الفترة السابقة. |
+| **Cost** | التكلفة لكل مزود LLM، مع الفرق مقابل الفترة السابقة. |
+| **Total cost** | المجموع عبر جميع المزودين، مع الفرق. |
+| **Executions** | إجمالي عمليات التنفيذ في النافذة. |
+| **Last updated** | متى أُعيد نشر الـ deployment آخر مرة. |
+| **Crew Version** | إصدار `crewai` الذي يُبلِّغ عنه الـ deployment. |
+
+صفِّ حسب **LLM provider** وافرز حسب `Cost` أو `Executions` أو `Last run`.
+
+
+ **عادة ما تعني الخلايا الفارغة (`—` أو `$0.00`) أن الـ deployment أدنى من crewAI v1.13.** في اللقطة أعلاه، تظهر *Automation F* (`1.7.0`) و *Automation I* (`1.12.2`) فارغة في الرموز والتكلفة — لا تزال عمليات التنفيذ تعمل، لكنها لا تُصدِر التليمتري على مستوى المزود الذي يُغذِّي هذا الجدول. حدّث هذه الـ crews وأعد نشرها لبدء جمع بيانات الاستهلاك.
+
+
+## ذو صلة
+
+
+
+ ما هو ACP، المتطلبات، مستويات الخطط، و RBAC.
+
+
+ طبّق قواعد PII Redaction على مستوى المؤسسة عبر العديد من الأتمتات.
+
+
+ تعمّق في تنفيذ واحد لرؤية تفكير الوكيل واستدعاءات الأدوات واستخدام الرموز.
+
+
+ انشر crew على إصدار crewAI يدعم Agent Control Plane.
+
+
+
+
+ تواصل مع فريق الدعم للمساعدة في تفسير المقاييس داخل Agent Control Plane.
+
diff --git a/docs/v1.15.1/ar/enterprise/features/agent-control-plane/overview.mdx b/docs/v1.15.1/ar/enterprise/features/agent-control-plane/overview.mdx
new file mode 100644
index 000000000..6e9ff1925
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/agent-control-plane/overview.mdx
@@ -0,0 +1,82 @@
+---
+title: نظرة عامة على Agent Control Plane
+description: "مركز عمليات موحّد للأتمتات الجارية — صحة الأسطول واستهلاك LLM والسياسات على مستوى المؤسسة في مكان واحد."
+sidebarTitle: نظرة عامة
+icon: "book-open"
+---
+
+
+ **تنقل وثائق ACP (إصدار تجريبي)**
+
+ - **نظرة عامة** *(أنت هنا)*
+ - [المراقبة](/ar/enterprise/features/agent-control-plane/monitoring)
+ - [القواعد](/ar/enterprise/features/agent-control-plane/rules)
+
+
+## نظرة عامة
+
+**Agent Control Plane** (ACP) هو مركز العمليات لكل ما يعمل لديك على CrewAI AMP. إنها شاشة واحدة — مقسّمة إلى تبويبَي **Automations** و **Rules** — تمنح فريقك القدرة على:
+
+- مراقبة **حالة (الصحة)** كل أتمتة حيّة (crew أو flow) بتفصيل `Critical` / `Warning` / `Healthy` وعدد عمليات التنفيذ.
+- تتبع **استهلاك LLM** — الرموز (tokens) والتكلفة — لكل أتمتة ولكل مزود ولكل نموذج، مع الفرق مقابل الفترة السابقة.
+- التعمّق في أي أتمتة منفردة أو مزود نماذج لرؤية المخططات الزمنية وتفصيل البيانات لكل مزود.
+- تطبيق **قواعد (Rules)** على مستوى المؤسسة (اليوم: PII Redaction) عبر العديد من الأتمتات دفعة واحدة بدلاً من تعديل كل deployment على حدة.
+
+
+ 
+
+
+
+ Agent Control Plane مُوسوم حالياً بـ **Beta** في CrewAI Platform.
+
+
+يجيب التبويبان عن سؤالَين مختلفَين:
+
+- **Automations** — *"كيف يتصرف أسطولي الآن، وكم يكلّفني؟"* راجع [المراقبة](/ar/enterprise/features/agent-control-plane/monitoring).
+- **Rules** — *"كيف أفرض سياسة (مثل PII redaction) عبر العديد من عمليات النشر دون إعادة نشر كل واحدة؟"* راجع [القواعد](/ar/enterprise/features/agent-control-plane/rules).
+
+## المتطلبات
+
+
+ يُشترط **crewAI v1.13 أو أحدث** ليتمكن أي أتمتة من تعبئة أي بيانات على هذه الصفحة — تمر بيانات الصحة وعمليات التنفيذ والأخطاء والرموز والتكلفة عبر التليمتري الذي تم تفعيله في `crewai==1.13`. تظهر عمليات النشر الأقدم في لافتة *"We've detected N other automations that we can't display"* ولا تساهم بأي صفوف حتى يتم تحديثها وإعادة نشرها.
+
+
+
+ يُشترط **خطة Enterprise أو Ultra** لإنشاء أو تعديل [القواعد](/ar/enterprise/features/agent-control-plane/rules). يمكن للمؤسسات على الخطط الأدنى فتح تبويب Rules وعرض القواعد الموجودة، ولكن يُعرض المحرر للقراءة فقط مع شارة قفل "Enterprise" والتنبيه *"PII Redaction rules require an Enterprise plan."*. المراقبة (تبويب Automations) متاحة في جميع الخطط حيث يكون هذا الميزة مفعّلة.
+
+
+- يجب أن تكون ميزة **Agent Control Plane** مفعّلة لمؤسستك. إن لم ترها في الشريط الجانبي، اطلب من مالك الحساب تفعيلها.
+- داخل ACP، يحكم [RBAC](/ar/enterprise/features/rbac) الوصول: `read` للعرض في لوحة المعلومات والقواعد، و`manage` لإنشاء وتعديل وتشغيل/إيقاف وحذف القواعد.
+- يمكن ضبط نطاق جميع المخططات والجداول إلى **آخر 24 ساعة** أو **الأسبوع الماضي** أو **آخر 30 يوماً** عبر مُحدّد الوقت في أعلى اليمين. تقارن قيم الفرق (`↑ 8 vs yesterday`, `↓ $20.57 vs yesterday` وغيرها) النافذة المختارة بالنافذة السابقة بنفس الطول.
+
+## ما يمكنك فعله هنا
+
+
+
+ راقب صحة الأسطول وإنفاق LLM عبر بطاقات المقاييس و sankey التفاعلي وجداول لكل أتمتة ولوحات جانبية للتعمق في أي أتمتة أو مزود.
+
+
+ طبّق سياسات PII Redaction على مستوى المؤسسة بنطاق محدد بالأدوات والوسوم. تسري التغييرات في التنفيذ التالي — دون الحاجة لإعادة نشر.
+
+
+
+## ذو صلة
+
+
+
+ تعمّق في تنفيذ واحد لرؤية تفكير الوكيل واستدعاءات الأدوات واستخدام الرموز.
+
+
+ أدِر من يمكنه قراءة Agent Control Plane ومن يمكنه تعديل القواعد.
+
+
+ كتالوج الكيانات وضبط PII لكل deployment التي تستند إليها القواعد.
+
+
+ انشر crew على إصدار crewAI يدعم Agent Control Plane.
+
+
+
+
+ تواصل مع فريق الدعم للمساعدة في تفسير المقاييس أو تصميم القواعد.
+
diff --git a/docs/v1.15.1/ar/enterprise/features/agent-control-plane/rules.mdx b/docs/v1.15.1/ar/enterprise/features/agent-control-plane/rules.mdx
new file mode 100644
index 000000000..144ec1003
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/agent-control-plane/rules.mdx
@@ -0,0 +1,122 @@
+---
+title: "إعداد القواعد"
+description: "طبّق سياسات على مستوى المؤسسة عبر العديد من الأتمتات من مكان واحد."
+sidebarTitle: "القواعد"
+icon: "shield-check"
+mode: "wide"
+---
+
+
+ **تنقل وثائق ACP (إصدار تجريبي)**
+
+ - [نظرة عامة](/ar/enterprise/features/agent-control-plane/overview)
+ - [المراقبة](/ar/enterprise/features/agent-control-plane/monitoring)
+ - **القواعد** *(أنت هنا)*
+
+
+## نظرة عامة
+
+تتيح لك القواعد تطبيق سياسات — اليوم: **PII Redaction** — عبر العديد من الأتمتات دفعة واحدة، بدلاً من ضبط كل deployment على حدة. افتح تبويب **Rules** في [Agent Control Plane](/ar/enterprise/features/agent-control-plane/overview) لإدارتها.
+
+
+ 
+
+
+تعرض كل بطاقة قاعدة الاسم والوصف و**النطاق (scope)** الذي تنطبق عليه القاعدة (الأدوات والوسوم المختارة) وعدد **الأتمتات المُفعَّلة** — عمليات النشر التي تطابق النطاق حالياً. يقوم المُفتاح على اليمين بتشغيل القاعدة أو إيقافها دون حذفها.
+
+## المتطلبات
+
+
+ يُشترط **خطة Enterprise أو Ultra** لإنشاء أو تعديل قواعد PII Redaction. يمكن للمؤسسات على الخطط الأدنى فتح تبويب Rules وعرض القواعد الموجودة، ولكن يُعرض المحرر للقراءة فقط مع شارة قفل "Enterprise" والتنبيه *"PII Redaction rules require an Enterprise plan."* — تواصل مع مالك حسابك أو المبيعات للترقية.
+
+
+- يجب أن تكون ميزة **Agent Control Plane** مفعّلة لمؤسستك. راجع [نظرة عامة — المتطلبات](/ar/enterprise/features/agent-control-plane/overview#المتطلبات).
+- تحتاج إلى صلاحية `manage` ضمن [RBAC](/ar/enterprise/features/rbac) على Agent Control Plane لإنشاء وتعديل وتشغيل/إيقاف وحذف القواعد. صلاحية `read` كافية لعرضها.
+- تُسجَّل جميع تغييرات القواعد بإصدارات للتدقيق.
+
+## أنواع القواعد المتاحة
+
+| النوع | ما تفعله |
+|------|---------------|
+| **PII Redaction** | تطبّق PII redaction على عمليات التنفيذ لكل أتمتة مطابِقة، باستخدام نفس كتالوج الكيانات و recognizers المخصصة الموثَّقة في [PII Redaction للـ Traces](/ar/enterprise/features/pii-trace-redactions). |
+
+سيتم إضافة أنواع قواعد أخرى مع الوقت.
+
+## إنشاء قاعدة
+
+
+
+
+
+
+
+ انقر على **+ Create new** في أعلى يمين تبويب Rules، أو على **View Details** في بطاقة قاعدة موجودة.
+
+
+
+ أعطِ القاعدة اسماً واضحاً (مثل *Mask PII (CC)*) ووصفاً يشرح متى تنطبق. يظهر كلاهما على بطاقة القاعدة وفي مودال Engaged Automations.
+
+
+
+ اليوم **PII Redaction** فقط متاحة.
+
+
+
+ تحدد الشروط الأتمتات التي تنخرط معها القاعدة. كلاهما اختياري ويستخدم دلالات **مساواة المجموعات (set-equality)**:
+
+ - **Tools** — تنخرط فقط الأتمتات التي تتطابق مجموعة أدواتها **تطابقاً تامّاً** مع الأدوات المختارة. اختر من تطبيقات Studio و MCPs والأدوات مفتوحة المصدر وأدوات سجل Tool Repository.
+ - **Automations** — تنخرط فقط الأتمتات التي تتطابق مجموعة وسومها **تطابقاً تامّاً** مع الوسوم المختارة.
+
+ ترك مُحدِّد فارغ يعني "بدون تصفية على هذا البعد". ترك كليهما فارغَين يعني أن القاعدة تنطبق على **كل** أتمتة في المؤسسة.
+
+
+
+ حدّد كل نوع كيان تريد تغطيته واختر **Mask** (يستبدل بتسمية الكيان مثل ``) أو **Redact** (يحذف النص المطابِق بالكامل). راجع [PII Redaction للـ Traces](/ar/enterprise/features/pii-trace-redactions) للاطلاع على كتالوج الكيانات الكامل وكيفية إضافة recognizers مخصصة على مستوى المؤسسة.
+
+
+
+ تنطبق القاعدة على عمليات التنفيذ **المستقبلية** لكل أتمتة مُفعَّلة بمجرد الحفظ. لا حاجة لإعادة النشر.
+
+
+
+## الأتمتات المُفعَّلة
+
+انقر على **Engaged N automations** في أي بطاقة قاعدة لرؤية أي عمليات النشر تطابقها القاعدة حالياً بالضبط، إلى جانب آخر تنفيذ لكل منها.
+
+
+ 
+
+
+هذه هي أسرع طريقة للتحقق من نطاق قاعدة قبل تمكينها — على سبيل المثال، للتأكد من أن قاعدة محدَّدة بنطاق وسم `production` لا تطابق عن طريق الخطأ deployment تجريبي.
+
+## قواعد على مستوى المؤسسة مقابل إعدادات لكل deployment
+
+يمكن ضبط PII Redaction في مكانين:
+
+- **لكل deployment** — ضمن **Settings → PII Protection** على كل deployment على حدة ([الدليل](/ar/enterprise/features/pii-trace-redactions))
+- **على مستوى المؤسسة** — كقاعدة في هذه الصفحة
+
+عندما يتطابق نطاق قاعدة مُفعَّلة على مستوى المؤسسة مع deployment، يُجاوز تكوين الكيانات الخاص بالقاعدة **إعدادات PII المملوكة من قبل الـ deployment** لعمليات تنفيذ ذلك الـ deployment — تصبح القاعدة المصدر الوحيد للحقيقة طالما هي مرتبطة. عطّل القاعدة أو فُكَّ ارتباطها (أو غيِّر نطاقها بحيث لا تتطابق بعد الآن) ويعود الـ deployment إلى إعدادات PII Protection الخاصة به.
+
+فضّل القواعد على مستوى المؤسسة عندما تريد فرض سياسة متسقة عبر العديد من عمليات النشر؛ احتفظ بالضبط لكل deployment للاستثناءات الفردية.
+
+## ذو صلة
+
+
+
+ ما هو ACP، المتطلبات، مستويات الخطط، و RBAC.
+
+
+ راقب الأتمتات واستهلاك LLM عبر أسطولك.
+
+
+ كتالوج الكيانات، recognizers المخصصة، والضبط لكل deployment.
+
+
+ أدِر من يمكنه إنشاء أو تعديل القواعد.
+
+
+
+
+ تواصل مع فريق الدعم للمساعدة في تصميم قواعد لمؤسستك.
+
diff --git a/docs/v1.15.1/ar/enterprise/features/agent-repositories.mdx b/docs/v1.15.1/ar/enterprise/features/agent-repositories.mdx
new file mode 100644
index 000000000..ff8e9e5db
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/agent-repositories.mdx
@@ -0,0 +1,155 @@
+---
+title: 'مستودعات الوكلاء'
+description: 'تعرّف على كيفية استخدام مستودعات الوكلاء لمشاركة وإعادة استخدام وكلائك عبر الفرق والمشاريع'
+icon: 'people-group'
+mode: "wide"
+---
+
+تتيح مستودعات الوكلاء لمستخدمي المؤسسات تخزين ومشاركة وإعادة استخدام تعريفات الوكلاء عبر الفرق والمشاريع. تُمكّن هذه الميزة المؤسسات من الاحتفاظ بمكتبة مركزية من الوكلاء الموحدين، مما يعزز الاتساق ويقلل من ازدواجية الجهود.
+
+
+ 
+
+
+## فوائد مستودعات الوكلاء
+
+- **التوحيد**: الحفاظ على تعريفات وكلاء متسقة عبر مؤسستك
+- **إعادة الاستخدام**: إنشاء وكيل مرة واحدة واستخدامه في أطقم ومشاريع متعددة
+- **الحوكمة**: تطبيق سياسات على مستوى المؤسسة لتهيئات الوكلاء
+- **التعاون**: تمكين الفرق من المشاركة والبناء على عمل بعضهم البعض
+
+## إنشاء واستخدام مستودعات الوكلاء
+
+1. يجب أن يكون لديك حساب في CrewAI، جرّب [الخطة المجانية](https://app.crewai.com).
+2. أنشئ وكلاء بأدوار وأهداف محددة لسير عملك.
+3. هيّئ الأدوات والقدرات لكل مساعد متخصص.
+4. انشر الوكلاء عبر المشاريع من خلال الواجهة المرئية أو تكامل API.
+
+
+ 
+
+
+
+### تحميل الوكلاء من المستودعات
+
+يمكنك تحميل الوكلاء من المستودعات في الكود باستخدام معامل `from_repository` للتشغيل محليًا:
+
+```python
+from crewai import Agent
+
+# إنشاء وكيل بتحميله من مستودع
+# يتم تحميل الوكيل بجميع إعداداته المحددة مسبقًا
+researcher = Agent(
+ from_repository="market-research-agent"
+)
+```
+
+### تجاوز إعدادات المستودع
+
+يمكنك تجاوز إعدادات محددة من المستودع بتوفيرها في التهيئة:
+
+```python
+researcher = Agent(
+ from_repository="market-research-agent",
+ goal="Research the latest trends in AI development", # تجاوز هدف المستودع
+ verbose=True # إضافة إعداد غير موجود في المستودع
+)
+```
+
+### مثال: إنشاء طاقم مع وكلاء المستودع
+
+```python
+from crewai import Crew, Agent, Task
+
+# تحميل الوكلاء من المستودعات
+researcher = Agent(
+ from_repository="market-research-agent"
+)
+
+writer = Agent(
+ from_repository="content-writer-agent"
+)
+
+# إنشاء المهام
+research_task = Task(
+ description="Research the latest trends in AI",
+ agent=researcher
+)
+
+writing_task = Task(
+ description="Write a comprehensive report based on the research",
+ agent=writer
+)
+
+# إنشاء الطاقم
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ verbose=True
+)
+
+# تشغيل الطاقم
+result = crew.kickoff()
+```
+
+### مثال: استخدام `kickoff()` مع وكلاء المستودع
+
+يمكنك أيضًا استخدام وكلاء المستودع مباشرة مع طريقة `kickoff()` للتفاعلات الأبسط:
+
+```python
+from crewai import Agent
+from pydantic import BaseModel
+from typing import List
+
+# تعريف تنسيق مخرجات منظم
+class MarketAnalysis(BaseModel):
+ key_trends: List[str]
+ opportunities: List[str]
+ recommendation: str
+
+# تحميل وكيل من المستودع
+analyst = Agent(
+ from_repository="market-analyst-agent",
+ verbose=True
+)
+
+# الحصول على استجابة حرة
+result = analyst.kickoff("Analyze the AI market in 2025")
+print(result.raw) # الوصول إلى الاستجابة الخام
+
+# الحصول على مخرجات منظمة
+structured_result = analyst.kickoff(
+ "Provide a structured analysis of the AI market in 2025",
+ response_format=MarketAnalysis
+)
+
+# الوصول إلى البيانات المنظمة
+print(f"Key Trends: {structured_result.pydantic.key_trends}")
+print(f"Recommendation: {structured_result.pydantic.recommendation}")
+```
+
+## أفضل الممارسات
+
+1. **اصطلاح التسمية**: استخدم أسماء واضحة ووصفية لوكلاء المستودع
+2. **التوثيق**: أدرج أوصافًا شاملة لكل وكيل
+3. **إدارة الأدوات**: تأكد من توفر الأدوات المشار إليها بواسطة وكلاء المستودع في بيئتك
+4. **التحكم في الوصول**: أدر الصلاحيات لضمان أن أعضاء الفريق المصرّح لهم فقط يمكنهم تعديل وكلاء المستودع
+
+## إدارة المؤسسة
+
+للتبديل بين المؤسسات أو عرض مؤسستك الحالية، استخدم واجهة سطر أوامر CrewAI:
+
+```bash
+# عرض المؤسسة الحالية
+crewai org current
+
+# التبديل إلى مؤسسة مختلفة
+crewai org switch
+
+# عرض جميع المؤسسات المتاحة
+crewai org list
+```
+
+
+عند تحميل الوكلاء من المستودعات، يجب أن تكون مصادقًا ومتحولًا إلى المؤسسة الصحيحة. إذا تلقيت أخطاء، تحقق من حالة المصادقة وإعدادات المؤسسة باستخدام أوامر CLI أعلاه.
+
diff --git a/docs/v1.15.1/ar/enterprise/features/automations.mdx b/docs/v1.15.1/ar/enterprise/features/automations.mdx
new file mode 100644
index 000000000..8f5ed5fa7
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/automations.mdx
@@ -0,0 +1,104 @@
+---
+title: الأتمتة
+description: "إدارة ونشر ومراقبة أطقمك المباشرة (الأتمتة) في مكان واحد."
+icon: "rocket"
+mode: "wide"
+---
+
+## نظرة عامة
+
+الأتمتة هي مركز العمليات المباشرة لأطقمك المنشورة. استخدمها للنشر من GitHub أو ملف ZIP، وإدارة متغيرات البيئة، وإعادة النشر عند الحاجة، ومراقبة حالة كل أتمتة.
+
+
+ 
+
+
+
+## طرق النشر
+
+### النشر من GitHub
+
+استخدم هذا للمشاريع ذات التحكم في الإصدارات والنشر المستمر.
+
+
+
+ انقر على Configure GitHub وصرّح بالوصول.
+
+
+ اختر المستودع والفرع الذي تريد النشر منه.
+
+
+ فعّل النشر التلقائي للالتزامات الجديدة لإرسال التحديثات مع كل دفع.
+
+
+ أضف المتغيرات السرية فرديًا أو استخدم العرض الجماعي لمتغيرات متعددة.
+
+
+ انقر على Deploy لإنشاء الأتمتة المباشرة.
+
+
+
+
+ 
+
+
+### النشر من ZIP
+
+انشر بسرعة بدون Git — ارفع حزمة مضغوطة من مشروعك.
+
+
+
+ اختر أرشيف ZIP من جهازك.
+
+
+ وفّر أي متغيرات أو مفاتيح مطلوبة.
+
+
+ انقر على Deploy لإنشاء الأتمتة المباشرة.
+
+
+
+
+ 
+
+
+## لوحة تحكم الأتمتة
+
+يعرض الجدول جميع الأتمتة المباشرة مع التفاصيل الرئيسية:
+
+- **CREW**: اسم الأتمتة
+- **STATUS**: متصل / فشل / قيد التنفيذ
+- **URL**: نقطة نهاية التشغيل/الحالة
+- **TOKEN**: رمز الأتمتة
+- **ACTIONS**: إعادة النشر، الحذف، والمزيد
+
+استخدم عناصر التحكم في أعلى اليمين للتصفية والبحث:
+
+- البحث بالاسم
+- التصفية حسب الحالة
+- التصفية حسب المصدر (GitHub / Studio / ZIP)
+
+بعد النشر، يمكنك عرض تفاصيل الأتمتة واستخدام القائمة المنسدلة **الخيارات** لـ `الدردشة مع هذا الطاقم`، `تصدير مكون React` و`التصدير كـ MCP`.
+
+
+ 
+
+
+## أفضل الممارسات
+
+- فضّل نشر GitHub للتحكم في الإصدارات وCI/CD
+- استخدم إعادة النشر للتقدم بعد تحديثات الكود أو التهيئة أو اضبطه على النشر التلقائي مع كل دفع
+
+## ذات صلة
+
+
+
+ انشر طاقمًا من GitHub أو ملف ZIP.
+
+
+ شغّل الأتمتة عبر webhooks أو API.
+
+
+ بث الأحداث والتحديثات في الوقت الفعلي إلى أنظمتك.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/features/crew-studio.mdx b/docs/v1.15.1/ar/enterprise/features/crew-studio.mdx
new file mode 100644
index 000000000..ab945ba31
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/crew-studio.mdx
@@ -0,0 +1,88 @@
+---
+title: استوديو الطاقم
+description: "إنشاء أتمتة جديدة بمساعدة الذكاء الاصطناعي ومحرر مرئي واختبار متكامل."
+icon: "pencil"
+mode: "wide"
+---
+
+## نظرة عامة
+
+استوديو الطاقم هو مساحة عمل تفاعلية بمساعدة الذكاء الاصطناعي لإنشاء أتمتة جديدة من الصفر باستخدام اللغة الطبيعية ومحرر سير عمل مرئي.
+
+
+ 
+
+
+## الإنشاء المبني على الأوامر النصية
+
+- صِف الأتمتة التي تريدها؛ يقوم الذكاء الاصطناعي بإنشاء الوكلاء والمهام والأدوات.
+- استخدم الإدخال الصوتي عبر أيقونة الميكروفون إذا فضّلت ذلك.
+- ابدأ من أوامر مدمجة لحالات الاستخدام الشائعة.
+
+
+ 
+
+
+## المحرر المرئي
+
+يعكس اللوح سير العمل كعُقد وأسهم مع ثلاث لوحات داعمة تتيح لك تهيئة سير العمل بسهولة بدون كتابة كود؛ ما يُعرف بـ "**البرمجة الحدسية لوكلاء الذكاء الاصطناعي**".
+
+يمكنك استخدام وظيفة السحب والإفلات لإضافة الوكلاء والمهام والأدوات إلى اللوح أو استخدام قسم الدردشة لبناء الوكلاء. يتشارك كلا النهجين الحالة ويمكن استخدامهما بالتبادل.
+
+- **أفكار AI (يسار)**: الاستدلال المتدفق أثناء تصميم سير العمل
+- **اللوح (المركز)**: الوكلاء والمهام كعقد متصلة
+- **الموارد (يمين)**: مكونات السحب والإفلات (وكلاء، مهام، أدوات)
+
+
+ 
+
+
+## التنفيذ والتصحيح
+
+انتقل إلى عرض التنفيذ لتشغيل سير العمل ومراقبته:
+
+- الجدول الزمني للأحداث
+- سجلات مفصلة (التفاصيل، الرسائل، البيانات الخام)
+- اختبارات محلية قبل النشر
+
+
+ 
+
+
+## النشر والتصدير
+
+- انشر لنشر أتمتة مباشرة
+- حمّل المصدر كملف ZIP للتطوير المحلي أو التخصيص
+
+
+ 
+
+
+بعد النشر، يمكنك عرض تفاصيل الأتمتة واستخدام القائمة المنسدلة **الخيارات** لـ `الدردشة مع هذا الطاقم`، `تصدير مكون React` و`التصدير كـ MCP`.
+
+
+ 
+
+
+## أفضل الممارسات
+
+- كرر بسرعة في الاستوديو؛ انشر فقط عندما يكون مستقرًا
+- اقصر الأدوات على الحد الأدنى من الصلاحيات المطلوبة
+- استخدم التتبعات للتحقق من السلوك والأداء
+
+## ذات صلة
+
+
+
+ تفعيل استوديو الطاقم.
+
+
+ بناء طاقم.
+
+
+ نشر طاقم من GitHub أو ملف ZIP.
+
+
+ تصدير مكون React.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/features/flow-hitl-management.mdx b/docs/v1.15.1/ar/enterprise/features/flow-hitl-management.mdx
new file mode 100644
index 000000000..6b4096abf
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/flow-hitl-management.mdx
@@ -0,0 +1,558 @@
+---
+title: "إدارة HITL للتدفقات"
+description: "مراجعة بشرية بمستوى المؤسسات للتدفقات مع إشعارات البريد الإلكتروني أولاً وقواعد التوجيه وإمكانيات الاستجابة التلقائية"
+icon: "users-gear"
+mode: "wide"
+---
+
+
+تتطلب ميزات إدارة Flow HITL مزيّن `@human_feedback`، المتاح في **CrewAI الإصدار 1.8.0 أو أحدث**. تنطبق هذه الميزات تحديدًا على **التدفقات (Flows)**، وليس الأطقم (Crews).
+
+
+يوفر CrewAI Enterprise نظامًا شاملًا لإدارة الإنسان في الحلقة (HITL) للتدفقات يحوّل سير عمل الذكاء الاصطناعي إلى عمليات تعاونية بين الإنسان والذكاء الاصطناعي. تستخدم المنصة **بنية البريد الإلكتروني أولاً** التي تمكّن أي شخص لديه عنوان بريد إلكتروني من الرد على طلبات المراجعة — بدون الحاجة لحساب على المنصة.
+
+## نظرة عامة
+
+
+
+ يمكن للمستجيبين الرد مباشرة على رسائل الإشعار لتقديم الملاحظات
+
+
+ توجيه الطلبات إلى بريد إلكتروني محدد بناءً على أنماط الطرق أو حالة التدفق
+
+
+ تهيئة استجابات احتياطية تلقائية عندما لا يرد أي شخص في الوقت المحدد
+
+
+
+### الفوائد الرئيسية
+
+- **نموذج ذهني بسيط**: عناوين البريد الإلكتروني عالمية؛ لا حاجة لإدارة مستخدمين أو أدوار المنصة
+- **مستجيبون خارجيون**: يمكن لأي شخص لديه بريد إلكتروني الرد، حتى غير مستخدمي المنصة
+- **تعيين ديناميكي**: سحب بريد المعيّن مباشرة من حالة التدفق (مثل `sales_rep_email`)
+- **تهيئة مخفضة**: إعدادات أقل للتهيئة، وقت أسرع للقيمة
+- **البريد الإلكتروني كقناة رئيسية**: يفضل معظم المستخدمين الرد عبر البريد الإلكتروني بدلاً من تسجيل الدخول إلى لوحة التحكم
+
+## إعداد نقاط المراجعة البشرية في التدفقات
+
+هيّئ نقاط تفتيش المراجعة البشرية داخل تدفقاتك باستخدام مزيّن `@human_feedback`. عندما يصل التنفيذ إلى نقطة مراجعة، يتوقف النظام ويُخطر المعيّن عبر البريد الإلكتروني وينتظر الاستجابة.
+
+```python
+from crewai.flow.flow import Flow, start, listen, or_
+from crewai.flow.human_feedback import human_feedback, HumanFeedbackResult
+
+class ContentApprovalFlow(Flow):
+ @start()
+ def generate_content(self):
+ return "Generated marketing copy for Q1 campaign..."
+
+ @human_feedback(
+ message="Please review this content for brand compliance:",
+ emit=["approved", "rejected", "needs_revision"],
+ )
+ @listen(or_("generate_content", "needs_revision"))
+ def review_content(self):
+ return "Marketing copy for review..."
+
+ @listen("approved")
+ def publish_content(self, result: HumanFeedbackResult):
+ print(f"Publishing approved content. Reviewer notes: {result.feedback}")
+
+ @listen("rejected")
+ def archive_content(self, result: HumanFeedbackResult):
+ print(f"Content rejected. Reason: {result.feedback}")
+```
+
+للحصول على تفاصيل التنفيذ الكاملة، راجع دليل [التغذية الراجعة البشرية في التدفقات](/ar/learn/human-feedback-in-flows).
+
+### معاملات المزيّن
+
+| المعامل | النوع | الوصف |
+|-----------|------|-------------|
+| `message` | `str` | الرسالة المعروضة للمراجع البشري |
+| `emit` | `list[str]` | خيارات الاستجابة الصالحة (تُعرض كأزرار في الواجهة) |
+
+## تهيئة المنصة
+
+الوصول إلى تهيئة HITL من: **النشر** ← **الإعدادات** ← **تهيئة الإنسان في الحلقة**
+
+
+
+
+
+### إشعارات البريد الإلكتروني
+
+تبديل لتفعيل أو تعطيل إشعارات البريد الإلكتروني لطلبات HITL.
+
+| الإعداد | الافتراضي | الوصف |
+|---------|---------|-------------|
+| إشعارات البريد الإلكتروني | مفعّل | إرسال رسائل عند طلب الملاحظات |
+
+
+عند التعطيل، يجب على المستجيبين استخدام واجهة لوحة التحكم أو يجب تهيئة webhooks لأنظمة إشعارات مخصصة.
+
+
+### هدف SLA
+
+تعيين وقت استجابة مستهدف لأغراض التتبع والمقاييس.
+
+| الإعداد | الوصف |
+|---------|-------------|
+| هدف SLA (دقائق) | وقت الاستجابة المستهدف. يُستخدم لمقاييس لوحة التحكم وتتبع SLA |
+
+اتركه فارغًا لتعطيل تتبع SLA.
+
+## إشعارات واستجابات البريد الإلكتروني
+
+يستخدم نظام HITL بنية البريد الإلكتروني أولاً حيث يمكن للمستجيبين الرد مباشرة على رسائل الإشعار.
+
+### كيف تعمل استجابات البريد الإلكتروني
+
+
+
+ عند إنشاء طلب HITL، يُرسل بريد إلكتروني إلى المستجيب المعيّن مع محتوى المراجعة والسياق.
+
+
+ يتضمن البريد عنوان رد خاص مع رمز موقّع للمصادقة.
+
+
+ يرد المستجيب ببساطة على البريد بملاحظاته — بدون حاجة لتسجيل الدخول.
+
+
+ تستقبل المنصة الرد، وتتحقق من الرمز الموقّع، وتطابق بريد المرسل.
+
+
+ تُسجل الملاحظات ويستمر التدفق مع مدخلات الإنسان.
+
+
+
+### تنسيق الاستجابة
+
+يمكن للمستجيبين الرد بـ:
+
+- **خيار emit**: إذا تطابق الرد مع خيار `emit` (مثل "approved")، يُستخدم مباشرة
+- **نص حر**: أي نص استجابة يُمرر إلى التدفق كملاحظات
+- **نص عادي**: يُستخدم السطر الأول من نص الرد كملاحظات
+
+### رسائل التأكيد
+
+بعد معالجة الرد، يستلم المستجيب رسالة تأكيد تشير إلى ما إذا تم إرسال الملاحظات بنجاح أو حدث خطأ.
+
+### أمان رمز البريد
+
+- الرموز موقّعة تشفيريًا للأمان
+- تنتهي صلاحية الرموز بعد 7 أيام
+- يجب أن يتطابق بريد المرسل مع البريد المصرّح به في الرمز
+- تُرسل رسائل تأكيد/خطأ بعد المعالجة
+
+## قواعد التوجيه
+
+توجيه طلبات HITL إلى عناوين بريد إلكتروني محددة بناءً على أنماط الطرق.
+
+
+
+
+
+### هيكل القاعدة
+
+```json
+{
+ "name": "Approvals to Finance",
+ "match": {
+ "method_name": "approve_*"
+ },
+ "assign_to_email": "finance@company.com",
+ "assign_from_input": "manager_email"
+}
+```
+
+### أنماط المطابقة
+
+| النمط | الوصف | مثال المطابقة |
+|---------|-------------|---------------|
+| `approve_*` | حرف بدل (أي أحرف) | `approve_payment`، `approve_vendor` |
+| `review_?` | حرف واحد | `review_a`، `review_1` |
+| `validate_payment` | مطابقة تامة | `validate_payment` فقط |
+
+### أولوية التعيين
+
+1. **تعيين ديناميكي** (`assign_from_input`): إذا تم تهيئته، يسحب البريد من حالة التدفق
+2. **بريد ثابت** (`assign_to_email`): يرجع إلى البريد المهيأ
+3. **منشئ النشر**: إذا لم تتطابق أي قاعدة، يُستخدم بريد منشئ النشر
+
+### مثال التعيين الديناميكي
+
+إذا كانت حالة تدفقك تحتوي على `{"sales_rep_email": "alice@company.com"}`، هيّئ:
+
+```json
+{
+ "name": "Route to Sales Rep",
+ "match": {
+ "method_name": "review_*"
+ },
+ "assign_from_input": "sales_rep_email"
+}
+```
+
+سيتم تعيين الطلب إلى `alice@company.com` تلقائيًا.
+
+
+**حالة استخدام**: اسحب المعيّن من CRM أو قاعدة البيانات أو خطوة تدفق سابقة لتوجيه المراجعات ديناميكيًا إلى الشخص المناسب.
+
+
+## الاستجابة التلقائية
+
+الاستجابة تلقائيًا لطلبات HITL إذا لم يستجب أي شخص خلال المهلة المحددة. يضمن هذا عدم تعليق التدفقات إلى أجل غير مسمى.
+
+### التهيئة
+
+| الإعداد | الوصف |
+|---------|-------------|
+| مفعّل | تبديل لتفعيل الاستجابة التلقائية |
+| المهلة (دقائق) | الوقت المنتظر قبل الاستجابة التلقائية |
+| النتيجة الافتراضية | قيمة الاستجابة (يجب أن تطابق خيار `emit`) |
+
+
+
+
+
+### حالات الاستخدام
+
+- **الامتثال لـ SLA**: ضمان عدم تعليق التدفقات إلى أجل غير مسمى
+- **الموافقة الافتراضية**: الموافقة التلقائية على الطلبات منخفضة المخاطر بعد انتهاء المهلة
+- **التراجع السلس**: المتابعة بافتراضي آمن عندما يكون المراجعون غير متاحين
+
+
+استخدم الاستجابة التلقائية بحذر. فعّلها فقط للمراجعات غير الحرجة حيث تكون الاستجابة الافتراضية مقبولة.
+
+
+## عملية المراجعة
+
+### واجهة لوحة التحكم
+
+توفر واجهة مراجعة HITL تجربة نظيفة ومركّزة للمراجعين:
+
+- **عرض Markdown**: تنسيق غني لمحتوى المراجعة مع تمييز الصيغة
+- **لوحة السياق**: عرض حالة التدفق وتاريخ التنفيذ والمعلومات ذات الصلة
+- **إدخال الملاحظات**: تقديم ملاحظات وتعليقات مفصلة مع قرارك
+- **إجراءات سريعة**: أزرار خيارات emit بنقرة واحدة مع تعليقات اختيارية
+
+
+
+
+
+### طرق الاستجابة
+
+يمكن للمراجعين الاستجابة عبر ثلاث قنوات:
+
+| الطريقة | الوصف |
+|--------|-------------|
+| **الرد عبر البريد** | الرد مباشرة على رسالة الإشعار |
+| **لوحة التحكم** | استخدام واجهة لوحة تحكم المؤسسة |
+| **API/Webhook** | استجابة برمجية عبر API |
+
+### السجل ومسار التدقيق
+
+يتم تتبع كل تفاعل HITL بجدول زمني كامل:
+
+- سجل القرارات (موافقة/رفض/مراجعة)
+- هوية المراجع والطابع الزمني
+- الملاحظات والتعليقات المقدمة
+- طريقة الاستجابة (بريد/لوحة تحكم/API)
+- مقاييس وقت الاستجابة
+
+## التحليلات والمراقبة
+
+تتبع أداء HITL مع تحليلات شاملة.
+
+### لوحة تحكم الأداء
+
+
+
+
+
+
+
+ مراقبة متوسط وميديان أوقات الاستجابة حسب المراجع أو التدفق.
+
+
+ تحليل أنماط حجم المراجعة لتحسين قدرة الفريق.
+
+
+ عرض معدلات الموافقة/الرفض عبر أنواع المراجعة المختلفة.
+
+
+ تتبع نسبة المراجعات المكتملة ضمن أهداف SLA.
+
+
+
+### التدقيق والامتثال
+
+إمكانيات تدقيق جاهزة للمؤسسات للمتطلبات التنظيمية:
+
+- سجل قرارات كامل مع الطوابع الزمنية
+- التحقق من هوية المراجع
+- سجلات تدقيق غير قابلة للتغيير
+- إمكانيات التصدير لتقارير الامتثال
+
+## حالات الاستخدام الشائعة
+
+
+
+ **حالة الاستخدام**: أتمتة استبيانات الأمان الداخلية مع التحقق البشري
+
+ - يولّد الذكاء الاصطناعي الردود على الاستبيانات الأمنية
+ - يراجع فريق الأمن ويتحقق من الدقة عبر البريد الإلكتروني
+ - يتم تجميع الردود المعتمدة في التقديم النهائي
+ - مسار تدقيق كامل للامتثال
+
+
+
+ **حالة الاستخدام**: محتوى تسويقي يتطلب مراجعة قانونية/العلامة التجارية
+
+ - يولّد الذكاء الاصطناعي نصوص تسويقية أو محتوى وسائل التواصل
+ - التوجيه إلى بريد فريق العلامة التجارية لمراجعة النبرة/الأسلوب
+ - النشر التلقائي عند الموافقة
+
+
+
+ **حالة الاستخدام**: تقارير النفقات، شروط العقود، تخصيصات الميزانية
+
+ - يعالج الذكاء الاصطناعي مسبقًا ويصنف الطلبات المالية
+ - التوجيه بناءً على عتبات المبالغ باستخدام التعيين الديناميكي
+ - الحفاظ على مسار تدقيق كامل للامتثال المالي
+
+
+
+ **حالة الاستخدام**: توجيه المراجعات إلى مالكي الحسابات من CRM
+
+ - يجلب التدفق بريد مالك الحساب من CRM
+ - تخزين البريد في حالة التدفق (مثل `account_owner_email`)
+ - استخدام `assign_from_input` للتوجيه إلى الشخص المناسب تلقائيًا
+
+
+
+ **حالة الاستخدام**: التحقق من مخرجات الذكاء الاصطناعي قبل التسليم للعميل
+
+ - يولّد الذكاء الاصطناعي محتوى أو ردود موجهة للعميل
+ - يراجع فريق ضمان الجودة عبر إشعار البريد الإلكتروني
+ - حلقات الملاحظات تحسّن أداء الذكاء الاصطناعي بمرور الوقت
+
+
+
+## واجهة Webhooks API
+
+عندما تتوقف تدفقاتك للملاحظات البشرية، يمكنك تهيئة webhooks لإرسال بيانات الطلب إلى تطبيقك. يتيح هذا:
+
+- بناء واجهات موافقة مخصصة
+- التكامل مع الأدوات الداخلية (Jira، ServiceNow، لوحات تحكم مخصصة)
+- توجيه الموافقات إلى أنظمة طرف ثالث
+- إشعارات تطبيقات الجوال
+- أنظمة القرار المؤتمتة
+
+
+
+
+
+### تهيئة Webhooks
+
+
+
+ اذهب إلى **النشر** ← **الإعدادات** ← **الإنسان في الحلقة**
+
+
+ انقر لتوسيع تهيئة **Webhooks**
+
+
+ أدخل عنوان webhook الخاص بك (يجب أن يكون HTTPS في الإنتاج)
+
+
+ انقر على **حفظ التهيئة** للتفعيل
+
+
+
+يمكنك تهيئة webhooks متعددة. يستقبل كل webhook نشط جميع أحداث HITL.
+
+### أحداث Webhook
+
+ستستقبل نقطة النهاية طلبات HTTP POST لهذه الأحداث:
+
+| نوع الحدث | متى يُطلق |
+|------------|----------------|
+| `new_request` | يتوقف تدفق ويطلب ملاحظات بشرية |
+
+### حمولة Webhook
+
+تستقبل جميع webhooks حمولة JSON بهذا الهيكل:
+
+```json
+{
+ "event": "new_request",
+ "request": {
+ "id": "550e8400-e29b-41d4-a716-446655440000",
+ "flow_id": "flow_abc123",
+ "method_name": "review_article",
+ "message": "Please review this article for publication.",
+ "emit_options": ["approved", "rejected", "request_changes"],
+ "state": {
+ "article_id": 12345,
+ "author": "john@example.com",
+ "category": "technology"
+ },
+ "metadata": {},
+ "created_at": "2026-01-14T12:00:00Z"
+ },
+ "deployment": {
+ "id": 456,
+ "name": "Content Review Flow",
+ "organization_id": 789
+ },
+ "callback_url": "https://api.crewai.com/...",
+ "assigned_to_email": "reviewer@company.com"
+}
+```
+
+### الرد على الطلبات
+
+لإرسال الملاحظات، **أرسل POST إلى `callback_url`** المضمّن في حمولة webhook.
+
+```http
+POST {callback_url}
+Content-Type: application/json
+
+{
+ "feedback": "Approved. Great article!",
+ "source": "my_custom_app"
+}
+```
+
+### الأمان
+
+
+جميع طلبات webhook موقّعة تشفيريًا باستخدام HMAC-SHA256 لضمان الأصالة ومنع التلاعب.
+
+
+#### أمان Webhook
+
+- **توقيعات HMAC-SHA256**: يتضمن كل webhook توقيعًا تشفيريًا
+- **أسرار لكل webhook**: لكل webhook سر توقيع فريد
+- **مشفرة أثناء التخزين**: أسرار التوقيع مشفرة في قاعدة البيانات
+- **التحقق من الطابع الزمني**: يمنع هجمات الإعادة
+
+#### ترويسات التوقيع
+
+يتضمن كل طلب webhook هذه الترويسات:
+
+| الترويسة | الوصف |
+|--------|-------------|
+| `X-Signature` | توقيع HMAC-SHA256: `sha256=` |
+| `X-Timestamp` | الطابع الزمني Unix عند توقيع الطلب |
+
+#### التحقق
+
+تحقق بحساب:
+
+```python
+import hmac
+import hashlib
+
+expected = hmac.new(
+ signing_secret.encode(),
+ f"{timestamp}.{payload}".encode(),
+ hashlib.sha256
+).hexdigest()
+
+if hmac.compare_digest(expected, signature):
+ # توقيع صالح
+```
+
+### معالجة الأخطاء
+
+يجب أن تعيد نقطة نهاية webhook كود حالة 2xx لتأكيد الاستلام:
+
+| استجابتك | سلوكنا |
+|---------------|--------------|
+| 2xx | تم تسليم Webhook بنجاح |
+| 4xx/5xx | مسجل كفشل، بدون إعادة محاولة |
+| مهلة (30 ثانية) | مسجل كفشل، بدون إعادة محاولة |
+
+## الأمان والتحكم في الوصول المبني على الأدوار
+
+### الوصول إلى لوحة التحكم
+
+يُتحكم في وصول HITL على مستوى النشر:
+
+| الصلاحية | القدرة |
+|------------|------------|
+| `manage_human_feedback` | تهيئة إعدادات HITL، عرض جميع الطلبات |
+| `respond_to_human_feedback` | الرد على الطلبات، عرض الطلبات المعيّنة |
+
+### تصريح استجابة البريد الإلكتروني
+
+للردود عبر البريد:
+1. يشفّر رمز الرد البريد المصرّح به
+2. يجب أن يتطابق بريد المرسل مع بريد الرمز
+3. يجب ألا يكون الرمز منتهي الصلاحية (7 أيام افتراضيًا)
+4. يجب أن يكون الطلب لا يزال معلقًا
+
+### مسار التدقيق
+
+يتم تسجيل جميع إجراءات HITL:
+- إنشاء الطلب
+- تغييرات التعيين
+- إرسال الاستجابة (مع المصدر: لوحة تحكم/بريد/API)
+- حالة استئناف التدفق
+
+## استكشاف الأخطاء وإصلاحها
+
+### عدم إرسال الرسائل
+
+1. تحقق من تفعيل "إشعارات البريد الإلكتروني" في التهيئة
+2. تحقق من مطابقة قواعد التوجيه لاسم الطريقة
+3. تحقق من صلاحية بريد المعيّن
+4. تحقق من احتياطي منشئ النشر إذا لم تتطابق أي قواعد توجيه
+
+### عدم معالجة ردود البريد
+
+1. تحقق من عدم انتهاء صلاحية الرمز (7 أيام افتراضيًا)
+2. تحقق من مطابقة بريد المرسل للبريد المعيّن
+3. تأكد من أن الطلب لا يزال معلقًا (لم يتم الرد عليه بعد)
+
+### عدم استئناف التدفق
+
+1. تحقق من حالة الطلب في لوحة التحكم
+2. تحقق من إمكانية الوصول إلى callback URL
+3. تأكد من أن النشر لا يزال قيد التشغيل
+
+## أفضل الممارسات
+
+
+**ابدأ ببساطة**: ابدأ بإشعارات البريد الإلكتروني لمنشئ النشر، ثم أضف قواعد التوجيه مع نضوج سير عملك.
+
+
+1. **استخدم التعيين الديناميكي**: اسحب عناوين بريد المعيّنين من حالة التدفق للتوجيه المرن.
+
+2. **هيّئ الاستجابة التلقائية**: أعد استجابة احتياطية للمراجعات غير الحرجة لمنع تعليق التدفقات.
+
+3. **راقب أوقات الاستجابة**: استخدم التحليلات لتحديد الاختناقات وتحسين عملية المراجعة.
+
+4. **اجعل رسائل المراجعة واضحة**: اكتب رسائل واضحة وقابلة للتنفيذ في مزيّن `@human_feedback`.
+
+5. **اختبر تدفق البريد**: أرسل طلبات اختبار للتحقق من تسليم البريد قبل الانتقال للإنتاج.
+
+## الموارد ذات الصلة
+
+
+
+ دليل التنفيذ لمزيّن `@human_feedback`
+
+
+ دليل خطوة بخطوة لإعداد سير عمل HITL
+
+
+ تهيئة التحكم في الوصول المبني على الأدوار لمؤسستك
+
+
+ إعداد إشعارات الأحداث في الوقت الفعلي
+
+
diff --git a/docs/v1.15.1/ar/enterprise/features/hallucination-guardrail.mdx b/docs/v1.15.1/ar/enterprise/features/hallucination-guardrail.mdx
new file mode 100644
index 000000000..7ab41ef84
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/hallucination-guardrail.mdx
@@ -0,0 +1,251 @@
+---
+title: حاجز الهلوسة
+description: "منع واكتشاف هلوسات الذكاء الاصطناعي في مهام CrewAI"
+icon: "shield-check"
+mode: "wide"
+---
+
+## نظرة عامة
+
+حاجز الهلوسة هو ميزة مؤسسية تتحقق من المحتوى المولّد بالذكاء الاصطناعي لضمان أنه مبني على الحقائق ولا يحتوي على هلوسات. يحلل مخرجات المهام مقابل سياق مرجعي ويوفر ملاحظات مفصلة عند اكتشاف محتوى محتمل الهلوسة.
+
+## ما هي الهلوسات؟
+
+تحدث هلوسات الذكاء الاصطناعي عندما تولّد نماذج اللغة محتوى يبدو معقولاً لكنه غير صحيح من الناحية الواقعية أو غير مدعوم بالسياق المقدم. يساعد حاجز الهلوسة في منع هذه المشكلات من خلال:
+
+- مقارنة المخرجات مع السياق المرجعي
+- تقييم الأمانة للمادة المصدرية
+- توفير ملاحظات مفصلة حول المحتوى المشكل
+- دعم عتبات مخصصة لصرامة التحقق
+
+## الاستخدام الأساسي
+
+### إعداد الحاجز
+
+```python
+from crewai.tasks.hallucination_guardrail import HallucinationGuardrail
+from crewai import LLM
+
+# الاستخدام الأساسي - سيستخدم expected_output للمهمة كسياق
+guardrail = HallucinationGuardrail(
+ llm=LLM(model="gpt-4o-mini")
+)
+
+# مع سياق مرجعي صريح
+context_guardrail = HallucinationGuardrail(
+ context="AI helps with various tasks including analysis and generation.",
+ llm=LLM(model="gpt-4o-mini")
+)
+```
+
+### الإضافة إلى المهام
+
+```python
+from crewai import Task
+
+# إنشاء مهمتك مع الحاجز
+task = Task(
+ description="Write a summary about AI capabilities",
+ expected_output="A factual summary based on the provided context",
+ agent=my_agent,
+ guardrail=guardrail # إضافة الحاجز للتحقق من المخرجات
+)
+```
+
+## التهيئة المتقدمة
+
+### التحقق بعتبة مخصصة
+
+للتحقق الأكثر صرامة، يمكنك تعيين عتبة أمانة مخصصة (مقياس 0-10):
+
+```python
+# حاجز صارم يتطلب درجة أمانة عالية
+strict_guardrail = HallucinationGuardrail(
+ context="Quantum computing uses qubits that exist in superposition states.",
+ llm=LLM(model="gpt-4o-mini"),
+ threshold=8.0 # يتطلب درجة >= 8 لاجتياز التحقق
+)
+```
+
+### تضمين سياق استجابة الأدوات
+
+عندما تستخدم مهمتك أدوات، يمكنك تضمين استجابات الأدوات لتحقق أكثر دقة:
+
+```python
+# حاجز مع سياق استجابة الأدوات
+weather_guardrail = HallucinationGuardrail(
+ context="Current weather information for the requested location",
+ llm=LLM(model="gpt-4o-mini"),
+ tool_response="Weather API returned: Temperature 22°C, Humidity 65%, Clear skies"
+)
+```
+
+## كيف يعمل
+
+### عملية التحقق
+
+1. **تحليل السياق**: يقارن الحاجز مخرجات المهمة مع السياق المرجعي المقدم
+2. **تسجيل الأمانة**: يستخدم مقيّمًا داخليًا لتعيين درجة أمانة (0-10)
+3. **تحديد الحكم**: يحدد ما إذا كان المحتوى أمينًا أو يحتوي على هلوسات
+4. **التحقق من العتبة**: إذا تم تعيين عتبة مخصصة، يتحقق مقابل تلك الدرجة
+5. **توليد الملاحظات**: يوفر أسبابًا مفصلة عند فشل التحقق
+
+### منطق التحقق
+
+- **الوضع الافتراضي**: يستخدم التحقق المبني على الحكم (FAITHFUL مقابل HALLUCINATED)
+- **وضع العتبة**: يتطلب أن تلبي درجة الأمانة العتبة المحددة أو تتجاوزها
+- **معالجة الأخطاء**: يتعامل بسلاسة مع أخطاء التقييم ويوفر ملاحظات إعلامية
+
+## نتائج الحاجز
+
+يعيد الحاجز نتائج منظمة تشير إلى حالة التحقق:
+
+```python
+# مثال على هيكل نتيجة الحاجز
+{
+ "valid": False,
+ "feedback": "Content appears to be hallucinated (score: 4.2/10, verdict: HALLUCINATED). The output contains information not supported by the provided context."
+}
+```
+
+### خصائص النتيجة
+
+- **valid**: قيمة منطقية تشير إلى ما إذا اجتازت المخرجات التحقق
+- **feedback**: شرح مفصل عند فشل التحقق، يتضمن:
+ - درجة الأمانة
+ - تصنيف الحكم
+ - أسباب محددة للفشل
+
+## التكامل مع نظام المهام
+
+### التحقق التلقائي
+
+عند إضافة حاجز إلى مهمة، يتحقق تلقائيًا من المخرجات قبل اعتبار المهمة مكتملة:
+
+```python
+# تدفق التحقق من مخرجات المهمة
+task_output = agent.execute_task(task)
+validation_result = guardrail(task_output)
+
+if validation_result.valid:
+ # المهمة تكتمل بنجاح
+ return task_output
+else:
+ # المهمة تفشل مع ملاحظات التحقق
+ raise ValidationError(validation_result.feedback)
+```
+
+### تتبع الأحداث
+
+يتكامل الحاجز مع نظام أحداث CrewAI لتوفير المراقبة:
+
+- **بدء التحقق**: عند بدء تقييم الحاجز
+- **اكتمال التحقق**: عند انتهاء التقييم بالنتائج
+- **فشل التحقق**: عند حدوث أخطاء تقنية أثناء التقييم
+
+## أفضل الممارسات
+
+### إرشادات السياق
+
+
+
+ أدرج جميع المعلومات الواقعية ذات الصلة التي يجب أن يبني عليها الذكاء الاصطناعي مخرجاته:
+
+ ```python
+ context = """
+ Company XYZ was founded in 2020 and specializes in renewable energy solutions.
+ They have 150 employees and generated $50M revenue in 2023.
+ Their main products include solar panels and wind turbines.
+ """
+ ```
+
+
+
+ أدرج فقط المعلومات المرتبطة مباشرة بالمهمة لتجنب الارتباك:
+
+ ```python
+ # جيد: سياق مركّز
+ context = "The current weather in New York is 18°C with light rain."
+
+ # تجنب: معلومات غير ذات صلة
+ context = "The weather is 18°C. The city has 8 million people. Traffic is heavy."
+ ```
+
+
+
+ تأكد من أن السياق المرجعي يعكس معلومات حالية ودقيقة.
+
+
+
+### اختيار العتبة
+
+
+
+ ابدأ بدون عتبات مخصصة لفهم الأداء الأساسي.
+
+
+
+ - **محتوى عالي الأهمية**: استخدم عتبة 8-10 للدقة القصوى
+ - **محتوى عام**: استخدم عتبة 6-7 للتحقق المتوازن
+ - **محتوى إبداعي**: استخدم عتبة 4-5 أو التحقق الافتراضي المبني على الحكم
+
+
+
+ تتبع نتائج التحقق واضبط العتبات بناءً على الإيجابيات/السلبيات الكاذبة.
+
+
+
+## اعتبارات الأداء
+
+### التأثير على زمن التنفيذ
+
+- **عبء التحقق**: يضيف كل حاجز حوالي 1-3 ثوانٍ لكل مهمة
+- **كفاءة LLM**: اختر نماذج فعالة للتقييم (مثل gpt-4o-mini)
+
+### تحسين التكلفة
+
+- **اختيار النموذج**: استخدم نماذج أصغر وفعالة لتقييم الحاجز
+- **حجم السياق**: اجعل السياق المرجعي موجزًا لكن شاملًا
+- **التخزين المؤقت**: فكّر في تخزين نتائج التحقق مؤقتًا للمحتوى المتكرر
+
+## استكشاف الأخطاء وإصلاحها
+
+
+ **الأسباب المحتملة:**
+ - السياق مقيّد جدًا أو غير مرتبط بمخرجات المهمة
+ - العتبة معينة عالية جدًا لنوع المحتوى
+ - السياق المرجعي يحتوي على معلومات قديمة
+
+ **الحلول:**
+ - مراجعة وتحديث السياق ليتطابق مع متطلبات المهمة
+ - خفض العتبة أو استخدام التحقق الافتراضي المبني على الحكم
+ - التأكد من أن السياق حالي ودقيق
+
+
+
+ **الأسباب المحتملة:**
+ - العتبة عالية جدًا للمهام الإبداعية أو التفسيرية
+ - السياق لا يغطي جميع الجوانب الصالحة للمخرجات
+ - نموذج التقييم محافظ بشكل مفرط
+
+ **الحلول:**
+ - خفض العتبة أو استخدام التحقق الافتراضي
+ - توسيع السياق ليشمل محتوى مقبول أوسع
+ - الاختبار مع نماذج تقييم مختلفة
+
+
+
+ **الأسباب المحتملة:**
+ - مشكلات في الاتصال بالشبكة
+ - نموذج LLM غير متاح أو محدود المعدل
+ - مخرجات مهمة أو سياق غير صالح
+
+ **الحلول:**
+ - التحقق من الاتصال بالشبكة وحالة خدمة LLM
+ - تنفيذ منطق إعادة المحاولة للأعطال المؤقتة
+ - التحقق من تنسيق مخرجات المهمة قبل تقييم الحاجز
+
+
+
+ تواصل مع فريق الدعم للمساعدة في تهيئة حاجز الهلوسة أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/features/marketplace.mdx b/docs/v1.15.1/ar/enterprise/features/marketplace.mdx
new file mode 100644
index 000000000..e8b5b8514
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/marketplace.mdx
@@ -0,0 +1,45 @@
+---
+title: السوق
+description: "اكتشف وثبّت وأدِر الأصول القابلة لإعادة الاستخدام لطواقم مؤسستك."
+icon: "store"
+mode: "wide"
+---
+
+## نظرة عامة
+
+يوفر السوق واجهة منظمة لاكتشاف عمليات التكامل والأدوات الداخلية والأصول القابلة لإعادة الاستخدام التي تسرّع تطوير الطواقم.
+
+
+ 
+
+
+## قابلية الاكتشاف
+
+- تصفح حسب الفئة والقدرة
+- ابحث عن الأصول بالاسم أو الكلمة المفتاحية
+
+## التثبيت والتفعيل
+
+- تثبيت بنقرة واحدة للأصول المعتمدة
+- تفعيل أو تعطيل لكل طاقم حسب الحاجة
+- تهيئة متغيرات البيئة والنطاقات المطلوبة
+
+
+ 
+
+
+يمكنك أيضاً تنزيل القوالب مباشرة من السوق بالنقر على زر `Download` لاستخدامها محلياً أو تعديلها حسب احتياجاتك.
+
+## ذو صلة
+
+
+
+ اربط التطبيقات الخارجية وأدِر الأدوات الداخلية التي يمكن لوكلائك استخدامها.
+
+
+ انشر وثبّت الأدوات لتعزيز قدرات طواقمك.
+
+
+ خزّن وشارك وأعد استخدام تعريفات الوكلاء عبر الفرق والمشاريع.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/features/merged-step-card.mdx b/docs/v1.15.1/ar/enterprise/features/merged-step-card.mdx
new file mode 100644
index 000000000..776edfe10
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/merged-step-card.mdx
@@ -0,0 +1,82 @@
+---
+title: بطاقة واحدة لكل خطوة
+description: "كل خطوة على لوحة Studio هي بطاقة واحدة تجمع بين المهمة والوكيل الذي ينفّذها."
+icon: "layer-group"
+mode: "wide"
+---
+
+## نظرة عامة
+
+على لوحة Studio، تُمثَّل كل خطوة عمل بـ **بطاقة واحدة**. تجمع البطاقة بين عنصرين كانا في السابق في عُقد منفصلة:
+
+- **المهمة** — ماذا تفعل (الاسم، الوصف، المخرجات المتوقعة، وتنسيق الاستجابة).
+- **الوكيل** — من ينفّذها (الوكيل المُعيَّن ونموذجه وأدواته).
+
+الوكيل ليس مشاركًا مستقلاً في سير العمل لديك — بل هو سمة من سمات المهمة: *أي وكيل ينفّذ هذا العمل.* وضع المهمة والوكيل في بطاقة واحدة يجعل هذه العلاقة واضحة، ويحوّل أتمتتك إلى سلسلة واحدة من وحدات العمل من اليسار إلى اليمين يسهل قراءتها بنظرة واحدة.
+
+
+ 
+
+
+## على اللوحة
+
+تعرض كل بطاقة مطوية ما يلي:
+
+- **اسم المهمة ووصفها** في الأعلى.
+- **تذييل يلخّص الوكيل المُعيَّن** — الصورة الرمزية والاسم والنموذج والأدوات.
+
+لا توجد عقدة وكيل منفصلة ولا حافة عمودية من الوكيل ← المهمة. تتصل خطواتك مباشرةً ببعضها البعض بالترتيب الذي تُنفَّذ به.
+
+## في المحرّر
+
+افتح بطاقة لتحريرها. العرض الموسّع هو البطاقة نفسها في حالة مفصّلة — وليس شاشة مختلفة — منظّمة في قسمين موسومين بوضوح.
+
+
+ 
+
+
+### المهمة — ماذا تفعل
+
+مفتوحة افتراضيًا، لأنها ما تحرّره عادةً:
+
+- **الاسم**
+- **الوصف**
+- **المخرجات المتوقعة**
+- **تنسيق الاستجابة** — يظهر هنا لأنه يتحكم تحديدًا في ما تقرأه الخطوات اللاحقة (مثل التوجيه) من هذه الخطوة.
+
+### الوكيل — من ينفّذها
+
+يُعرض الوكيل المُعيَّن كملخّص — **الاسم والنموذج والأدوات في سطر واحد**. ويُحفَظ إعداده الأعمق خلف قسمين قابلين للطي:
+
+- **الدور والهدف والخلفية**
+- **إعدادات الوكيل** — الاستدلال، الحد الأقصى لمحاولات الاستدلال، السماح بالتفويض، الحد الأقصى للتكرارات، وإعدادات LLM.
+
+
+ الإعداد الكامل للوكيل — الدور، الهدف، الخلفية، النموذج، الأدوات، إعدادات LLM، وكامل كتلة إعدادات الوكيل — موجود خلف القسمين القابلين للطي **الدور والهدف والخلفية** و**إعدادات الوكيل**، منظّمًا حسب عدد مرّات تحريرك له.
+
+
+## التبديل مقابل تحرير الوكيل
+
+هناك طريقتان متمايزتان للتعامل مع الوكيل في البطاقة، وكل منهما تؤدي وظيفة مختلفة:
+
+- **التبديل (Swap)** يعيد تعيين *أي* وكيل ينفّذ هذه المهمة. استخدم عنصر التحكم **تبديل** لاختيار وكيل مختلف من هذا المشروع، أو اختيار واحد من مستودع الوكلاء، أو إنشاء وكيل جديد. هذا مقصور على نطاق المهمة.
+- **تحرير** الوكيل — بفتح **الدور والهدف والخلفية** أو **إعدادات الوكيل** — يغيّر الوكيل *نفسه*.
+
+
+ 
+
+
+
+ **الوكلاء قابلون لإعادة الاستخدام ومشتركون.** يمكن للوكيل نفسه تنفيذ أكثر من مهمة عبر مشروعك. تحرير دور الوكيل أو خلفيته أو إعداداته يحدّث ذلك الوكيل **في كل مكان يُستخدم فيه** — وليس فقط في البطاقة التي فتحتها. إذا أردت تطبيق تغيير على خطوة واحدة فقط، فقم **بالتبديل** إلى وكيل مختلف بدلاً من تحرير الوكيل المشترك.
+
+
+## ذات صلة
+
+
+
+ أنشئ الأتمتة بمساعدة الذكاء الاصطناعي ومحرّر مرئي.
+
+
+ إدارة الوكلاء وإعادة استخدامهم عبر أتمتتك.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/features/pii-trace-redactions.mdx b/docs/v1.15.1/ar/enterprise/features/pii-trace-redactions.mdx
new file mode 100644
index 000000000..58f013224
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/pii-trace-redactions.mdx
@@ -0,0 +1,342 @@
+---
+title: إخفاء البيانات الشخصية في التتبعات
+description: "إخفاء البيانات الحساسة تلقائياً من تتبعات تنفيذ الطواقم والتدفقات"
+icon: "lock"
+mode: "wide"
+---
+
+## نظرة عامة
+
+إخفاء البيانات الشخصية (PII Redaction) هو ميزة في CrewAI AMP تكتشف تلقائياً وتُقنّع معلومات التعريف الشخصية (PII) في تتبعات تنفيذ الطواقم والتدفقات. يضمن ذلك عدم كشف البيانات الحساسة مثل أرقام بطاقات الائتمان وأرقام الضمان الاجتماعي وعناوين البريد الإلكتروني والأسماء في تتبعات CrewAI AMP. يمكنك أيضاً إنشاء مُعرّفات مخصصة لحماية البيانات الخاصة بمؤسستك.
+
+
+
+ إخفاء البيانات الشخصية متاح في خطة Enterprise.
+ يجب أن يكون إصدار النشر 1.8.0 أو أعلى.
+
+
+
+
+ 
+
+
+
+## أهمية إخفاء البيانات الشخصية
+
+عند تشغيل وكلاء الذكاء الاصطناعي في بيئة الإنتاج، غالباً ما تمر معلومات حساسة عبر طواقمك:
+
+- بيانات العملاء من تكاملات CRM
+- معلومات مالية من معالجات الدفع
+- تفاصيل شخصية من إرسالات النماذج
+- بيانات الموظفين الداخلية
+
+بدون إخفاء مناسب، تظهر هذه البيانات في التتبعات، مما يجعل الامتثال للوائح مثل GDPR وHIPAA وPCI-DSS أمراً صعباً. يحل إخفاء البيانات الشخصية هذه المشكلة عن طريق إقناع البيانات الحساسة تلقائياً قبل تخزينها في التتبعات.
+
+## كيف يعمل
+
+1. **الاكتشاف** - مسح بيانات أحداث التتبع بحثاً عن أنماط PII المعروفة
+2. **التصنيف** - تحديد نوع البيانات الحساسة (بطاقة ائتمان، SSN، بريد إلكتروني، إلخ.)
+3. **الإقناع/الإخفاء** - استبدال البيانات الحساسة بقيم مُقنّعة بناءً على تهيئتك
+
+```
+Original: "Contact john.doe@company.com or call 555-123-4567"
+Redacted: "Contact or call "
+```
+
+## تفعيل إخفاء البيانات الشخصية
+
+
+ يجب أن تكون على خطة Enterprise وأن يكون إصدار النشر 1.8.0 أو أعلى لاستخدام هذه الميزة.
+
+
+
+
+ في لوحة تحكم CrewAI AMP، اختر طاقمك المنشور وانتقل إلى أحد عمليات النشر/الأتمتة، ثم انتقل إلى **Settings** → **PII Protection**.
+
+
+
+ فعّل **PII Redaction for Traces**. سيؤدي ذلك إلى تفعيل المسح والإخفاء التلقائي لبيانات التتبع.
+
+
+ تحتاج إلى تفعيل إخفاء البيانات الشخصية يدوياً لكل عملية نشر.
+
+
+
+ 
+
+
+
+
+ اختر أنواع البيانات الشخصية التي تريد اكتشافها وإخفاءها. يمكن تفعيل أو تعطيل كل كيان بشكل فردي.
+
+
+ 
+
+
+
+
+ احفظ تهيئتك. سيكون إخفاء البيانات الشخصية نشطاً في جميع عمليات تنفيذ الطاقم اللاحقة، دون الحاجة لإعادة النشر.
+
+
+
+## أنواع الكيانات المدعومة
+
+يدعم CrewAI أنواع كيانات PII التالية، منظمة حسب الفئة.
+
+### الكيانات العالمية
+
+| الكيان | الوصف | مثال |
+|--------|-------|------|
+| `CREDIT_CARD` | أرقام بطاقات الائتمان/الخصم | "4111-1111-1111-1111" |
+| `CRYPTO` | عناوين محافظ العملات الرقمية | "bc1qxy2kgd..." |
+| `DATE_TIME` | التواريخ والأوقات | "January 15, 2024" |
+| `EMAIL_ADDRESS` | عناوين البريد الإلكتروني | "john@example.com" |
+| `IBAN_CODE` | أرقام الحسابات المصرفية الدولية | "DE89 3704 0044 0532 0130 00" |
+| `IP_ADDRESS` | عناوين IPv4 وIPv6 | "192.168.1.1" |
+| `LOCATION` | المواقع الجغرافية | "New York City" |
+| `MEDICAL_LICENSE` | أرقام التراخيص الطبية | "MD12345" |
+| `NRP` | الجنسيات أو المجموعات الدينية أو السياسية | - |
+| `PERSON` | الأسماء الشخصية | "John Doe" |
+| `PHONE_NUMBER` | أرقام الهواتف بتنسيقات مختلفة | "+1 (555) 123-4567" |
+| `URL` | عناوين URL | "https://example.com" |
+
+### كيانات خاصة بالولايات المتحدة
+
+| الكيان | الوصف | مثال |
+|--------|-------|------|
+| `US_BANK_NUMBER` | أرقام الحسابات المصرفية الأمريكية | "1234567890" |
+| `US_DRIVER_LICENSE` | أرقام رخص القيادة الأمريكية | "D1234567" |
+| `US_ITIN` | رقم تعريف دافع الضرائب الفردي | "900-70-0000" |
+| `US_PASSPORT` | أرقام جوازات السفر الأمريكية | "123456789" |
+| `US_SSN` | أرقام الضمان الاجتماعي | "123-45-6789" |
+
+## إجراءات الإخفاء
+
+لكل كيان مُفعّل، يمكنك تهيئة كيفية إخفاء البيانات:
+
+| الإجراء | الوصف | مثال على المخرجات |
+|---------|-------|-------------------|
+| `mask` | الاستبدال بتسمية نوع الكيان | `` |
+| `redact` | إزالة النص بالكامل | *(فارغ)* |
+
+## المُعرّفات المخصصة
+
+بالإضافة إلى الكيانات المدمجة، يمكنك إنشاء **مُعرّفات مخصصة** لاكتشاف أنماط PII الخاصة بمؤسستك.
+
+
+ 
+
+
+### أنواع المُعرّفات
+
+لديك خياران للمُعرّفات المخصصة:
+
+| النوع | الأفضل لـ | مثال على حالة الاستخدام |
+|-------|-----------|------------------------|
+| **قائم على النمط (Regex)** | بيانات منظمة بتنسيقات متوقعة | مبالغ الرواتب، معرّفات الموظفين، رموز المشاريع |
+| **قائمة الحظر (Deny-list)** | مطابقة النصوص بالضبط | أسماء الشركات، الأسماء الرمزية الداخلية، مصطلحات محددة |
+
+### إنشاء مُعرّف مخصص
+
+
+
+ انتقل إلى **Settings** → **Organization** → **Add Recognizer** في إعدادات مؤسستك.
+
+
+
+
+ 
+
+
+ هيّئ الحقول التالية:
+ - **Name**: اسم وصفي للمُعرّف
+ - **Entity Type**: تسمية الكيان التي ستظهر في المخرجات المُخفاة (مثل `EMPLOYEE_ID`، `SALARY`)
+ - **Type**: اختر بين Regex Pattern أو Deny List
+ - **Pattern/Values**: نمط Regex أو قائمة نصوص للمطابقة
+ - **Confidence Threshold**: الحد الأدنى للنتيجة (0.0-1.0) المطلوبة لتفعيل الإخفاء عند المطابقة. القيم الأعلى (مثل 0.8) تقلل الإيجابيات الخاطئة لكن قد تفوّت بعض المطابقات. القيم الأقل (مثل 0.5) تلتقط المزيد من المطابقات لكن قد تُفرط في الإخفاء. القيمة الافتراضية هي 0.8.
+ - **Context Words** (اختياري): كلمات تزيد ثقة الاكتشاف عند وجودها بالقرب
+
+
+
+ احفظ المُعرّف. سيكون متاحاً للتفعيل في عمليات النشر الخاصة بك.
+
+
+
+### فهم أنواع الكيانات
+
+يحدد **Entity Type** كيفية ظهور المحتوى المُطابق في التتبعات المُخفاة:
+
+```
+Entity Type: SALARY
+Pattern: salary:\s*\$\s*\d+
+Input: "Employee salary: $50,000"
+Output: "Employee "
+```
+
+### استخدام كلمات السياق
+
+تحسّن كلمات السياق الدقة عن طريق زيادة الثقة عند ظهور مصطلحات محددة بالقرب من النمط المُطابق:
+
+```
+Context Words: "project", "code", "internal"
+Entity Type: PROJECT_CODE
+Pattern: PRJ-\d{4}
+```
+
+عندما تظهر كلمة "project" أو "code" بالقرب من "PRJ-1234"، يكون لدى المُعرّف ثقة أعلى بأنها مطابقة حقيقية، مما يقلل الإيجابيات الخاطئة.
+
+
+## عرض التتبعات المُخفاة
+
+بمجرد تفعيل إخفاء البيانات الشخصية، ستعرض تتبعاتك قيماً مُخفاة بدلاً من البيانات الحساسة:
+
+```
+Task Output: "Customer placed order #12345.
+Contact email: , phone: .
+Payment processed for card ending in ."
+```
+
+القيم المُخفاة مُعلّمة بوضوح بأقواس زاوية وتسمية نوع الكيان (مثل ``)، مما يسهّل فهم البيانات التي تمت حمايتها مع السماح لك بتصحيح الأخطاء ومراقبة سلوك الطاقم.
+
+
+
+## أفضل الممارسات
+
+### اعتبارات الأداء
+
+
+
+ كل كيان مُفعّل يضيف عبء معالجة. فعّل فقط الكيانات ذات الصلة ببياناتك.
+
+
+
+ للمُعرّفات المخصصة، استخدم أنماطاً محددة لتقليل الإيجابيات الخاطئة وتحسين الأداء. أنماط Regex هي الأفضل عند تحديد أنماط معينة في التتبعات مثل الرواتب ومعرّفات الموظفين ورموز المشاريع وغيرها. مُعرّفات قائمة الحظر هي الأفضل عند تحديد نصوص بعينها في التتبعات مثل أسماء الشركات والأسماء الرمزية الداخلية وغيرها.
+
+
+
+ تحسّن كلمات السياق الدقة عن طريق تفعيل الاكتشاف فقط عندما يتطابق النص المحيط.
+
+
+
+## استكشاف الأخطاء وإصلاحها
+
+
+ **الأسباب المحتملة:**
+ - نوع الكيان غير مُفعّل في التهيئة
+ - النمط لا يتطابق مع تنسيق البيانات
+ - المُعرّف المخصص يحتوي على أخطاء في الصياغة
+
+ **الحلول:**
+ - تحقق من أن الكيان مُفعّل في Settings → Security
+ - اختبر أنماط Regex مع بيانات نموذجية
+ - تحقق من السجلات بحثاً عن أخطاء التهيئة
+
+
+
+ **الأسباب المحتملة:**
+ - أنواع كيانات واسعة جداً مُفعّلة (مثل `DATE_TIME` تلتقط التواريخ في كل مكان)
+ - أنماط المُعرّف المخصص عامة جداً
+
+ **الحلول:**
+ - عطّل الكيانات التي تسبب إيجابيات خاطئة
+ - اجعل الأنماط المخصصة أكثر تحديداً
+ - أضف كلمات سياق لتحسين الدقة
+
+
+
+ **الأسباب المحتملة:**
+ - عدد كبير جداً من الكيانات المُفعّلة
+ - الكيانات القائمة على NLP (مثل `PERSON` و`LOCATION` و`NRP`) مكلفة حسابياً لأنها تستخدم نماذج تعلم الآلة
+
+ **الحلول:**
+ - فعّل فقط الكيانات التي تحتاجها فعلاً
+ - فكّر في استخدام بدائل قائمة على الأنماط حيثما أمكن
+ - راقب أوقات معالجة التتبعات في لوحة التحكم
+
+
+---
+
+## مثال عملي: مطابقة نمط الراتب
+
+يوضح هذا المثال كيفية إنشاء مُعرّف مخصص لاكتشاف وإقناع معلومات الرواتب في تتبعاتك.
+
+### حالة الاستخدام
+
+يعالج طاقمك بيانات موظفين أو بيانات مالية تتضمن معلومات رواتب بتنسيقات مثل:
+- `salary: $50,000`
+- `salary: $125,000.00`
+- `salary:$1,500.50`
+
+تريد إقناع هذه القيم تلقائياً لحماية بيانات التعويضات الحساسة.
+
+### التهيئة
+
+
+ 
+
+
+| الحقل | القيمة |
+|-------|--------|
+| **Name** | `SALARY` |
+| **Entity Type** | `SALARY` |
+| **Type** | Regex Pattern |
+| **Regex Pattern** | `salary:\s*\$\s*\d{1,3}(,\d{3})*(\.\d{2})?` |
+| **Action** | Mask |
+| **Confidence Threshold** | `0.8` |
+| **Context Words** | `salary, compensation, pay, wage, income` |
+
+### تحليل نمط Regex
+
+| مكون النمط | المعنى |
+|------------|--------|
+| `salary:` | يطابق النص الحرفي "salary:" |
+| `\s*` | يطابق صفر أو أكثر من أحرف المسافات البيضاء |
+| `\$` | يطابق علامة الدولار (مُهرّبة) |
+| `\s*` | يطابق صفر أو أكثر من أحرف المسافات البيضاء بعد $ |
+| `\d{1,3}` | يطابق 1-3 أرقام (مثل "1"، "50"، "125") |
+| `(,\d{3})*` | يطابق الآلاف المفصولة بفواصل (مثل ",000"، ",500,000") |
+| `(\.\d{2})?` | يطابق اختيارياً السنتات (مثل ".00"، ".50") |
+
+### أمثلة على النتائج
+
+```
+Original: "Employee record shows salary: $125,000.00 annually"
+Redacted: "Employee record shows annually"
+
+Original: "Base salary:$50,000 with bonus potential"
+Redacted: "Base with bonus potential"
+```
+
+
+ إضافة كلمات سياق مثل "salary" و"compensation" و"pay" و"wage" و"income" تساعد في زيادة ثقة الاكتشاف عند ظهور هذه المصطلحات بالقرب من النمط المُطابق، مما يقلل الإيجابيات الخاطئة.
+
+
+### تفعيل المُعرّف لعمليات النشر
+
+
+ إنشاء مُعرّف مخصص على مستوى المؤسسة لا يفعّله تلقائياً لعمليات النشر. يجب عليك تفعيل كل مُعرّف يدوياً لكل عملية نشر تريد تطبيقه عليها.
+
+
+بعد إنشاء المُعرّف المخصص، فعّله لكل عملية نشر:
+
+
+
+ انتقل إلى عملية النشر/الأتمتة وافتح **Settings** → **PII Protection**.
+
+
+
+ تحت **Mask Recognizers**، سترى المُعرّفات المحددة على مستوى مؤسستك. حدد المربع بجانب المُعرّفات التي تريد تفعيلها.
+
+
+ 
+
+
+
+
+ احفظ تغييراتك. سيكون المُعرّف نشطاً في جميع عمليات التنفيذ اللاحقة لعملية النشر هذه.
+
+
+
+
+ كرر هذه العملية لكل عملية نشر تحتاج فيها إلى المُعرّف المخصص. يمنحك ذلك تحكماً دقيقاً في المُعرّفات النشطة في البيئات المختلفة (مثل بيئة التطوير مقابل بيئة الإنتاج).
+
diff --git a/docs/v1.15.1/ar/enterprise/features/rbac.mdx b/docs/v1.15.1/ar/enterprise/features/rbac.mdx
new file mode 100644
index 000000000..166e905cc
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/rbac.mdx
@@ -0,0 +1,256 @@
+---
+title: "التحكم في الوصول القائم على الأدوار (RBAC)"
+description: "تحكم في الوصول إلى الطواقم والأدوات والبيانات باستخدام الأدوار والنطاقات والصلاحيات الدقيقة."
+icon: "shield"
+mode: "wide"
+---
+
+## نظرة عامة
+
+يتيح RBAC في CrewAI AMP إدارة وصول آمنة وقابلة للتوسع من خلال طبقتين:
+
+1. **صلاحيات الميزات** — تتحكم في ما يمكن لكل دور القيام به عبر المنصة (إدارة، قراءة، أو بدون وصول)
+2. **صلاحيات على مستوى الكيان** — وصول دقيق للأتمتات الفردية ومتغيرات البيئة واتصالات LLM ومستودعات Git
+
+
+
+
+
+## المستخدمون والأدوار
+
+يُعيَّن لكل عضو في مساحة عمل CrewAI دور يحدد صلاحيات الوصول عبر الميزات المختلفة.
+
+يمكنك:
+
+- استخدام الأدوار المحددة مسبقاً (Owner، Member)
+- إنشاء أدوار مخصصة مصممة لصلاحيات محددة
+- تعيين الأدوار في أي وقت عبر لوحة الإعدادات
+
+يمكنك تهيئة المستخدمين والأدوار في Settings → Roles.
+
+
+
+ انتقل إلى Settings → Roles في CrewAI AMP.
+
+
+ استخدم دوراً محدداً مسبقاً (Owner، Member) أو انقر على{" "}
+ Create role لتحديد دور مخصص.
+
+
+ اختر المستخدمين وعيّن لهم الدور. يمكنك تغيير ذلك في أي وقت.
+
+
+
+### الأدوار المحددة مسبقاً
+
+| الدور | الوصف |
+| :---------- | :-------------------------------------------------------------------- |
+| **Owner** | وصول كامل لجميع الميزات والإعدادات. لا يمكن تقييده. |
+| **Member** | وصول للقراءة لمعظم الميزات، وصول إدارة لمتغيرات البيئة واتصالات LLM ومشاريع Studio. لا يمكنه تعديل إعدادات المؤسسة أو الإعدادات الافتراضية. |
+
+### ملخص التهيئة
+
+| المجال | مكان التهيئة | الخيارات |
+| :-------------------- | :--------------------------------- | :-------------------------------------- |
+| المستخدمون والأدوار | Settings → Roles | محددة مسبقاً: Owner، Member؛ أدوار مخصصة |
+| رؤية الأتمتة | Automation → Settings → Visibility | خاص؛ قائمة بيضاء للمستخدمين/الأدوار |
+
+---
+
+## مصفوفة صلاحيات الميزات
+
+لكل دور مستوى صلاحية لكل منطقة ميزة. المستويات الثلاثة هي:
+
+- **إدارة (Manage)** — وصول كامل للقراءة/الكتابة (إنشاء، تعديل، حذف)
+- **قراءة (Read)** — وصول للعرض فقط
+- **بدون وصول (No access)** — الميزة مخفية/غير قابلة للوصول
+
+| الميزة | Owner | Member (افتراضي) | المستويات المتاحة | الوصف |
+| :------------------------ | :------ | :--------------- | :--------------------------------- | :-------------------------------------------------------------- |
+| `usage_dashboards` | Manage | Read | Manage / Read / No access | عرض مقاييس وتحليلات الاستخدام |
+| `crews_dashboards` | Manage | Read | Manage / Read / No access | عرض لوحات النشر والوصول إلى تفاصيل الأتمتة |
+| `invitations` | Manage | Read | Manage / Read / No access | دعوة أعضاء جدد إلى المؤسسة |
+| `training_ui` | Manage | Read | Manage / Read / No access | الوصول إلى واجهات التدريب/الضبط الدقيق |
+| `tools` | Manage | Read | Manage / Read / No access | إنشاء وإدارة الأدوات |
+| `agents` | Manage | Read | Manage / Read / No access | إنشاء وإدارة الوكلاء |
+| `environment_variables` | Manage | Manage | Manage / No access | إنشاء وإدارة متغيرات البيئة |
+| `llm_connections` | Manage | Manage | Manage / No access | تهيئة اتصالات مزودي LLM |
+| `default_settings` | Manage | No access | Manage / No access | تعديل الإعدادات الافتراضية على مستوى المؤسسة |
+| `organization_settings` | Manage | No access | Manage / No access | إدارة الفوترة والخطط وتهيئة المؤسسة |
+| `studio_projects` | Manage | Manage | Manage / No access | إنشاء وتعديل المشاريع في Studio |
+
+
+ عند إنشاء دور مخصص، يمكن ضبط معظم الميزات على **Manage** أو **Read** أو **No access**. ومع ذلك، فإن `environment_variables` و`llm_connections` و`default_settings` و`organization_settings` و`studio_projects` تدعم فقط **Manage** أو **No access** — لا يوجد خيار للقراءة فقط لهذه الميزات.
+
+
+---
+
+## النشر من GitHub أو Zip
+
+من أكثر أسئلة RBAC شيوعاً: _"ما الصلاحيات التي يحتاجها عضو الفريق للنشر؟"_
+
+### النشر من GitHub
+
+لنشر أتمتة من مستودع GitHub، يحتاج المستخدم إلى:
+
+1. **`crews_dashboards`**: على الأقل `Read` — مطلوب للوصول إلى لوحة الأتمتات حيث يتم إنشاء عمليات النشر
+2. **الوصول إلى مستودع Git** (إذا كان RBAC على مستوى الكيان لمستودعات Git مفعلاً): يجب منح دور المستخدم الوصول إلى مستودع Git المحدد عبر صلاحيات مستوى الكيان
+3. **`studio_projects`: `Manage`** — إذا كان يبني الطاقم في Studio قبل النشر
+
+### النشر من Zip
+
+لنشر أتمتة من ملف Zip، يحتاج المستخدم إلى:
+
+1. **`crews_dashboards`**: على الأقل `Read` — مطلوب للوصول إلى لوحة الأتمتات
+2. **تفعيل نشر Zip**: يجب ألا تكون المؤسسة قد عطلت نشر Zip في إعدادات المؤسسة
+
+### مرجع سريع: الحد الأدنى من الصلاحيات للنشر
+
+| الإجراء | صلاحيات الميزات المطلوبة | متطلبات إضافية |
+| :------------------- | :----------------------------------- | :----------------------------------------------- |
+| النشر من GitHub | `crews_dashboards: Read` | وصول كيان مستودع Git (إذا كان Git RBAC مفعلاً) |
+| النشر من Zip | `crews_dashboards: Read` | يجب تفعيل نشر Zip على مستوى المؤسسة |
+| البناء في Studio | `studio_projects: Manage` | — |
+| تهيئة مفاتيح LLM | `llm_connections: Manage` | — |
+| ضبط متغيرات البيئة | `environment_variables: Manage` | وصول مستوى الكيان (إذا كان RBAC الكيان مفعلاً) |
+
+---
+
+## التحكم في الوصول على مستوى الأتمتة (صلاحيات الكيان)
+
+بالإضافة إلى الأدوار على مستوى المؤسسة، يدعم CrewAI صلاحيات دقيقة على مستوى الكيان تقيد الوصول إلى موارد فردية.
+
+### رؤية الأتمتة
+
+تدعم الأتمتات إعدادات رؤية تقيد الوصول حسب المستخدم أو الدور. هذا مفيد لـ:
+
+- الحفاظ على خصوصية الأتمتات الحساسة أو التجريبية
+- إدارة الرؤية عبر الفرق الكبيرة أو المتعاونين الخارجيين
+- اختبار الأتمتات في سياقات معزولة
+
+يمكن تهيئة عمليات النشر كخاصة، مما يعني أن المستخدمين والأدوار المدرجين في القائمة البيضاء فقط سيتمكنون من التفاعل معها.
+
+يمكنك تهيئة التحكم في الوصول على مستوى الأتمتة في Automation → Settings → علامة تبويب Visibility.
+
+
+
+ انتقل إلى Automation → Settings → Visibility.
+
+
+ اختر Private لتقييد الوصول. يحتفظ مالك المؤسسة دائماً
+ بالوصول.
+
+
+ أضف مستخدمين وأدواراً محددة مسموح لهم بالعرض والتشغيل والوصول
+ إلى السجلات/المقاييس/الإعدادات.
+
+
+ احفظ التغييرات، ثم تأكد من أن المستخدمين غير المدرجين في القائمة البيضاء لا يمكنهم عرض أو تشغيل
+ الأتمتة.
+
+
+
+### الرؤية الخاصة: نتائج الوصول
+
+| الإجراء | المالك | مستخدم/دور في القائمة البيضاء | غير مدرج في القائمة البيضاء |
+| :--------------------------- | :---- | :---------------------------- | :-------------------------- |
+| عرض الأتمتة | ✓ | ✓ | ✗ |
+| تشغيل الأتمتة/API | ✓ | ✓ | ✗ |
+| الوصول إلى السجلات/المقاييس/الإعدادات | ✓ | ✓ | ✗ |
+
+
+ يتمتع مالك المؤسسة دائماً بالوصول. في الوضع الخاص، يمكن فقط للمستخدمين
+ والأدوار المدرجين في القائمة البيضاء العرض والتشغيل والوصول إلى السجلات/المقاييس/الإعدادات.
+
+
+
+
+
+
+### أنواع صلاحيات النشر
+
+عند منح وصول على مستوى الكيان لأتمتة محددة، يمكنك تعيين أنواع الصلاحيات التالية:
+
+| الصلاحية | ما تسمح به |
+| :------------------- | :-------------------------------------------------- |
+| `run` | تنفيذ الأتمتة واستخدام API الخاص بها |
+| `traces` | عرض تتبعات التنفيذ والسجلات |
+| `manage_settings` | تعديل، إعادة نشر، استرجاع، أو حذف الأتمتة |
+| `human_in_the_loop` | الرد على طلبات الإنسان في الحلقة (HITL) |
+| `full_access` | جميع ما سبق |
+
+### RBAC على مستوى الكيان لموارد أخرى
+
+عند تفعيل RBAC على مستوى الكيان، يمكن أيضاً التحكم في الوصول لهذه الموارد حسب المستخدم أو الدور:
+
+| المورد | يتم التحكم فيه بواسطة | الوصف |
+| :-------------------- | :--------------------------------- | :------------------------------------------------------------- |
+| متغيرات البيئة | علامة ميزة RBAC الكيان | تقييد أي الأدوار/المستخدمين يمكنهم عرض أو إدارة متغيرات بيئة محددة |
+| اتصالات LLM | علامة ميزة RBAC الكيان | تقييد الوصول لتهيئات مزودي LLM محددة |
+| مستودعات Git | إعداد RBAC لمستودعات Git بالمؤسسة | تقييد أي الأدوار/المستخدمين يمكنهم الوصول لمستودعات متصلة محددة |
+
+---
+
+## أنماط الأدوار الشائعة
+
+بينما يأتي CrewAI بدوري Owner وMember، تستفيد معظم الفرق من إنشاء أدوار مخصصة. إليك الأنماط الشائعة:
+
+### دور المطور
+
+دور لأعضاء الفريق الذين يبنون وينشرون الأتمتات لكن لا يديرون إعدادات المؤسسة.
+
+| الميزة | الصلاحية |
+| :------------------------ | :---------- |
+| `usage_dashboards` | Read |
+| `crews_dashboards` | Manage |
+| `invitations` | Read |
+| `training_ui` | Read |
+| `tools` | Manage |
+| `agents` | Manage |
+| `environment_variables` | Manage |
+| `llm_connections` | Manage |
+| `default_settings` | No access |
+| `organization_settings` | No access |
+| `studio_projects` | Manage |
+
+### دور المشاهد / أصحاب المصلحة
+
+دور للمعنيين غير التقنيين الذين يحتاجون لمراقبة الأتمتات وعرض النتائج.
+
+| الميزة | الصلاحية |
+| :------------------------ | :---------- |
+| `usage_dashboards` | Read |
+| `crews_dashboards` | Read |
+| `invitations` | No access |
+| `training_ui` | Read |
+| `tools` | Read |
+| `agents` | Read |
+| `environment_variables` | No access |
+| `llm_connections` | No access |
+| `default_settings` | No access |
+| `organization_settings` | No access |
+| `studio_projects` | No access |
+
+### دور مسؤول العمليات / المنصة
+
+دور لمشغلي المنصة الذين يديرون إعدادات البنية التحتية لكن قد لا يبنون الوكلاء.
+
+| الميزة | الصلاحية |
+| :------------------------ | :---------- |
+| `usage_dashboards` | Manage |
+| `crews_dashboards` | Manage |
+| `invitations` | Manage |
+| `training_ui` | Read |
+| `tools` | Read |
+| `agents` | Read |
+| `environment_variables` | Manage |
+| `llm_connections` | Manage |
+| `default_settings` | Manage |
+| `organization_settings` | Read |
+| `studio_projects` | No access |
+
+---
+
+
+ تواصل مع فريق الدعم للمساعدة في أسئلة RBAC.
+
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/aws-workload-identity.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/aws-workload-identity.mdx
new file mode 100644
index 000000000..0e7c91d26
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/aws-workload-identity.mdx
@@ -0,0 +1,321 @@
+---
+title: AWS Workload Identity (اتحاد OIDC)
+description: تكوين AWS Secrets Manager عبر Workload Identity للوصول إلى الأسرار بشكل مراعٍ للتدوير وبدون بيانات اعتماد
+sidebarTitle: بـ Workload Identity
+icon: "id-badge"
+---
+
+## نظرة عامة
+
+يُكوِّن هذا الدليل AWS Secrets Manager كمزود أسرار باستخدام **Workload Identity Federation**: تُصدر CrewAI Platform رموز OIDC قصيرة الأمد، وتُبادلها للحصول على بيانات اعتماد AWS عبر STS، وتقرأ أسرارك — دون تخزين أي مفتاح وصول AWS طويل الأمد في أي مكان.
+
+
+**لماذا هذا المسار:** تُحَلّ الأسرار وقت تنفيذ الأتمتة، لذا **تنتشر القيم المُدوَّرة إلى الإطلاق التالي بدون إعادة نشر**. إن كنت تحتاج فقط بيانات اعتماد ثابتة ولا تهتم بانتشار التدوير، راجع الدليل الأبسط [AWS — المفاتيح الثابتة / AssumeRole](/ar/enterprise/features/secrets-manager/aws).
+
+
+### كيف يعمل وقت التشغيل
+
+1. يطلب عامل النشر JWT OIDC طازج من CrewAI Platform.
+2. يستدعي العامل `sts:AssumeRoleWithWebIdentity` على دور IAM الذي ستُعدّه أدناه، مُقدِّماً الـ JWT.
+3. تتحقق AWS STS من الـ JWT مقابل مُصدر OIDC العام لـ CrewAI Platform (لذا يجب أن يكون تنصيب منصتك قابلاً للوصول من AWS)، ثم تُعيد بيانات اعتماد AWS قصيرة الأمد.
+4. يستخدم العامل تلك البيانات لاستدعاء `secretsmanager:GetSecretValue`.
+5. تُحقن القيمة المجلوبة كقيمة لمتغير البيئة لإطلاق الأتمتة ذاك.
+
+تُخزَّن رموز موضوع OIDC مؤقتاً لنحو ساعة لتفادي إعادة الإصدار في كل إطلاق. تُجلب قيم الأسرار طازجة في كل إطلاق بغض النظر عن حالة ذاكرة OIDC المؤقتة، وهذا ما يجعل هذا المسار مراعياً للتدوير.
+
+## المتطلبات المسبقة
+
+
+قبل البدء، تأكد من امتلاكك:
+
+- يجب أن تتضمن صورة حاوية الأتمتة إصدار CrewAI runtime رقم `1.14.5` أو أحدث.
+- حساب AWS لديه إذن إنشاء مزوّدي OIDC وأدوار وسياسات IAM.
+- منطقة AWS التي تعيش (أو ستعيش) فيها أسرارك، مثلاً `us-east-1`.
+- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذني `workload_identity_configs: manage` و `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
+- **UUID مؤسسة CrewAI الخاصة بك.** يمكنك العثور عليه في صفحة إعدادات المؤسسة في CrewAI Platform — تُربط سياسة الثقة في الخطوة 3 دور IAM بهذه المؤسسة تحديداً.
+- **يجب أن يكون تنصيب CrewAI Platform قابلاً للوصول من AWS عبر HTTPS** ليتمكّن AWS STS من جلب وثيقة اكتشاف OIDC و JWKS أثناء التحقق من الرمز. تأكد مع مسؤول المنصة من أن المضيف متاح عبر الإنترنت (أو أن AWS يمكنه الوصول إليه شبكياً عبر VPC peering أو ما يعادله).
+
+
+## الخطوة 1 — العثور على عنوان مُصدر OIDC لـ CrewAI Platform
+
+ينشر تنصيب CrewAI Platform وثيقة اكتشاف OpenID Connect على `https:///.well-known/openid-configuration`. الحقل `issuer` في تلك الوثيقة هو الرابط الذي ستُسجِّله AWS كمزود OIDC موثوق.
+
+افتح الرابط في المتصفح (مع استبدال `` بمضيفك الفعلي، مثلاً `app.crewai.com`):
+
+```
+https:///.well-known/openid-configuration
+```
+
+ينبغي أن ترى JSON يحتوي على:
+
+```json
+{
+ "issuer": "https://",
+ "jwks_uri": "https:///oauth2/jwks",
+ ...
+}
+```
+
+سجّل القيمة الدقيقة لـ `issuer` — ستستخدمها في الخطوة 3.
+
+
+إذا أعاد الرابط 404 أو 503، اتصل بمسؤول المنصة. يتطلب مُصدر OIDC تكوين مفتاح توقيع خاص وقت التنصيب. راجع دليل تنصيب المنصة لتكوين `OIDC_PRIVATE_KEY` و `OIDC_ISSUER`.
+
+
+## الخطوة 2 — تسجيل CrewAI Platform كمزود هوية OIDC في IAM
+
+افتح [وحدة تحكم IAM ← Identity providers](https://console.aws.amazon.com/iam/home#/identity_providers) وانقر على **Add provider**.
+
+- **Provider type:** OpenID Connect.
+- **Provider URL:** قيمة `issuer` من الخطوة 1 (مثلاً `https://app.crewai.com`).
+- **Audience:** `sts.amazonaws.com`
+
+انقر على **Add provider**.
+
+أو عبر CLI:
+
+```bash
+aws iam create-open-id-connect-provider \
+ --url "https://" \
+ --client-id-list "sts.amazonaws.com" \
+ --thumbprint-list "$(echo | openssl s_client -servername -connect :443 2>/dev/null | openssl x509 -fingerprint -noout -sha1 | cut -d= -f2 | tr -d ':')"
+```
+
+انسخ **OpenIDConnectProviderArn** من المخرجات (أو ARN المزود من الوحدة). ستستخدمه في الخطوة 3.
+
+
+لا تتحقق AWS فعلياً من بصمة الإبهام لاستدعاءات STS WebIdentity — فهي دائماً تُعيد جلب JWKS وقت التحقق — لكن واجهة الـ API تتطلب وجود الحقل.
+
+
+{/* SCREENSHOT: AWS IAM "Add identity provider" form filled with the Platform issuer URL and audience sts.amazonaws.com → /images/secrets-manager/aws-wi/01-add-oidc-provider.png */}
+{/* SCREENSHOT: Provider detail page showing the provider's ARN → /images/secrets-manager/aws-wi/02-oidc-provider-arn.png */}
+
+## الخطوة 3 — إنشاء دور IAM
+
+احفظ كـ `trust-policy.json`، مع استبدال `` و `` (مضيف المُصدر **بدون** `https://` أو `http://`، مثلاً `app.crewai.com`) و `` (من المتطلبات المسبقة):
+
+```json
+{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Principal": {
+ "Federated": "arn:aws:iam:::oidc-provider/"
+ },
+ "Action": "sts:AssumeRoleWithWebIdentity",
+ "Condition": {
+ "StringEquals": {
+ ":aud": "sts.amazonaws.com",
+ ":sub": "organization:"
+ }
+ }
+ }
+ ]
+}
+```
+
+أنشئ الدور:
+
+```bash
+aws iam create-role \
+ --role-name crewai-secrets-reader \
+ --assume-role-policy-document file://trust-policy.json
+```
+
+انسخ **Role Arn** من المخرجات — هذا هو `aws_role_arn` الخاص بك. ستلصقه في CrewAI Platform في الخطوة 6.
+
+
+يحدّد الشرطان نطاق الثقة بدقة: يقيّد `aud` افتراض الدور إلى الرموز ذات جمهور AWS STS، ويقصر `sub` الاتحاد على مؤسسة CrewAI محددة — تُقبل فقط الرموز المُصدَرة لأتمتات تلك المؤسسة. تُعيّن CrewAI Platform كلا الادّعاءين دائماً على رموز AWS workload identity.
+
+
+{/* SCREENSHOT: IAM "Create role" with Web Identity trust type, federated provider selector pointing at the CrewAI Platform OIDC provider → /images/secrets-manager/aws-wi/03-create-role-trust.png */}
+
+## الخطوة 4 — إنشاء وإرفاق سياسة IAM لوصول Secrets Manager + KMS
+
+احفظ كـ `secrets-policy.json`، مع استبدال العناصر النائبة بمعرّف حسابك ومنطقتك وبادئة اسم السر و ARN(s) مفاتيح KMS التي تُشفّر تلك الأسرار:
+
+```json
+{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Sid": "SecretsManagerListForUI",
+ "Effect": "Allow",
+ "Action": "secretsmanager:ListSecrets",
+ "Resource": "*"
+ },
+ {
+ "Sid": "SecretsManagerRead",
+ "Effect": "Allow",
+ "Action": [
+ "secretsmanager:GetSecretValue"
+ ],
+ "Resource": "arn:aws:secretsmanager:::secret:-*"
+ },
+ {
+ "Sid": "KMSDecrypt",
+ "Effect": "Allow",
+ "Action": [
+ "kms:Decrypt"
+ ],
+ "Resource": "arn:aws:kms:::key/"
+ }
+ ]
+}
+```
+
+تُشغّل `SecretsManagerListForUI` ميزة **الاقتراح التلقائي لاسم السر** في نموذج متغيرات البيئة وزر **Test Connection** على بيانات الاعتماد. يقبل `secretsmanager:ListSecrets` فقط `Resource: "*"` — فهو محصور على مستوى الحساب في طبقة IAM.
+
+أرفق السياسة بالدور إما عبر CLI (سياسة مضمنة، أبسط) أو واجهة الوحدة؛ للبيئات التي تعيد استخدام نفس الأذونات عبر أدوار متعددة، استخدم علامة التبويب **Managed policy** لسياسة مُسمّاة قابلة لإعادة الاستخدام.
+
+
+
+ ```bash
+ aws iam put-role-policy \
+ --role-name crewai-secrets-reader \
+ --policy-name SecretsManagerRead \
+ --policy-document file://secrets-policy.json
+ ```
+
+ يُرفق هذا السياسة **مضمنةً** بالدور. السياسات المضمنة مرتبطة بالدور ولا يمكن إعادة استخدامها على أدوار أخرى.
+
+
+
+ ```bash
+ POLICY_ARN=$(aws iam create-policy \
+ --policy-name CrewAISecretsReader \
+ --policy-document file://secrets-policy.json \
+ --query 'Policy.Arn' --output text)
+
+ aws iam attach-role-policy \
+ --role-name crewai-secrets-reader \
+ --policy-arn "$POLICY_ARN"
+ ```
+
+ السياسة المُدارة هي مورد IAM مستقل يمكنك إرفاقه بأدوار متعددة.
+
+
+
+ 1. افتح [وحدة تحكم IAM ← Roles](https://console.aws.amazon.com/iam/home#/roles) واختر **crewai-secrets-reader**.
+ 2. في علامة التبويب **Permissions**، انقر على **Add permissions** ← **Create inline policy**.
+ 3. بدّل إلى محرر **JSON** والصق محتوى `secrets-policy.json`.
+ 4. انقر على **Next**، أعطِ السياسة اسماً (مثلاً `SecretsManagerRead`)، وانقر على **Create policy**.
+
+ لإنشاء سياسة مُدارة قابلة لإعادة الاستخدام بدلاً من ذلك، استخدم **IAM ← Policies ← Create policy** ثم أرفقها بالدور من علامة التبويب **Permissions** الخاصة بالدور.
+
+ {/* SCREENSHOT: IAM Role detail → Permissions → Create inline policy with JSON editor → /images/secrets-manager/aws-wi/03b-attach-inline-policy.png */}
+
+
+
+## الخطوة 5 — إنشاء سر واحد على الأقل في AWS
+
+إذا لم يكن لديك سر للاختبار، أنشئ واحداً الآن:
+
+```bash
+aws secretsmanager create-secret \
+ --region \
+ --name crewai-test-keyword \
+ --secret-string "hello from aws"
+```
+
+أو عبر [وحدة تحكم AWS Secrets Manager](https://console.aws.amazon.com/secretsmanager/) ← **Store a new secret**.
+
+{/* SCREENSHOT: AWS Secrets Manager "Store a new secret" page with a sample value → /images/secrets-manager/aws-wi/04-create-secret.png */}
+
+## الخطوة 6 — إضافة تكوين Workload Identity في CrewAI Platform
+
+في CrewAI Platform، انتقل إلى **Settings** ← **Workload Identity** وانقر على **Add Workload Identity Config**.
+
+{/* SCREENSHOT: Sidebar highlighting Settings → Workload Identity → /images/secrets-manager/aws-wi/05-amp-settings-wi-nav.png */}
+{/* SCREENSHOT: Empty state of Workload Identity page with "Add Workload Identity Config" button → /images/secrets-manager/aws-wi/06-amp-wi-empty-state.png */}
+
+املأ النموذج:
+
+- **Name:** اسم وصفي، مثلاً `aws-prod`.
+- **Cloud Provider:** `AWS`.
+- **AWS Role ARN:** **Role Arn** من الخطوة 3.
+- **AWS Region:** المنطقة التي تعيش فيها أسرارك، مثلاً `us-east-1`.
+- (اختياري) حدّد **Set as default for AWS** إذا كنت ترغب في أن يكون تكوين WI هذا هو الافتراضي المُحدَّد عند إنشاء بيانات اعتماد سر مدعومة بـ AWS.
+
+انقر على **Create**.
+
+{/* SCREENSHOT: "Add Workload Identity Config" form with AWS, role ARN, and region filled in → /images/secrets-manager/aws-wi/07-amp-add-wi-config-aws.png */}
+{/* SCREENSHOT: Workload Identity list showing the new AWS row with "(default)" badge if applicable → /images/secrets-manager/aws-wi/08-amp-wi-list-with-aws.png */}
+
+## الخطوة 7 — إضافة بيانات اعتماد مزود أسرار مرتبطة بتكوين WI
+
+انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
+
+املأ النموذج:
+
+- **Name:** اسم وصفي، مثلاً `aws-prod-wi`.
+- **Provider:** `AWS Secrets Manager`.
+- **Authentication Method:** `Workload Identity` (بدلاً من المفاتيح الثابتة / AssumeRole).
+- **Workload Identity Configuration:** اختر التكوين الذي أنشأته في الخطوة 6 (مثلاً `aws-prod`).
+- (اختياري) حدّد **Set as default credential for this provider**.
+
+سيطلب النموذج فقط **AWS Region** ضمن Workload Identity — حقول بيانات الاعتماد الثابتة (Access Key ID و Secret Access Key و Role ARN و External ID) مخفية عمداً لأنها لا تنطبق على هذا المسار؛ يأتي ARN الدور من تكوين WI المرتبط.
+
+انقر على **Create**.
+
+{/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + Workload Identity + WI config dropdown selected → /images/secrets-manager/aws-wi/09-amp-add-credential-aws-wi.png */}
+
+## الخطوة 8 — اختبار الاتصال
+
+بعد حفظ بيانات الاعتماد، انقر على **Test Connection**. لبيانات اعتماد workload-identity، يتحقق هذا من مصافحة OIDC: تُصدر CrewAI Platform JWT، وتبادله مع AWS STS عبر `sts:AssumeRoleWithWebIdentity`، وتؤكد أن بيانات الاعتماد الناتجة يمكنها استدعاء `sts:GetCallerIdentity` مقابل الدور المُفترَض. نتيجة خضراء تعني أن ارتباط الاتحاد سليم.
+
+نجاح Test Connection يُثبت أن سياسة الثقة وتسجيل مزود OIDC وشرط الجمهور موصولة جميعها بشكل صحيح. لا يُثبت ذلك أن IAM لكل سر صحيح — يُمارَس `secretsmanager:GetSecretValue` على ARN سر محدد بشكل منفصل عندما يُحَلّ متغير بيئة عند الإطلاق. راجع [استكشاف الأخطاء](#troubleshooting) لأنماط فشل المصافحة.
+
+## الخطوة 9 — الإشارة إلى السر في متغير بيئة
+
+الآن أَشِر إلى السر على أتمتة، تماماً كما تفعل مع أي متغير بيئة مدعوم بمدير أسرار. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) لحقول النموذج والسلوك.
+
+الفرق الوحيد بين متغيرات البيئة المدعومة بـ WI والمدعومة بمفاتيح ثابتة هو **متى** يُقرأ السر:
+
+- **مدعوم بـ WI:** تُقرأ قيمة السر طازجة في كل إطلاق أتمتة.
+- **مدعوم بمفاتيح ثابتة:** تُقرأ قيمة السر وقت النشر وتُدمج في صورة النشر.
+
+## الخطوة 10 — التحقق من التدوير
+
+بعد تشغيل عملية النشر، دوّر السر في AWS:
+
+```bash
+aws secretsmanager update-secret \
+ --region \
+ --secret-id crewai-test-keyword \
+ --secret-string "rotated value"
+```
+
+أطلق إطلاق أتمتة جديداً. ستكون بيئة الإطلاق ترى `"rotated value"` — بدون إعادة نشر ولا إعادة تشغيل عامل ولا انتظار TTL.
+
+للتأكد في السجلات (إذا كان لديك وصول إلى العامل)، ابحث عن:
+
+```
+Workload identity config '' (aws): N secret(s) resolved
+```
+
+يظهر هذا السطر لكل إطلاق ويُشير إلى استدعاء `GetSecretValue` طازج مقابل AWS.
+
+## استكشاف الأخطاء
+
+| العَرَض | السبب المحتمل |
+|---|---|
+| يفشل Test Connection بخطأ مصافحة | رُفض استدعاء `sts:AssumeRoleWithWebIdentity`. تحقق من أن ARN الكيان الموحَّد في سياسة الثقة يشير إلى `oidc-provider/` (المضيف **بدون** `https://` أو `http://` وبدون شرطة مائلة لاحقة)، وأن شرط الجمهور هو بالضبط `sts.amazonaws.com`، وأن شرط `sub` يطابق UUID مؤسسة CrewAI الخاصة بك، وأن رابط اكتشاف OIDC للمنصة قابل للوصول من AWS عبر الإنترنت العام. |
+| `InvalidIdentityToken: Couldn't retrieve verification key from your identity provider` | لا يمكن لـ AWS STS الوصول إلى مضيف CrewAI Platform لجلب JWKS. تأكد من أن المضيف متاح عبر الإنترنت من AWS، وأن رابط اكتشاف OIDC يُعيد 200، وأن نقطة نهاية JWKS قابلة للوصول. |
+| `AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity` | عدم تطابق سياسة الثقة. تحقق من الخطوة 3 من جديد: يجب أن يتضمن ARN الكيان الموحَّد `oidc-provider/` (المضيف **بدون** `https://` أو `http://` وبدون شرطة مائلة لاحقة)، ويجب أن يكون شرط الجمهور بالضبط `sts.amazonaws.com`، وأن يساوي شرط `sub` بالضبط `organization:`. |
+| يُظهر الاقتراح التلقائي لاسم السر `AccessDenied: secretsmanager:ListSecrets` | يفتقد الدور إلى `secretsmanager:ListSecrets` مع `Resource: "*"`. أضف بيان `SecretsManagerListForUI` من الخطوة 4. |
+| يفشل الإطلاق في حلّ سر رغم نجاح Test Connection | ارتباط WI سليم، لكن IAM المحصور بالمورد مفقود على السر الفاشل. راجع أذونات `secretsmanager:GetSecretValue` و `kms:Decrypt` للدور على ARN ذلك السر بعينه ومفتاح KMS الخاص به. |
+| `RegionDisabledException` / لم يُعثر على أسرار | لا تطابق المنطقة في تكوين Workload Identity المكان الفعلي للسر. تحقق من الخطوة 6 من جديد. |
+| لا تُلتقط القيمة المُدوَّرة في الإطلاق التالي | تأكد من أن متغير البيئة على الأتمتة يشير إلى بيانات اعتماد مدعومة بـ Workload Identity (وليس بيانات اعتماد بمفاتيح ثابتة). يدمج المسار الثابت القيم في صورة النشر. |
+
+### روابط مرجعية
+
+- AWS: [Creating OpenID Connect (OIDC) identity providers](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html)
+- AWS: [Configuring a role for OpenID Connect federation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc_relying-party.html)
+- AWS: [STS:AssumeRoleWithWebIdentity API reference](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
+
+## الخطوات التالية
+
+- [استخدام الأسرار في متغيرات البيئة وإدارة الأذونات](/ar/enterprise/features/secrets-manager/usage)
+- للتنوع متعدد السحاب، راجع أيضاً [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity) و [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity).
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/aws.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/aws.mdx
new file mode 100644
index 000000000..7d7b3912b
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/aws.mdx
@@ -0,0 +1,295 @@
+---
+title: AWS Secrets Manager (بيانات اعتماد ثابتة)
+description: تكوين AWS Secrets Manager كمزود أسرار لـ CrewAI Platform باستخدام مفاتيح الوصول الثابتة أو AssumeRole
+sidebarTitle: ببيانات اعتماد ثابتة
+icon: "key"
+---
+
+## نظرة عامة
+
+يأخذك هذا الدليل عبر تكوين AWS Secrets Manager كمزود أسرار لمؤسستك على CrewAI Platform، باستخدام **بيانات الاعتماد الثابتة** (مفاتيح الوصول، اختيارياً مع AssumeRole). بنهاية الدليل، ستتمكن CrewAI Platform من قراءة الأسرار المخزّنة في حساب AWS الخاص بك وحقنها كقيم متغيرات بيئة وقت التشغيل.
+
+
+يغطي هذا الدليل مسار **بيانات الاعتماد الثابتة** — تُحَلّ الأسرار وقت النشر وتُدمج في صورة النشر. تتطلب القيم المُدوَّرة إعادة نشر. إذا أردت أسراراً مراعية للتدوير تُحدَّث في كل إطلاق أتمتة (بدون إعادة نشر)، راجع [AWS Workload Identity (اتحاد OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity).
+
+
+
+يغطي هذا الدليل التكوين من جانب AWS وإعداد بيانات الاعتماد في CrewAI Platform. للإشارة بعدها إلى سر من متغير بيئة، راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage).
+
+
+## المتطلبات المسبقة
+
+
+قبل البدء، تأكد من امتلاكك:
+
+- حساب AWS لديه إذن إنشاء مستخدمي IAM وسياسات يديرها العميل و(اختيارياً) أدوار IAM.
+- منطقة AWS التي تعيش (أو ستعيش) فيها أسرارك، مثلاً `us-east-1`.
+- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذن `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
+
+
+## اختر طريقة المصادقة
+
+تدعم CrewAI Platform طريقتين لمصادقة المنصة مع AWS Secrets Manager. اختر واحدة قبل أن تبدأ — تختلف الخطوات أدناه بناءً على اختيارك.
+
+| الطريقة | متى تُستخدم | المقايضات |
+|---|---|---|
+| **مفاتيح الوصول الثابتة** | البداية، عمليات نشر بحساب واحد | أبسط إعداد؛ يجب تدوير مفاتيح الوصول يدوياً |
+| **AssumeRole** | عبر الحسابات، تشديد الإنتاج | بيانات اعتماد قصيرة الأمد؛ يدعم External ID؛ يتطلب دور IAM إضافي |
+
+تستخدم بقية هذا الدليل علامات تبويب في الخطوات 3–5 لتتمكن من اتباع المسار المطابق لاختيارك.
+
+## الخطوة 1 — إنشاء مستخدم IAM
+
+افتح [وحدة تحكم IAM](https://console.aws.amazon.com/iam/)، انتقل إلى **Users**، ثم انقر على **Create user**.
+
+- الاسم المقترح: `crewai-secrets-reader`.
+- اترك **Provide user access to the AWS Management Console** بدون تحديد — هذا الكيان تستخدمه CrewAI Platform برمجياً، وليس البشر.
+- انقر على **Next**.
+
+في صفحة **Set permissions**، اترك الاختيار الافتراضي. ستُرفق السياسة في الخطوة 3.
+
+انقر على **Next**، راجع، وانقر على **Create user**.
+
+للتفاصيل الكاملة، راجع وثائق AWS: [Create an IAM user in your AWS account](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html).
+
+{/* SCREENSHOT: AWS IAM "Create user" form filled with name "crewai-secrets-reader" → /images/secrets-manager/aws/01-create-iam-user.png */}
+
+## الخطوة 2 — إنشاء سياسة IAM
+
+تحتاج CrewAI Platform إلى وصول للقراءة فقط إلى AWS Secrets Manager وإذن لفك تشفير الأسرار عبر KMS. أنشئ سياسة يديرها العميل بـ JSON التالي.
+
+في وحدة تحكم IAM، انتقل إلى **Policies**، ثم انقر على **Create policy**.
+
+اختر علامة التبويب **JSON** واستبدل المحتوى بـ:
+
+```json
+{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Sid": "SecretsManagerRead",
+ "Effect": "Allow",
+ "Action": [
+ "secretsmanager:ListSecrets",
+ "secretsmanager:GetSecretValue",
+ "secretsmanager:DescribeSecret"
+ ],
+ "Resource": "*"
+ },
+ {
+ "Sid": "KMSDecrypt",
+ "Effect": "Allow",
+ "Action": [
+ "kms:DescribeKey",
+ "kms:Decrypt"
+ ],
+ "Resource": "*"
+ }
+ ]
+}
+```
+
+انقر على **Next**، ثم في صفحة **Review and create**:
+
+- **Policy name:** `CrewAISecretsManagerRead`
+- **Description (optional):** `Read-only access to AWS Secrets Manager for CrewAI Platform`
+
+انقر على **Create policy**.
+
+
+تمنح السياسة أعلاه `*` على `Resource` للبساطة. في الإنتاج، حدّد نطاق `Resource` إلى ARNs الخاصة بالأسرار التي يجب على CrewAI Platform الوصول إليها، وحدّد نطاق `kms:Decrypt` إلى ARNs مفاتيح KMS التي تُشفّر تلك الأسرار. راجع [إرشادات AWS حول أقل الامتيازات](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html).
+
+
+{/* SCREENSHOT: AWS IAM "Create policy" → JSON tab with the policy above pasted → /images/secrets-manager/aws/02-create-policy-json-editor.png */}
+{/* SCREENSHOT: AWS IAM "Review and create policy" page with name "CrewAISecretsManagerRead" → /images/secrets-manager/aws/03-policy-review-and-create.png */}
+
+## الخطوة 3 — إرفاق السياسة
+
+
+
+ 1. في وحدة تحكم IAM، انتقل إلى **Users** وانقر على المستخدم الذي أنشأته في الخطوة 1.
+ 2. في علامة التبويب **Permissions**، انقر على **Add permissions** ← **Attach policies directly**.
+ 3. ابحث عن `CrewAISecretsManagerRead`، حدّدها، وانقر على **Next**.
+ 4. انقر على **Add permissions**.
+
+ {/* SCREENSHOT: "Add permissions" → "Attach policies directly" with CrewAISecretsManagerRead selected → /images/secrets-manager/aws/04a-attach-policy-to-user.png */}
+
+
+
+ مع AssumeRole، تُرفَق السياسة بـ **دور** IAM منفصل (وليس مباشرة بالمستخدم). يحتاج المستخدم من الخطوة 1 فقط إلى إذن لاستدعاء `sts:AssumeRole` على ذلك الدور.
+
+ **إنشاء الدور:**
+
+ 1. في وحدة تحكم IAM، انتقل إلى **Roles** وانقر على **Create role**.
+ 2. **Trusted entity type:** AWS account. اختر **This account** (أو **Another AWS account** لإعدادات عبر الحسابات، ثم أدخل معرّف حساب AWS الذي يستضيف مستخدم IAM من الخطوة 1).
+ 3. (موصى به) حدّد **Require external ID** وأدخل قيمة تُولّدها بنفسك — هذا سر مشترك ستلصقه في CrewAI Platform في الخطوة 5.
+ 4. انقر على **Next**.
+ 5. أرفق سياسة `CrewAISecretsManagerRead`.
+ 6. انقر على **Next**، سمِّ الدور `CrewAISecretsManagerRole`، وانقر على **Create role**.
+
+ **اسمح لمستخدم IAM بافتراض الدور:**
+
+ 1. افتح الدور الذي أنشأته للتو وانسخ **ARN** الخاص به.
+ 2. في وحدة تحكم IAM، انتقل إلى **Users**، انقر على المستخدم من الخطوة 1، وفي علامة التبويب **Permissions** انقر على **Add permissions** ← **Create inline policy**.
+ 3. في علامة التبويب **JSON**، الصق ما يلي (استبدل `ROLE_ARN_FROM_ABOVE`):
+
+ ```json
+ {
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Action": "sts:AssumeRole",
+ "Resource": "ROLE_ARN_FROM_ABOVE"
+ }
+ ]
+ }
+ ```
+
+ 4. سمِّ السياسة `CrewAIAssumeSecretsRole` وانقر على **Create policy**.
+
+ {/* SCREENSHOT: IAM "Create role" trust policy step with External ID checkbox enabled → /images/secrets-manager/aws/04b-create-role-trust-policy.png */}
+ {/* SCREENSHOT: Inline sts:AssumeRole policy attached to the IAM user → /images/secrets-manager/aws/04c-attach-assumerole-on-user.png */}
+
+
+
+## الخطوة 4 — الحصول على بيانات الاعتماد
+
+
+
+ 1. في وحدة تحكم IAM، افتح المستخدم من الخطوة 1.
+ 2. انقر على علامة التبويب **Security credentials**.
+ 3. تحت **Access keys**، انقر على **Create access key**.
+ 4. اختر **Application running outside AWS** (أو **Other**) كحالة استخدام. انقر على **Next**.
+ 5. (اختياري) أضف وسماً وصفياً. انقر على **Create access key**.
+ 6. انقر على **Show** للكشف عن مفتاح الوصول السري، ثم انسخ كلاً من **Access key ID** و **Secret access key**، أو انقر على **Download .csv file**.
+
+
+ يظهر مفتاح الوصول السري مرة واحدة فقط. إذا أغلقت هذه الصفحة دون نسخه، فستحتاج إلى حذف المفتاح وإنشاء واحد جديد.
+
+
+ للتفاصيل الكاملة، راجع وثائق AWS: [Manage access keys for IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html).
+
+ {/* SCREENSHOT: Access key use-case selector ("Application running outside AWS") → /images/secrets-manager/aws/05a-create-access-key-use-case.png */}
+ {/* SCREENSHOT: "Retrieve access keys" page with Show/Download buttons → /images/secrets-manager/aws/06a-retrieve-access-keys.png */}
+
+
+
+ حتى مع AssumeRole، لا تزال CrewAI Platform تحتاج إلى مفتاح وصول لمستخدم IAM — فهي تستخدم تلك المفاتيح كهوية المتصل لتنفيذ استدعاء `sts:AssumeRole`.
+
+ 1. أنشئ مفتاح وصول للمستخدم تماماً كما هو موضح في علامة التبويب **مفاتيح الوصول الثابتة** أعلاه.
+ 2. افتح الدور الذي أنشأته في الخطوة 3 وانسخ:
+ - **Role ARN** (من ملخص الدور).
+ - **External ID** الذي كوّنته (إن وُجد) — قد عيّنته بنفسك في الخطوة 3، فتأكد من أنه بحوزتك.
+
+ {/* SCREENSHOT: IAM role detail page showing Role ARN → /images/secrets-manager/aws/05b-role-arn-detail.png */}
+
+
+
+## الخطوة 5 — إضافة بيانات الاعتماد في CrewAI Platform
+
+في CrewAI Platform، انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
+
+{/* SCREENSHOT: Sidebar/nav highlighting Settings → Secret Provider Credentials → /images/secrets-manager/usage/01-amp-settings-nav.png */}
+{/* SCREENSHOT: Empty state of Secret Provider Credentials page with "Add Credential" button → /images/secrets-manager/usage/02-amp-credentials-empty-state.png */}
+
+
+
+ املأ النموذج:
+
+ - **Name:** اسم وصفي، مثلاً `aws-prod`.
+ - **Provider:** `AWS Secrets Manager`.
+ - **Region:** منطقة AWS التي تعيش فيها أسرارك، مثلاً `us-east-1`. يجب أن تطابق منطقة الأسرار التي تريد قراءتها.
+ - **Access Key ID:** القيمة من الخطوة 4.
+ - **Secret Access Key:** القيمة من الخطوة 4.
+ - (اختياري) حدّد **Set as default credential for this provider**. تُستخدم بيانات الاعتماد الافتراضية بواسطة متغيرات البيئة التي تشير إلى أسرار AWS بدون تحديد بيانات اعتماد صراحةً.
+
+ اترك **Role ARN** و **External ID** فارغين.
+
+ انقر على **Create**.
+
+ {/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + static access keys filled in → /images/secrets-manager/usage/03a-amp-add-credential-form-aws-static.png */}
+
+
+
+ املأ النموذج:
+
+ - **Name:** اسم وصفي، مثلاً `aws-prod-assumerole`.
+ - **Provider:** `AWS Secrets Manager`.
+ - **Region:** منطقة AWS التي تعيش فيها أسرارك.
+ - **Access Key ID:** مفتاح وصول مستخدم IAM من الخطوة 4 (يُستخدم لاستدعاء STS).
+ - **Secret Access Key:** مفتاح الوصول السري لمستخدم IAM من الخطوة 4.
+ - **Role ARN:** Role ARN الذي نسخته في الخطوة 4.
+ - **External ID:** External ID الذي عيّنته على سياسة الثقة الخاصة بالدور (احذفه إن لم يوجد).
+ - (اختياري) حدّد **Set as default credential for this provider**.
+
+ انقر على **Create**.
+
+ {/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + AssumeRole fields filled in → /images/secrets-manager/usage/03b-amp-add-credential-form-aws-assumerole.png */}
+
+
+
+
+**كيف تتصرف الطريقتان وقت التشغيل:**
+
+- مع **مفاتيح الوصول الثابتة** فقط، تستدعي CrewAI Platform AWS Secrets Manager مباشرةً باستخدام المفاتيح التي قدّمتها.
+- عند تعيين **Role ARN**، تستدعي CrewAI Platform أولاً `sts:AssumeRole` بمفاتيح الوصول المقدَّمة (و External ID إن كان مكوَّناً)، ثم تستخدم بيانات الاعتماد قصيرة الأمد التي تُعيدها STS لقراءة أسرارك.
+
+
+{/* SCREENSHOT: Credentials list showing the new AWS row, with "(default)" badge if applicable → /images/secrets-manager/usage/04-amp-credential-created.png */}
+
+## الخطوة 6 — إنشاء سر واحد على الأقل في AWS
+
+إذا لم يكن لديك بالفعل أسرار في AWS Secrets Manager، أنشئ واحداً الآن لتتمكن من التحقق من الاتصال في الخطوة 7.
+
+في [وحدة تحكم AWS Secrets Manager](https://console.aws.amazon.com/secretsmanager/)، انقر على **Store a new secret**.
+
+- **Secret type:** اختر **Other type of secret**.
+- **Key/value pairs** — إما:
+ - إدخال زوج أو أكثر من مفتاح/قيمة (موصى به للأسرار المهيكلة)، أو
+ - استخدام علامة التبويب **Plaintext** لقيمة نصية واحدة.
+- **Encryption key:** استخدم `aws/secretsmanager` (المفتاح الذي يديره AWS) ما لم تكن لديك متطلبات محددة لمفتاح KMS.
+
+انقر على **Next**، ثم أدخل:
+
+- **Secret name:** اسم فريد، مثلاً `crewai/openai-api-key`.
+- **Description (optional):** ملاحظة قصيرة عن غرض السر.
+
+انقر على **Next** عبر خطوات التدوير والمراجعة، ثم انقر على **Store**.
+
+
+**صيغة الإشارة بمفتاح JSON.** إذا خزّنت سراً بأزواج مفتاح/قيمة متعددة (كائن JSON)، يمكن لـ CrewAI Platform استخراج حقل محدد باستخدام صيغة `secret-name#json_key` في إشارات متغيرات البيئة. على سبيل المثال، يمكن الإشارة إلى سر باسم `database-credentials` بـ `{"username": "...", "password": "..."}` باسم `database-credentials#password`. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) للتفاصيل.
+
+
+للتفاصيل الكاملة، راجع وثائق AWS: [Create an AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).
+
+{/* SCREENSHOT: AWS Secrets Manager "Choose secret type" page → /images/secrets-manager/aws/07-create-secret-store-type.png */}
+{/* SCREENSHOT: AWS Secrets Manager "Configure secret" page with name and description → /images/secrets-manager/aws/08-create-secret-name.png */}
+
+## الخطوة 7 — اختبار الاتصال
+
+عُد إلى CrewAI Platform، في صفحة **Secret Provider Credentials**، اعثر على بيانات الاعتماد التي أنشأتها للتو وانقر على **Test Connection**.
+
+تؤكد رسالة نجاح أن CrewAI Platform يمكنها المصادقة مع AWS وقراءة الأسرار من حسابك.
+
+{/* SCREENSHOT: Success toast after clicking "Test Connection" → /images/secrets-manager/usage/05-amp-test-connection-success.png */}
+
+إذا فشل الاختبار، تحقق من الأسباب الأكثر شيوعاً:
+
+| العَرَض | السبب المحتمل |
+|---|---|
+| `AccessDenied` على `secretsmanager:ListSecrets` | السياسة غير مُرفقة، أو المستخدم خاطئ. تحقق من الخطوة 3 من جديد. |
+| `AccessDenied` على `kms:Decrypt` | بيان `KMSDecrypt` مفقود، أو أن أسرارك تستخدم مفتاح KMS يديره العميل لا يغطّيه `Resource: "*"`. |
+| `InvalidClientTokenId` / `SignatureDoesNotMatch` | معرّف مفتاح الوصول أو مفتاح الوصول السري خاطئ. تحقق من الخطوتين 4 و 5 من جديد. |
+| `RegionDisabledException` / لم يُعثر على أسرار | لا تطابق **Region** الخاصة ببيانات الاعتماد المكان الفعلي لأسرارك. |
+| `AccessDenied` على `sts:AssumeRole` (AssumeRole فقط) | سياسة `sts:AssumeRole` المضمنة مفقودة على مستخدم IAM، أو لا تسمح سياسة الثقة الخاصة بالدور بهذا الكيان، أو لا يتطابق External ID. |
+| ينجح الاختبار فوراً بعد إنشاء مستخدم IAM، لكنه يفشل في المرة التالية | تستغرق بيانات اعتماد IAM أحياناً دقيقة أو دقيقتين للانتشار عالمياً. أعد المحاولة. |
+
+## الخطوات التالية
+
+الآن وقد اتصلت AWS، توجّه إلى [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage) من أجل:
+
+- منح أعضاء المؤسسة الأذونات الصحيحة لاستخدام (أو إدارة) مدير الأسرار.
+- الإشارة إلى أسرار AWS الخاصة بك من متغيرات بيئة CrewAI Platform.
+
+إذا كنت تريد أسراراً **مراعية للتدوير** تنتشر دون إعادة نشر، انتقل إلى [AWS Workload Identity (اتحاد OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity) — نفس مخزن الأسرار، بدون بيانات اعتماد ثابتة، وتُجلب الأسرار في كل إطلاق.
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/azure-workload-identity.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/azure-workload-identity.mdx
new file mode 100644
index 000000000..4492d6d0c
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/azure-workload-identity.mdx
@@ -0,0 +1,275 @@
+---
+title: Azure Workload Identity Federation
+description: تكوين Azure Key Vault عبر Microsoft Entra Workload Identity Federation للوصول إلى الأسرار بشكل مراعٍ للتدوير وبدون بيانات اعتماد
+sidebarTitle: بـ Workload Identity
+icon: "id-badge"
+---
+
+## نظرة عامة
+
+يُكوِّن هذا الدليل Azure Key Vault كمزود أسرار باستخدام **Microsoft Entra Workload Identity Federation**: تُصدر CrewAI Platform رموز OIDC قصيرة الأمد، وتُبادلها للحصول على رمز وصول Entra عبر منصة هوية Microsoft، وتقرأ أسرارك — دون تخزين أي سر عميل في أي مكان.
+
+
+**لماذا هذا المسار:** تُحَلّ الأسرار وقت تنفيذ الأتمتة، لذا **تنتشر القيم المُدوَّرة إلى الإطلاق التالي بدون إعادة نشر**. إن كنت تحتاج فقط بيانات اعتماد ثابتة، راجع الدليل الأبسط [Azure Key Vault — سر العميل](/ar/enterprise/features/secrets-manager/azure).
+
+
+### كيف يعمل وقت التشغيل
+
+1. يطلب عامل النشر JWT OIDC طازج من CrewAI Platform.
+2. يُقدّم العامل الـ JWT إلى Microsoft Entra على `https://login.microsoftonline.com//oauth2/v2.0/token` كـ `client_assertion` (`urn:ietf:params:oauth:client-assertion-type:jwt-bearer`)، مع الإشارة إلى App Registration الذي يطابق **Federated Identity Credential** الخاص به مُصدر الـ JWT وموضوعه.
+3. تتحقق Entra من الـ JWT مقابل وثيقة اكتشاف OIDC و JWKS لمنصتك، ثم تُعيد رمز وصول قصير الأمد محصور بـ `https://vault.azure.net/.default`.
+4. يستدعي العامل Azure Key Vault لقراءة السر.
+5. تُحقن القيمة المجلوبة كقيمة لمتغير البيئة لإطلاق الأتمتة ذاك.
+
+تُخزَّن رموز موضوع OIDC مؤقتاً لنحو ساعة لتفادي إعادة الإصدار في كل إطلاق. تُجلب قيم الأسرار طازجة في كل إطلاق بغض النظر عن حالة ذاكرة OIDC المؤقتة، وهذا ما يجعل هذا المسار مراعياً للتدوير.
+
+## المتطلبات المسبقة
+
+
+قبل البدء، تأكد من امتلاكك:
+
+- يجب أن تتضمن صورة حاوية الأتمتة إصدار CrewAI runtime رقم `1.14.5` أو أحدث.
+- اشتراك Azure ومستأجر Microsoft Entra يمكنك إدارته.
+- إذن في المستأجر لإنشاء App Registrations وإضافة Federated Identity Credentials.
+- Key Vault يستخدم **Azure RBAC** للترخيص (وليس النموذج القديم لسياسة الوصول).
+- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذني `workload_identity_configs: manage` و `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
+- **يجب أن يكون تنصيب CrewAI Platform قابلاً للوصول من Microsoft Entra عبر HTTPS** ليتمكّن Entra من جلب وثيقة اكتشاف OIDC و JWKS أثناء التحقق من الرمز. تأكد مع مسؤول المنصة من أن المضيف متاح عبر الإنترنت.
+
+
+## الخطوة 1 — العثور على عنوان مُصدر OIDC لـ CrewAI Platform
+
+ينشر تنصيب CrewAI Platform وثيقة اكتشاف OpenID Connect على `https:///.well-known/openid-configuration`. الحقل `issuer` هناك هو الرابط الذي ستُسجِّله Microsoft Entra كمُصدر اتحاد موثوق.
+
+افتح الرابط في المتصفح:
+
+```
+https:///.well-known/openid-configuration
+```
+
+ينبغي أن ترى JSON يحتوي على:
+
+```json
+{
+ "issuer": "https://",
+ "jwks_uri": "https:///oauth2/jwks",
+ ...
+}
+```
+
+سجّل القيمة الدقيقة لـ `issuer` — ستستخدمها في الخطوة 3.
+
+
+إذا أعاد الرابط 404 أو 503، اتصل بمسؤول المنصة. يتطلب مُصدر OIDC تكوين مفتاح توقيع خاص وقت التنصيب. راجع دليل تنصيب المنصة لتكوين `OIDC_PRIVATE_KEY` و `OIDC_ISSUER`.
+
+
+## الخطوة 2 — إنشاء App Registration
+
+في [بوابة Microsoft Entra](https://entra.microsoft.com)، انتقل إلى **App registrations** وانقر على **New registration**.
+
+- **Name:** `crewai-secrets-reader`
+- **Supported account types:** `Accounts in this organizational directory only (Single tenant)`.
+- اترك **Redirect URI** فارغاً.
+
+انقر على **Register**. سجّل **Application (client) ID** و **Directory (tenant) ID** في لوحة نظرة عامة التطبيق — ستستخدمها في الخطوة 6.
+
+{/* SCREENSHOT: Azure portal "Register an application" form with name "crewai-secrets-reader" → /images/secrets-manager/azure-wi/01-register-app.png */}
+
+## الخطوة 3 — إضافة Federated Identity Credential
+
+يُخبر Federated Identity Credential Microsoft Entra: *ثِق برموز JWT المُصدَرة من هذا المُصدر، بهذا الموضوع، عندما تُقدَّم كتأكيد عميل لهذا App Registration.*
+
+في App Registration، انتقل إلى **Certificates & secrets** ← **Federated credentials** ← **Add credential**.
+
+- **Federated credential scenario:** `Other issuer`.
+- **Issuer:** رابط مُصدر CrewAI Platform من الخطوة 1، مثلاً `https://`.
+- **Subject identifier:** `organization:` — قيمة ادّعاء `sub` في JWT بالضبط. اعثر على UUID مؤسستك في إعدادات مؤسسة CrewAI Platform. يقصر هذا الاتحاد على مؤسسة CrewAI محددة — تُقبل فقط الرموز المُصدَرة لأتمتات تلك المؤسسة.
+- **Name:** أي تسمية وصفية، مثلاً `crewai-org-prod`.
+- **Audience:** `api://AzureADTokenExchange`. هذا هو الجمهور الثابت الذي تتطلبه Microsoft Entra للبيانات الموحَّدة، وهو ما تُعيّنه CrewAI Platform في ادّعاء `aud` في JWT.
+
+انقر على **Add**.
+
+
+**العزل لكل مؤسسة.** يقيّد معرّف الموضوع (`organization:`) Federated Identity Credential لرموز مؤسسة CrewAI محددة. إذا كان من المفترض أن تتشارك مؤسسات CrewAI متعددة App Registration واحداً، أضف Federated Identity Credential لكل مؤسسة (كل منها بـ UUID المؤسسة).
+
+
+للتفاصيل الكاملة، راجع وثائق Microsoft: [Configure a federated identity credential on an app](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-create-trust).
+
+{/* SCREENSHOT: "Add credential" panel with scenario = "Other issuer", issuer URL, subject "organization:", audience "api://AzureADTokenExchange" → /images/secrets-manager/azure-wi/02-add-federated-credential.png */}
+
+## الخطوة 4 — منح App Registration وصولاً إلى Key Vault
+
+امنح App Registration دور **Key Vault Secrets User** على الخزنة المستهدفة — نفس الدور الذي تستخدمه لمسار بيانات الاعتماد الثابتة. استخدم إما على مستوى الخزنة (أبسط) أو لكل سر (أقل الامتيازات).
+
+
+
+ ```bash
+ az role assignment create \
+ --assignee \
+ --role "Key Vault Secrets User" \
+ --scope $(az keyvault show --name --query id -o tsv)
+ ```
+
+ يمنح النطاق على مستوى الخزنة إذن `secrets/list` الذي يعتمد عليه **الاقتراح التلقائي لاسم السر** في نموذج متغير البيئة لـ CrewAI Platform. اختر هذه التبويبة إذا أردت أن يعمل الاقتراح التلقائي.
+
+ {/* SCREENSHOT: Key Vault "Add role assignment" panel with "Key Vault Secrets User" and the App Registration selected → /images/secrets-manager/azure-wi/03-grant-vault-rbac.png */}
+
+
+
+ ```bash
+ az role assignment create \
+ --assignee \
+ --role "Key Vault Secrets User" \
+ --scope $(az keyvault secret show --vault-name --name --query id -o tsv)
+ ```
+
+ تُعطّل الارتباطات لكل سر **الاقتراح التلقائي لاسم السر** في نموذج متغير البيئة لـ CrewAI Platform (يتطلب الاقتراح التلقائي `secrets/list`، وهو محصور بنطاق الخزنة فقط). اكتب اسم السر الكامل بدلاً من ذلك.
+
+ {/* SCREENSHOT: Per-secret IAM panel with the App Registration assigned **Key Vault Secrets User** at the secret resource scope → /images/secrets-manager/azure-wi/04-per-secret-rbac.png */}
+
+
+
+ لتعيين **على مستوى الخزنة**:
+
+ 1. افتح Key Vault الخاص بك في بوابة Azure.
+ 2. انقر على **Access control (IAM)** ← **Add** ← **Add role assignment**.
+ 3. اختر الدور **Key Vault Secrets User** ← **Next**.
+ 4. انقر على **Select members**، ابحث عن App Registration `crewai-secrets-reader`، انقر على **Select**.
+ 5. انقر على **Review + assign**.
+
+ لتعيين **لكل سر**، استخدم نفس التدفق لكن ابدأ من **Objects** ← **Secrets** ← اختر السر ← لوحة **Access control (IAM)** الخاصة به. تُعطّل الارتباطات لكل سر الاقتراح التلقائي (راجع تبويبة لكل سر أعلاه).
+
+
+
+## الخطوة 5 — إنشاء سر واحد على الأقل في Key Vault
+
+إذا لم يكن لديك سر للاختبار، أنشئ واحداً عبر Azure CLI:
+
+```bash
+az keyvault secret set \
+ --vault-name \
+ --name openai-api-key \
+ --value "sk-your-actual-key"
+```
+
+أو عبر بوابة Azure:
+
+1. افتح Key Vault الخاص بك وانتقل إلى **Objects** ← **Secrets**.
+2. انقر على **Generate/Import**.
+3. **Upload options:** `Manual`. **Name:** اسم السر (مثلاً `openai-api-key`). **Secret value:** الصق القيمة.
+4. انقر على **Create**.
+
+
+**اصطلاحات اسم السر.** لا يمكن أن تحتوي أسماء أسرار Azure Key Vault على شرطات سفلية. تُحوّل CrewAI Platform تلقائياً الشرطات السفلية إلى شرطات عند استدعاء Azure (مثلاً، `db_password` تُرسل كـ `db-password`)، لذا يمكنك الاحتفاظ بأسماء متغيرات بيئة بنمط الشرطة السفلية — لكن السر الأساسي في Key Vault يجب أن يستخدم الشرطات.
+
+
+## الخطوة 6 — إضافة تكوين Workload Identity في CrewAI Platform
+
+في CrewAI Platform، انتقل إلى **Settings** ← **Workload Identity** وانقر على **Add Workload Identity Config**.
+
+املأ النموذج:
+
+- **Name:** اسم وصفي، مثلاً `azure-prod`.
+- **Cloud Provider:** `Azure`.
+- **Tenant ID:** **Directory (tenant) ID** الخاص بـ Microsoft Entra من الخطوة 2.
+- **Client ID:** **Application (client) ID** الخاص بـ App Registration من الخطوة 2.
+- (اختياري) حدّد **Set as default for Azure** إذا كنت ترغب في أن يكون هذا هو تكوين WI الافتراضي المُحدَّد عند إنشاء بيانات اعتماد سر مدعومة بـ Azure.
+
+**Audience** ثابت على `api://AzureADTokenExchange` — تتطلب Microsoft Entra هذا الجمهور بالضبط للبيانات الموحَّدة، لذا لا يظهر حقل Audience في النموذج.
+
+انقر على **Create**.
+
+{/* SCREENSHOT: "Add Workload Identity Config" form with Azure, tenant ID, client ID populated → /images/secrets-manager/azure-wi/05-amp-add-wi-config-azure.png */}
+{/* SCREENSHOT: Workload Identity list showing AWS, GCP, and Azure rows → /images/secrets-manager/azure-wi/06-amp-wi-list-with-azure.png */}
+
+## الخطوة 7 — إضافة بيانات اعتماد مزود أسرار مرتبطة بتكوين WI
+
+انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
+
+املأ النموذج:
+
+- **Name:** اسم وصفي، مثلاً `azure-prod-wi`.
+- **Provider:** `Azure Key Vault`.
+- **Authentication Method:** `Workload Identity`.
+- **Workload Identity Configuration:** اختر التكوين الذي أنشأته في الخطوة 6.
+- **Key Vault URL:** اسم مضيف DNS للخزنة، مثلاً `https://my-vault.vault.azure.net`.
+- (اختياري) حدّد **Set as default credential for this provider**.
+
+سيطلب النموذج فقط **Key Vault URL** ضمن Workload Identity — حقول بيانات الاعتماد الثابتة (Tenant ID و Client ID و Client Secret) مخفية عمداً لأنها لا تنطبق على هذا المسار؛ يأتي المستأجر والعميل من تكوين WI المرتبط.
+
+انقر على **Create**.
+
+
+**App Registration واحد، خزائن متعددة.** يعيش Key Vault URL على بيانات الاعتماد، وليس على تكوين WI. لذا يمكن لـ App Registration واحد (وتكوين WI واحد) خدمة عدة Key Vaults — فقط أنشئ بيانات اعتماد مزود أسرار واحدة لكل خزنة، جميعها مرتبطة بنفس تكوين WI.
+
+
+{/* SCREENSHOT: "Add Secret Provider Credential" form with Azure + Workload Identity + WI config dropdown + vault URL → /images/secrets-manager/azure-wi/07-amp-add-credential-azure-wi.png */}
+
+## الخطوة 8 — اختبار الاتصال
+
+بعد حفظ بيانات الاعتماد، انقر على **Test Connection**. لبيانات اعتماد workload-identity، يتحقق هذا من مصافحة OIDC: تُصدر CrewAI Platform JWT، وتُقدّمه إلى Microsoft Entra كـ `client_assertion` موحَّد، وتؤكد أن Entra تُعيد رمز وصول محصور بالخزنة. نتيجة خضراء تعني أن ارتباط الاتحاد سليم.
+
+نجاح Test Connection يُثبت أن مُصدر Federated Identity Credential وموضوعه وجمهوره كلها متطابقة، وأن App Registration قابل للوصول. لا يُثبت ذلك أن RBAC لكل سر في Key Vault صحيح — يُمارَس `getSecret` على سر محدد بشكل منفصل عندما يُحَلّ متغير بيئة عند الإطلاق. راجع [استكشاف الأخطاء](#troubleshooting) لأنماط فشل المصافحة.
+
+## الخطوة 9 — الإشارة إلى السر في متغير بيئة
+
+أَشِر إلى السر على أتمتة، تماماً كما تفعل مع أي متغير بيئة مدعوم بمدير أسرار. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) لحقول النموذج والسلوك.
+
+## الخطوة 10 — التحقق من التدوير
+
+بعد تشغيل عملية النشر، دوّر السر في Key Vault:
+
+```bash
+az keyvault secret set \
+ --vault-name \
+ --name openai-api-key \
+ --value "rotated value"
+```
+
+أطلق إطلاق أتمتة جديداً. ستكون بيئة الإطلاق ترى `"rotated value"` — بدون إعادة نشر ولا إعادة تشغيل عامل ولا انتظار TTL.
+
+للتأكد في سجلات العامل، ابحث عن:
+
+```
+Workload identity config '' (azure): N secret(s) resolved
+```
+
+يظهر هذا السطر لكل إطلاق ويُشير إلى استدعاء `getSecret` طازج مقابل Azure Key Vault.
+
+للتحقق من البداية إلى النهاية باستخدام البصمة، راجع [التحقق من التدوير من البداية إلى النهاية](/ar/enterprise/features/secrets-manager/verify-rotation).
+
+## استكشاف الأخطاء
+
+| العَرَض | السبب المحتمل |
+|---|---|
+| يفشل Test Connection بخطأ مصافحة | رفضت Microsoft Entra `client_assertion` الموحَّد. تحقق من أن **Issuer** في Federated Identity Credential يطابق قيمة `issuer` للمنصة بالضبط، وأن **Subject** هو `organization:` (يطابق ادّعاء `sub` في JWT)، وأن **Audience** هو `api://AzureADTokenExchange`، وأن رابط اكتشاف OIDC للمنصة قابل للوصول من Entra عبر الإنترنت العام. |
+| `AADSTS70021: No matching federated identity record found for presented assertion` | لا يتطابق **Issuer** + **Subject** + **Audience** في Federated Identity Credential مع الـ JWT بالضبط. تحقق من الخطوة 3 من جديد: يجب أن يكون الموضوع `organization:` (يطابق ادّعاء `sub` في JWT)، ويجب أن يكون الجمهور `api://AzureADTokenExchange`. |
+| `AADSTS700024: Client assertion is not within its valid time range` | ساعة مضيف CrewAI Platform منحرفة بشكل كبير عن الوقت الحقيقي. تحقق من NTP على المضيف. |
+| `AADSTS50013: Assertion failed signature validation` | لم تستطع Microsoft Entra التحقق من توقيع الـ JWT. تأكد من أن `https:///oauth2/jwks` قابل للوصول من الإنترنت العام ويُقدّم JWKS صالحاً. |
+| يُظهر الاقتراح التلقائي لاسم السر `Forbidden — does not have permission to perform action 'Microsoft.KeyVault/vaults/secrets/.../list'` | دور **Key Vault Secrets User** الخاص بـ App Registration محصور بسر واحد. امنح الدور على نطاق الخزنة ليُسمح بإجراء `list` في مستوى البيانات. راجع الخطوة 4. |
+| يفشل الإطلاق في حلّ سر رغم نجاح Test Connection | ارتباط WI سليم، لكن RBAC لكل سر في Key Vault مفقود على السر الفاشل. راجع **Key Vault Secrets User** على ذلك السر تحديداً (أو وسّع تعيين الدور إلى نطاق الخزنة). |
+| `Forbidden — request was not authorized` (الخزنة تستخدم سياسات الوصول القديمة) | لم يتم تحويل الخزنة إلى Azure RBAC. ضمن **Access configuration** للخزنة، عيّن نموذج الإذن إلى **Azure role-based access control** وأعد منح الدور من الخطوة 4. |
+| `azure_vault_url is required for Azure secret resolution` (سجلات العامل) | تفتقد بيانات اعتماد مزود الأسرار إلى **Key Vault URL**. تحقق من الخطوة 7 من جديد. |
+| لا تُلتقط القيمة المُدوَّرة في الإطلاق التالي | تأكد من أن متغير البيئة على الأتمتة يشير إلى بيانات اعتماد مدعومة بـ Workload Identity (وليس بيانات اعتماد بمفاتيح ثابتة). يدمج المسار الثابت القيم في صورة النشر. |
+
+### روابط مرجعية
+
+- Microsoft: [Microsoft Entra Workload Identity Federation overview](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation)
+- Microsoft: [Configure a federated identity credential on an app](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-create-trust)
+- Microsoft: [Azure Key Vault RBAC guide](https://learn.microsoft.com/en-us/azure/key-vault/general/rbac-guide)
+
+## الخطوات التالية
+
+- [استخدام الأسرار في متغيرات البيئة وإدارة الأذونات](/ar/enterprise/features/secrets-manager/usage)
+- للتنوع متعدد السحاب، إعداد ما يعادله لـ AWS موجود في [AWS Workload Identity (اتحاد OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity) وما يعادله لـ GCP في [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity).
+
+## مرجع لقطات الشاشة
+
+تُربط العناصر النائبة أعلاه بـ:
+
+- `01-register-app.png` — نموذج "Register an application" في بوابة Azure مع `crewai-secrets-reader`.
+- `02-add-federated-credential.png` — App Registration ← Certificates & secrets ← Federated credentials ← Add credential، مع **Other issuer**، رابط مُصدر المنصة، الموضوع `organization:`، الجمهور `api://AzureADTokenExchange`.
+- `03-grant-vault-rbac.png` — Key Vault ← Access control (IAM) ← Add role assignment، مع **Key Vault Secrets User** و App Registration المختار.
+- `04-per-secret-rbac.png` — نفس النموذج لكن في نطاق IAM سر واحد (مسار أقل الامتيازات البديل).
+- `05-amp-add-wi-config-azure.png` — نموذج "Add Workload Identity Config" في CrewAI Platform مع Cloud Provider = Azure و Tenant ID و Client ID مأهولين.
+- `06-amp-wi-list-with-azure.png` — صفحة قائمة Workload Identity بعد الإنشاء، تُظهر صفوفاً لـ AWS و GCP وتكوين Azure الجديد.
+- `07-amp-add-credential-azure-wi.png` — نموذج "Add Secret Provider Credential" مع Provider = Azure Key Vault، Auth = Workload Identity، تكوين WI المختار، و Key Vault URL مأهول.
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/azure.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/azure.mdx
new file mode 100644
index 000000000..dbc619da8
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/azure.mdx
@@ -0,0 +1,196 @@
+---
+title: Azure Key Vault
+description: تكوين Azure Key Vault كمزود أسرار لـ CrewAI Platform من البداية إلى النهاية
+sidebarTitle: ببيانات اعتماد ثابتة
+icon: "key"
+---
+
+## نظرة عامة
+
+يأخذك هذا الدليل عبر تكوين Azure Key Vault كمزود أسرار لمؤسستك على CrewAI Platform، باستخدام **App Registration في Microsoft Entra مع سر عميل**. بنهاية الدليل، ستتمكن CrewAI Platform من قراءة الأسرار المخزّنة في Azure Key Vault الخاص بك وحقنها كقيم متغيرات بيئة وقت التشغيل.
+
+
+يغطي هذا الدليل مسار **بيانات الاعتماد الثابتة** — تُحَلّ الأسرار وقت النشر وتُدمج في صورة النشر. تتطلب القيم المُدوَّرة إعادة نشر. إذا أردت أسراراً مراعية للتدوير تُحدَّث في كل إطلاق أتمتة، راجع [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity).
+
+
+
+يغطي هذا الدليل التكوين من جانب Azure وإعداد بيانات الاعتماد في CrewAI Platform. للإشارة بعدها إلى سر من متغير بيئة، راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage).
+
+
+## المتطلبات المسبقة
+
+
+قبل البدء، تأكد من امتلاكك:
+
+- اشتراك Azure لديه إذن إنشاء App Registrations في Microsoft Entra ومنح تعيينات أدوار على موارد Key Vault.
+- Key Vault يستخدم **Azure RBAC** للترخيص (وليس النموذج القديم لسياسة الوصول). إذا كان الخزنة لا تزال تستخدم سياسات الوصول، فحوّلها إلى RBAC ضمن لوحة **Access configuration** للخزنة.
+- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذن `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
+
+
+## الخطوة 1 — إنشاء App Registration
+
+App Registration هي الهوية من جانب Microsoft Entra التي ستُصادق بها CrewAI Platform.
+
+في [بوابة Microsoft Entra](https://entra.microsoft.com)، انتقل إلى **App registrations** وانقر على **New registration**.
+
+- **Name:** `crewai-secrets-reader`
+- **Supported account types:** `Accounts in this organizational directory only (Single tenant)`.
+- اترك **Redirect URI** فارغاً.
+
+انقر على **Register**. سجّل **Application (client) ID** و **Directory (tenant) ID** في لوحة نظرة عامة التطبيق — ستلصق كليهما في CrewAI Platform في الخطوة 4.
+
+للتفاصيل الكاملة، راجع وثائق Microsoft: [Register an application with the Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app).
+
+{/* SCREENSHOT: Azure "Register an application" form with name "crewai-secrets-reader" → /images/secrets-manager/azure/01-register-app.png */}
+
+## الخطوة 2 — إنشاء سر عميل
+
+في App Registration، انتقل إلى **Certificates & secrets** ← **Client secrets** ← **New client secret**.
+
+- **Description:** `crewai-platform`
+- **Expires:** اختر مدة تتطابق مع سياسة التدوير لديك (تحدّد Microsoft هذا بـ 24 شهراً كحد أقصى).
+
+انقر على **Add**. انسخ عمود **Value** فوراً — لا يمكن إعادة عرضه أبداً بمجرد مغادرة الصفحة.
+
+
+أسرار العميل هي بيانات اعتماد ثابتة طويلة الأمد. خزّن القيمة بأمان (في مدير كلمات مرور أو مخزن أسرارك الخاص) ودوّرها قبل انتهاء الصلاحية. للقضاء على بيانات الاعتماد الثابتة تماماً، استخدم [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity) بدلاً من ذلك.
+
+
+{/* SCREENSHOT: "Client secrets" tab with the new secret row and the "Value" column highlighted → /images/secrets-manager/azure/02-create-client-secret.png */}
+
+## الخطوة 3 — منح App Registration وصولاً إلى Key Vault
+
+تحتاج CrewAI Platform إلى وصول قراءة للأسرار في Key Vault الخاص بك. استخدم أحد نطاقين — **على مستوى الخزنة** للبساطة، أو **لكل سر** لأقل الامتيازات.
+
+
+
+ في [وحدة تحكم Key Vault](https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.KeyVault%2Fvaults)، افتح الخزنة الهدف، ثم انتقل إلى **Access control (IAM)** ← **Add** ← **Add role assignment**.
+
+ - **Role:** **Key Vault Secrets User**
+ - **Assign access to:** User, group, or service principal
+ - **Members:** ابحث عن App Registration الخاص بك (`crewai-secrets-reader`) واختره.
+
+ انقر على **Review + assign**.
+
+ أو عبر Azure CLI:
+
+ ```bash
+ az role assignment create \
+ --assignee \
+ --role "Key Vault Secrets User" \
+ --scope $(az keyvault show --name --query id -o tsv)
+ ```
+
+ {/* SCREENSHOT: Key Vault "Add role assignment" panel with "Key Vault Secrets User" and the App Registration selected → /images/secrets-manager/azure/03-grant-vault-rbac.png */}
+
+
+
+ امنح الدور على مستوى سر فردي. كرّر لكل سر ينبغي أن تصل إليه CrewAI Platform:
+
+ ```bash
+ az role assignment create \
+ --assignee \
+ --role "Key Vault Secrets User" \
+ --scope $(az keyvault secret show --vault-name --name --query id -o tsv)
+ ```
+
+ {/* SCREENSHOT: Per-secret "Access control (IAM)" panel showing role assignment scoped to one secret → /images/secrets-manager/azure/04-per-secret-rbac.png */}
+
+
+
+
+يسمح دور **Key Vault Secrets User** بقراءة قيم الأسرار لكن ليس سرد جميع الأسرار في الخزنة. يستدعي الاقتراح التلقائي لاسم السر في CrewAI Platform أيضاً `list` — هذا الإذن مُضمَّن في الدور على نطاق الخزنة، لكن **ليس** على نطاق لكل سر. مع ارتباطات لكل سر، لن يقترح الإكمال التلقائي أسراراً؛ اكتب اسم السر الكامل بدلاً من ذلك.
+
+
+## الخطوة 4 — إضافة بيانات الاعتماد في CrewAI Platform
+
+في CrewAI Platform، انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
+
+{/* SCREENSHOT: Sidebar/nav highlighting Settings → Secret Provider Credentials → /images/secrets-manager/usage/01-amp-settings-nav.png */}
+
+املأ النموذج:
+
+- **Name:** اسم وصفي، مثلاً `azure-prod`.
+- **Provider:** `Azure Key Vault`.
+- **Key Vault URL:** اسم مضيف DNS للخزنة، مثلاً `https://my-vault.vault.azure.net`.
+- **Tenant ID:** **Directory (tenant) ID** الخاص بـ Microsoft Entra من الخطوة 1.
+- **Client ID:** **Application (client) ID** الخاص بـ App Registration من الخطوة 1.
+- **Client Secret:** **Value** الذي نسخته في الخطوة 2.
+- (اختياري) حدّد **Set as default credential for this provider**. تُستخدم بيانات الاعتماد الافتراضية بواسطة متغيرات البيئة التي تشير إلى أسرار Azure بدون تحديد بيانات اعتماد صراحةً.
+
+انقر على **Create**.
+
+{/* SCREENSHOT: "Add Secret Provider Credential" form with Azure fields filled in → /images/secrets-manager/azure/05-amp-add-credential-form-azure.png */}
+
+## الخطوة 5 — إنشاء سر واحد على الأقل في Azure Key Vault
+
+إذا لم يكن لديك بالفعل أسرار في Key Vault، أنشئ واحداً الآن لتتمكن من التحقق من الاتصال في الخطوة 6.
+
+في وحدة تحكم Key Vault، انتقل إلى **Objects** ← **Secrets** ← **Generate/Import**.
+
+- **Upload options:** `Manual`
+- **Name:** مثلاً `openai-api-key`
+- **Secret value:** الصق قيمة سرّك
+- اترك الباقي على القيم الافتراضية.
+
+انقر على **Create**.
+
+أو عبر Azure CLI:
+
+```bash
+az keyvault secret set \
+ --vault-name \
+ --name openai-api-key \
+ --value "sk-your-actual-key"
+```
+
+
+**اصطلاحات اسم السر.** لا يمكن أن تحتوي أسماء أسرار Azure Key Vault على شرطات سفلية. تُحوّل CrewAI Platform تلقائياً الشرطات السفلية إلى شرطات عند استدعاء Azure (مثلاً، `db_password` تُرسل كـ `db-password`)، لذا يمكنك الاحتفاظ بأسماء متغيرات بيئة بنمط الشرطة السفلية — لكن السر الأساسي في Key Vault يجب أن يستخدم الشرطات.
+
+
+
+**صيغة الإشارة بمفتاح JSON.** يتعامل Key Vault مع قيم الأسرار كسلاسل معتمة. إذا حدث أن كانت قيمة سرّك كائن JSON، يمكن لـ CrewAI Platform استخراج حقل واحد باستخدام صيغة `secret-name#json_key` (مثلاً `database-credentials#password`). راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) للتفاصيل.
+
+
+للتفاصيل الكاملة، راجع وثائق Microsoft: [Set and retrieve a secret](https://learn.microsoft.com/en-us/azure/key-vault/secrets/quick-create-cli).
+
+{/* SCREENSHOT: Azure Key Vault "Create a secret" form with name and value → /images/secrets-manager/azure/06-create-secret.png */}
+
+## الخطوة 6 — اختبار الاتصال
+
+عُد إلى CrewAI Platform، في صفحة **Secret Provider Credentials**، اعثر على بيانات الاعتماد التي أنشأتها للتو وانقر على **Test Connection**.
+
+تؤكد رسالة نجاح أن CrewAI Platform يمكنها المصادقة مع Microsoft Entra وقراءة الأسرار من خزنتك.
+
+{/* SCREENSHOT: Success toast after clicking "Test Connection" on the Azure credential → /images/secrets-manager/azure/07-test-connection-success.png */}
+
+إذا فشل الاختبار، تحقق من الأسباب الأكثر شيوعاً:
+
+| العَرَض | السبب المحتمل |
+|---|---|
+| `AADSTS7000215: Invalid client secret provided` | **Client Secret** الملصوق خاطئ أو منتهي الصلاحية. أعد إنشاء السر (الخطوة 2) وحدّث بيانات الاعتماد. |
+| `AADSTS700016: Application not found in the directory` | لا يطابق **Tenant ID** أو **Client ID** الـ App Registration. تحقق من الخطوة 4 من جديد. |
+| `Forbidden — caller does not have permission` | يفتقد App Registration إلى دور **Key Vault Secrets User** على الخزنة (أو لكل سر). تحقق من الخطوة 3 من جديد. |
+| `Vault not found` / أخطاء DNS | **Key Vault URL** خاطئ، أو أن خزنتك لديها نقاط نهاية خاصة تمنع الوصول العام. تأكد من أن المضيف يستجيب لـ `curl https://.vault.azure.net/secrets?api-version=7.4`. |
+| `Forbidden — request was not authorized` (الخزنة تستخدم سياسات الوصول القديمة) | لم يتم تحويل الخزنة إلى Azure RBAC. ضمن **Access configuration** للخزنة، عيّن نموذج الإذن إلى **Azure role-based access control** وأعد منح الدور من الخطوة 3. |
+
+## الخطوات التالية
+
+الآن وقد اتصل Azure Key Vault، توجّه إلى [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage) من أجل:
+
+- منح أعضاء المؤسسة الأذونات الصحيحة لاستخدام (أو إدارة) مدير الأسرار.
+- الإشارة إلى أسرار Azure الخاصة بك من متغيرات بيئة CrewAI Platform.
+
+إذا كنت تريد أسراراً **مراعية للتدوير** تنتشر دون إعادة نشر، انتقل إلى [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity) — نفس الخزنة، بدون سر عميل للتدوير، وتُجلب الأسرار في كل إطلاق.
+
+## مرجع لقطات الشاشة
+
+تُربط العناصر النائبة أعلاه بـ:
+
+- `01-register-app.png` — نموذج "Register an application" في بوابة Azure مع `crewai-secrets-reader`.
+- `02-create-client-secret.png` — App Registration ← Certificates & secrets ← Client secrets، مع صف السر المُنشأ حديثاً (عمود Value مُميَّز قبل تمويهه).
+- `03-grant-vault-rbac.png` — Key Vault ← Access control (IAM) ← Add role assignment، مع اختيار **Key Vault Secrets User** و App Registration كعضو.
+- `04-per-secret-rbac.png` — نفس اللوحة لكن بنطاق سر واحد (مسار أقل الامتيازات البديل).
+- `05-amp-add-credential-form-azure.png` — نموذج "Add Secret Provider Credential" في CrewAI Platform: Provider = Azure Key Vault، جميع الحقول الخمسة مأهولة.
+- `06-create-secret.png` — لوحة "Create a secret" في Azure Key Vault مع `openai-api-key` وقيمة ملصوقة.
+- `07-test-connection-success.png` — رسالة نجاح / حالة صف في CrewAI Platform بعد النقر على **Test Connection** على بيانات الاعتماد.
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/gcp-workload-identity.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/gcp-workload-identity.mdx
new file mode 100644
index 000000000..6a0b8d13a
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/gcp-workload-identity.mdx
@@ -0,0 +1,273 @@
+---
+title: GCP Workload Identity Federation
+description: تكوين Google Cloud Secret Manager عبر Workload Identity Federation للوصول إلى الأسرار بشكل مراعٍ للتدوير وبدون بيانات اعتماد
+sidebarTitle: بـ Workload Identity
+icon: "id-badge"
+---
+
+## نظرة عامة
+
+يُكوِّن هذا الدليل Google Cloud Secret Manager كمزود أسرار باستخدام **Workload Identity Federation**: تُصدر CrewAI Platform رموز OIDC قصيرة الأمد، وتُبادلها للحصول على بيانات اعتماد Google Cloud عبر خدمة Security Token Service، وتقرأ أسرارك — دون تخزين أي مفتاح حساب خدمة طويل الأمد في أي مكان.
+
+
+**لماذا هذا المسار:** تُحَلّ الأسرار وقت تنفيذ الأتمتة، لذا **تنتشر القيم المُدوَّرة إلى الإطلاق التالي بدون إعادة نشر**. إن كنت تحتاج فقط بيانات اعتماد ثابتة، راجع الدليل الأبسط [GCP — مفتاح حساب الخدمة](/ar/enterprise/features/secrets-manager/gcp).
+
+
+### كيف يعمل وقت التشغيل
+
+1. يطلب عامل النشر JWT OIDC طازج من CrewAI Platform.
+2. يبادل العامل الـ JWT للحصول على بيانات اعتماد Google موحَّدة عبر [Security Token Service](https://cloud.google.com/iam/docs/reference/sts/rest)، مع الإشارة إلى Workload Identity Pool Provider الذي ستُعدّه أدناه.
+3. يستدعي العامل `secretmanager.googleapis.com:accessSecretVersion` لقراءة السر، باستخدام بيانات الاعتماد الموحَّدة مباشرةً (يمتلك الكيان الموحَّد `roles/secretmanager.secretAccessor` — راجع الخطوة 4).
+4. تُحقن القيمة المجلوبة كقيمة لمتغير البيئة لإطلاق الأتمتة ذاك.
+
+تُخزَّن رموز موضوع OIDC مؤقتاً لنحو ساعة لتفادي إعادة الإصدار في كل إطلاق. تُجلب قيم الأسرار طازجة في كل إطلاق بغض النظر عن حالة ذاكرة OIDC المؤقتة، وهذا ما يجعل هذا المسار مراعياً للتدوير.
+
+## المتطلبات المسبقة
+
+
+قبل البدء، تأكد من امتلاكك:
+
+- يجب أن تتضمن صورة حاوية الأتمتة إصدار CrewAI runtime رقم `1.14.5` أو أحدث.
+- مشروع Google Cloud مع تفعيل **Secret Manager API** و **Security Token Service API** و **IAM Credentials API**. فعّلها عبر الوحدة أو:
+
+ ```bash
+ gcloud services enable secretmanager.googleapis.com sts.googleapis.com iamcredentials.googleapis.com \
+ --project=
+ ```
+
+- إذن في المشروع لإنشاء Workload Identity Pools وأدوار IAM وحسابات الخدمة و(إن لزم) الأسرار.
+- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذني `workload_identity_configs: manage` و `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
+- **يجب أن يكون تنصيب CrewAI Platform قابلاً للوصول من Google Cloud عبر HTTPS** ليتمكّن GCP STS من جلب وثيقة اكتشاف OIDC و JWKS أثناء التحقق من الرمز. تأكد مع مسؤول المنصة من أن المضيف متاح عبر الإنترنت.
+
+
+## الخطوة 1 — العثور على عنوان مُصدر OIDC لـ CrewAI Platform
+
+ينشر تنصيب CrewAI Platform وثيقة اكتشاف OpenID Connect على `https:///.well-known/openid-configuration`. الحقل `issuer` هناك هو الرابط الذي ستُسجِّله Google كمزود OIDC موثوق.
+
+افتح الرابط في المتصفح:
+
+```
+https:///.well-known/openid-configuration
+```
+
+ينبغي أن ترى JSON يحتوي على:
+
+```json
+{
+ "issuer": "https://",
+ "jwks_uri": "https:///oauth2/jwks",
+ ...
+}
+```
+
+سجّل القيمة الدقيقة لـ `issuer` — ستستخدمها في الخطوة 3.
+
+
+إذا أعاد الرابط 404 أو 503، اتصل بمسؤول المنصة. يتطلب مُصدر OIDC تكوين مفتاح توقيع خاص وقت التنصيب. راجع دليل تنصيب المنصة لتكوين `OIDC_PRIVATE_KEY` و `OIDC_ISSUER`.
+
+
+## الخطوة 2 — إنشاء Workload Identity Pool
+
+Workload Identity Pool هو حاوية من جانب Google Cloud للهويات الخارجية الموثوقة. ستُسجِّل CrewAI Platform كمزود داخل هذه الحوض.
+
+```bash
+gcloud iam workload-identity-pools create crewai-pool \
+ --project= \
+ --location=global \
+ --display-name="CrewAI Platform"
+```
+
+أو في [وحدة تحكم Workload Identity Pools](https://console.cloud.google.com/iam-admin/workload-identity-pools)، انقر على **Create Pool**.
+
+{/* SCREENSHOT: GCP "Create Workload Identity Pool" form with name "crewai-pool" → /images/secrets-manager/gcp-wi/01-create-pool.png */}
+
+## الخطوة 3 — إضافة CrewAI Platform كمزود OIDC في الحوض
+
+```bash
+gcloud iam workload-identity-pools providers create-oidc crewai-provider \
+ --project= \
+ --location=global \
+ --workload-identity-pool=crewai-pool \
+ --display-name="CrewAI Platform OIDC" \
+ --issuer-uri="https://" \
+ --attribute-mapping="google.subject=assertion.sub,attribute.organization=assertion.organization_id" \
+ --attribute-condition="assertion.organization_id != ''"
+```
+
+يُخبر `--attribute-mapping` Google كيفية ربط ادّعاءات JWT بسمات Google:
+- `google.subject` هو معرّف الكيان — نربطه بادّعاء `sub` في JWT، الذي تُعيّنه CrewAI Platform إلى `organization:`.
+- `attribute.organization` هو سمة مخصصة — نربطها بادّعاء `organization_id` في JWT لتتمكّن من الإشارة إليها في ارتباطات IAM لاحقاً.
+
+`--attribute-condition` هو فحص دفاع في العمق يرفض الرموز التي تفتقد لادّعاء `organization_id`.
+
+احصل على **اسم مورد المزود** (ستحتاجه للجمهور وارتباطات IAM):
+
+```bash
+gcloud iam workload-identity-pools providers describe crewai-provider \
+ --project= \
+ --location=global \
+ --workload-identity-pool=crewai-pool \
+ --format="value(name)"
+```
+
+يبدو الناتج هكذا:
+
+```
+projects//locations/global/workloadIdentityPools/crewai-pool/providers/crewai-provider
+```
+
+هذه هي قيمة **Workload Identity Provider** الخاصة بك في CrewAI Platform في الخطوة 6. تحسب CrewAI Platform تلقائياً جمهور OIDC كـ `//iam.googleapis.com/` عند إصدار الرموز.
+
+{/* SCREENSHOT: "Add provider to pool" form with OIDC selected, issuer URI, audience defaults, attribute mapping → /images/secrets-manager/gcp-wi/02-add-oidc-provider.png */}
+
+## الخطوة 4 — منح الوصول إلى Secret Manager للكيان الموحَّد
+
+اربط دوري Secret Manager كليهما على نطاق المشروع بالكيان الموحَّد — دور يُفعّل الاقتراح التلقائي لاسم السر في نموذج متغير البيئة، والآخر يسمح بقراءة قيم الأسرار عند إطلاق الأتمتة. كلاهما مطلوبان لتعمل الميزة من البداية إلى النهاية.
+
+```bash
+PRINCIPAL_SET="principalSet://iam.googleapis.com/projects//locations/global/workloadIdentityPools/crewai-pool/attribute.organization/"
+
+# Required for the Secret Name autocomplete (calls secretmanager.secrets.list)
+gcloud projects add-iam-policy-binding \
+ --member="$PRINCIPAL_SET" \
+ --role="roles/secretmanager.viewer"
+
+# Required to read secret values at kickoff
+gcloud projects add-iam-policy-binding \
+ --member="$PRINCIPAL_SET" \
+ --role="roles/secretmanager.secretAccessor"
+```
+
+استبدل `` برقم المشروع الرقمي (`gcloud projects describe --format='value(projectNumber)'`) و `` بـ UUID مؤسسة CrewAI Platform التي يجب أن يُسمح لها بقراءة أسرارك. يمكنك العثور على UUID المؤسسة في واجهة المنصة في صفحة إعدادات المؤسسة، أو عبر الـ API. يقصر هذا الاتحاد على مؤسسة CrewAI محددة — تُقبل فقط الرموز المُصدَرة لأتمتات تلك المؤسسة.
+
+أو عبر وحدة تحكم Google Cloud:
+
+1. افتح **IAM & Admin** ← **IAM** لمشروعك.
+2. انقر على **GRANT ACCESS**.
+3. **New principals:** الصق سلسلة `principalSet://...attribute.organization/` الكاملة.
+4. عيّن الدور **Secret Manager Viewer** (`roles/secretmanager.viewer`).
+5. انقر على **SAVE**.
+6. انقر على **GRANT ACCESS** مرة أخرى وكرّر مع الدور **Secret Manager Secret Accessor** (`roles/secretmanager.secretAccessor`).
+
+
+**العزل لكل مؤسسة.** يقيّد النمط `principalSet://...attribute.organization/` الوصول إلى رموز مؤسسة محددة. إذا كانت لديك مؤسسات CrewAI متعددة تتشارك مشروع Google Cloud واحد، كرّر كلا الارتباطين لكل مؤسسة بالـ UUID الصحيح — أو استخدم شرط سمة أقل تقييداً إن لم يكن العزل ضرورياً.
+
+
+
+**تحديد نطاق `secretAccessor` لكل سر (اختياري).** إذا كنت تفضّل عدم منح `roles/secretmanager.secretAccessor` على نطاق المشروع، احذف الارتباط الثاني أعلاه واربط لكل سر بدلاً من ذلك:
+
+```bash
+gcloud secrets add-iam-policy-binding \
+ --member="$PRINCIPAL_SET" \
+ --role="roles/secretmanager.secretAccessor" \
+ --project=
+```
+
+أبقِ `roles/secretmanager.viewer` على نطاق المشروع في كلا الحالتين — `secretmanager.secrets.list` (الذي يعتمد عليه الاقتراح التلقائي) لا يمكن منحه لكل سر.
+
+
+## الخطوة 5 — إنشاء سر واحد على الأقل في GCP
+
+إذا لم يكن لديك سر للاختبار، أنشئ واحداً عبر CLI `gcloud`:
+
+```bash
+echo -n "hello from gcp" | gcloud secrets create crewai-test-keyword \
+ --data-file=- \
+ --project= \
+ --replication-policy=automatic
+```
+
+أو عبر [وحدة تحكم Secret Manager](https://console.cloud.google.com/security/secret-manager):
+
+1. افتح **Secret Manager** في مشروع GCP الخاص بك.
+2. انقر على **+ CREATE SECRET**.
+3. **Name:** `crewai-test-keyword`. **Secret value:** الصق قيمتك.
+4. انقر على **CREATE SECRET**.
+
+## الخطوة 6 — إضافة تكوين Workload Identity في CrewAI Platform
+
+في CrewAI Platform، انتقل إلى **Settings** ← **Workload Identity** وانقر على **Add Workload Identity Config**.
+
+املأ النموذج:
+
+- **Name:** اسم وصفي، مثلاً `gcp-prod`.
+- **Cloud Provider:** `GCP`.
+- **Workload Identity Provider:** اسم مورد المزود من الخطوة 3، مثلاً `projects//locations/global/workloadIdentityPools/crewai-pool/providers/crewai-provider`.
+- (اختياري) بدّل **Default Configuration** إذا كنت ترغب في أن يكون هذا هو تكوين WI الافتراضي المُحدَّد عند إنشاء بيانات اعتماد سر مدعومة بـ GCP.
+
+انقر على **Create**.
+
+{/* SCREENSHOT: "Add Workload Identity Config" form with GCP and provider resource name → /images/secrets-manager/gcp-wi/03-amp-add-wi-config-gcp.png */}
+{/* SCREENSHOT: Workload Identity list showing both AWS and GCP rows → /images/secrets-manager/gcp-wi/04-amp-wi-list-with-gcp.png */}
+
+## الخطوة 7 — إضافة بيانات اعتماد مزود أسرار مرتبطة بتكوين WI
+
+انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
+
+املأ النموذج:
+
+- **Name:** اسم وصفي، مثلاً `gcp-prod-wi`.
+- **Provider:** `Google Cloud Secret Manager`.
+- **Authentication Method:** `Workload Identity`.
+- **Workload Identity Configuration:** اختر التكوين الذي أنشأته في الخطوة 6.
+- **Project ID:** معرّف مشروع GCP الخاص بك (نفس المشروع الذي يملك الأسرار).
+- (اختياري) حدّد **Set as default credential for this provider**.
+
+سيطلب النموذج فقط **Project ID** ضمن Workload Identity — حقل **Service Account JSON** مخفي عمداً لأنه لا ينطبق على هذا المسار؛ تأتي الهوية الموحَّدة من تكوين WI المرتبط.
+
+انقر على **Create**.
+
+{/* SCREENSHOT: "Add Secret Provider Credential" form with GCP + Workload Identity + WI config dropdown → /images/secrets-manager/gcp-wi/05-amp-add-credential-gcp-wi.png */}
+
+## الخطوة 8 — اختبار الاتصال
+
+بعد حفظ بيانات الاعتماد، انقر على **Test Connection**. لبيانات اعتماد workload-identity، يتحقق هذا من مصافحة OIDC: تُصدر CrewAI Platform JWT وتبادله عبر Security Token Service للحصول على رمز وصول Google موحَّد. نتيجة خضراء تعني أن ارتباط الاتحاد سليم.
+
+نجاح Test Connection يُثبت أن Workload Identity Pool ومزود OIDC وربط السمات وشرط السمة موصولة جميعها بشكل صحيح. لا يُثبت ذلك أن IAM في Secret Manager صحيح — يُمارَس `secretmanager.secrets.list` و `secretmanager.versions.access` بشكل منفصل عند تحميل الاقتراح التلقائي لاسم السر أو عندما يُحَلّ متغير بيئة عند الإطلاق. راجع [استكشاف الأخطاء](#troubleshooting) لأنماط فشل المصافحة.
+
+## الخطوة 9 — الإشارة إلى السر في متغير بيئة
+
+أَشِر إلى السر على أتمتة، تماماً كما تفعل مع أي متغير بيئة مدعوم بمدير أسرار. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) لحقول النموذج والسلوك.
+
+## الخطوة 10 — التحقق من التدوير
+
+بعد تشغيل عملية النشر، دوّر السر في GCP بإضافة إصدار جديد (يقرأ Secret Manager دائماً أحدث إصدار مفعَّل افتراضياً):
+
+```bash
+echo -n "rotated value" | gcloud secrets versions add crewai-test-keyword \
+ --data-file=- \
+ --project=
+```
+
+أطلق إطلاق أتمتة جديداً. ستكون بيئة الإطلاق ترى `"rotated value"` — بدون إعادة نشر ولا إعادة تشغيل عامل ولا انتظار TTL.
+
+للتأكد في سجلات العامل، ابحث عن:
+
+```
+Workload identity config '' (gcp): N secret(s) resolved
+```
+
+يظهر هذا السطر لكل إطلاق ويُشير إلى استدعاء `accessSecretVersion` طازج مقابل GCP.
+
+## استكشاف الأخطاء
+
+| العَرَض | السبب المحتمل |
+|---|---|
+| يفشل Test Connection بخطأ مصافحة | رُفض تبادل رمز STS. تحقق من وجود Workload Identity Pool، وأن مُصدر مزود OIDC يطابق قيمة `issuer` للمنصة، وأن شرط السمة يقبل ادّعاءات JWT. تأكد من أن رابط اكتشاف OIDC للمنصة قابل للوصول من GCP عبر الإنترنت العام. |
+| `Could not refresh access token: invalid_target` | لا يطابق ادّعاء الجمهور الجمهور المتوقع لمزود Workload Identity. تُعيّن CrewAI Platform الجمهور تلقائياً؛ إذا خصّصته، فتأكد من أنه يطابق `//iam.googleapis.com/`. |
+| `Failed to fetch JWKS from issuer` | لا يمكن لـ GCP STS الوصول إلى مضيف CrewAI Platform. تأكد من أن المضيف متاح عبر الإنترنت وأن `/.well-known/openid-configuration` يُعيد 200. |
+| `Attribute condition rejected token` | يتطلب شرط السمة لمزود OIDC (الخطوة 3) `organization_id`. تُعيّن CrewAI Platform هذا الادّعاء دائماً، لذا يعني هذا عادةً تكوين حوض/مزود خاطئاً. تحقق من شرط السمة للمزود من جديد. |
+| يُظهر الاقتراح التلقائي لاسم السر `PERMISSION_DENIED: secretmanager.secrets.list` | يفتقد الكيان الموحَّد إلى `roles/secretmanager.viewer` على نطاق المشروع. إذن `secretmanager.secrets.list` محصور بنطاق المشروع فقط ولا يمكن منحه لكل سر. راجع الخطوة 4. |
+| يفشل الإطلاق في حلّ سر رغم نجاح Test Connection | ارتباط WI سليم، لكن `secretmanager.versions.access` مفقود على السر الفاشل. راجع `roles/secretmanager.secretAccessor` (على نطاق المشروع، أو لكل سر إذا حدّدت النطاق بهذه الطريقة في الخطوة 4). |
+| لا تُلتقط القيمة المُدوَّرة في الإطلاق التالي | تأكد من أن متغير البيئة على الأتمتة يشير إلى بيانات اعتماد مدعومة بـ Workload Identity (وليس بيانات اعتماد بمفاتيح ثابتة). يدمج المسار الثابت القيم في صورة النشر. |
+
+### روابط مرجعية
+
+- GCP: [Workload Identity Federation overview](https://cloud.google.com/iam/docs/workload-identity-federation)
+- GCP: [Configure Workload Identity Federation with OIDC](https://cloud.google.com/iam/docs/workload-identity-federation-with-other-providers)
+- GCP: [Secret Manager IAM roles](https://cloud.google.com/secret-manager/docs/access-control)
+
+## الخطوات التالية
+
+- [استخدام الأسرار في متغيرات البيئة وإدارة الأذونات](/ar/enterprise/features/secrets-manager/usage)
+- للتنوع متعدد السحاب، راجع أيضاً [AWS Workload Identity (اتحاد OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity) و [Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity).
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/gcp.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/gcp.mdx
new file mode 100644
index 000000000..2503d146e
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/gcp.mdx
@@ -0,0 +1,189 @@
+---
+title: Google Cloud Secret Manager
+description: تكوين Google Cloud Secret Manager كمزود أسرار لـ CrewAI Platform من البداية إلى النهاية
+sidebarTitle: ببيانات اعتماد ثابتة
+icon: "key"
+---
+
+## نظرة عامة
+
+يأخذك هذا الدليل عبر تكوين Google Cloud Secret Manager كمزود أسرار لمؤسستك على CrewAI Platform، باستخدام **بيانات اعتماد حساب خدمة**. بنهاية الدليل، ستتمكن CrewAI Platform من قراءة الأسرار المخزّنة في مشروع Google Cloud الخاص بك وحقنها كقيم متغيرات بيئة وقت التشغيل.
+
+
+يغطي هذا الدليل مسار **بيانات الاعتماد الثابتة** — تُحَلّ الأسرار وقت النشر وتُدمج في صورة النشر. تتطلب القيم المُدوَّرة إعادة نشر. إذا أردت أسراراً مراعية للتدوير تُحدَّث في كل إطلاق أتمتة، راجع [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity).
+
+
+
+يغطي هذا الدليل التكوين من جانب GCP وإعداد بيانات الاعتماد في CrewAI Platform. للإشارة بعدها إلى سر من متغير بيئة، راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage).
+
+
+## المتطلبات المسبقة
+
+
+قبل البدء، تأكد من امتلاكك:
+
+- مشروع Google Cloud مع تفعيل **Secret Manager API**. فعّله في [وحدة تحكم APIs & Services](https://console.cloud.google.com/apis/library/secretmanager.googleapis.com) أو عبر `gcloud`:
+
+ ```bash
+ gcloud services enable secretmanager.googleapis.com --project=YOUR_PROJECT_ID
+ ```
+
+- إذن في المشروع لإنشاء حسابات خدمة ومنح أدوار IAM و(إن لزم) إنشاء الأسرار.
+- مؤسسة على CrewAI Platform يمتلك مستخدمك فيها إذن `secret_providers: manage`. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac).
+
+
+## الخطوة 1 — إنشاء حساب خدمة
+
+حساب الخدمة هو الهوية من جانب GCP التي ستُصادق بها CrewAI Platform.
+
+في [وحدة تحكم IAM & Admin ← Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts)، انقر على **Create Service Account**.
+
+- **Service account name:** `crewai-secrets-reader`
+- **Service account ID:** يُملأ تلقائياً من الاسم (مثلاً `crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com`)
+- **Description (optional):** "Read-only access to Secret Manager for CrewAI Platform"
+
+انقر على **Create and Continue**. تخطَّ المنح الاختيارية في هذه الشاشة — ستُرفق الدور في الخطوة 2. انقر على **Done**.
+
+للتفاصيل الكاملة، راجع وثائق GCP: [Create service accounts](https://cloud.google.com/iam/docs/service-accounts-create).
+
+{/* SCREENSHOT: GCP "Create service account" form with name "crewai-secrets-reader" → /images/secrets-manager/gcp/01-create-service-account.png */}
+
+## الخطوة 2 — منح الوصول إلى Secret Manager
+
+تحتاج CrewAI Platform إلى إذن لسرد وقراءة الأسرار في مشروعك. استخدم أحد نطاقين — **على مستوى المشروع** للبساطة، أو **لكل سر** لأقل الامتيازات.
+
+
+
+ في [وحدة تحكم IAM](https://console.cloud.google.com/iam-admin/iam)، انقر على **Grant Access** و:
+
+ - **New principals:** بريد حساب الخدمة من الخطوة 1.
+ - **Role:** **Secret Manager Secret Accessor** (`roles/secretmanager.secretAccessor`).
+
+ انقر على **Save**.
+
+ أو عبر `gcloud`:
+
+ ```bash
+ gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
+ --member="serviceAccount:crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
+ --role="roles/secretmanager.secretAccessor"
+ ```
+
+ {/* SCREENSHOT: GCP IAM "Grant access" panel with the service account and Secret Manager Secret Accessor role → /images/secrets-manager/gcp/02-iam-grant-access.png */}
+
+
+
+ امنح الدور فقط على الأسرار المحددة التي ينبغي أن تصل إليها CrewAI Platform. كرّر لكل سر:
+
+ ```bash
+ gcloud secrets add-iam-policy-binding YOUR_SECRET_NAME \
+ --member="serviceAccount:crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
+ --role="roles/secretmanager.secretAccessor" \
+ --project=YOUR_PROJECT_ID
+ ```
+
+ أو في الوحدة: افتح كل سر في [Secret Manager](https://console.cloud.google.com/security/secret-manager)، انقر على **Permissions** في اللوحة اليمنى، وامنح **Secret Manager Secret Accessor** لحساب الخدمة.
+
+ {/* SCREENSHOT: Per-secret "Permissions" panel in Secret Manager with the service account granted accessor role → /images/secrets-manager/gcp/03-per-secret-permissions.png */}
+
+
+
+
+يمنح دور `roles/secretmanager.secretAccessor` وصول قراءة فقط لقيم الأسرار. تستدعي CrewAI Platform أيضاً `secretmanager.secrets.list` لتجربة الاقتراح التلقائي في نموذج متغير البيئة — هذا الإذن مُضمَّن في الدور على نطاق المشروع، لكن **ليس** على نطاق لكل سر. مع ارتباطات لكل سر، لن يقترح الإكمال التلقائي أسراراً؛ ستحتاج إلى كتابة اسم السر الكامل.
+
+
+## الخطوة 3 — إنشاء مفتاح حساب الخدمة
+
+افتح حساب الخدمة من الخطوة 1 في [وحدة تحكم IAM & Admin ← Service Accounts](https://console.cloud.google.com/iam-admin/serviceaccounts).
+
+- انقر على علامة التبويب **Keys**.
+- انقر على **Add Key** ← **Create new key**.
+- **Key type:** JSON.
+- انقر على **Create**. يُنزّل المتصفح ملف JSON — احتفظ به بأمان؛ لا يمكن إعادة تنزيله.
+
+أو عبر `gcloud`:
+
+```bash
+gcloud iam service-accounts keys create ./crewai-secrets-reader.json \
+ --iam-account=crewai-secrets-reader@YOUR_PROJECT_ID.iam.gserviceaccount.com
+```
+
+
+مفتاح حساب الخدمة هو بيانات اعتماد ثابتة طويلة الأمد. خزّنه بأمان (في مدير كلمات مرور أو مخزن أسرارك الخاص) ودوّره بشكل منتظم. للقضاء على بيانات الاعتماد الثابتة تماماً، استخدم [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity) بدلاً من ذلك.
+
+
+{/* SCREENSHOT: Service account "Keys" tab with the "Create new key" → JSON option → /images/secrets-manager/gcp/04-create-service-account-key.png */}
+
+## الخطوة 4 — إضافة بيانات الاعتماد في CrewAI Platform
+
+في CrewAI Platform، انتقل إلى **Settings** ← **Secret Provider Credentials** وانقر على **Add Credential**.
+
+{/* SCREENSHOT: Sidebar/nav highlighting Settings → Secret Provider Credentials → /images/secrets-manager/usage/01-amp-settings-nav.png */}
+
+املأ النموذج:
+
+- **Name:** اسم وصفي، مثلاً `gcp-prod`.
+- **Provider:** `Google Cloud Secret Manager`.
+- **Project ID:** معرّف مشروع GCP الخاص بك (مثلاً `my-crewai-prod`).
+- **Service Account JSON:** الصق المحتوى الكامل لملف JSON الذي نزّلته في الخطوة 3.
+- (اختياري) حدّد **Set as default credential for this provider**. تُستخدم بيانات الاعتماد الافتراضية بواسطة متغيرات البيئة التي تشير إلى أسرار GCP بدون تحديد بيانات اعتماد صراحةً.
+
+انقر على **Create**.
+
+{/* SCREENSHOT: "Add Secret Provider Credential" form with GCP fields filled in → /images/secrets-manager/gcp/05-amp-add-credential-form-gcp.png */}
+
+## الخطوة 5 — إنشاء سر واحد على الأقل في GCP
+
+إذا لم يكن لديك بالفعل أسرار في GCP Secret Manager، أنشئ واحداً الآن لتتمكن من التحقق من الاتصال في الخطوة 6.
+
+في [وحدة تحكم Secret Manager](https://console.cloud.google.com/security/secret-manager)، انقر على **Create secret**.
+
+- **Name:** اسم فريد، مثلاً `openai-api-key`.
+- **Secret value:** إما لصق قيمة خام أو رفع ملف.
+- اترك إعدادات التدوير والتكرار وغيرها على القيم الافتراضية ما لم تكن لديك متطلبات محددة.
+
+انقر على **Create secret**.
+
+أو عبر `gcloud`:
+
+```bash
+echo -n "sk-your-actual-key" | gcloud secrets create openai-api-key \
+ --data-file=- \
+ --project=YOUR_PROJECT_ID \
+ --replication-policy=automatic
+```
+
+
+**صيغة الإشارة بمفتاح JSON.** يتعامل GCP Secret Manager مع قيم الأسرار كبيانات معتمة. إذا حدث أن كانت قيمة سرّك سلسلة JSON، يمكن لـ CrewAI Platform استخراج حقل واحد باستخدام صيغة `secret-name#json_key` (مثلاً `database-credentials#password`). راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) للتفاصيل.
+
+
+للتفاصيل الكاملة، راجع وثائق GCP: [Create a secret](https://cloud.google.com/secret-manager/docs/create-secret-quickstart).
+
+{/* SCREENSHOT: GCP "Create secret" form with name and value → /images/secrets-manager/gcp/06-create-secret.png */}
+
+## الخطوة 6 — اختبار الاتصال
+
+عُد إلى CrewAI Platform، في صفحة **Secret Provider Credentials**، اعثر على بيانات الاعتماد التي أنشأتها للتو وانقر على **Test Connection**.
+
+تؤكد رسالة نجاح أن CrewAI Platform يمكنها المصادقة مع GCP وقراءة الأسرار من مشروعك.
+
+{/* SCREENSHOT: Success toast after clicking "Test Connection" on the GCP credential → /images/secrets-manager/gcp/07-test-connection-success.png */}
+
+إذا فشل الاختبار، تحقق من الأسباب الأكثر شيوعاً:
+
+| العَرَض | السبب المحتمل |
+|---|---|
+| `PERMISSION_DENIED` عند سرد الأسرار | يفتقد حساب الخدمة إلى `roles/secretmanager.secretAccessor`، أو حدّدت نطاقه لكل سر (لا يُمنح `list`). تحقق من الخطوة 2 من جديد. |
+| `PERMISSION_DENIED` على `secretmanager.secrets.access` | نفس ما سبق، لكن لسر محدد. تأكد من أن حساب الخدمة يمتلك دور accessor على السر المعني. |
+| `unauthorized_client` / `invalid_grant` | ملف Service Account JSON الملصوق غير صالح أو منتهي الصلاحية أو لحساب خدمة محذوف. أعد إنشاء المفتاح (الخطوة 3) والصقه من جديد. |
+| `Project ID does not match` | لا يطابق حقل Project ID في CrewAI Platform المشروع الذي يملك حساب الخدمة / الأسرار. تحقق من الخطوة 4 من جديد. |
+| `API not enabled` | Secret Manager API غير مفعَّل في المشروع. راجع المتطلبات المسبقة. |
+
+## الخطوات التالية
+
+الآن وقد اتصل GCP، توجّه إلى [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage) من أجل:
+
+- منح أعضاء المؤسسة الأذونات الصحيحة لاستخدام (أو إدارة) مدير الأسرار.
+- الإشارة إلى أسرار GCP الخاصة بك من متغيرات بيئة CrewAI Platform.
+
+إذا كنت تريد أسراراً **مراعية للتدوير** تنتشر دون إعادة نشر، انتقل إلى [GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity) — نفس مخزن الأسرار، بدون بيانات اعتماد ثابتة، وتُجلب الأسرار في كل إطلاق.
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/overview.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/overview.mdx
new file mode 100644
index 000000000..82dbcca3d
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/overview.mdx
@@ -0,0 +1,96 @@
+---
+title: نظرة عامة على مدير الأسرار
+description: ربط مخازن الأسرار الخارجية بمنصة CrewAI Platform والإشارة إلى الأسرار المُدارة من متغيرات البيئة
+sidebarTitle: نظرة عامة
+icon: "book-open"
+---
+
+## نظرة عامة
+
+تُتيح ميزة مدير الأسرار لمؤسستك ربط مخزن أسرار خارجي — AWS Secrets Manager أو Google Cloud Secret Manager أو Azure Key Vault — والإشارة إلى تلك الأسرار مباشرةً من متغيرات البيئة على الأتمتات والطواقم لديك. بدلاً من لصق قيم نصية صريحة في المنصة، فإنك تخزّن مجموعة واحدة من بيانات الاعتماد لكل مزود وتُشير إلى الأسرار بالاسم.
+
+يمنحك هذا:
+
+- **تخزين مركزي** — إدارة الأسرار في مزوّدك بدلاً من تعديل إعدادات CrewAI Platform. لا تحتفظ CrewAI Platform بأي نسخة نصية صريحة من قيمة السر.
+- **تقليل التعرّض** — لا تظهر القيم الحساسة أبداً كنص صريح في إعدادات CrewAI Platform.
+- **قابلية تدقيق سحابية المنشأ** — يسجّل سجل التدقيق الخاص بمزوّدك كل قراءة لسر.
+
+
+يتطلب مدير الأسرار (مساران: بيانات الاعتماد الثابتة و Workload Identity) إصدار CrewAI runtime رقم `1.14.5` أو أحدث في صورة حاوية الأتمتة.
+
+
+## مساران: بيانات اعتماد ثابتة مقابل Workload Identity
+
+هناك طريقتان لربط CrewAI Platform بمخزن أسرار السحابة لديك. **يختلفان اختلافاً كبيراً في سلوك التدوير**، لذا اختر بناءً على مدى تكرار تدوير أسرارك ومدى صرامة وضعك الأمني.
+
+| الجانب | بيانات الاعتماد الثابتة | Workload Identity (اتحاد OIDC) |
+|---|---|---|
+| **المصادقة** | مفاتيح وصول / ملف JSON لحساب خدمة طويلة الأمد مخزّنة في CrewAI Platform | رموز قصيرة الأمد تُصدر لكل عملية عامل؛ لا تُخزَّن بيانات اعتماد ثابتة في أي مكان |
+| **انتشار التدوير** | تُحَلّ وقت النشر و**تُدمج في صورة حاوية النشر** — تتطلب القيم المُدوَّرة إعادة نشر | تُحَلّ **وقت تنفيذ الأتمتة** — تنتشر القيم المُدوَّرة إلى الإطلاق التالي بدون إعادة نشر |
+| **جهد الإعداد** | أقل — لصق المفاتيح / رفع ملف JSON لحساب الخدمة | أعلى — تسجيل CrewAI Platform كمزود OIDC في سحابتك وتكوين سياسات الثقة |
+| **الأنسب لـ** | البداية، الأسرار قليلة التدوير، عمليات نشر بحساب واحد | الإنتاج، الأسرار كثيرة التدوير، البيئات التي تحكمها الامتثال وتمنع بيانات الاعتماد طويلة الأمد |
+
+
+**يستخدم كلا المسارين نفس تدفق الواجهة** للإشارة إلى الأسرار في متغيرات البيئة (راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage)). الفرق بالكامل في كيفية مصادقة المنصة لسحابتك ومتى تقرأ قيمة السر.
+
+
+### اختر دليل الإعداد الخاص بك
+
+| المزود | بيانات الاعتماد الثابتة | Workload Identity |
+|---|---|---|
+| AWS Secrets Manager | [AWS — المفاتيح الثابتة / AssumeRole](/ar/enterprise/features/secrets-manager/aws) | [AWS — Workload Identity (OIDC)](/ar/enterprise/features/secrets-manager/aws-workload-identity) |
+| Google Cloud Secret Manager | [GCP — مفتاح حساب الخدمة](/ar/enterprise/features/secrets-manager/gcp) | [GCP — Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity) |
+| Azure Key Vault | [Azure — السر المُعرَّف للعميل](/ar/enterprise/features/secrets-manager/azure) | [Azure — Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity) |
+
+
+واجهتا مدير الأسرار و Workload Identity مُوسومتان حالياً بـ **Beta** في CrewAI Platform.
+
+
+## كيف تتلاءم الأجزاء معاً
+
+إعداد مدير الأسرار هو تدفق من ثلاث خطوات يشمل كلاً من مزود السحابة و CrewAI Platform:
+
+1. **يُكوِّن المسؤول بيانات اعتماد المزود.** هذا هو العمل من جانب السحابة — ويختلف العمل اعتماداً على المسار (بيانات الاعتماد الثابتة أو Workload Identity) الذي تختاره. تغطي أدلة المزودين هذا من البداية إلى النهاية.
+2. **يُشير المسؤول (أو عضو مصرَّح له) إلى سر في متغير بيئة.** من صفحة متغيرات البيئة، يختار المستخدم بيانات اعتماد المزود ويُحدّد اسم السر. راجع [استخدام مدير الأسرار](/ar/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables).
+3. **تتلقى الأتمتة القيمة المحلولة وقت التشغيل.** عندما يعمل طاقم أو أتمتة، تجلب CrewAI Platform السر من مزوّدك وتحقنه كقيمة لمتغير البيئة. مع Workload Identity، يحدث هذا الجلب في كل إطلاق (مراعٍ للتدوير). مع بيانات الاعتماد الثابتة، يحدث الجلب وقت النشر وتُدمج القيمة في صورة النشر.
+
+## الرؤية والنطاق
+
+
+تتّبع متغيرات البيئة المدعومة بـ WI نفس نموذج الإسناد الذي تتّبعه متغيرات البيئة العادية: لا تحلّ الأتمتة سوى متغيرات البيئة المدعومة بـ WI المُسنَدة إليها صراحةً. أَسنِد متغير WI إلى أتمتة من صفحة متغيرات البيئة الخاصة بتلك الأتمتة؛ المتغيرات المُعرَّفة على مستوى المنظمة أو في مشروع Studio لا تُحلّ عند الإطلاق حتى تُسنِدها.
+
+
+
+تُشغَّل مرحلة جلب الأسرار في كل إطلاق، لكنها لا تقوم بعمل فعلي إلا حين تكون هناك متغيرات بيئة مدعومة بـ WI مُسنَدة إلى النشر. لكل متغير مُسنَد، يُحلّ وقت التشغيل القيمة من مزوّدك السحابي في كل إطلاق لـ crew أو flow أو training أو test أو checkpoint-restore ويكتبها في بيئة العملية. عند عدم وجود أي متغير مُسنَد، تكون المرحلة بلا أثر (no-op). وإلا فإن التكلفة تتناسب مع عدد المتغيرات المُسنَدة: تأخّر إضافي بسيط لكل إطلاق بالإضافة إلى إدخال واحد في سجل تدقيق السحابة لكل متغير.
+
+
+
+على مستوى *تكوينات* Workload Identity، لا يزال النطاق اليوم عاماً على مستوى المنظمة. تُهيَّأ كل أتمتة في المنظمة استناداً إلى جميع تكوينات Workload Identity التي سجّلتها المنظمة، ولا يمكنك اليوم ربط تكوين Workload Identity محدد بأتمتة بعينها. تحديد نطاق Workload Identity لكل أتمتة موجود في خارطة الطريق. حتى ذلك الحين، سجِّل فقط تكوينات Workload Identity التي يحقّ لكل أتمتة في منظمتك استخدامها.
+
+
+## الأذونات
+
+تتحكم ميزتان في CrewAI Platform بالوصول إلى مدير الأسرار:
+
+- `secret_providers` — تتحكم بمن يستطيع عرض أو إدارة بيانات اعتماد المزودين.
+- `environment_variables` — تتحكم بمن يستطيع إنشاء وتحرير متغيرات البيئة (بما فيها تلك التي تُشير إلى أسرار).
+
+تتحكم ميزة ثالثة بإعداد Workload Identity:
+
+- `workload_identity_configs` — تتحكم بمن يستطيع عرض أو إدارة تكوينات Workload Identity. مطلوبة فقط إذا كنت تستخدم مسار Workload Identity.
+
+يتمتع المالكون دائماً بالوصول الكامل. لا يحصل الأعضاء على وصول إلى `secret_providers` أو `workload_identity_configs` افتراضياً ويجب منحهم الإذن عبر دور مخصص. راجع [الأذونات (RBAC)](/ar/enterprise/features/secrets-manager/usage#permissions-rbac) للحصول على المصفوفة الكاملة والتعليمات خطوة بخطوة.
+
+## الخطوات التالية
+
+اختر مسارك:
+
+- **بيانات الاعتماد الثابتة** (أبسط، تتطلب إعادة نشر عند التدوير):
+ - [تكوين AWS Secrets Manager](/ar/enterprise/features/secrets-manager/aws)
+ - [تكوين Google Cloud Secret Manager](/ar/enterprise/features/secrets-manager/gcp)
+ - [تكوين Azure Key Vault](/ar/enterprise/features/secrets-manager/azure)
+- **Workload Identity** (مراعٍ للتدوير، بدون إعادة نشر):
+ - [تكوين AWS Workload Identity](/ar/enterprise/features/secrets-manager/aws-workload-identity)
+ - [تكوين GCP Workload Identity Federation](/ar/enterprise/features/secrets-manager/gcp-workload-identity)
+ - [تكوين Azure Workload Identity Federation](/ar/enterprise/features/secrets-manager/azure-workload-identity)
+- ثم: [استخدام الأسرار في متغيرات البيئة وإدارة الأذونات](/ar/enterprise/features/secrets-manager/usage)
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/usage.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/usage.mdx
new file mode 100644
index 000000000..223b10b28
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/usage.mdx
@@ -0,0 +1,137 @@
+---
+title: استخدام مدير الأسرار
+description: إدارة الأذونات والإشارة إلى الأسرار المُدارة من متغيرات البيئة في CrewAI Platform
+sidebarTitle: الاستخدام والأذونات
+icon: "list-check"
+---
+
+## نظرة عامة
+
+هذا الدليل محايد تجاه المزود. يفترض أنك (أو مسؤول آخر) قد كوّنت بالفعل بيانات اعتماد واحدة على الأقل لمزود أسرار. اختر دليل الإعداد الخاص بك بناءً على المسار الذي تريده:
+
+- بيانات الاعتماد الثابتة: [AWS](/ar/enterprise/features/secrets-manager/aws) · [GCP](/ar/enterprise/features/secrets-manager/gcp)
+- Workload Identity (مراعٍ للتدوير): [AWS](/ar/enterprise/features/secrets-manager/aws-workload-identity) · [GCP](/ar/enterprise/features/secrets-manager/gcp-workload-identity)
+
+استخدم هذا الدليل من أجل:
+
+- منح الأذونات الصحيحة لأعضاء المؤسسة.
+- الإشارة إلى الأسرار من متغيرات البيئة على أتمتاتك.
+- التحقق من أن كل شيء يُحَلّ بشكل صحيح وقت التشغيل.
+
+## الأذونات (RBAC)
+
+ثلاث ميزات في CrewAI Platform ذات صلة عند العمل مع مدير الأسرار:
+
+- `secret_providers` — تتحكم بالوصول إلى صفحة **بيانات اعتماد مزود الأسرار**.
+- `workload_identity_configs` — تتحكم بالوصول إلى صفحة **Workload Identity** (ذات صلة فقط إذا كنت تستخدم مسار WI).
+- `environment_variables` — تتحكم بمن يستطيع إنشاء أو تحرير متغيرات البيئة.
+
+لكل ميزة مستويا إجراء: `read` و `manage`. منح `manage` يستلزم تلقائياً `read`.
+
+### ما يجب منحه
+
+| الهدف | `secret_providers` | `workload_identity_configs` | `environment_variables` |
+|---|---|---|---|
+| استخدام بيانات اعتماد ثابتة موجودة في متغيرات البيئة (بدون تعديل المزود) | `read` | — | `manage` |
+| إنشاء أو تحرير أو حذف بيانات الاعتماد الثابتة | `manage` | — | `manage` |
+| استخدام بيانات اعتماد مدعومة بـ Workload Identity موجودة في متغيرات البيئة | `read` | — | `manage` |
+| إنشاء أو تحرير أو حذف تكوينات Workload Identity (وبيانات الاعتماد التي تشير إليها) | `manage` | `manage` | `manage` |
+
+
+يتمتع **المالكون** تلقائياً بالوصول الكامل إلى كل ميزة. يستبعد دور **العضو** الافتراضي عمداً `secret_providers` و `workload_identity_configs` — يجب على المسؤولين تضمين الأعضاء صراحةً عبر دور مخصص.
+
+
+### كيفية التعيين
+
+1. في CrewAI Platform، انتقل إلى **Settings** ← **Roles**. من هذه الصفحة يمكنك إنشاء أدوار جديدة وتحرير أذونات كل دور وتعيين الأدوار للأعضاء الحاليين في المؤسسة.
+
+ {/* SCREENSHOT: Sidebar highlighting Settings → Roles → /images/secrets-manager/usage/06-amp-settings-roles-nav.png */}
+ {/* SCREENSHOT: Roles list page with "Create Role" button visible → /images/secrets-manager/usage/07-amp-roles-list.png */}
+
+2. انقر على **Create Role** لإنشاء دور جديد، أو افتح دوراً موجوداً لتحرير أذوناته.
+
+3. في محرر أذونات الدور، بدّل الميزات ذات الصلة وفق الجدول أعلاه:
+
+ - `secret_providers`: اختر **read** إذا كان هذا الدور يحتاج فقط إلى استخدام بيانات الاعتماد الموجودة، أو **manage** إذا كان ينبغي أن يكون قادراً أيضاً على إنشاء بيانات الاعتماد وتحريرها وحذفها.
+ - `environment_variables`: اختر **manage** ليتمكن الدور من إنشاء متغيرات بيئة تُشير إلى الأسرار.
+
+ {/* SCREENSHOT: Role editor showing the secret_providers feature with read/manage toggles → /images/secrets-manager/usage/08-amp-role-editor-secret-providers-toggles.png */}
+ {/* SCREENSHOT: Role editor showing environment_variables toggles → /images/secrets-manager/usage/09-amp-role-editor-env-vars-toggles.png */}
+
+4. احفظ الدور.
+
+5. عيّن الدور للأعضاء ذوي الصلة من نفس صفحة Roles (أو قائمة أعضاء المؤسسة).
+
+ {/* SCREENSHOT: Member assignment screen where the new role is applied to a user → /images/secrets-manager/usage/10-amp-assign-role-to-member.png */}
+
+## الإشارة إلى الأسرار في متغيرات البيئة
+
+بمجرد وجود بيانات اعتماد للمزود وامتلاك دورك للأذونات الصحيحة، يمكنك الإشارة إلى الأسرار المُدارة من أي متغير بيئة.
+
+في CrewAI Platform، انتقل إلى **Environment Variables** وانقر على **Add Environment Variables**.
+
+{/* SCREENSHOT: Environment Variables empty state with "Add" button → /images/secrets-manager/usage/11-amp-env-vars-empty.png */}
+
+املأ النموذج:
+
+- **Key** — اسم متغير البيئة. يجب أن يبدأ بحرف أو شرطة سفلية ويحتوي فقط على حروف وأرقام وشرطات سفلية. عادةً بأحرف كبيرة، مثل `OPENAI_API_KEY`.
+
+- **Value Source** — اختر من أين تأتي القيمة:
+ - **Direct Value** — قيمة نصية صريحة تكتبها. استخدم هذا عندما لا ترغب في إشراك مزود.
+ - **Use AWS default** (أو ما يعادله لمزوّدك) — تستخدم بيانات الاعتماد المُعلَّمة حالياً كافتراضية لذلك النوع من المزود.
+ - **بيانات اعتماد مُسمَّاة محددة** — اختر بيانات الاعتماد بالاسم. استخدم هذا إذا كانت لديك بيانات اعتماد متعددة لنفس المزود (مثلاً `aws-prod` و `aws-staging`) وتريد اختيار واحدة صراحةً.
+
+ {/* SCREENSHOT: Env var form with the "Value Source" dropdown open, showing "AWS default" + named credentials → /images/secrets-manager/usage/12-amp-env-var-form-source-selector.png */}
+
+- **Secret Name** — اسم السر في مزوّدك. بمجرد اختيار بيانات الاعتماد، يُقدّم هذا الحقل اقتراحاً تلقائياً: ابدأ بالكتابة، وتستعلم CrewAI Platform مزوّدك عن أسماء الأسرار المطابقة.
+
+ استخدم الصيغة `secret-name#json_key` لاستخراج حقل واحد من سر مهيكل (JSON). على سبيل المثال، عند وجود سر `database-credentials` بقيمة `{"username": "...", "password": "..."}`، أَشِر إلى `database-credentials#password` لحقن كلمة المرور فقط.
+
+ {/* SCREENSHOT: Env var form with the secret name autocomplete dropdown showing live results → /images/secrets-manager/usage/13-amp-env-var-form-secret-name-autocomplete.png */}
+
+
+ **ملاحظة Azure Key Vault:** لا يمكن أن تحتوي أسماء أسرار Azure على شرطات سفلية. تُحوّل CrewAI Platform تلقائياً الشرطات السفلية في حقل **Secret Name** إلى شرطات عند استدعاء Azure (مثلاً، `db_password` تُرسل كـ `db-password`).
+
+
+انقر على **Create** لحفظ المتغير.
+
+{/* SCREENSHOT: Env var list with the new variable showing masked value and a "secret" indicator → /images/secrets-manager/usage/14-amp-env-var-created.png */}
+
+
+عند تحرير متغير بيئة موجود، يحافظ ترك حقل **Value** فارغاً على القيمة الحالية. هذا مقصود — فهو يتيح لك تغيير حقول أخرى (مثل اسم السر أو بيانات الاعتماد) دون إعادة إدخال القيمة.
+
+
+## التحقق من العمل
+
+للتحقق من البداية إلى النهاية:
+
+1. أَشِر إلى متغير البيئة على أتمتة أو طاقم أو عملية نشر تماماً كما تفعل مع أي متغير بيئة آخر.
+2. انشر الأتمتة.
+3. أطلق تشغيلاً وتأكد من اكتماله بنجاح.
+
+### يعتمد سلوك التدوير على مسار بيانات الاعتماد
+
+| مسار بيانات الاعتماد | متى يُقرأ السر | ما يتطلبه التدوير |
+|---|---|---|
+| **بيانات الاعتماد الثابتة** (مفاتيح AWS، ملف JSON لحساب خدمة GCP) | **وقت النشر** — تُدمج القيمة في صورة النشر | إعادة نشر الأتمتة بعد تدوير السر |
+| **Workload Identity** (اتحاد OIDC، AWS أو GCP) | **في كل إطلاق أتمتة** — تُجلب القيمة طازجة من سحابتك | لا شيء — يرى الإطلاق التالي بعد التدوير القيمة الجديدة |
+
+
+**إذا كنت تحتاج أسراراً مراعية للتدوير** (بدون إعادة نشر عند التدوير)، استخدم مسار Workload Identity: [AWS WI](/ar/enterprise/features/secrets-manager/aws-workload-identity) أو [GCP WI](/ar/enterprise/features/secrets-manager/gcp-workload-identity). المقايضة هي مزيد من جهد الإعداد مقدماً (تسجيل CrewAI Platform كمزود OIDC في سحابتك) ولكن عمليات أبسط على المدى الطويل.
+
+
+إذا فشل النشر أو التشغيل بخطأ متعلق بسرك، تحقق من الأسباب الأكثر شيوعاً:
+
+| العَرَض | السبب المحتمل |
+|---|---|
+| `no credential found` | يُشير متغير البيئة إلى مزود ولكن لم تُحدَّد بيانات اعتماد بعينها، ولا توجد بيانات اعتماد افتراضية مُعيّنة لذلك النوع من المزود. إما اختر بيانات اعتماد صراحةً على المتغير، أو علِّم بيانات اعتماد كافتراضية على صفحة **Secret Provider Credentials**. |
+| `secret not found` | خطأ مطبعي في **Secret Name**، أو أن السر غير موجود في حساب/منطقة المزود التي تشير إليها بيانات الاعتماد. تحقق من كليهما. |
+| تعمل الأتمتة بالقيمة القديمة بعد التدوير (مسار بيانات الاعتماد الثابتة) | القيمة السابقة مدمجة في صورة حاوية النشر. أعد نشر الأتمتة لاستيعاب القيمة المُدوَّرة. لتجنّب ذلك تماماً، حوّل بيانات الاعتماد إلى مسار Workload Identity. |
+| تعمل الأتمتة بالقيمة القديمة بعد التدوير (مسار Workload Identity) | تأكد من أن متغير البيئة يُشير إلى بيانات اعتماد مدعومة بـ WI (وليس مفاتيح ثابتة). مع WI، ينبغي أن يرى الإطلاق التالي بعد التدوير القيمة الجديدة. إن لم يحدث ذلك، تحقق من أن السر قد تم تحديثه فعلاً في سحابتك (مثلاً، `aws secretsmanager get-secret-value`). |
+| `JSON key not found` | عند استخدام `secret-name#json_key`، يجب أن يكون السر الأساسي كائن JSON صالحاً يحتوي على ذلك المفتاح. تحقق بقراءة السر مباشرة في مزوّدك. |
+
+## الخطوات التالية
+
+- [العودة إلى نظرة عامة على مدير الأسرار](/ar/enterprise/features/secrets-manager/overview)
+- بيانات الاعتماد الثابتة: [AWS](/ar/enterprise/features/secrets-manager/aws) · [GCP](/ar/enterprise/features/secrets-manager/gcp)
+- Workload Identity (مراعٍ للتدوير): [AWS](/ar/enterprise/features/secrets-manager/aws-workload-identity) · [GCP](/ar/enterprise/features/secrets-manager/gcp-workload-identity)
diff --git a/docs/v1.15.1/ar/enterprise/features/secrets-manager/verify-rotation.mdx b/docs/v1.15.1/ar/enterprise/features/secrets-manager/verify-rotation.mdx
new file mode 100644
index 000000000..d992ceb15
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/secrets-manager/verify-rotation.mdx
@@ -0,0 +1,261 @@
+---
+title: التحقق من التدوير
+description: مثال طاقم مستقل يُثبت أن تدوير الأسرار ينتشر إلى عمليات النشر الجارية دون إعادة نشر.
+sidebarTitle: التحقق من التدوير
+icon: "arrows-rotate"
+---
+
+## نظرة عامة
+
+يوضّح لك هذا الدليل كيفية التحقق من أن **السر المُدوَّر في مزود السحابة لديك يُلتقط في أول إطلاق أتمتة لاحق** — بدون إعادة نشر ولا إعادة تشغيل عامل. هذا ذو صلة فقط عندما تكون قد كوّنت بيانات اعتماد مدعومة بـ Workload Identity ([AWS](/ar/enterprise/features/secrets-manager/aws-workload-identity)، [GCP](/ar/enterprise/features/secrets-manager/gcp-workload-identity)، [Azure](/ar/enterprise/features/secrets-manager/azure-workload-identity)). تتطلب عمليات نشر بيانات الاعتماد الثابتة إعادة نشر بعد التدوير؛ ليس هناك ما يجب التحقق منه هنا.
+
+تستخدم الوصفة أدناه طاقماً صغيراً مستقلاً بأداة واحدة ووكيل واحد ومهمة واحدة. لا يُشير موجه الطاقم أبداً إلى قيمة السر — بدلاً من ذلك، تقرأ أداة القيمة من `os.environ` وتُفيد ببصمة SHA-256 لما تراه. دوّر السر في مزود السحابة، أطلق مرة أخرى، وتتغير البصمة.
+
+
+لماذا بصمة وليس القيمة الخام؟ وضع الأسرار الخام في إخراج LLM وسجلات التتبع هو متجه تسرب. البصمة كافية لتأكيد "أن القيمة تغيّرت" دون كتابة القيمة الفعلية في أي مكان يمكن رصده.
+
+
+## المتطلبات المسبقة
+
+قبل تشغيل هذا التحقق:
+
+- بيانات اعتماد مزود أسرار مدعومة بـ WI مكوَّنة ([AWS](/ar/enterprise/features/secrets-manager/aws-workload-identity)، [GCP](/ar/enterprise/features/secrets-manager/gcp-workload-identity)، [Azure](/ar/enterprise/features/secrets-manager/azure-workload-identity)).
+- متغير بيئة على عملية النشر بـ `Secret = true`، المفتاح `API_KEY` (أو أي اسم تفضّله — اضبط الأداة أدناه لتطابقه)، يُشير إلى سر في مزود السحابة.
+- طريقة لتحديث قيمة السر في مزود السحابة (وصول CLI أو وحدة تحكم السحابة).
+- طريقة لإطلاق عملية النشر عبر HTTP (curl أو Postman أو علامة التبويب **Run** في CrewAI Platform).
+
+## الخطوة 1 — هيكلة طاقم التحقق
+
+أنشئ مشروع crew كلاسيكيًا لأن هذا المثال يربط أداة Python عبر `crew.py`:
+
+```bash
+crewai create crew rotation_verifier --classic --skip_provider
+cd rotation_verifier
+```
+
+## الخطوة 2 — إضافة أداة صدى بيانات الاعتماد
+
+استبدل `src/rotation_verifier/tools/custom_tool.py` بأداة تقرأ متغير البيئة المدعوم بسر وتُعيد بصمة:
+
+```python src/rotation_verifier/tools/credential_echo_tool.py
+"""Tool that verifies a runtime-injected secret without leaking the value.
+
+Reads the secret-backed env var (populated by the workload-identity
+secrets manager at kickoff time) and returns a stable fingerprint. Never
+echo raw credential values into LLM output or logs in production code —
+the fingerprint alone is sufficient to confirm rotation worked.
+"""
+
+from __future__ import annotations
+
+import hashlib
+import os
+
+from crewai.tools import BaseTool
+
+
+# Match the deployment environment variable's `key` field.
+ENV_VAR_NAME = "API_KEY"
+
+
+class CredentialEchoTool(BaseTool):
+ name: str = "credential_echo"
+ description: str = (
+ "Read the API credential from the worker's environment and return a "
+ "fingerprint summary. Use this exactly once when asked to verify the "
+ "current credential. Takes no arguments."
+ )
+
+ def _run(self) -> str:
+ value = os.environ.get(ENV_VAR_NAME)
+ if not value:
+ return (
+ f"ERROR: {ENV_VAR_NAME} env var is not set. The workload-"
+ "identity secret fetch did not run, or the deployment is "
+ "missing the secret-backed env var."
+ )
+ fingerprint = hashlib.sha256(value.encode()).hexdigest()[:12]
+ return f"Authenticated. credential.fingerprint=sha256:{fingerprint}"
+```
+
+## الخطوة 3 — استبدال تكوينات الوكيل والمهمة الافتراضية
+
+يضم الطاقم وكيلاً واحداً ومهمة واحدة — كلاهما بأوصاف **لا تذكر أبداً** قيمة السر، لذا تبقى مفاتيح المهام مستقرة عبر عمليات التدوير.
+
+```yaml src/rotation_verifier/config/agents.yaml
+credential_checker:
+ role: >
+ Credential Verifier
+ goal: >
+ Confirm that the workload-identity-backed secret reached this worker
+ process and report a fingerprint of the current value.
+ backstory: >
+ You are a no-nonsense reliability engineer responsible for verifying
+ that secrets fetched at runtime via workload identity are present
+ and fresh. You always use the credential_echo tool exactly once and
+ report the result verbatim — you never make up values.
+```
+
+```yaml src/rotation_verifier/config/tasks.yaml
+verify_credential_task:
+ description: >
+ Use the credential_echo tool to read the runtime-injected credential
+ and produce a one-line confirmation. The current year is {current_year}
+ (use it only in the timestamp; do not transform the credential output).
+ expected_output: >
+ A single line in the form:
+ "[{current_year}] "
+ agent: credential_checker
+```
+
+## الخطوة 4 — توصيل فئة الطاقم
+
+```python src/rotation_verifier/crew.py
+from crewai import Agent, Crew, Process, Task
+from crewai.project import CrewBase, agent, crew, task
+from crewai.agents.agent_builder.base_agent import BaseAgent
+
+from rotation_verifier.tools.credential_echo_tool import CredentialEchoTool
+
+
+@CrewBase
+class RotationVerifierCrew():
+ """Single-task crew that verifies a workload-identity-backed secret
+ was successfully fetched at runtime.
+
+ Rotate the underlying secret in the cloud provider, kickoff again, and
+ the credential fingerprint in the agent's report changes — without any
+ re-deploy, worker restart, or input change. The crew prompt itself
+ never references the secret value.
+ """
+
+ agents: list[BaseAgent]
+ tasks: list[Task]
+
+ @agent
+ def credential_checker(self) -> Agent:
+ return Agent(
+ config=self.agents_config["credential_checker"],
+ tools=[CredentialEchoTool()],
+ verbose=True,
+ )
+
+ @task
+ def verify_credential_task(self) -> Task:
+ return Task(config=self.tasks_config["verify_credential_task"])
+
+ @crew
+ def crew(self) -> Crew:
+ return Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ verbose=True,
+ )
+```
+
+## الخطوة 5 — نشر الطاقم وتكوين متغير بيئة السر
+
+انشر هذا الطاقم على CrewAI Platform تماماً كما تنشر أي طاقم آخر. ثم على صفحة **Environment Variables** الخاصة بعملية النشر:
+
+- **Key:** `API_KEY` (يجب أن يطابق `ENV_VAR_NAME` في الأداة)
+- **Value Source:** بيانات الاعتماد المدعومة بـ WI التي أعدّتها في [AWS WI](/ar/enterprise/features/secrets-manager/aws-workload-identity) أو [GCP WI](/ar/enterprise/features/secrets-manager/gcp-workload-identity)
+- **Secret Name:** اسم السر في Secret Manager الخاص بمزود السحابة لديك
+
+{/* SCREENSHOT: Environment Variables form with key=API_KEY, secret-backed value source selected, secret name filled → /images/secrets-manager/verify-rotation/01-env-var-form.png */}
+
+## الخطوة 6 — تشغيل الإطلاق الأول
+
+استبدل `` و `` بالقيم من علامة التبويب **Run** الخاصة بعملية النشر.
+
+```bash
+curl -m 60 \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -X POST https:///kickoff \
+ -d '{"inputs":{"current_year":"2026"}}'
+```
+
+عندما يكتمل الإطلاق (بضع ثوان)، تحقق من إخراج الوكيل. سترى:
+
+```
+[2026] Authenticated. credential.fingerprint=sha256:004421b993c9
+```
+
+سجّل البصمة. هذا التجزئة مرتبط بشكل فريد بأي قيمة سر موجودة حالياً في مزود السحابة لديك.
+
+## الخطوة 7 — تدوير السر في مزود السحابة
+
+
+
+ ```bash
+ aws secretsmanager update-secret \
+ --region \
+ --secret-id \
+ --secret-string "rotated value"
+ ```
+
+
+
+ أضف إصداراً جديداً (يقرأ Secret Manager دائماً `latest`):
+
+ ```bash
+ echo -n "rotated value" | gcloud secrets versions add \
+ --data-file=- \
+ --project=
+ ```
+
+
+
+ ```bash
+ az keyvault secret set \
+ --vault-name \
+ --name \
+ --value "rotated value"
+ ```
+
+
+
+## الخطوة 8 — تشغيل إطلاق ثانٍ والمقارنة
+
+```bash
+curl -m 60 \
+ -H "Authorization: Bearer " \
+ -H "Content-Type: application/json" \
+ -X POST https:///kickoff \
+ -d '{"inputs":{"current_year":"2026"}}'
+```
+
+يُظهر إخراج الوكيل الآن **بصمة مختلفة**:
+
+```
+[2026] Authenticated. credential.fingerprint=sha256:e2fc89848f72
+```
+
+يُثبت هذا أن التدوير التُقط بواسطة عملية النشر الجارية دون إعادة نشر ولا إعادة تشغيل عامل ولا أي إجراء آخر من قِبل المشغّل.
+
+## ما يتحقق منه هذا — وما لا يتحقق منه
+
+**يتحقق من:**
+- يعمل إصدار رمز OIDC الخاص بـ WI من CrewAI Platform.
+- تقبل الثقة من جانب السحابة (مزود IAM OIDC لـ AWS، Workload Identity Pool لـ GCP، Federated Identity Credential لـ Azure) الرمز.
+- تمتلك الهوية من جانب السحابة (IAM Role / حساب خدمة GCP / Entra App Registration) وصولاً لقراءة السر.
+- تصل قيمة السر إلى `os.environ` لعملية العامل وقت الإطلاق.
+- تنتشر عمليات التدوير اللاحقة إلى الإطلاق التالي.
+
+**لا يتحقق من:**
+- أن طواقم الإنتاج الفعلية لديك تتعامل مع التدوير بسلاسة — مثلاً، المهام طويلة الأمد التي تقرأ متغير البيئة مرة واحدة عند البدء ستستمر في استخدام القيمة القديمة حتى تنتهي المهمة. خطّط وفقاً لذلك: اقرأ الأسرار عند نقطة الاستخدام، وليس عند استيراد الوحدة.
+
+## لماذا لا نُشير إلى السر مباشرةً في الموجه؟
+
+سيضع عرض توضيحي يبدو أبسط قيمة السر مباشرةً في وصف مهمة (مثلاً، "البحث عن `{api_key}`") ويتفحص الموجه. **لا تفعل ذلك.** لسببين:
+
+1. **يُسرّب السر إلى تتبعات استدعاء LLM والسجلات من جانب المزود.** يمكن لأي شخص لديه وصول للتتبعات قراءته.
+2. **يُغيّر وصف المهمة في كل إطلاق.** تُحدّد CrewAI Platform المهام بتجزئة MD5 للوصف؛ القيمة المُدوَّرة تعني أن التجزئة تتغير لكل إطلاق، مما يكسر ربط المهمة من وقت النشر إلى وقت التشغيل. العَرَض: تُسجَّل سجلات المهام كـ `pending_run` إلى الأبد، أو تُسجَّل بعض مهام طاقم متعدد المهام فقط.
+
+يتجاوز النمط القائم على الأداة في هذا الدليل كلتا المشكلتين: الموجه ثابت، تقرأ الأداة متغير البيئة وقت التشغيل، وتصل فقط بصمة القيمة إلى LLM.
+
+## الخطوات التالية
+
+- [العودة إلى نظرة عامة على مدير الأسرار](/ar/enterprise/features/secrets-manager/overview)
+- بمجرد التحقق، أَسقط طاقم التحقق. يجب أن تتبع الطواقم الفعلية النمط نفسه: الوصول إلى الأسرار عبر `os.environ` داخل أداة، وعدم استبدالها أبداً في الموجهات.
diff --git a/docs/v1.15.1/ar/enterprise/features/tools-and-integrations.mdx b/docs/v1.15.1/ar/enterprise/features/tools-and-integrations.mdx
new file mode 100644
index 000000000..146523f26
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/tools-and-integrations.mdx
@@ -0,0 +1,261 @@
+---
+title: الأدوات والتكاملات
+description: "اربط التطبيقات الخارجية وأدِر الأدوات الداخلية التي يمكن لوكلائك استخدامها."
+icon: "wrench"
+mode: "wide"
+---
+
+## نظرة عامة
+
+الأدوات والتكاملات هي المركز الرئيسي لربط تطبيقات الجهات الخارجية وإدارة الأدوات الداخلية التي يمكن لوكلائك استخدامها أثناء التشغيل.
+
+
+ 
+
+
+## استكشاف
+
+
+
+
+## تطبيقات الوكلاء (التكاملات)
+
+اربط تطبيقات المؤسسات (مثل Gmail وGoogle Drive وHubSpot وSlack) عبر OAuth لتمكين إجراءات الوكلاء.
+
+{" "}
+
+
+ انقر على Connect في أحد التطبيقات وأكمل عملية OAuth.
+
+
+ عدّل اختيارياً النطاقات والمشغلات وتوفر الإجراءات.
+
+
+ تصبح الخدمات المتصلة متاحة كأدوات لوكلائك.
+
+
+
+{" "}
+
+
+### ربط حسابك
+
+1. انتقل إلى Integrations
+2. انقر على Connect في الخدمة المطلوبة
+3. أكمل تدفق OAuth وامنح النطاقات
+4. انسخ رمز Enterprise من Integration Settings
+
+{" "}
+
+ 
+
+
+### تثبيت أدوات التكامل
+
+لاستخدام التكاملات محلياً، تحتاج إلى تثبيت أحدث حزمة `crewai-tools`.
+
+```bash
+uv add crewai-tools
+```
+
+### إعداد متغيرات البيئة
+
+{" "}
+
+ لاستخدام التكاملات مع `Agent(apps=[])` يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز Enterprise الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+### مثال على الاستخدام
+
+{" "}
+
+ استخدم النهج المبسط الجديد لدمج تطبيقات المؤسسات. ما عليك سوى تحديد
+ التطبيق وإجراءاته مباشرة في تهيئة Agent.
+
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Gmail capabilities
+email_agent = Agent(
+ role="Email Manager",
+ goal="Manage and organize email communications",
+ backstory="An AI assistant specialized in email management and communication.",
+ apps=['gmail', 'gmail/send_email'] # Using canonical name 'gmail'
+)
+
+# Task to send an email
+email_task = Task(
+ description="Draft and send a follow-up email to john@example.com about the project update",
+ agent=email_agent,
+ expected_output="Confirmation that email was sent successfully"
+)
+
+# Run the task
+crew = Crew(
+ agents=[email_agent],
+ tasks=[email_task]
+)
+
+# Run the crew
+crew.kickoff()
+```
+
+### تصفية الأدوات
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with specific Gmail actions only
+gmail_agent = Agent(
+ role="Gmail Manager",
+ goal="Manage gmail communications and notifications",
+ backstory="An AI assistant that helps coordinate gmail communications.",
+ apps=['gmail/fetch_emails'] # Using canonical name with specific action
+)
+
+notification_task = Task(
+ description="Find the email from john@example.com",
+ agent=gmail_agent,
+ expected_output="Email found from john@example.com"
+)
+
+crew = Crew(
+ agents=[gmail_agent],
+ tasks=[notification_task]
+)
+```
+
+في الطاقم المنشور، يمكنك تحديد الإجراءات المتاحة لكل تكامل من صفحة إعدادات الخدمة.
+
+{" "}
+
+ 
+
+
+### عمليات النشر المحددة النطاق (مؤسسات متعددة المستخدمين)
+
+يمكنك تحديد نطاق كل تكامل لمستخدم معين. على سبيل المثال، طاقم يتصل بـ Google يمكنه استخدام حساب Gmail لمستخدم محدد.
+
+{" "}
+مفيد عندما تحتاج فرق/مستخدمون مختلفون للحفاظ على فصل الوصول إلى البيانات.
+
+استخدم `user_bearer_token` لتحديد نطاق المصادقة للمستخدم الطالب. إذا لم يكن المستخدم مسجل الدخول، فلن يستخدم الطاقم التكاملات المتصلة. وإلا فسيعود إلى رمز الحامل الافتراضي المهيأ لعملية النشر.
+
+{" "}
+
+
+{" "}
+
+### الكتالوج
+
+#### الاتصالات والتعاون
+
+- Gmail — إدارة الرسائل الإلكترونية والمسودات
+- Slack — إشعارات وتنبيهات مساحة العمل
+- Microsoft — تكامل Office 365 وTeams
+
+#### إدارة المشاريع
+
+- Jira — تتبع المشكلات وإدارة المشاريع
+- ClickUp — إدارة المهام والإنتاجية
+- Asana — تنسيق مهام ومشاريع الفريق
+- Notion — إدارة الصفحات وقواعد البيانات
+- Linear — تتبع مشاريع البرمجيات والأخطاء
+- GitHub — إدارة المستودعات والمشكلات
+
+#### إدارة علاقات العملاء
+
+- Salesforce — إدارة حسابات وفرص CRM
+- HubSpot — إدارة خط أنابيب المبيعات وجهات الاتصال
+- Zendesk — إدارة تذاكر دعم العملاء
+
+#### الأعمال والمالية
+
+- Stripe — معالجة المدفوعات وإدارة العملاء
+- Shopify — إدارة متجر ومنتجات التجارة الإلكترونية
+
+#### الإنتاجية والتخزين
+
+- Google Sheets — مزامنة بيانات جداول البيانات
+- Google Calendar — إدارة الأحداث والجداول
+- Box — تخزين الملفات وإدارة المستندات
+
+...والمزيد قادم!
+
+
+
+
+## الأدوات الداخلية
+
+أنشئ أدوات مخصصة محلياً، وانشرها في مستودع أدوات CrewAI AMP واستخدمها في وكلائك.
+
+{" "}
+
+ قبل تشغيل الأوامر أدناه، تأكد من تسجيل الدخول إلى حساب CrewAI AMP
+ بتشغيل هذا الأمر: ```bash crewai login ```
+
+
+{" "}
+
+ 
+
+
+{" "}
+
+
+ أنشئ أداة جديدة محلياً. ```bash crewai tool create your-tool ```
+
+
+ انشر الأداة في مستودع أدوات CrewAI AMP. ```bash crewai tool
+ publish ```
+
+
+ ثبّت الأداة من مستودع أدوات CrewAI AMP. ```bash crewai tool
+ install your-tool ```
+
+
+
+الإدارة:
+
+- الاسم والوصف
+- الرؤية (خاص / عام)
+- متغيرات البيئة المطلوبة
+- سجل الإصدارات والتنزيلات
+- وصول الفرق والأدوار
+
+{" "}
+
+
+
+
+
+## ذو صلة
+
+
+
+ أنشئ وانشر وأدِر إصدارات الأدوات المخصصة لمؤسستك.
+
+
+ أتمت سير العمل وتكامل مع المنصات والخدمات الخارجية.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/features/traces.mdx b/docs/v1.15.1/ar/enterprise/features/traces.mdx
new file mode 100644
index 000000000..533faae25
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/traces.mdx
@@ -0,0 +1,148 @@
+---
+title: التتبعات
+description: "استخدام التتبعات لمراقبة طواقمك"
+icon: "timeline"
+mode: "wide"
+---
+
+## نظرة عامة
+
+توفر التتبعات رؤية شاملة لعمليات تنفيذ طواقمك، مما يساعدك على مراقبة الأداء وتصحيح الأخطاء وتحسين سير عمل وكلاء الذكاء الاصطناعي.
+
+## ما هي التتبعات؟
+
+التتبعات في CrewAI AMP هي سجلات تنفيذ مفصلة تلتقط كل جانب من جوانب عمل طاقمك، من المدخلات الأولية إلى المخرجات النهائية. تسجل:
+
+- أفكار الوكلاء واستدلالاتهم
+- تفاصيل تنفيذ المهام
+- استخدام الأدوات ومخرجاتها
+- مقاييس استهلاك الرموز
+- أوقات التنفيذ
+- تقديرات التكلفة
+
+
+
+## الوصول إلى التتبعات
+
+
+
+ في لوحة تحكم CrewAI AMP، انقر على **Traces** لعرض جميع سجلات التنفيذ.
+
+
+
+ سترى قائمة بجميع عمليات تنفيذ الطاقم، مرتبة حسب التاريخ. انقر على أي عملية تنفيذ لعرض تتبعها المفصل.
+
+
+
+## فهم واجهة التتبع
+
+تنقسم واجهة التتبع إلى عدة أقسام، يقدم كل منها رؤى مختلفة حول تنفيذ طاقمك:
+
+### 1. ملخص التنفيذ
+
+يعرض القسم العلوي مقاييس عالية المستوى حول التنفيذ:
+
+- **إجمالي الرموز**: عدد الرموز المستهلكة عبر جميع المهام
+- **رموز الطلب**: الرموز المستخدمة في الطلبات إلى LLM
+- **رموز الإكمال**: الرموز المُنشأة في استجابات LLM
+- **الطلبات**: عدد استدعاءات API المُجراة
+- **وقت التنفيذ**: المدة الإجمالية لتشغيل الطاقم
+- **التكلفة المقدرة**: التكلفة التقريبية بناءً على استخدام الرموز
+
+
+
+### 2. المهام والوكلاء
+
+يعرض هذا القسم جميع المهام والوكلاء الذين كانوا جزءاً من تنفيذ الطاقم:
+
+- اسم المهمة وتعيين الوكيل
+- الوكلاء ونماذج LLM المستخدمة لكل مهمة
+- الحالة (مكتملة/فاشلة)
+- وقت التنفيذ الفردي للمهمة
+
+
+
+### 3. المخرجات النهائية
+
+يعرض النتيجة النهائية التي أنتجها الطاقم بعد اكتمال جميع المهام.
+
+
+
+### 4. الجدول الزمني للتنفيذ
+
+تمثيل مرئي لوقت بدء وانتهاء كل مهمة، يساعدك على تحديد نقاط الاختناق أو أنماط التنفيذ المتوازي.
+
+
+
+### 5. عرض المهمة المفصل
+
+عند النقر على مهمة محددة في الجدول الزمني أو قائمة المهام، سترى:
+
+
+
+- **مفتاح المهمة**: معرّف فريد للمهمة
+- **معرّف المهمة**: معرّف تقني في النظام
+- **الحالة**: الحالة الحالية (مكتملة/قيد التشغيل/فاشلة)
+- **الوكيل**: الوكيل الذي نفّذ المهمة
+- **LLM**: نموذج اللغة المستخدم لهذه المهمة
+- **وقت البدء/الانتهاء**: متى بدأت المهمة واكتملت
+- **وقت التنفيذ**: مدة هذه المهمة المحددة
+- **وصف المهمة**: ما طُلب من الوكيل تنفيذه
+- **المخرجات المتوقعة**: تنسيق المخرجات المطلوب
+- **المدخلات**: أي مدخلات مقدمة لهذه المهمة من مهام سابقة
+- **المخرجات**: النتيجة الفعلية التي أنتجها الوكيل
+
+## استخدام التتبعات لتصحيح الأخطاء
+
+التتبعات لا تقدر بثمن لاستكشاف المشكلات في طواقمك:
+
+
+
+ عندما لا ينتج تنفيذ الطاقم النتائج المتوقعة، افحص التتبع لمعرفة أين حدث الخطأ. ابحث عن:
+
+ - المهام الفاشلة
+ - قرارات الوكيل غير المتوقعة
+ - أخطاء استخدام الأدوات
+ - التعليمات المُساء فهمها
+
+
+ 
+
+
+
+
+
+ استخدم مقاييس التنفيذ لتحديد نقاط اختناق الأداء:
+
+ - المهام التي استغرقت وقتاً أطول من المتوقع
+ - الاستخدام المفرط للرموز
+ - عمليات الأدوات المكررة
+ - استدعاءات API غير الضرورية
+
+
+
+
+ حلل استخدام الرموز وتقديرات التكلفة لتحسين كفاءة طاقمك:
+
+ - فكّر في استخدام نماذج أصغر للمهام الأبسط
+ - صقل الطلبات لتكون أكثر إيجازاً
+ - خزّن المعلومات المُوصول إليها بشكل متكرر مؤقتاً
+ - نظّم المهام لتقليل العمليات المكررة
+
+
+
+
+## الأداء والتجميع
+
+يجمّع CrewAI تحميلات التتبع لتقليل العبء في عمليات التشغيل ذات الحجم الكبير:
+
+- يقوم TraceBatchManager بتخزين الأحداث مؤقتاً وإرسالها في دفعات عبر عميل Plus API
+- يقلل حركة الشبكة ويحسّن الموثوقية في الاتصالات غير المستقرة
+- يُفعّل تلقائياً في مستمع التتبع الافتراضي؛ لا حاجة لتهيئة
+
+يوفر ذلك تتبعاً أكثر استقراراً تحت الحمل مع الحفاظ على بيانات القياس المفصلة للمهام/الوكلاء.
+
+
+ تواصل مع فريق الدعم للمساعدة في تحليل التتبعات أو أي ميزات أخرى في
+ CrewAI AMP.
+
diff --git a/docs/v1.15.1/ar/enterprise/features/webhook-streaming.mdx b/docs/v1.15.1/ar/enterprise/features/webhook-streaming.mdx
new file mode 100644
index 000000000..562fe0842
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/features/webhook-streaming.mdx
@@ -0,0 +1,172 @@
+---
+title: بث Webhook
+description: "استخدام بث Webhook لإرسال الأحداث إلى webhook الخاص بك"
+icon: "webhook"
+mode: "wide"
+---
+
+## نظرة عامة
+
+يتيح لك بث أحداث Enterprise تلقي تحديثات webhook في الوقت الفعلي حول طواقمك وتدفقاتك المنشورة على CrewAI AMP، مثل استدعاءات النماذج واستخدام الأدوات وخطوات التدفق.
+
+## الاستخدام
+
+عند استخدام Kickoff API، أضف كائن `webhooks` إلى طلبك، على سبيل المثال:
+
+```json
+{
+ "inputs": { "foo": "bar" },
+ "webhooks": {
+ "events": ["crew_kickoff_started", "llm_call_started"],
+ "url": "https://your.endpoint/webhook",
+ "realtime": false,
+ "authentication": {
+ "strategy": "bearer",
+ "token": "my-secret-token"
+ }
+ }
+}
+```
+
+إذا تم تعيين `realtime` إلى `true`، يتم تسليم كل حدث بشكل فردي وفوري، على حساب أداء الطاقم/التدفق.
+
+## تنسيق Webhook
+
+يرسل كل webhook قائمة بالأحداث:
+
+```json
+{
+ "events": [
+ {
+ "id": "event-id",
+ "execution_id": "crew-run-id",
+ "timestamp": "2025-02-16T10:58:44.965Z",
+ "type": "llm_call_started",
+ "data": {
+ "model": "gpt-4",
+ "messages": [
+ { "role": "system", "content": "You are an assistant." },
+ { "role": "user", "content": "Summarize this article." }
+ ]
+ }
+ }
+ ]
+}
+```
+
+يختلف هيكل كائن `data` حسب نوع الحدث. راجع [قائمة الأحداث](https://github.com/crewAIInc/crewAI/tree/main/lib/crewai/src/crewai/events/types) على GitHub.
+
+نظراً لأن الطلبات تُرسل عبر HTTP، لا يمكن ضمان ترتيب الأحداث. إذا كنت تحتاج الترتيب، استخدم حقل `timestamp`.
+
+## الأحداث المدعومة
+
+يدعم CrewAI كلاً من أحداث النظام والأحداث المخصصة في بث أحداث Enterprise. تُرسل هذه الأحداث إلى نقطة نهاية webhook المُهيأة أثناء تنفيذ الطاقم والتدفق.
+
+### أحداث التدفق:
+
+- `flow_created`
+- `flow_started`
+- `flow_finished`
+- `flow_plot`
+- `method_execution_started`
+- `method_execution_finished`
+- `method_execution_failed`
+
+### أحداث الوكيل:
+
+- `agent_execution_started`
+- `agent_execution_completed`
+- `agent_execution_error`
+- `lite_agent_execution_started`
+- `lite_agent_execution_completed`
+- `lite_agent_execution_error`
+- `agent_logs_started`
+- `agent_logs_execution`
+- `agent_evaluation_started`
+- `agent_evaluation_completed`
+- `agent_evaluation_failed`
+
+### أحداث الطاقم:
+
+- `crew_kickoff_started`
+- `crew_kickoff_completed`
+- `crew_kickoff_failed`
+- `crew_train_started`
+- `crew_train_completed`
+- `crew_train_failed`
+- `crew_test_started`
+- `crew_test_completed`
+- `crew_test_failed`
+- `crew_test_result`
+
+### أحداث المهام:
+
+- `task_started`
+- `task_completed`
+- `task_failed`
+- `task_evaluation`
+
+### أحداث استخدام الأدوات:
+
+- `tool_usage_started`
+- `tool_usage_finished`
+- `tool_usage_error`
+- `tool_validate_input_error`
+- `tool_selection_error`
+- `tool_execution_error`
+
+### أحداث LLM:
+
+- `llm_call_started`
+- `llm_call_completed`
+- `llm_call_failed`
+- `llm_stream_chunk`
+
+### أحداث حواجز LLM:
+
+- `llm_guardrail_started`
+- `llm_guardrail_completed`
+
+### أحداث الذاكرة:
+
+- `memory_query_started`
+- `memory_query_completed`
+- `memory_query_failed`
+- `memory_save_started`
+- `memory_save_completed`
+- `memory_save_failed`
+- `memory_retrieval_started`
+- `memory_retrieval_completed`
+
+### أحداث المعرفة:
+
+- `knowledge_search_query_started`
+- `knowledge_search_query_completed`
+- `knowledge_search_query_failed`
+- `knowledge_query_started`
+- `knowledge_query_completed`
+- `knowledge_query_failed`
+
+### أحداث الاستدلال:
+
+- `agent_reasoning_started`
+- `agent_reasoning_completed`
+- `agent_reasoning_failed`
+
+تتطابق أسماء الأحداث مع ناقل الأحداث الداخلي. راجع GitHub للقائمة الكاملة للأحداث.
+
+يمكنك إصدار أحداثك المخصصة الخاصة، وسيتم تسليمها عبر تدفق webhook جنباً إلى جنب مع أحداث النظام.
+
+
+
+ القائمة الكاملة للأحداث
+
+
+ تواصل مع فريق الدعم للمساعدة في تكامل webhook أو
+ استكشاف الأخطاء.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/automation-triggers.mdx b/docs/v1.15.1/ar/enterprise/guides/automation-triggers.mdx
new file mode 100644
index 000000000..672a31814
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/automation-triggers.mdx
@@ -0,0 +1,321 @@
+---
+title: "نظرة عامة على المشغلات"
+description: "فهم كيفية عمل مشغلات CrewAI AMP وكيفية إدارتها وأين تجد أدلة التكامل الخاصة بكل خدمة"
+icon: "face-smile"
+mode: "wide"
+---
+
+تربط مشغلات CrewAI AMP أتمتاتك بالأحداث الفورية عبر الأدوات التي تستخدمها فرقك بالفعل. بدلاً من الاستعلام المتكرر عن الأنظمة أو الاعتماد على التشغيل اليدوي، تستمع المشغلات للتغييرات — رسائل بريد إلكتروني جديدة، تحديثات التقويم، تغييرات حالة CRM — وتطلق فوراً الطاقم أو التدفق الذي تحدده.
+
+
+ 
+
+
+### أدلة التكامل
+
+تقدم الأدلة المفصلة شرحاً لعملية الإعداد وأمثلة على سير العمل لكل تكامل:
+
+
+
+ فعّل الطواقم عند وصول رسائل بريد إلكتروني أو تحديث سلاسل المحادثات.
+
+
+{" "}
+
+
+ استجب لأحداث التقويم عند إنشائها أو تحديثها أو إلغائها.
+
+
+
+{" "}
+
+
+ تعامل مع تحميلات وتعديلات وحذف ملفات Drive.
+
+
+
+{" "}
+
+
+ أتمت الاستجابات لرسائل Outlook الجديدة وتحديثات التقويم.
+
+
+
+{" "}
+
+
+ راقب نشاط الملفات وتغييرات المشاركة في OneDrive.
+
+
+
+{" "}
+
+
+ ابدأ سير العمل عند إنشاء محادثات Teams جديدة.
+
+
+
+{" "}
+
+
+ أطلق الأتمتات من سير عمل HubSpot وأحداث دورة الحياة.
+
+
+
+{" "}
+
+
+ اربط عمليات Salesforce بـ CrewAI لأتمتة CRM.
+
+
+
+{" "}
+
+
+ ابدأ الطواقم مباشرة من أوامر Slack.
+
+
+
+
+ اربط CrewAI بآلاف التطبيقات المدعومة من Zapier.
+
+
+
+## قدرات المشغلات
+
+مع المشغلات، يمكنك:
+
+- **الاستجابة للأحداث الفورية** - تنفيذ سير العمل تلقائياً عند استيفاء شروط محددة
+- **التكامل مع الأنظمة الخارجية** - الاتصال بمنصات مثل Gmail وOutlook وOneDrive وJIRA وSlack وStripe والمزيد
+- **توسيع نطاق الأتمتة** - التعامل مع أحداث كبيرة الحجم دون تدخل يدوي
+- **الحفاظ على السياق** - الوصول إلى بيانات المشغل داخل طواقمك وتدفقاتك
+
+## إدارة المشغلات
+
+### عرض المشغلات المتاحة
+
+للوصول إلى مشغلات الأتمتة وإدارتها:
+
+1. انتقل إلى عملية النشر في لوحة تحكم CrewAI
+2. انقر على علامة تبويب **Triggers** لعرض جميع تكاملات المشغلات المتاحة
+
+
+
+
+
+يعرض هذا العرض جميع تكاملات المشغلات المتاحة لعملية النشر، مع حالة الاتصال الحالية.
+
+### تفعيل وتعطيل المشغلات
+
+يمكن تفعيل أو تعطيل كل مشغل بسهولة باستخدام مفتاح التبديل:
+
+
+
+
+
+- **مُفعّل (تبديل أزرق)**: المشغل نشط وسينفذ عملية النشر تلقائياً عند حدوث الأحداث المحددة
+- **مُعطّل (تبديل رمادي)**: المشغل غير نشط ولن يستجيب للأحداث
+
+انقر ببساطة على التبديل لتغيير حالة المشغل. تسري التغييرات فوراً.
+
+### مراقبة عمليات تنفيذ المشغلات
+
+تتبع أداء وسجل عمليات التنفيذ المُشغّلة:
+
+
+
+
+
+## بناء أتمتات مدفوعة بالمشغلات
+
+قبل بناء أتمتتك، من المفيد فهم هيكل حمولات المشغلات التي ستتلقاها طواقمك وتدفقاتك.
+
+### قائمة فحص إعداد المشغل
+
+قبل ربط مشغل بالإنتاج، تأكد من:
+
+- ربط التكامل تحت **Tools & Integrations** وإكمال خطوات OAuth أو مفتاح API
+- تفعيل تبديل المشغل في عملية النشر التي يجب أن تستجيب للأحداث
+- توفير متغيرات البيئة المطلوبة (رموز API، معرّفات المستأجر، الأسرار المشتركة)
+- إنشاء أو تحديث المهام التي يمكنها تحليل الحمولة الواردة في أول مهمة طاقم أو خطوة تدفق
+- تحديد ما إذا كنت ستمرر سياق المشغل تلقائياً باستخدام `allow_crewai_trigger_context`
+- إعداد المراقبة — سجلات webhook وسجل تنفيذ CrewAI والتنبيهات الخارجية الاختيارية
+
+### اختبار المشغلات محلياً باستخدام CLI
+
+يوفر CrewAI CLI أوامر قوية لمساعدتك في تطوير واختبار الأتمتات المدفوعة بالمشغلات دون النشر في الإنتاج.
+
+#### عرض المشغلات المتاحة
+
+اعرض جميع المشغلات المتاحة للتكاملات المتصلة:
+
+```bash
+crewai triggers list
+```
+
+يعرض هذا الأمر جميع المشغلات المتاحة بناءً على تكاملاتك المتصلة، ويظهر:
+
+- اسم التكامل وحالة الاتصال
+- أنواع المشغلات المتاحة
+- أسماء وأوصاف المشغلات
+
+#### محاكاة تنفيذ المشغل
+
+اختبر طاقمك بحمولات مشغل واقعية قبل النشر:
+
+```bash
+crewai triggers run
+```
+
+على سبيل المثال:
+
+```bash
+crewai triggers run microsoft_onedrive/file_changed
+```
+
+يقوم هذا الأمر بـ:
+
+- تنفيذ طاقمك محلياً
+- تمرير حمولة مشغل كاملة وواقعية
+- محاكاة كيفية استدعاء طاقمك في الإنتاج بالضبط
+
+
+ **ملاحظات تطوير مهمة:**
+ - استخدم `crewai triggers run ` لمحاكاة تنفيذ المشغل أثناء التطوير
+ - استخدام `crewai run` لن يحاكي استدعاءات المشغل ولن يمرر حمولة المشغل
+ - بعد النشر، سيتم تنفيذ طاقمك بحمولة المشغل الفعلية
+ - إذا كان طاقمك يتوقع معاملات غير موجودة في حمولة المشغل، فقد يفشل التنفيذ
+
+
+### المشغلات مع الطاقم
+
+تعمل تعريفات طاقمك الحالية بسلاسة مع المشغلات، تحتاج فقط إلى مهمة لتحليل الحمولة المستلمة:
+
+```python
+@CrewBase
+class MyAutomatedCrew:
+ @agent
+ def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config['researcher'],
+ )
+
+ @task
+ def parse_trigger_payload(self) -> Task:
+ return Task(
+ config=self.tasks_config['parse_trigger_payload'],
+ agent=self.researcher(),
+ )
+
+ @task
+ def analyze_trigger_content(self) -> Task:
+ return Task(
+ config=self.tasks_config['analyze_trigger_data'],
+ agent=self.researcher(),
+ )
+```
+
+سيتلقى الطاقم تلقائياً حمولة المشغل ويمكنه الوصول إليها عبر آليات سياق CrewAI القياسية.
+
+
+ يمكن أن تتضمن مدخلات الطاقم والتدفق `crewai_trigger_payload`. يحقن CrewAI
+ هذه الحمولة تلقائياً: - المهام: تُلحق بوصف المهمة الأولى افتراضياً ("Trigger Payload: {crewai_trigger_payload}") - التحكم
+ عبر `allow_crewai_trigger_context`: عيّن `True` للحقن دائماً، `False` لعدم
+ الحقن أبداً - التدفقات: أي دالة `@start()` تقبل معامل
+ `crewai_trigger_payload` ستستلمه
+
+
+### التكامل مع التدفقات
+
+للتدفقات، لديك تحكم أكبر في كيفية التعامل مع بيانات المشغل:
+
+#### الوصول إلى حمولة المشغل
+
+جميع دوال `@start()` في تدفقاتك ستقبل معاملاً إضافياً يسمى `crewai_trigger_payload`:
+
+```python
+from crewai.flow import Flow, start, listen
+
+class MyAutomatedFlow(Flow):
+ @start()
+ def handle_trigger(self, crewai_trigger_payload: dict = None):
+ """
+ This start method can receive trigger data
+ """
+ if crewai_trigger_payload:
+ # Process the trigger data
+ trigger_id = crewai_trigger_payload.get('id')
+ event_data = crewai_trigger_payload.get('payload', {})
+
+ # Store in flow state for use by other methods
+ self.state.trigger_id = trigger_id
+ self.state.trigger_type = event_data
+
+ return event_data
+
+ # Handle manual execution
+ return None
+
+ @listen(handle_trigger)
+ def process_data(self, trigger_data):
+ """
+ Process the data from the trigger
+ """
+ # ... process the trigger
+```
+
+#### تشغيل الطواقم من التدفقات
+
+عند تشغيل طاقم داخل تدفق تم تشغيله بمشغل، مرر حمولة المشغل كما هي:
+
+```python
+@start()
+def delegate_to_crew(self, crewai_trigger_payload: dict = None):
+ """
+ Delegate processing to a specialized crew
+ """
+ crew = MySpecializedCrew()
+
+ # Pass the trigger payload to the crew
+ result = crew.crew().kickoff(
+ inputs={
+ 'a_custom_parameter': "custom_value",
+ 'crewai_trigger_payload': crewai_trigger_payload
+ },
+ )
+
+ return result
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+**المشغل لا يعمل:**
+
+- تحقق من أن المشغل مُفعّل في علامة تبويب Triggers الخاصة بعملية النشر
+- تحقق من حالة اتصال التكامل تحت Tools & Integrations
+- تأكد من تهيئة جميع متغيرات البيئة المطلوبة بشكل صحيح
+
+**فشل التنفيذ:**
+
+- تحقق من سجلات التنفيذ لتفاصيل الأخطاء
+- استخدم `crewai triggers run ` للاختبار محلياً ورؤية هيكل الحمولة بالضبط
+- تحقق من أن طاقمك يمكنه التعامل مع معامل `crewai_trigger_payload`
+- تأكد من أن طاقمك لا يتوقع معاملات غير مضمنة في حمولة المشغل
+
+**مشاكل التطوير:**
+
+- اختبر دائماً باستخدام `crewai triggers run ` قبل النشر لرؤية الحمولة الكاملة
+- تذكر أن `crewai run` لا يحاكي استدعاءات المشغل — استخدم `crewai triggers run` بدلاً من ذلك
+- استخدم `crewai triggers list` للتحقق من المشغلات المتاحة لتكاملاتك المتصلة
+- بعد النشر، سيتلقى طاقمك حمولة المشغل الفعلية، لذا اختبر بدقة محلياً أولاً
+
+تحوّل مشغلات الأتمتة عمليات نشر CrewAI إلى أنظمة استجابة مدفوعة بالأحداث يمكنها التكامل بسلاسة مع عمليات عملك وأدواتك الحالية.
diff --git a/docs/v1.15.1/ar/enterprise/guides/azure-openai-setup.mdx b/docs/v1.15.1/ar/enterprise/guides/azure-openai-setup.mdx
new file mode 100644
index 000000000..5bc23a120
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/azure-openai-setup.mdx
@@ -0,0 +1,54 @@
+---
+title: "إعداد Azure OpenAI"
+description: "تهيئة Azure OpenAI مع Crew Studio لاتصالات LLM المؤسسية"
+icon: "microsoft"
+mode: "wide"
+---
+
+يرشدك هذا الدليل خلال ربط Azure OpenAI مع Crew Studio لعمليات الذكاء الاصطناعي المؤسسية السلسة.
+
+## عملية الإعداد
+
+
+
+ 1. في Azure، انتقل إلى [Azure AI Foundry](https://ai.azure.com/) > اختر نشر Azure OpenAI الخاص بك.
+ 2. في القائمة اليسرى، انقر على `Deployments`. إذا لم يكن لديك نشر، أنشئ واحداً بالنموذج المطلوب.
+ 3. بمجرد الإنشاء، اختر النشر وحدد موقع `Target URI` و`Key` على الجانب الأيمن من الصفحة. أبقِ هذه الصفحة مفتوحة، حيث ستحتاج هذه المعلومات.
+
+
+
+
+
+
+ 4. في علامة تبويب أخرى، افتح `CrewAI AMP > LLM Connections`. سمِّ اتصال LLM، واختر Azure كمزود، واختر نفس النموذج الذي اخترته في Azure.
+ 5. في نفس الصفحة، أضف متغيرات البيئة من الخطوة 3:
+ - واحد بالاسم `AZURE_DEPLOYMENT_TARGET_URL` (باستخدام Target URI). يجب أن يبدو الرابط هكذا: https://your-deployment.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-08-01-preview
+ - آخر بالاسم `AZURE_API_KEY` (باستخدام Key).
+ 6. انقر على `Add Connection` لحفظ اتصال LLM.
+
+
+
+ 7. في `CrewAI AMP > Settings > Defaults > Crew Studio LLM Settings`، عيّن اتصال LLM والنموذج الجديدين كافتراضيين.
+
+
+
+ 8. تأكد من إعدادات الوصول إلى الشبكة:
+ - في Azure، انتقل إلى `Azure OpenAI > اختر النشر`.
+ - انتقل إلى `Resource Management > Networking`.
+ - تأكد من تفعيل `Allow access from all networks`. إذا كان هذا الإعداد مقيداً، فقد يُحظر وصول CrewAI إلى نقطة نهاية Azure OpenAI.
+
+
+
+
+## التحقق
+
+أنت جاهز! سيستخدم Crew Studio الآن اتصال Azure OpenAI الخاص بك. اختبر الاتصال بإنشاء طاقم أو مهمة بسيطة للتأكد من أن كل شيء يعمل بشكل صحيح.
+
+## استكشاف الأخطاء وإصلاحها
+
+إذا واجهت مشكلات:
+
+- تحقق من أن تنسيق Target URI يتطابق مع النمط المتوقع
+- تحقق من صحة مفتاح API وأنه يملك الصلاحيات المناسبة
+- تأكد من تهيئة الوصول إلى الشبكة للسماح باتصالات CrewAI
+- تأكد من أن نموذج النشر يتطابق مع ما هيأته في CrewAI
diff --git a/docs/v1.15.1/ar/enterprise/guides/build-crew.mdx b/docs/v1.15.1/ar/enterprise/guides/build-crew.mdx
new file mode 100644
index 000000000..d6cd7f242
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/build-crew.mdx
@@ -0,0 +1,48 @@
+---
+title: "بناء طاقم"
+description: "الطاقم هو مجموعة من الوكلاء الذين يعملون معاً لإتمام مهمة."
+icon: "people-arrows"
+mode: "wide"
+---
+
+## نظرة عامة
+
+يبسّط [CrewAI AMP](https://app.crewai.com) عملية **إنشاء** و**نشر** و**إدارة** وكلاء الذكاء الاصطناعي في بيئات الإنتاج.
+
+## البدء
+
+
+
+### التثبيت والإعداد
+
+
+ اتبع دليل التثبيت القياسي لإعداد CrewAI CLI وإنشاء مشروعك
+ الأول.
+
+
+### بناء طاقمك
+
+
+ اتبع دليل البدء السريع لإنشاء أول طاقم وكلاء باستخدام تهيئة
+ YAML.
+
+
+## الدعم والموارد
+
+للدعم الخاص بالمؤسسات أو الأسئلة، تواصل مع فريق الدعم المخصص على [support@crewai.com](mailto:support@crewai.com).
+
+
+ احجز وقتاً مع فريقنا لمعرفة المزيد عن ميزات Enterprise وكيف يمكنها
+ إفادة مؤسستك.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/capture_telemetry_logs.mdx b/docs/v1.15.1/ar/enterprise/guides/capture_telemetry_logs.mdx
new file mode 100644
index 000000000..36e051fc9
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/capture_telemetry_logs.mdx
@@ -0,0 +1,57 @@
+---
+title: "تصدير OpenTelemetry"
+description: "تصدير التتبعات والسجلات من عمليات نشر CrewAI AMP إلى مجمّع OpenTelemetry الخاص بك"
+icon: "magnifying-glass-chart"
+mode: "wide"
+---
+
+يمكن لـ CrewAI AMP تصدير **التتبعات** و**السجلات** من OpenTelemetry من عمليات النشر مباشرة إلى مجمّعك الخاص. يتيح لك ذلك مراقبة أداء الوكلاء وتتبع استدعاءات LLM وتصحيح الأخطاء باستخدام مجموعة المراقبة الحالية.
+
+تتبع بيانات القياس [اتفاقيات OpenTelemetry GenAI الدلالية](https://opentelemetry.io/docs/specs/semconv/gen-ai/) بالإضافة إلى سمات خاصة بـ CrewAI.
+
+
+تُعدّ OpenTelemetry **مسار المراقبة الموصى به** — محايدة تجاه الموردين، وتعمل مع أي خلفية متوافقة مع OTLP (Grafana, Honeycomb, NewRelic، أو مجمّعك الخاص). إذا كنت تستخدم Datadog تحديدًا، فراجع دليل [تكامل Datadog](./datadog) المخصص، الذي يغطي كلًا من مسار وكيل Datadog واستيعاب OTLP من Datadog.
+
+
+## المتطلبات المسبقة
+
+
+
+ يجب أن يكون لدى مؤسستك حساب CrewAI AMP نشط.
+
+
+ تحتاج إلى نقطة نهاية مجمّع متوافقة مع OpenTelemetry (مثل OTel Collector الخاص بك أو Datadog أو Grafana أو أي واجهة خلفية متوافقة مع OTLP).
+
+
+
+## إعداد مجمّع
+
+1. في CrewAI AMP، انتقل إلى **Settings** > **OpenTelemetry Collectors**.
+2. انقر على **Add Collector**.
+3. اختر تكاملاً:
+ - **OpenTelemetry Traces** و**OpenTelemetry Logs** — صدّر إلى أي مجمّع أو واجهة خلفية متوافقة مع OTLP.
+ - **Datadog** — أرسل التتبعات مباشرة إلى استقبال OTLP الخاص بـ Datadog، دون الحاجة إلى مجمّع منفصل أو Datadog Agent.
+4. هيّئ الاتصال. تعتمد الحقول على التكامل الذي اخترته:
+
+
+
+ إن **OpenTelemetry Traces** و**OpenTelemetry Logs** تكاملان منفصلان يتشاركان نفس الحقول — اختر التكامل المطابق للإشارة التي تريد تصديرها.
+
+ - **Endpoint** — نقطة نهاية OTLP لمجمّعك (مثل `https://otel-collector.example.com:4317`).
+ - **Service Name** — اسم لتعريف هذه الخدمة في منصة المراقبة.
+ - **Custom Headers** *(اختياري)* — أضف رؤوس المصادقة أو التوجيه كأزواج مفتاح-قيمة.
+ - **Certificate** *(اختياري)* — قدم شهادة TLS إذا كان مجمّعك يتطلبها.
+
+ 
+
+
+ لإعداد Datadog، راجع دليل [تكامل Datadog](./datadog) المخصص — فهو يغطي كلًا من مسار وكيل Datadog (الموصى به، أرخص لحجم السجلات الكبير) واستيعاب OTLP من Datadog، مع خطوات تهيئة كاملة للمجمّع.
+
+
+
+5. *(اختياري)* انقر على **Test Connection** للتحقق من قدرة CrewAI على الوصول إلى نقطة النهاية باستخدام بيانات الاعتماد التي قدمتها.
+6. انقر على **Save**.
+
+
+ يمكنك إضافة مجمّعات متعددة — على سبيل المثال، واحد للتتبعات وآخر للسجلات، أو الإرسال إلى واجهات خلفية مختلفة لأغراض مختلفة.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/custom-mcp-server.mdx b/docs/v1.15.1/ar/enterprise/guides/custom-mcp-server.mdx
new file mode 100644
index 000000000..eb90dc518
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/custom-mcp-server.mdx
@@ -0,0 +1,136 @@
+---
+title: "خوادم MCP المخصصة"
+description: "اربط خوادم MCP الخاصة بك بـ CrewAI AMP مع وصول عام أو مصادقة بمفتاح API أو OAuth 2.0"
+icon: "plug"
+mode: "wide"
+---
+
+يدعم CrewAI AMP الاتصال بأي خادم MCP يُنفّذ [Model Context Protocol](https://modelcontextprotocol.io/). يمكنك إحضار خوادم عامة لا تتطلب مصادقة، وخوادم محمية بمفتاح API أو رمز حامل، وخوادم تستخدم OAuth 2.0 للوصول المفوّض الآمن.
+
+## المتطلبات المسبقة
+
+
+
+ تحتاج إلى حساب [CrewAI AMP](https://app.crewai.com) نشط.
+
+
+ رابط خادم MCP الذي تريد الاتصال به. يجب أن يكون الخادم متاحاً من الإنترنت ويدعم نقل Streamable HTTP.
+
+
+
+## إضافة خادم MCP مخصص
+
+
+
+ انتقل إلى **Tools & Integrations** في الشريط الجانبي الأيسر لـ CrewAI AMP، ثم اختر علامة تبويب **Connections**.
+
+
+
+ انقر على زر **Add Custom MCP Server**. سيظهر مربع حوار مع نموذج التهيئة.
+
+
+
+ - **Name** (مطلوب): اسم وصفي لخادم MCP (مثل "My Internal Tools Server").
+ - **Description**: ملخص اختياري لما يقدمه خادم MCP هذا.
+ - **Server URL** (مطلوب): الرابط الكامل لنقطة نهاية خادم MCP (مثل `https://my-server.example.com/mcp`).
+
+
+
+ اختر إحدى طرق المصادقة الثلاث المتاحة بناءً على كيفية تأمين خادم MCP. راجع الأقسام أدناه لتفاصيل كل طريقة.
+
+
+
+ إذا كان خادم MCP يتطلب رؤوساً إضافية في كل طلب (مثل معرّفات المستأجر أو رؤوس التوجيه)، انقر على **+ Add Header** وقدم اسم الرأس وقيمته. يمكنك إضافة رؤوس مخصصة متعددة.
+
+
+
+ انقر على **Create MCP Server** لحفظ الاتصال. سيظهر خادم MCP المخصص الآن في قائمة الاتصالات وستكون أدواته متاحة للاستخدام في طواقمك.
+
+
+
+## طرق المصادقة
+
+### بدون مصادقة
+
+اختر هذا الخيار عندما يكون خادم MCP متاحاً للجمهور ولا يتطلب أي بيانات اعتماد. هذا شائع للخوادم مفتوحة المصدر أو الخوادم الداخلية العاملة خلف VPN.
+
+### رمز المصادقة
+
+استخدم هذه الطريقة عندما يكون خادم MCP محمياً بمفتاح API أو رمز حامل.
+
+
+
+
+
+| الحقل | مطلوب | الوصف |
+|-------|-------|-------|
+| **Header Name** | نعم | اسم رأس HTTP الذي يحمل الرمز (مثل `X-API-Key`، `Authorization`). |
+| **Value** | نعم | مفتاح API أو رمز الحامل الخاص بك. |
+| **Add to** | لا | أين يتم إرفاق بيانات الاعتماد — **Header** (افتراضي) أو **Query parameter**. |
+
+
+إذا كان خادمك يتوقع رمز `Bearer` في رأس `Authorization`، عيّن Header Name إلى `Authorization` والقيمة إلى `Bearer `.
+
+
+### OAuth 2.0
+
+استخدم هذه الطريقة لخوادم MCP التي تتطلب تفويض OAuth 2.0. سيتعامل CrewAI مع تدفق OAuth الكامل، بما في ذلك تحديث الرمز.
+
+
+
+
+
+| الحقل | مطلوب | الوصف |
+|-------|-------|-------|
+| **Redirect URI** | — | مُعبأ مسبقاً وللقراءة فقط. انسخ هذا الرابط وسجّله كرابط إعادة توجيه مصرّح به في مزود OAuth. |
+| **Authorization Endpoint** | نعم | الرابط الذي يُوجَّه إليه المستخدمون لتفويض الوصول (مثل `https://auth.example.com/oauth/authorize`). |
+| **Token Endpoint** | نعم | الرابط المستخدم لتبادل رمز التفويض برمز وصول (مثل `https://auth.example.com/oauth/token`). |
+| **Client ID** | نعم | معرّف عميل OAuth الصادر من مزودك. |
+| **Client Secret** | لا | سر عميل OAuth. غير مطلوب للعملاء العامين باستخدام PKCE. |
+| **Scopes** | لا | قائمة نطاقات مفصولة بمسافات للطلب (مثل `read write`). |
+| **Token Auth Method** | لا | كيفية إرسال بيانات اعتماد العميل عند تبادل الرموز — **Standard (POST body)** أو **Basic Auth (header)**. الافتراضي هو Standard. |
+| **PKCE Supported** | لا | فعّل إذا كان مزود OAuth يدعم Proof Key for Code Exchange. موصى به لتحسين الأمان. |
+
+
+**اكتشاف تهيئة OAuth**: إذا كان مزود OAuth يدعم OpenID Connect Discovery، انقر على رابط **Discover OAuth Config** لملء نقاط نهاية التفويض والرمز تلقائياً من رابط `/.well-known/openid-configuration` الخاص بالمزود.
+
+
+#### إعداد OAuth 2.0 خطوة بخطوة
+
+
+
+ انسخ **Redirect URI** المعروض في النموذج وأضفه كرابط إعادة توجيه مصرّح به في إعدادات تطبيق مزود OAuth.
+
+
+
+ املأ **Authorization Endpoint** و**Token Endpoint** و**Client ID**، واختيارياً **Client Secret** و**Scopes**.
+
+
+
+ اختر **Token Auth Method** المناسبة. معظم المزودين يستخدمون الافتراضي **Standard (POST body)**. بعض المزودين القدامى يتطلبون **Basic Auth (header)**.
+
+
+
+ حدد **PKCE Supported** إذا كان مزودك يدعمه. يضيف PKCE طبقة أمان إضافية لتدفق رمز التفويض وموصى به لجميع التكاملات الجديدة.
+
+
+
+ انقر على **Create MCP Server**. سيتم توجيهك إلى مزود OAuth لتفويض الوصول. بمجرد التفويض، سيخزن CrewAI الرموز ويحدّثها تلقائياً حسب الحاجة.
+
+
+
+## استخدام خادم MCP المخصص
+
+بمجرد الاتصال، تظهر أدوات خادم MCP المخصص جنباً إلى جنب مع الاتصالات المدمجة في صفحة **Tools & Integrations**. يمكنك:
+
+- **تعيين الأدوات للوكلاء** في طواقمك تماماً كأي أداة CrewAI أخرى.
+- **إدارة الرؤية** للتحكم في أعضاء الفريق الذين يمكنهم استخدام الخادم.
+- **تعديل أو إزالة** الاتصال في أي وقت من قائمة الاتصالات.
+
+
+إذا أصبح خادم MCP غير قابل للوصول أو انتهت صلاحية بيانات الاعتماد، ستفشل استدعاءات الأدوات التي تستخدم ذلك الخادم. تأكد من استقرار رابط الخادم وتحديث بيانات الاعتماد.
+
+
+
+ تواصل مع فريق الدعم للمساعدة في تهيئة خادم MCP المخصص أو استكشاف الأخطاء.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/datadog.mdx b/docs/v1.15.1/ar/enterprise/guides/datadog.mdx
new file mode 100644
index 000000000..1a3ee818f
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/datadog.mdx
@@ -0,0 +1,295 @@
+---
+title: "تكامل Datadog"
+description: "راقب عمليات نشر CrewAI AMP المُستضافة ذاتيًا في Datadog عبر وكيل Datadog أو استيعاب OTLP من Datadog — يوفر كلا المسارين نفس الواجهات المهيكلة لاستيراد لوحة معلومات العمليات الجاهزة."
+icon: "dog"
+mode: "wide"
+---
+
+
+**الترجمة قيد التقدم** — يتم عرض المحتوى باللغة الإنجليزية.
+
+
+CrewAI ships first-class support for Datadog: two log-ingestion paths, a JSON log schema designed for cheap indexing, and a ready-made operations dashboard you can import in under five minutes.
+
+
+For vendor-neutral observability via any OTLP backend (Grafana, Honeycomb, your own collector), see [OpenTelemetry Export](./capture_telemetry_logs).
+
+
+## Choose a path
+
+CrewAI supports two log-ingestion paths to Datadog — both are first-class and produce the same structured facets that power the dashboard. Pick the one that fits your infrastructure.
+
+
+
+ The Datadog Agent runs alongside your CrewAI containers (typically as a DaemonSet on Kubernetes) and tails their stdout. With `CREWAI_LOG_FORMAT=json` set, each log event ships as a single billable line with structured attributes.
+
+ **Setup:**
+ 1. Run the Datadog Agent next to your CrewAI containers — see [Datadog's deployment docs](https://docs.datadoghq.com/agent/) for Kubernetes, ECS, or VM setup. Enable log collection (`logs_enabled: true`) and container log collection (`logs_config.container_collect_all: true`).
+ 2. Set `CREWAI_LOG_FORMAT=json` as an **automation environment variable** in CrewAI AMP (open your automation → **Settings → Environment Variables**) so each log event is a single line instead of a multi-line traceback. AMP propagates the value to every container in the deployment (API + workers) — don't set it on the container or host directly. See [Enabling JSON output](#enabling-json-output) below for the AMP UI walkthrough and the [log schema reference](#log-schema-reference) for the full field contract.
+ 3. Confirm logs arrive in Datadog Logs with the JSON fields parsed — see [Verify ingestion](#verify-ingestion).
+
+ **Pick this path if** you already operate Datadog Agents (e.g. for infrastructure metrics), or your log volume makes per-event ingestion cost a real concern — collapsing tracebacks into single events keeps Agent ingestion cheap at scale.
+
+
+ CrewAI AMP exports OpenTelemetry traffic directly to Datadog's OTLP endpoint with no Agent required. Logs and traces ride a single export pipeline configured in AMP's UI, using the same protocol you'd use for any other OTLP backend.
+
+ **Setup:**
+ 1. In CrewAI AMP, go to **Settings → OpenTelemetry Collectors → Add Collector** and pick **Datadog**.
+ 2. Configure the connection:
+ - **Datadog Site Domain** — your Datadog site's OTLP host only, no protocol or path. CrewAI builds the full HTTPS OTLP endpoint for you. Use the host that matches your [Datadog site](https://docs.datadoghq.com/getting_started/site/):
+ - `otlp.datadoghq.com` (US1)
+ - `otlp.us3.datadoghq.com` (US3)
+ - `otlp.us5.datadoghq.com` (US5)
+ - `otlp.datadoghq.eu` (EU1)
+ - `otlp.ap1.datadoghq.com` (AP1)
+ - **API Key** — your Datadog API key. See [how to create one](https://docs.datadoghq.com/account_management/api-app-keys/#api-keys).
+ 3. The Datadog template provisions **both signals at once** — when you save, AMP creates a traces collector at `/v1/traces` and a logs collector at `/v1/logs`, both sharing the same Datadog OTLP host and API key. You'll see them as two separate rows in your OTel collectors list.
+ 4. *(optional)* Click **Test Connection** to verify CrewAI can reach the endpoint with the credentials you provided. Then click **Save** — both collectors are created in one step.
+
+ 
+
+ **Pick this path if** you'd rather not operate a Datadog Agent, you already use OTLP for traces and want one export pipeline, or you may later want to fan out the same telemetry to other backends (Grafana, Honeycomb, etc.) without changing your application setup.
+
+
+
+Either path lands the same structured facets in Datadog (`@automation_id`, `@kickoff_id`, `@execution_id`, `@automation_name`, `@crewai_version`, `@exception.type`, `@gen_ai.*`), so the dashboard works identically with either choice.
+
+## Log schema reference
+
+
+This schema applies to the **Datadog Agent path** — stdout JSON logs produced when `CREWAI_LOG_FORMAT=json` is set. Logs delivered via the **Datadog OTLP intake** use OpenTelemetry attribute names and may differ; see [OpenTelemetry Export](./capture_telemetry_logs).
+
+
+When `CREWAI_LOG_FORMAT=json` is set, every log event is emitted as a **single JSON object per line** to stdout, with internal newlines escaped. The format is plain JSON — Datadog parses it natively, and the same payload is also consumable by Splunk, Loki, Elasticsearch, and CloudWatch without custom log pipelines.
+
+### Why JSON output
+
+
+
+ Most managed log backends bill per event. A Python traceback in text format is counted as one event per line — 30+ events for a single error. JSON output collapses each traceback into a single event with the stack trace as an escaped string field.
+
+
+ Search by `@automation_id`, `@exception.type`, `@kickoff_id` instead of grepping free-text. Build dashboards on typed facets without parser configuration.
+
+
+ Every event carries `trace_id` and `span_id` when fired inside a recording span, so backends auto-link logs to traces.
+
+
+ The `schema` field gates compatibility — within `v1`, fields are added but never renamed or removed.
+
+
+
+### Enabling JSON output
+
+`CREWAI_LOG_FORMAT=json` must be set as an **automation environment variable** in CrewAI AMP — it is **not** a container, host, or Docker setting. Open your automation in AMP, click the **Settings** icon, and add the variable under the **Environment Variables** section. AMP applies the value to every container in the deployment (API + workers) on the next restart. See [Update Your Crew](./update-crew) for the full UI walkthrough with screenshots.
+
+```shell
+CREWAI_LOG_FORMAT=json
+```
+
+Restart the deployment to pick up the change. Every log line on stdout from that point on is a single JSON object.
+
+
+ The default value is `text`, which preserves the legacy human-readable line format byte-for-byte. Setting any value other than `json` falls back to text mode. There is no migration step — the variable is read at process start and the format switches immediately.
+
+
+### Example events
+
+A single info-level log inside an active automation kickoff:
+
+```json
+{
+ "schema": "v1",
+ "ts": "2026-06-17T16:14:23.482914Z",
+ "level": "INFO",
+ "logger": "crewai_enterprise.utilities.pii_redaction",
+ "crewai_version": "1.14.7",
+ "msg": "PII tracking state reset (engines preserved)",
+ "automation_id": "12",
+ "task_id": "0843a930-b306-464b-89c8-bfafa78cc711",
+ "kickoff_id": "0843a930-b306-464b-89c8-bfafa78cc711",
+ "execution_id": "0843a930-b306-464b-89c8-bfafa78cc711",
+ "automation_name": "research_flow"
+}
+```
+
+An error with a Python exception is collapsed into a single event with the traceback as a string:
+
+```json
+{
+ "schema": "v1",
+ "ts": "2026-06-17T16:14:31.218450Z",
+ "level": "ERROR",
+ "logger": "api.tasks.flow_run_task",
+ "crewai_version": "1.14.7",
+ "msg": "Flow execution failed",
+ "automation_id": "12",
+ "kickoff_id": "0843a930-b306-464b-89c8-bfafa78cc711",
+ "execution_id": "0843a930-b306-464b-89c8-bfafa78cc711",
+ "automation_name": "research_flow",
+ "exception": {
+ "type": "ValueError",
+ "message": "Topic cannot be empty",
+ "stacktrace": "Traceback (most recent call last):\n File \"/app/flow.py\", line 42, in summarize\n ...\nValueError: Topic cannot be empty\n"
+ }
+}
+```
+
+The same error in legacy text mode would have produced ~25 separate log events (one per traceback line) — all of which the backend would bill and index individually.
+
+### Schema v1 fields
+
+Within the `v1` schema, fields are only added, never renamed or removed. New fields will appear as soon as a deployment is upgraded.
+
+| Field | Type | Always present | Source |
+|-------|------|----------------|--------|
+| `schema` | string | Yes | Constant `"v1"`. Increment indicates a breaking schema change. |
+| `ts` | string (ISO-8601 UTC, microseconds) | Yes | Record creation time, e.g. `2026-06-17T16:14:23.482914Z`. |
+| `level` | string | Yes | Python log level name: `DEBUG` / `INFO` / `WARNING` / `ERROR` / `CRITICAL`. |
+| `logger` | string | Yes | Dotted logger name, e.g. `api.tasks.flow_run_task`. |
+| `crewai_version` | string | Yes (when `crewai` package metadata is resolvable) | Installed `crewai` package version, e.g. `"1.14.7"`. |
+| `msg` | string | Yes | Rendered log message (after `%`-formatting / `{}`-formatting). |
+| `automation_id` | string | When `CREWAI_PLUS_ID` env var is set | Numeric deployment ID (AMP provisions this on every container). |
+| `task_id` | string | On Celery worker logs | Celery task UUID, or `"no-task"` for non-task contexts. |
+| `kickoff_id` | string | Inside an automation kickoff | UUID of the current kickoff. |
+| `execution_id` | string | Inside an automation kickoff | UUID of the current sub-execution. Equal to `kickoff_id` at the top level; differs for nested flow methods that spawn sub-executions. |
+| `automation_name` | string | Inside an automation kickoff | Human-readable automation/flow name, e.g. `"research_flow"`. |
+| `trace_id` | string (32-hex) | Inside a recording OpenTelemetry span | Hex trace ID. Omitted when no span is active. |
+| `span_id` | string (16-hex) | Inside a recording OpenTelemetry span | Hex span ID. Omitted when no span is active. |
+| `exception` | object | When the log record has `exc_info` | `{type, message, stacktrace}` — full traceback as a single escaped string. |
+
+
+ Any additional `extra={...}` kwargs passed to a logger call appear as top-level JSON fields verbatim. Reserved field names above always win to keep the schema stable.
+
+
+### Stability promise
+
+The `schema` field declares the contract. Within `v1`, CrewAI commits to:
+
+- **Never removing a field** that customers may have built queries or dashboards against.
+- **Never renaming a field** in place — renames happen via a schema bump (e.g. `v2`), with the old name kept as a deprecated alias for at least one release cycle.
+- **Adding new fields** at any time. Consumers should ignore unknown top-level keys.
+
+When a `v2` is introduced, both the `schema` field and the migration guide will be published in advance, and `v1` will continue to be emitted for one release cycle so dashboards and queries have time to migrate.
+
+## Prerequisite: promote facets
+
+Datadog auto-discovers fields the first time it sees them but doesn't make them queryable in widgets until they're promoted to **facets**. This is a one-time setup in your Datadog account.
+
+
+
+ Open [Logs Explorer](https://app.datadoghq.com/logs) and search `service:crewai*`. You should see at least one log event.
+
+
+ Click any log entry to open the right-hand details panel. For each field below, hover the field name → click the gear icon → **Create facet**.
+
+ - `automation_id`, `automation_name`, `execution_id`, `kickoff_id`, `task_id`
+ - `crewai_version`, `model_id`
+ - `exception.type`, `exception.message`
+
+ Skip any field that already shows a star icon next to its name — that means it's already a facet. The `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`, and `gen_ai.request.model` facets are typically promoted automatically by Datadog's LLM Observability auto-discovery, but verify they exist before importing the dashboard.
+
+
+
+## Import the dashboard
+
+
+
+ Save [`datadog_dashboard.json`](https://raw.githubusercontent.com/crewAIInc/crewAI/main/docs/edge/en/enterprise/guides/datadog_dashboard.json) to your machine.
+
+
+ Navigate to **Dashboards → New Dashboard**. Click the **gear icon** in the top right of the empty dashboard and select **Import Dashboard JSON**.
+
+
+ Paste the contents of `datadog_dashboard.json` into the import dialog (or drag the file in). Click **Import**.
+
+ Datadog creates the dashboard immediately and lands you on it. The first load may show empty widgets for a few seconds while queries execute against the time range.
+
+
+
+
+ Datadog's [Dashboard API](https://docs.datadoghq.com/api/latest/dashboards/#create-a-new-dashboard) accepts the same JSON via `POST /api/v1/dashboard`. Use it if you manage dashboards through Terraform, Pulumi, or CI.
+
+
+## What you get
+
+The dashboard is organized into four sections plus a placeholder for a custom drill-down widget:
+
+| Section | Widgets | Useful for |
+|---------|---------|------------|
+| **Header** | Total Executions · Error Rate (%) · Active Automations · CrewAI Versions in Use | At-a-glance health for the last hour. Error Rate is conditionally formatted (green ≤ 5%, yellow ≤ 10%, red > 10%). |
+| **Throughput** | Executions per Hour by Automation (top 10, stacked bars) | Spotting traffic shifts, surfacing busy automations, validating that a rollout didn't change baseline volume. |
+| **Errors** | Errors by Exception Type (top 5, stacked bars) · Top Exception Types by Count (toplist) | Triaging failures — which exception types are spiking, which automations they're hitting. |
+| **Cost** | Total Tokens per Hour by Model (input + output, stacked area) | Tracking LLM token spend by model. Useful for catching cost regressions when an automation switches model or starts looping. |
+| **Drill-Down** | _(empty placeholder)_ | See [Customization](#customize) for adding a recent-errors log stream here. |
+
+Three template variables at the top of the dashboard re-scope every widget at once:
+
+- **`$automation`** — filter to a single automation by name.
+- **`$version`** — filter to a single `crewai` SDK version (useful for comparing pre- and post-upgrade behavior).
+- **`$service`** — filter to a specific Datadog `service` tag (useful when multiple CrewAI deployments share one Datadog account).
+
+## Verify ingestion
+
+Open [Logs Explorer](https://app.datadoghq.com/logs) and run a query that matches your ingestion path:
+
+
+
+ Search `service:crewai* @schema:v1`. You should see structured logs with the JSON fields parsed into Datadog facets. Pick a recent event and verify it has `@automation_id`, `@kickoff_id`, `@execution_id`, `@crewai_version`, and (when running inside a span) `@trace_id` / `@span_id` populated.
+
+ If nothing appears, confirm `CREWAI_LOG_FORMAT=json` is set under your automation's **Environment Variables** in AMP, the deployment was restarted after the change, and the Datadog Agent is tailing container stdout.
+
+
+ Search `source:otlp service:crewai*`. OTLP attributes land with their OpenTelemetry names (`automation_id`, `crewai.kickoff.id`, etc.) rather than the stdout JSON keys, but they map to the same dashboard facets after [facet promotion](#prerequisite-promote-facets).
+
+ If nothing appears, verify the collector endpoint is correct (`/v1/logs` for logs, `/v1/traces` for traces) and **Test Connection** succeeded when the collector was saved.
+
+
+
+## Customize
+
+The dashboard ships with deliberate gaps so you can extend it without uninstalling and re-importing.
+
+### Add a Recent Errors log stream
+
+The **Drill-Down** section is intentionally empty. Add a Log Stream widget to it for an inline view of recent failures:
+
+1. Edit the dashboard and click **+ Add Widgets** inside the Drill-Down group.
+2. Drag in a **Log Stream** widget.
+3. Set the filter query to `status:error $automation $version $service`.
+4. Choose columns: `@timestamp`, `@automation_name`, `@exception.type`, `@exception.message`, `@execution_id`.
+5. Sort by most recent, limit to 25 entries.
+
+Clicking any row jumps to Logs Explorer with the same filter pre-applied.
+
+### Add p95 latency
+
+Logs don't include execution duration by default. Two ways to add a latency widget:
+
+- **From APM traces** — if you also export OTLP traces to Datadog, add a Timeseries widget with data source **Traces**, query `service:crewai*`, aggregation `p95 of @duration`. Datadog APM auto-tracks span duration.
+- **From metric extraction** — extract a `flow.duration_ms` metric from logs via [Datadog's log-to-metric pipeline](https://docs.datadoghq.com/logs/log_configuration/logs_to_metrics/), then chart it like any other metric. Useful if you don't run APM.
+
+### Re-scope to multiple deployments
+
+The `$service` template variable defaults to `*` and will catch every CrewAI deployment in your Datadog account. Change the default to a specific service name in **Configure → Template Variables** if you want the dashboard to focus on one deployment by default.
+
+## Troubleshooting
+
+| Symptom | Likely cause | Fix |
+|---------|--------------|-----|
+| All widgets show "No data" | Facets aren't promoted | Re-do the [Promote facets](#prerequisite-promote-facets) step. Datadog won't query against an un-promoted field. |
+| Error Rate widget shows `NaN` | No executions in the time window | Either no traffic, or `@execution_id` isn't faceted. Expand the time range and re-check facets. |
+| Throughput chart is flat at the same value | Logs aren't reaching Datadog | Search `service:crewai*` in Logs Explorer. If nothing shows, verify the Datadog Agent is running (Agent path) or the OTel collector endpoint is correct (OTLP path). |
+| `crewai_version` shows fewer values than expected | Some containers predate the structured-logs work | The `crewai_version` field was added alongside JSON output. Older deployments running text mode (or older AMP builds) won't emit it. Upgrade those deployments to pick up the field. See the [log schema reference](#log-schema-reference) for the full field contract. |
+| Template variables don't filter widgets | The widget's filter line doesn't reference the template variable | Edit the widget and confirm the search includes `$automation $version $service`. |
+
+## Next steps
+
+
+
+ Vendor-neutral observability for non-Datadog stacks (Grafana, Honeycomb, your own collector) — or as a Datadog complement when you want to fan out telemetry to multiple backends.
+
+
+ Reference for customizing widget queries against the structured facets above.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/deploy-to-amp.mdx b/docs/v1.15.1/ar/enterprise/guides/deploy-to-amp.mdx
new file mode 100644
index 000000000..b62faec53
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/deploy-to-amp.mdx
@@ -0,0 +1,451 @@
+---
+title: "النشر على AMP"
+description: "انشر طاقمك أو تدفقك على CrewAI AMP"
+icon: "rocket"
+mode: "wide"
+---
+
+
+ بعد إنشاء طاقم أو تدفق محلياً (أو عبر Crew Studio)، الخطوة التالية هي
+ نشره على منصة CrewAI AMP. يغطي هذا الدليل طرق نشر متعددة
+ لمساعدتك في اختيار النهج الأفضل لسير عملك.
+
+
+## المتطلبات المسبقة
+
+
+
+ يجب أن يكون لديك طاقم أو تدفق يعمل بنجاح محلياً.
+ اتبع [دليل التحضير](/ar/enterprise/guides/prepare-for-deployment) للتحقق من بنية مشروعك.
+
+
+ يجب أن يكون الكود في مستودع GitHub (لطريقة تكامل
+ GitHub)
+
+
+
+
+ **الطواقم مقابل التدفقات**: يمكن نشر كلا نوعي المشاريع كـ "أتمتات" على CrewAI AMP.
+ عملية النشر هي نفسها، لكن لهما بنى مشاريع مختلفة.
+ راجع [التحضير للنشر](/ar/enterprise/guides/prepare-for-deployment) للتفاصيل.
+
+
+## الخيار 1: النشر باستخدام CrewAI CLI
+
+يوفر CLI أسرع طريقة لنشر الطواقم أو التدفقات المطورة محلياً على منصة AMP.
+يكتشف CLI تلقائياً نوع مشروعك من `pyproject.toml` ويبني وفقاً لذلك.
+
+
+
+ إذا لم تكن قد فعلت بالفعل، ثبّت CrewAI CLI:
+
+ ```bash
+ pip install crewai[tools]
+ ```
+
+
+ يأتي CLI مع حزمة CrewAI الرئيسية، لكن الإضافة `[tools]` تضمن حصولك على جميع اعتماديات النشر.
+
+
+
+
+
+ أولاً، تحتاج لمصادقة CLI مع منصة CrewAI AMP:
+
+ ```bash
+ # إذا كان لديك حساب CrewAI AMP بالفعل، أو تريد إنشاء واحد:
+ crewai login
+ ```
+
+ عند تشغيل أي من الأمرين، سيقوم CLI بـ:
+ 1. عرض رابط ورمز جهاز فريد
+ 2. فتح متصفحك على صفحة المصادقة
+ 3. طلب تأكيد الجهاز
+ 4. إتمام عملية المصادقة
+
+ عند المصادقة الناجحة، سترى رسالة تأكيد في الطرفية!
+
+
+
+
+
+ من مجلد مشروعك، شغّل:
+
+ ```bash
+ crewai deploy create
+ ```
+
+ سيقوم هذا الأمر بـ:
+ 1. اكتشاف معلومات مستودع GitHub
+ 2. تحديد متغيرات البيئة في ملف `.env` المحلي
+ 3. نقل هذه المتغيرات بأمان إلى منصة Enterprise
+ 4. إنشاء عملية نشر جديدة بمعرّف فريد
+
+ عند الإنشاء الناجح، سترى رسالة مثل:
+ ```shell
+ Deployment created successfully!
+ Name: your_project_name
+ Deployment ID: 01234567-89ab-cdef-0123-456789abcdef
+ Current Status: Deploy Enqueued
+ ```
+
+
+
+
+
+ تتبع حالة النشر بـ:
+
+ ```bash
+ crewai deploy status
+ ```
+
+ للسجلات المفصلة لعملية البناء:
+
+ ```bash
+ crewai deploy logs
+ ```
+
+
+ يستغرق النشر الأول عادة حوالي دقيقة واحدة.
+
+
+
+
+
+## أوامر CLI إضافية
+
+يقدم CrewAI CLI عدة أوامر لإدارة عمليات النشر:
+
+```bash
+# عرض جميع عمليات النشر
+crewai deploy list
+
+# الحصول على حالة النشر
+crewai deploy status
+
+# عرض سجلات النشر
+crewai deploy logs
+
+# دفع التحديثات بعد تغييرات الكود
+crewai deploy push
+
+# إزالة عملية نشر
+crewai deploy remove
+```
+
+## الخيار 2: النشر مباشرة عبر واجهة الويب
+
+يمكنك أيضاً نشر طواقمك أو تدفقاتك مباشرة عبر واجهة ويب CrewAI AMP بربط حساب GitHub. لا يتطلب هذا النهج استخدام CLI على جهازك المحلي. تكتشف المنصة تلقائياً نوع مشروعك وتتعامل مع البناء بشكل مناسب.
+
+
+
+
+
+تحتاج لدفع طاقمك إلى مستودع GitHub. إذا لم تكن قد أنشأت طاقماً بعد، يمكنك [اتباع هذا الدليل](/ar/quickstart).
+
+
+
+
+
+ 1. سجّل الدخول إلى [CrewAI AMP](https://app.crewai.com)
+ 2. انقر على زر "Connect GitHub"
+
+
+ 
+
+
+
+
+
+
+ بعد ربط حساب GitHub، ستتمكن من اختيار المستودع للنشر:
+
+
+ 
+
+
+
+ إذا كان Crew أو Flow داخل مجلد فرعي في monorepo، فوسّع **Advanced**
+ وعيّن دليل عمل قبل النشر. راجع
+ [النشر من Monorepo](/ar/enterprise/guides/monorepo-deployments).
+
+
+
+
+
+
+ قبل النشر، ستحتاج لإعداد متغيرات البيئة للاتصال بمزود LLM أو خدمات أخرى:
+
+ 1. يمكنك إضافة المتغيرات فردياً أو بشكل جماعي
+ 2. أدخل متغيرات البيئة بتنسيق `KEY=VALUE` (واحد لكل سطر)
+
+
+ 
+
+
+
+ تستخدم حزم Python خاصة؟ ستحتاج لإضافة بيانات اعتماد السجل هنا أيضاً.
+ راجع [سجلات الحزم الخاصة](/ar/enterprise/guides/private-package-registry) للمتغيرات المطلوبة.
+
+
+
+
+
+
+ 1. انقر على زر "Deploy" لبدء عملية النشر
+ 2. يمكنك مراقبة التقدم عبر شريط التقدم
+ 3. يستغرق النشر الأول عادة حوالي دقيقة واحدة
+
+
+ 
+
+
+ بمجرد اكتمال النشر، سترى:
+ - رابط طاقمك الفريد
+ - رمز Bearer لحماية API طاقمك
+ - زر "Delete" إذا كنت تحتاج لإزالة النشر
+
+
+
+
+
+## الخيار 3: إعادة النشر باستخدام API (تكامل CI/CD)
+
+لعمليات النشر الآلية في خطوط أنابيب CI/CD، يمكنك استخدام CrewAI API لتشغيل إعادة نشر الطواقم الحالية. هذا مفيد بشكل خاص لـ GitHub Actions وJenkins أو سير عمل الأتمتة الأخرى.
+
+
+
+
+ انتقل إلى إعدادات حساب CrewAI AMP لإنشاء رمز API:
+
+ 1. انتقل إلى [app.crewai.com](https://app.crewai.com)
+ 2. انقر على **Settings** → **Account** → **Personal Access Token**
+ 3. أنشئ رمزاً جديداً وانسخه بأمان
+ 4. خزّن هذا الرمز كسر في نظام CI/CD
+
+
+
+
+
+ حدد موقع المعرّف الفريد لطاقمك المنشور:
+
+ 1. انتقل إلى **Automations** في لوحة تحكم CrewAI AMP
+ 2. اختر الأتمتة/الطاقم الحالي
+ 3. انقر على **Additional Details**
+ 4. انسخ **UUID** — يحدد هذا نشر طاقمك المحدد
+
+
+
+
+
+ استخدم نقطة نهاية Deploy API لتشغيل إعادة النشر:
+
+ ```bash
+ curl -i -X POST \
+ -H "Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN" \
+ https://app.crewai.com/crewai_plus/api/v1/crews/YOUR-AUTOMATION-UUID/deploy
+
+ # HTTP/2 200
+ # content-type: application/json
+ #
+ # {
+ # "uuid": "your-automation-uuid",
+ # "status": "Deploy Enqueued",
+ # "public_url": "https://your-crew-deployment.crewai.com",
+ # "token": "your-bearer-token"
+ # }
+ ```
+
+
+ إذا تم إنشاء أتمتتك متصلة بـ Git أولاً، سيسحب API تلقائياً أحدث التغييرات من مستودعك قبل إعادة النشر.
+
+
+
+
+
+
+ إليك سير عمل GitHub Actions مع مشغلات نشر أكثر تعقيداً:
+
+ ```yaml
+ name: Deploy CrewAI Automation
+
+ on:
+ push:
+ branches: [ main ]
+ pull_request:
+ types: [ labeled ]
+ release:
+ types: [ published ]
+
+ jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ if: |
+ (github.event_name == 'push' && github.ref == 'refs/heads/main') ||
+ (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'deploy')) ||
+ (github.event_name == 'release')
+ steps:
+ - name: Trigger CrewAI Redeployment
+ run: |
+ curl -X POST \
+ -H "Authorization: Bearer ${{ secrets.CREWAI_PAT }}" \
+ https://app.crewai.com/crewai_plus/api/v1/crews/${{ secrets.CREWAI_AUTOMATION_UUID }}/deploy
+ ```
+
+
+ أضف `CREWAI_PAT` و`CREWAI_AUTOMATION_UUID` كأسرار مستودع. لعمليات نشر PR، أضف تسمية "deploy" لتشغيل سير العمل.
+
+
+
+
+
+
+## التفاعل مع أتمتتك المنشورة
+
+بمجرد اكتمال النشر، يمكنك الوصول إلى طاقمك عبر:
+
+1. **REST API**: تنشئ المنصة نقطة نهاية HTTPS فريدة بهذه المسارات الرئيسية:
+
+ - `/inputs`: يعرض معاملات الإدخال المطلوبة
+ - `/kickoff`: يبدأ التنفيذ بالمدخلات المقدمة
+ - `/status/{kickoff_id}`: يتحقق من حالة التنفيذ
+
+2. **واجهة الويب**: زر [app.crewai.com](https://app.crewai.com) للوصول إلى:
+ - **علامة تبويب Status**: عرض معلومات النشر وتفاصيل نقطة نهاية API ورمز المصادقة
+ - **علامة تبويب Run**: تمثيل مرئي لبنية طاقمك
+ - **علامة تبويب Executions**: سجل جميع عمليات التنفيذ
+ - **علامة تبويب Metrics**: تحليلات الأداء
+ - **علامة تبويب Traces**: رؤى التنفيذ المفصلة
+
+### تشغيل عملية تنفيذ
+
+من لوحة تحكم Enterprise، يمكنك:
+
+1. النقر على اسم طاقمك لفتح تفاصيله
+2. اختيار "Trigger Crew" من واجهة الإدارة
+3. إدخال المدخلات المطلوبة في النافذة المنبثقة
+4. مراقبة التقدم أثناء مرور التنفيذ عبر خط الأنابيب
+
+### المراقبة والتحليلات
+
+توفر منصة Enterprise ميزات مراقبة شاملة:
+
+- **إدارة التنفيذ**: تتبع عمليات التشغيل النشطة والمكتملة
+- **التتبعات**: تحليلات مفصلة لكل عملية تنفيذ
+- **المقاييس**: استخدام الرموز وأوقات التنفيذ والتكاليف
+- **عرض الجدول الزمني**: تمثيل مرئي لتسلسل المهام
+
+### ميزات متقدمة
+
+تقدم منصة Enterprise أيضاً:
+
+- **إدارة متغيرات البيئة**: تخزين وإدارة مفاتيح API بأمان
+- **اتصالات LLM**: تهيئة التكاملات مع مزودي LLM المختلفين
+- **مستودع الأدوات المخصصة**: إنشاء ومشاركة وتثبيت الأدوات
+- **Crew Studio**: بناء الطواقم عبر واجهة محادثة دون كتابة كود
+
+## استكشاف أخطاء النشر وإصلاحها
+
+إذا فشل النشر، تحقق من هذه المشكلات الشائعة:
+
+### فشل البناء
+
+#### ملف uv.lock مفقود
+
+**العرض**: فشل البناء مبكراً مع أخطاء حل الاعتماديات
+
+**الحل**: أنشئ ملف القفل وارفعه:
+
+```bash
+uv lock
+git add uv.lock
+git commit -m "Add uv.lock for deployment"
+git push
+```
+
+
+ ملف `uv.lock` مطلوب لجميع عمليات النشر. بدونه، لا يمكن للمنصة
+ تثبيت اعتمادياتك بشكل موثوق.
+
+
+#### بنية المشروع الخاطئة
+
+**العرض**: أخطاء "Could not find entry point" أو "Module not found"
+
+**الحل**: تحقق من أن مشروعك يتطابق مع البنية المتوقعة:
+
+- **JSON-first Crews**: أبقِ `crew.jsonc` أو `crew.json` و `agents/` في جذر المشروع
+- **Crews كلاسيكية**: استخدم `src/project_name/main.py` مع دالة دخول `run()`
+- **Flows**: استخدم `src/project_name/main.py` مع دالة دخول `kickoff()`
+
+راجع [التحضير للنشر](/ar/enterprise/guides/prepare-for-deployment) لمخططات البنية المفصلة.
+
+#### مُزخرف CrewBase مفقود في crew كلاسيكية
+
+**العرض**: أخطاء "Crew not found" أو "Config not found" أو أخطاء تهيئة الوكيل/المهمة
+
+**الحل**: في crews الكلاسيكية Python/YAML، تأكد من أن جميع فئات الـ crew تستخدم مُزخرف `@CrewBase`. لا تحتاج crews بنمط JSON-first إلى هذا المزخرف.
+
+```python
+from crewai.project import CrewBase, agent, crew, task
+
+@CrewBase # This decorator is REQUIRED
+class YourCrew():
+ """Your crew description"""
+
+ @agent
+ def my_agent(self) -> Agent:
+ return Agent(
+ config=self.agents_config['my_agent'], # type: ignore[index]
+ verbose=True
+ )
+
+ # ... rest of crew definition
+```
+
+
+ ينطبق هذا على فئات crew الكلاسيكية المكتوبة في Python، بما في ذلك crews الكلاسيكية المضمنة داخل مشاريع Flow.
+ يتم التحقق من crews بنمط JSON-first من `crew.jsonc` و `agents/` بدلاً من ذلك.
+
+
+#### نوع pyproject.toml غير صحيح
+
+**العرض**: نجاح البناء لكن فشل وقت التشغيل، أو سلوك غير متوقع
+
+**الحل**: تحقق من أن قسم `[tool.crewai]` يتطابق مع نوع مشروعك:
+
+```toml
+# For Crew projects:
+[tool.crewai]
+type = "crew"
+
+# For Flow projects:
+[tool.crewai]
+type = "flow"
+```
+
+### فشل وقت التشغيل
+
+#### فشل اتصال LLM
+
+**العرض**: أخطاء مفتاح API، "model not found"، أو فشل المصادقة
+
+**الحل**:
+1. تحقق من صحة تعيين مفتاح API لمزود LLM في متغيرات البيئة
+2. تأكد من تطابق أسماء متغيرات البيئة مع ما يتوقعه الكود
+3. اختبر محلياً بنفس متغيرات البيئة بالضبط قبل النشر
+
+#### أخطاء تنفيذ الطاقم
+
+**العرض**: يبدأ الطاقم لكن يفشل أثناء التنفيذ
+
+**الحل**:
+1. تحقق من سجلات التنفيذ في لوحة تحكم AMP (علامة تبويب Traces)
+2. تحقق من أن جميع الأدوات لديها مفاتيح API المطلوبة مُهيأة
+3. في crews بنمط JSON-first، تحقق من `crew.jsonc` والملفات المشار إليها داخل `agents/`
+4. في crews الكلاسيكية، تأكد من صحة `agents.yaml` و `tasks.yaml`
+
+
+ تواصل مع فريق الدعم للمساعدة في مشاكل النشر أو أسئلة حول
+ منصة AMP.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/enable-crew-studio.mdx b/docs/v1.15.1/ar/enterprise/guides/enable-crew-studio.mdx
new file mode 100644
index 000000000..2393a5412
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/enable-crew-studio.mdx
@@ -0,0 +1,179 @@
+---
+title: "تفعيل Crew Studio"
+description: "تفعيل Crew Studio على CrewAI AMP"
+icon: "comments"
+mode: "wide"
+---
+
+
+ Crew Studio هو أداة قوية **بدون كود/منخفضة الكود** تتيح لك بسرعة
+ بناء أو هيكلة الطواقم عبر واجهة محادثة.
+
+
+## ما هو Crew Studio؟
+
+Crew Studio هو طريقة مبتكرة لإنشاء طواقم وكلاء الذكاء الاصطناعي بدون كتابة كود.
+
+
+ 
+
+
+مع Crew Studio، يمكنك:
+
+- الدردشة مع مساعد الطاقم لوصف مشكلتك
+- إنشاء الوكلاء والمهام تلقائياً
+- اختيار الأدوات المناسبة
+- تهيئة المدخلات الضرورية
+- إنشاء كود قابل للتنزيل للتخصيص
+- النشر مباشرة على منصة CrewAI AMP
+
+## خطوات التهيئة
+
+قبل البدء باستخدام Crew Studio، تحتاج لتهيئة اتصالات LLM:
+
+
+
+ انتقل إلى علامة تبويب **LLM Connections** في لوحة تحكم CrewAI AMP وأنشئ اتصال LLM جديداً.
+
+
+ يمكنك استخدام أي مزود LLM تريده ويدعمه CrewAI.
+
+
+ هيّئ اتصال LLM:
+
+ - أدخل `Connection Name` (مثل `OpenAI`)
+ - اختر مزود النموذج: `openai` أو `azure`
+ - اختر النماذج التي تريد استخدامها في طواقم Studio
+ - نوصي بـ `gpt-4o` و`o1-mini` و`gpt-4o-mini` على الأقل
+ - أضف مفتاح API كمتغير بيئة:
+ - لـ OpenAI: أضف `OPENAI_API_KEY` مع مفتاح API
+ - لـ Azure OpenAI: راجع [هذه المقالة](https://blog.crewai.com/configuring-azure-openai-with-crewai-a-comprehensive-guide/) لتفاصيل التهيئة
+ - انقر على `Add Connection` لحفظ التهيئة
+
+
+ 
+
+
+
+
+
+ بمجرد إتمام الإعداد، سترى الاتصال الجديد مُضافاً إلى قائمة الاتصالات المتاحة.
+
+
+ 
+
+
+
+
+
+ في القائمة الرئيسية، انتقل إلى **Settings → Defaults** وهيّئ إعدادات LLM الافتراضية:
+
+ - اختر النماذج الافتراضية للوكلاء والمكونات الأخرى
+ - عيّن التهيئات الافتراضية لـ Crew Studio
+
+ انقر على `Save Settings` لتطبيق تغييراتك.
+
+
+ 
+
+
+
+
+
+## استخدام Crew Studio
+
+الآن بعد تهيئة اتصال LLM والإعدادات الافتراضية، أنت جاهز لبدء استخدام Crew Studio!
+
+
+
+ انتقل إلى قسم **Studio** في لوحة تحكم CrewAI AMP.
+
+
+
+ ابدأ محادثة مع مساعد الطاقم بوصف المشكلة التي تريد حلها:
+
+ ```md
+ I need a crew that can research the latest AI developments and create a summary report.
+ ```
+
+ سيطرح مساعد الطاقم أسئلة توضيحية لفهم متطلباتك بشكل أفضل.
+
+
+
+
+ راجع تهيئة الطاقم المُنشأ، بما في ذلك:
+
+ - الوكلاء وأدوارهم
+ - المهام المطلوب تنفيذها
+ - المدخلات المطلوبة
+ - الأدوات المستخدمة
+
+ هذه فرصتك لتنقيح التهيئة قبل المتابعة.
+
+
+
+
+ بمجرد رضاك عن التهيئة، يمكنك:
+
+ - تنزيل الكود المُنشأ للتخصيص المحلي
+ - نشر الطاقم مباشرة على منصة CrewAI AMP
+ - تعديل التهيئة وإعادة إنشاء الطاقم
+
+
+
+
+ بعد النشر، اختبر طاقمك بمدخلات نموذجية للتأكد من أنه يعمل كما هو متوقع.
+
+
+
+
+ للحصول على أفضل النتائج، قدم أوصافاً واضحة ومفصلة لما تريد أن
+ يحققه طاقمك. ضمّن مدخلات ومخرجات محددة متوقعة في
+ وصفك.
+
+
+## مثال على سير العمل
+
+إليك سير عمل نموذجي لإنشاء طاقم مع Crew Studio:
+
+
+
+ ابدأ بوصف مشكلتك:
+
+ ```md
+ I need a crew that can analyze financial news and provide investment recommendations
+ ```
+
+
+
+
+ أجب على أسئلة التوضيح من مساعد الطاقم لتنقيح
+ متطلباتك.
+
+
+
+ راجع خطة الطاقم المُنشأة، التي قد تتضمن:
+
+ - وكيل بحث لجمع الأخبار المالية
+ - وكيل تحليل لتفسير البيانات
+ - وكيل توصيات لتقديم نصائح استثمارية
+
+
+
+
+ وافق على الخطة أو اطلب تغييرات إذا لزم الأمر.
+
+
+
+ نزّل الكود للتخصيص أو انشر مباشرة على المنصة.
+
+
+
+ اختبر طاقمك بمدخلات نموذجية ونقّح حسب الحاجة.
+
+
+
+
+ تواصل مع فريق الدعم للمساعدة في Crew Studio أو أي ميزات أخرى في CrewAI
+ AMP.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/gmail-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/gmail-trigger.mdx
new file mode 100644
index 000000000..5423109c0
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/gmail-trigger.mdx
@@ -0,0 +1,97 @@
+---
+title: "مشغل Gmail"
+description: "تشغيل الأتمتات عند حدوث أحداث Gmail (مثل رسائل بريد إلكتروني جديدة، تسميات)."
+icon: "envelope"
+mode: "wide"
+---
+
+## نظرة عامة
+
+استخدم مشغل Gmail لتشغيل طواقمك المنشورة عند حدوث أحداث Gmail في الحسابات المتصلة، مثل استلام رسالة بريد إلكتروني جديدة أو رسائل تطابق تسمية/فلتر.
+
+
+ تأكد من ربط Gmail في Tools & Integrations وتفعيل المشغل
+ لعملية النشر.
+
+
+## تفعيل مشغل Gmail
+
+1. افتح عملية النشر في CrewAI AMP
+2. انتقل إلى علامة تبويب **Triggers**
+3. حدد موقع **Gmail** وبدّل مفتاح التبديل للتفعيل
+
+
+
+
+
+## مثال: معالجة الرسائل الجديدة
+
+عند وصول رسالة بريد إلكتروني جديدة، سيرسل مشغل Gmail الحمولة إلى طاقمك أو تدفقك. فيما يلي مثال على طاقم يحلل ويعالج حمولة المشغل.
+
+```python
+@CrewBase
+class GmailProcessingCrew:
+ @agent
+ def parser(self) -> Agent:
+ return Agent(
+ config=self.agents_config['parser'],
+ )
+
+ @task
+ def parse_gmail_payload(self) -> Task:
+ return Task(
+ config=self.tasks_config['parse_gmail_payload'],
+ agent=self.parser(),
+ )
+
+ @task
+ def act_on_email(self) -> Task:
+ return Task(
+ config=self.tasks_config['act_on_email'],
+ agent=self.parser(),
+ )
+```
+
+ستكون حمولة Gmail متاحة عبر آليات السياق القياسية.
+
+### الاختبار المحلي
+
+اختبر تكامل مشغل Gmail محلياً باستخدام CrewAI CLI:
+
+```bash
+# عرض جميع المشغلات المتاحة
+crewai triggers list
+
+# محاكاة مشغل Gmail بحمولة واقعية
+crewai triggers run gmail/new_email_received
+```
+
+سينفذ أمر `crewai triggers run` طاقمك بحمولة Gmail كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
+
+
+ استخدم `crewai triggers run gmail/new_email_received` (وليس `crewai run`) لمحاكاة
+ تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
+ حمولة المشغل تلقائياً.
+
+
+## مراقبة عمليات التنفيذ
+
+تتبع سجل وأداء عمليات التشغيل المُشغّلة:
+
+
+
+
+
+## استكشاف الأخطاء وإصلاحها
+
+- تأكد من ربط Gmail في Tools & Integrations
+- تحقق من تفعيل مشغل Gmail في علامة تبويب Triggers
+- اختبر محلياً بـ `crewai triggers run gmail/new_email_received` لرؤية هيكل الحمولة بالضبط
+- تحقق من سجلات التنفيذ وتأكد من تمرير الحمولة كـ `crewai_trigger_payload`
+- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
diff --git a/docs/v1.15.1/ar/enterprise/guides/google-calendar-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/google-calendar-trigger.mdx
new file mode 100644
index 000000000..542df5b18
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/google-calendar-trigger.mdx
@@ -0,0 +1,83 @@
+---
+title: "مشغل Google Calendar"
+description: "تشغيل الطواقم عند إنشاء أو تحديث أو إلغاء أحداث Google Calendar"
+icon: "calendar"
+mode: "wide"
+---
+
+## نظرة عامة
+
+استخدم مشغل Google Calendar لإطلاق الأتمتات كلما تغيرت أحداث التقويم. تشمل حالات الاستخدام الشائعة إحاطة الفريق قبل اجتماع، وإخطار أصحاب المصلحة عند إلغاء حدث هام، أو تلخيص الجداول اليومية.
+
+
+ تأكد من ربط Google Calendar في **Tools & Integrations** وتفعيله
+ لعملية النشر التي تريد أتمتتها.
+
+
+## تفعيل مشغل Google Calendar
+
+1. افتح عملية النشر في CrewAI AMP
+2. انتقل إلى علامة تبويب **Triggers**
+3. حدد موقع **Google Calendar** وبدّل مفتاح التبديل للتفعيل
+
+
+
+
+
+## مثال: تلخيص تفاصيل الاجتماع
+
+المقتطف أدناه يعكس مثال `calendar-event-crew.py` في مستودع المشغلات. يحلل الحمولة، ويحلل الحاضرين والتوقيت، وينتج ملخصاً للاجتماع للأدوات اللاحقة.
+
+```python
+from calendar_event_crew import GoogleCalendarEventTrigger
+
+crew = GoogleCalendarEventTrigger().crew()
+result = crew.kickoff({
+ "crewai_trigger_payload": calendar_payload,
+})
+print(result.raw)
+```
+
+استخدم `crewai_trigger_payload` تماماً كما يتم تسليمه من المشغل حتى يتمكن الطاقم من استخراج الحقول المناسبة.
+
+## الاختبار المحلي
+
+اختبر تكامل مشغل Google Calendar محلياً باستخدام CrewAI CLI:
+
+```bash
+# عرض جميع المشغلات المتاحة
+crewai triggers list
+
+# محاكاة مشغل Google Calendar بحمولة واقعية
+crewai triggers run google_calendar/event_changed
+```
+
+سينفذ أمر `crewai triggers run` طاقمك بحمولة Calendar كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
+
+
+ استخدم `crewai triggers run google_calendar/event_changed` (وليس `crewai run`) لمحاكاة
+ تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
+ حمولة المشغل تلقائياً.
+
+
+## مراقبة عمليات التنفيذ
+
+تتبع قائمة **Executions** في لوحة تحكم النشر كل عملية تشغيل مُشغّلة وتعرض بيانات الحمولة الوصفية وملخصات المخرجات والأخطاء.
+
+
+
+
+
+## استكشاف الأخطاء وإصلاحها
+
+- تأكد من ربط حساب Google الصحيح وتفعيل المشغل
+- اختبر محلياً بـ `crewai triggers run google_calendar/event_changed` لرؤية هيكل الحمولة بالضبط
+- تأكد من أن سير عملك يتعامل مع أحداث اليوم الكامل (الحمولات تستخدم `start.date` و`end.date` بدلاً من الطوابع الزمنية)
+- تحقق من سجلات التنفيذ إذا كانت التذكيرات أو مصفوفات الحاضرين مفقودة — قد تحد صلاحيات التقويم من الحقول في الحمولة
+- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
diff --git a/docs/v1.15.1/ar/enterprise/guides/google-drive-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/google-drive-trigger.mdx
new file mode 100644
index 000000000..0f4c05ec4
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/google-drive-trigger.mdx
@@ -0,0 +1,80 @@
+---
+title: "مشغل Google Drive"
+description: "الاستجابة لأحداث ملفات Google Drive بطواقم آلية"
+icon: "folder"
+mode: "wide"
+---
+
+## نظرة عامة
+
+شغّل أتمتاتك عند إنشاء أو تحديث أو حذف ملفات في Google Drive. تشمل سير العمل النموذجية تلخيص المحتوى المُحمّل حديثاً، وتطبيق سياسات المشاركة، أو إخطار المالكين عند تغيير ملفات هامة.
+
+
+ اربط Google Drive في **Tools & Integrations** وتأكد من تفعيل المشغل
+ للأتمتة التي تريد مراقبتها.
+
+
+## تفعيل مشغل Google Drive
+
+1. افتح عملية النشر في CrewAI AMP
+2. انتقل إلى علامة تبويب **Triggers**
+3. حدد موقع **Google Drive** وبدّل مفتاح التبديل للتفعيل
+
+
+
+
+
+## مثال: تلخيص نشاط الملفات
+
+تحلل طواقم Drive النموذجية الحمولة لاستخراج بيانات الملف الوصفية وتقييم الصلاحيات ونشر ملخص.
+
+```python
+from drive_file_crew import GoogleDriveFileTrigger
+
+crew = GoogleDriveFileTrigger().crew()
+crew.kickoff({
+ "crewai_trigger_payload": drive_payload,
+})
+```
+
+## الاختبار المحلي
+
+اختبر تكامل مشغل Google Drive محلياً باستخدام CrewAI CLI:
+
+```bash
+# عرض جميع المشغلات المتاحة
+crewai triggers list
+
+# محاكاة مشغل Google Drive بحمولة واقعية
+crewai triggers run google_drive/file_changed
+```
+
+سينفذ أمر `crewai triggers run` طاقمك بحمولة Drive كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
+
+
+ استخدم `crewai triggers run google_drive/file_changed` (وليس `crewai run`) لمحاكاة
+ تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
+ حمولة المشغل تلقائياً.
+
+
+## مراقبة عمليات التنفيذ
+
+تتبع سجل وأداء عمليات التشغيل المُشغّلة عبر قائمة **Executions** في لوحة تحكم النشر.
+
+
+
+
+
+## استكشاف الأخطاء وإصلاحها
+
+- تحقق من ربط Google Drive وتفعيل مفتاح التبديل للمشغل
+- اختبر محلياً بـ `crewai triggers run google_drive/file_changed` لرؤية هيكل الحمولة بالضبط
+- إذا كانت الحمولة تفتقد بيانات الصلاحيات، تأكد من أن الحساب المتصل لديه صلاحية الوصول إلى الملف أو المجلد
+- يرسل المشغل معرّفات الملفات فقط؛ استخدم Drive API إذا كنت تحتاج جلب المحتوى الثنائي أثناء تشغيل الطاقم
+- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
diff --git a/docs/v1.15.1/ar/enterprise/guides/hubspot-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/hubspot-trigger.mdx
new file mode 100644
index 000000000..20c31aef6
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/hubspot-trigger.mdx
@@ -0,0 +1,61 @@
+---
+title: "مشغل HubSpot"
+description: "تشغيل طواقم CrewAI مباشرة من سير عمل HubSpot"
+icon: "hubspot"
+mode: "wide"
+---
+
+يقدم هذا الدليل عملية خطوة بخطوة لإعداد مشغلات HubSpot لـ CrewAI AMP، مما يتيح لك بدء الطواقم مباشرة من سير عمل HubSpot.
+
+## المتطلبات المسبقة
+
+- حساب CrewAI AMP
+- حساب HubSpot مع ميزة [HubSpot Workflows](https://knowledge.hubspot.com/workflows/create-workflows)
+
+## خطوات الإعداد
+
+
+
+ - سجّل الدخول إلى `حساب CrewAI AMP > Triggers` - اختر `HubSpot` من
+ قائمة المشغلات المتاحة - اختر حساب HubSpot الذي تريد ربطه
+ بـ CrewAI AMP - اتبع التعليمات على الشاشة لتفويض وصول CrewAI AMP
+ إلى حساب HubSpot - ستظهر رسالة تأكيد بمجرد
+ ربط HubSpot بنجاح مع CrewAI AMP
+
+
+ - سجّل الدخول إلى `حساب HubSpot > Automations > Workflows > New workflow`
+ - اختر نوع سير العمل المناسب لاحتياجاتك (مثل Start from scratch) -
+ في منشئ سير العمل، انقر على أيقونة Plus (+) لإضافة إجراء جديد. -
+ اختر `Integrated apps > CrewAI > Kickoff a Crew`. - اختر الطاقم الذي
+ تريد تشغيله. - انقر على `Save` لإضافة الإجراء إلى سير عملك
+
+
+
+
+
+ - بعد خطوة Kickoff a Crew، انقر على أيقونة Plus (+) لإضافة
+ إجراء جديد. - على سبيل المثال، لإرسال إشعار بريد إلكتروني داخلي، اختر
+ `Communications > Send internal email notification` - في حقل Body،
+ انقر على `Insert data`، اختر `View properties or action outputs from > Action
+ outputs > Crew Result` لتضمين بيانات الطاقم في البريد الإلكتروني
+
+
+
+ - هيّئ أي إجراءات إضافية حسب الحاجة - راجع خطوات
+ سير عملك للتأكد من إعداد كل شيء بشكل صحيح - فعّل سير العمل
+
+
+
+
+
+
+لمزيد من المعلومات المفصلة حول الإجراءات المتاحة وخيارات التخصيص، راجع [وثائق HubSpot Workflows](https://knowledge.hubspot.com/workflows/create-workflows).
diff --git a/docs/v1.15.1/ar/enterprise/guides/human-in-the-loop.mdx b/docs/v1.15.1/ar/enterprise/guides/human-in-the-loop.mdx
new file mode 100644
index 000000000..468f69e2e
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/human-in-the-loop.mdx
@@ -0,0 +1,157 @@
+---
+title: "سير عمل HITL"
+description: "تعلم كيفية تنفيذ سير عمل Human-In-The-Loop في CrewAI لتعزيز اتخاذ القرار"
+icon: "user-check"
+mode: "wide"
+---
+
+Human-In-The-Loop (HITL) هو نهج قوي يجمع بين الذكاء الاصطناعي والخبرة البشرية لتعزيز اتخاذ القرار وتحسين نتائج المهام. يوضح هذا الدليل كيفية تنفيذ HITL داخل CrewAI Enterprise.
+
+## نهجا HITL في CrewAI
+
+يقدم CrewAI نهجين لتنفيذ سير عمل Human-In-The-Loop:
+
+| النهج | الأفضل لـ | الإصدار |
+|-------|-----------|---------|
+| **قائم على التدفق** (مُزخرف `@human_feedback`) | الإنتاج مع واجهة Enterprise، سير عمل البريد الإلكتروني أولاً، ميزات المنصة الكاملة | **1.8.0+** |
+| **قائم على Webhook** | التكاملات المخصصة، الأنظمة الخارجية (Slack، Teams، إلخ.)، الإعدادات القديمة | جميع الإصدارات |
+
+## HITL القائم على التدفق مع منصة Enterprise
+
+
+يتطلب مُزخرف `@human_feedback` **إصدار CrewAI 1.8.0 أو أعلى**.
+
+
+عند استخدام مُزخرف `@human_feedback` في تدفقاتك، يوفر CrewAI Enterprise **نظام HITL يعتمد على البريد الإلكتروني أولاً** يمكّن أي شخص لديه عنوان بريد إلكتروني من الاستجابة لطلبات المراجعة:
+
+
+
+ يتلقى المستجيبون إشعارات بريد إلكتروني ويمكنهم الرد مباشرة — لا حاجة لتسجيل الدخول.
+
+
+ راجع واستجب لطلبات HITL في لوحة تحكم Enterprise عند التفضيل.
+
+
+ وجّه الطلبات إلى عناوين بريد محددة بناءً على أنماط الدوال أو استخراجها من حالة التدفق.
+
+
+ هيّئ استجابات احتياطية تلقائية عندما لا يرد أي شخص خلال المهلة الزمنية.
+
+
+
+### الفوائد الرئيسية
+
+- **مستجيبون خارجيون**: أي شخص لديه بريد إلكتروني يمكنه الاستجابة، حتى غير مستخدمي المنصة
+- **تعيين ديناميكي**: استخراج بريد المُعيَّن من حالة التدفق (مثل `account_owner_email`)
+- **تهيئة بسيطة**: التوجيه عبر البريد الإلكتروني أسهل في الإعداد من إدارة المستخدمين/الأدوار
+- **احتياطي منشئ النشر**: إذا لم تتطابق قاعدة توجيه، يتم إخطار منشئ النشر
+
+
+لتفاصيل التنفيذ حول مُزخرف `@human_feedback`، راجع دليل [التغذية الراجعة البشرية في التدفقات](/ar/learn/human-feedback-in-flows).
+
+
+## إعداد سير عمل HITL القائم على Webhook
+
+للتكاملات المخصصة مع الأنظمة الخارجية مثل Slack وMicrosoft Teams أو تطبيقاتك الخاصة، يمكنك استخدام النهج القائم على Webhook:
+
+
+
+ هيّئ مهمتك مع تفعيل الإدخال البشري:
+
+
+
+
+
+
+ عند تشغيل طاقمك، أضف رابط webhook للإدخال البشري:
+
+
+
+
+
+
+ بمجرد إتمام الطاقم للمهمة التي تتطلب إدخالاً بشرياً، ستتلقى إشعار webhook يحتوي على:
+ - **معرّف التنفيذ**
+ - **معرّف المهمة**
+ - **مخرجات المهمة**
+
+
+
+ سيتوقف النظام في حالة `Pending Human Input`. راجع مخرجات المهمة بعناية.
+
+
+
+ استدعِ نقطة نهاية الاستئناف لطاقمك بالمعلومات التالية:
+
+
+
+
+
+ **هام: يجب تقديم روابط Webhook مرة أخرى**:
+ **يجب** تقديم نفس روابط webhook (`taskWebhookUrl`، `stepWebhookUrl`، `crewWebhookUrl`) في استدعاء الاستئناف التي استخدمتها في استدعاء التشغيل. لا تُنقل تهيئات Webhook تلقائياً من التشغيل — يجب تضمينها صراحة في طلب الاستئناف لمواصلة تلقي الإشعارات لاكتمال المهام وخطوات الوكيل واكتمال الطاقم.
+
+
+ مثال على استدعاء الاستئناف مع webhooks:
+ ```bash
+ curl -X POST {BASE_URL}/resume \
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "execution_id": "abcd1234-5678-90ef-ghij-klmnopqrstuv",
+ "task_id": "research_task",
+ "human_feedback": "Great work! Please add more details.",
+ "is_approve": true,
+ "taskWebhookUrl": "https://your-server.com/webhooks/task",
+ "stepWebhookUrl": "https://your-server.com/webhooks/step",
+ "crewWebhookUrl": "https://your-server.com/webhooks/crew"
+ }'
+ ```
+
+
+ **تأثير التغذية الراجعة على تنفيذ المهمة**:
+ من الضروري توخي الحذر عند تقديم التغذية الراجعة، حيث سيتم دمج محتوى التغذية الراجعة بالكامل كسياق إضافي لعمليات تنفيذ المهام اللاحقة.
+
+ وهذا يعني:
+ - جميع المعلومات في تغذيتك الراجعة تصبح جزءاً من سياق المهمة.
+ - التفاصيل غير ذات الصلة قد تؤثر سلباً عليها.
+ - التغذية الراجعة الموجزة وذات الصلة تساعد في الحفاظ على تركيز وكفاءة المهمة.
+ - راجع دائماً تغذيتك الراجعة بعناية قبل الإرسال للتأكد من أنها تحتوي فقط على معلومات ذات صلة توجه تنفيذ المهمة بشكل إيجابي.
+
+
+ إذا قدمت تغذية راجعة سلبية:
+ - سيعيد الطاقم محاولة المهمة مع سياق إضافي من تغذيتك الراجعة.
+ - ستتلقى إشعار webhook آخر لمزيد من المراجعة.
+ - كرر الخطوات 4-6 حتى ترضى.
+
+
+
+ عندما ترسل تغذية راجعة إيجابية، سيستمر التنفيذ إلى الخطوات التالية.
+
+
+
+## أفضل الممارسات
+
+- **كن محدداً**: قدم تغذية راجعة واضحة وقابلة للتنفيذ تعالج المهمة مباشرة
+- **كن ذا صلة**: ضمّن فقط المعلومات التي ستساعد في تحسين تنفيذ المهمة
+- **كن سريعاً**: استجب لمطالبات HITL بسرعة لتجنب تأخير سير العمل
+- **راجع بعناية**: تحقق من تغذيتك الراجعة قبل الإرسال لضمان الدقة
+
+## حالات الاستخدام الشائعة
+
+سير عمل HITL ذو قيمة خاصة لـ:
+- ضمان الجودة والتحقق
+- سيناريوهات اتخاذ القرار المعقدة
+- العمليات الحساسة أو عالية المخاطر
+- المهام الإبداعية التي تتطلب حكماً بشرياً
+- مراجعات الامتثال والتنظيم
+
+## اعرف المزيد
+
+
+
+ استكشف قدرات منصة Enterprise الكاملة لـ Flow HITL بما في ذلك إشعارات البريد الإلكتروني وقواعد التوجيه والاستجابة التلقائية والتحليلات.
+
+
+ دليل التنفيذ لمُزخرف `@human_feedback` في تدفقاتك.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/kickoff-crew.mdx b/docs/v1.15.1/ar/enterprise/guides/kickoff-crew.mdx
new file mode 100644
index 000000000..f1e477065
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/kickoff-crew.mdx
@@ -0,0 +1,178 @@
+---
+title: "تشغيل الطاقم"
+description: "تشغيل طاقم على CrewAI AMP"
+icon: "flag-checkered"
+mode: "wide"
+---
+
+## نظرة عامة
+
+بمجرد نشر طاقمك على منصة CrewAI AMP، يمكنك بدء عمليات التنفيذ عبر واجهة الويب أو API. يغطي هذا الدليل كلا النهجين.
+
+## الطريقة 1: استخدام واجهة الويب
+
+### الخطوة 1: الانتقال إلى طاقمك المنشور
+
+1. سجّل الدخول إلى [CrewAI AMP](https://app.crewai.com)
+2. انقر على اسم الطاقم من قائمة مشاريعك
+3. ستنتقل إلى صفحة تفاصيل الطاقم
+
+
+
+### الخطوة 2: بدء التنفيذ
+
+من صفحة تفاصيل طاقمك، لديك خياران لبدء التنفيذ:
+
+#### الخيار أ: التشغيل السريع
+
+1. انقر على رابط `Kickoff` في قسم Test Endpoints
+2. أدخل معاملات الإدخال المطلوبة لطاقمك في محرر JSON
+3. انقر على زر `Send Request`
+
+
+
+#### الخيار ب: استخدام الواجهة المرئية
+
+1. انقر على علامة تبويب `Run` في صفحة تفاصيل الطاقم
+2. أدخل المدخلات المطلوبة في حقول النموذج
+3. انقر على زر `Run Crew`
+
+
+
+### الخطوة 3: مراقبة تقدم التنفيذ
+
+بعد بدء التنفيذ:
+
+1. ستتلقى استجابة تحتوي على `kickoff_id` - **انسخ هذا المعرّف**
+2. هذا المعرّف ضروري لتتبع تنفيذك
+
+
+
+### الخطوة 4: التحقق من حالة التنفيذ
+
+لمراقبة تقدم تنفيذك:
+
+1. انقر على نقطة نهاية "Status" في قسم Test Endpoints
+2. الصق `kickoff_id` في الحقل المخصص
+3. انقر على زر "Get Status"
+
+
+
+ستعرض استجابة الحالة:
+
+- حالة التنفيذ الحالية (`running`، `completed`، إلخ.)
+- تفاصيل حول المهام الجارية
+- أي مخرجات أُنتجت حتى الآن
+
+### الخطوة 5: عرض النتائج النهائية
+
+بمجرد اكتمال التنفيذ:
+
+1. ستتغير الحالة إلى `completed`
+2. يمكنك عرض نتائج ومخرجات التنفيذ الكاملة
+3. لعرض أكثر تفصيلاً، تحقق من علامة تبويب `Executions` في صفحة تفاصيل الطاقم
+
+## الطريقة 2: استخدام API
+
+يمكنك أيضاً تشغيل الطواقم برمجياً باستخدام REST API لـ CrewAI AMP.
+
+### المصادقة
+
+جميع طلبات API تتطلب رمز حامل للمصادقة:
+
+```bash
+curl -H "Authorization: Bearer YOUR_CREW_TOKEN" https://your-crew-url.crewai.com
+```
+
+رمز الحامل متاح في علامة تبويب Status في صفحة تفاصيل طاقمك.
+
+### التحقق من صحة الطاقم
+
+قبل تنفيذ العمليات، يمكنك التحقق من أن طاقمك يعمل بشكل صحيح:
+
+```bash
+curl -H "Authorization: Bearer YOUR_CREW_TOKEN" https://your-crew-url.crewai.com
+```
+
+ستعيد الاستجابة الناجحة رسالة تشير إلى أن الطاقم يعمل:
+
+```
+Healthy%
+```
+
+### الخطوة 1: استرداد المدخلات المطلوبة
+
+أولاً، حدد المدخلات التي يتطلبها طاقمك:
+
+```bash
+curl -X GET \
+ -H "Authorization: Bearer YOUR_CREW_TOKEN" \
+ https://your-crew-url.crewai.com/inputs
+```
+
+ستكون الاستجابة كائن JSON يحتوي على مصفوفة من معاملات الإدخال المطلوبة، على سبيل المثال:
+
+```json
+{ "inputs": ["topic", "current_year"] }
+```
+
+يوضح هذا المثال أن هذا الطاقم المحدد يتطلب مدخلين: `topic` و`current_year`.
+
+### الخطوة 2: بدء التنفيذ
+
+ابدأ التنفيذ بتقديم المدخلات المطلوبة:
+
+```bash
+curl -X POST \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer YOUR_CREW_TOKEN" \
+ -d '{"inputs": {"topic": "AI Agent Frameworks", "current_year": "2025"}}' \
+ https://your-crew-url.crewai.com/kickoff
+```
+
+ستتضمن الاستجابة `kickoff_id` الذي ستحتاجه للتتبع:
+
+```json
+{ "kickoff_id": "abcd1234-5678-90ef-ghij-klmnopqrstuv" }
+```
+
+### الخطوة 3: التحقق من حالة التنفيذ
+
+راقب تقدم التنفيذ باستخدام kickoff_id:
+
+```bash
+curl -X GET \
+ -H "Authorization: Bearer YOUR_CREW_TOKEN" \
+ https://your-crew-url.crewai.com/status/abcd1234-5678-90ef-ghij-klmnopqrstuv
+```
+
+## التعامل مع عمليات التنفيذ
+
+### عمليات التنفيذ طويلة المدة
+
+لعمليات التنفيذ التي قد تستغرق وقتاً طويلاً:
+
+1. فكّر في تنفيذ آلية استعلام دوري للتحقق من الحالة بشكل دوري
+2. استخدم webhooks (إذا كانت متاحة) للإشعار عند اكتمال التنفيذ
+3. نفّذ معالجة الأخطاء للمهلات الزمنية المحتملة
+
+### سياق التنفيذ
+
+يتضمن سياق التنفيذ:
+
+- المدخلات المقدمة عند التشغيل
+- متغيرات البيئة المُهيأة أثناء النشر
+- أي حالة محفوظة بين المهام
+
+### تصحيح أخطاء عمليات التنفيذ الفاشلة
+
+إذا فشل التنفيذ:
+
+1. تحقق من علامة تبويب "Executions" للسجلات المفصلة
+2. راجع علامة تبويب "Traces" لتفاصيل التنفيذ خطوة بخطوة
+3. ابحث عن استجابات LLM واستخدام الأدوات في تفاصيل التتبع
+
+
+ تواصل مع فريق الدعم للمساعدة في مشاكل التنفيذ أو أسئلة حول
+ منصة Enterprise.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/microsoft-teams-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/microsoft-teams-trigger.mdx
new file mode 100644
index 000000000..5ac319d6a
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/microsoft-teams-trigger.mdx
@@ -0,0 +1,70 @@
+---
+title: "مشغل Microsoft Teams"
+description: "تشغيل الطواقم من نشاط محادثات Microsoft Teams"
+icon: "microsoft"
+mode: "wide"
+---
+
+## نظرة عامة
+
+استخدم مشغل Microsoft Teams لبدء الأتمتات كلما أُنشئت محادثة جديدة. تشمل الأنماط الشائعة تلخيص الطلبات الواردة وتوجيه الرسائل العاجلة لفرق الدعم أو إنشاء مهام متابعة في أنظمة أخرى.
+
+
+ تأكد من ربط Microsoft Teams تحت **Tools & Integrations** و
+ تفعيله في علامة تبويب **Triggers** لعملية النشر.
+
+
+## تفعيل مشغل Microsoft Teams
+
+1. افتح عملية النشر في CrewAI AMP
+2. انتقل إلى علامة تبويب **Triggers**
+3. حدد موقع **Microsoft Teams** وبدّل مفتاح التبديل للتفعيل
+
+
+
+
+
+## مثال: تلخيص سلسلة محادثة جديدة
+
+```python
+from teams_chat_created_crew import MicrosoftTeamsChatTrigger
+
+crew = MicrosoftTeamsChatTrigger().crew()
+result = crew.kickoff({
+ "crewai_trigger_payload": teams_payload,
+})
+print(result.raw)
+```
+
+يحلل الطاقم بيانات المحادثة الوصفية (الموضوع، وقت الإنشاء، قائمة الأعضاء) وينشئ خطة عمل للفريق المستقبل.
+
+## الاختبار المحلي
+
+اختبر تكامل مشغل Microsoft Teams محلياً باستخدام CrewAI CLI:
+
+```bash
+# عرض جميع المشغلات المتاحة
+crewai triggers list
+
+# محاكاة مشغل Microsoft Teams بحمولة واقعية
+crewai triggers run microsoft_teams/teams_message_created
+```
+
+سينفذ أمر `crewai triggers run` طاقمك بحمولة Teams كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
+
+
+ استخدم `crewai triggers run microsoft_teams/teams_message_created` (وليس `crewai
+ run`) لمحاكاة تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى
+ طاقمك حمولة المشغل تلقائياً.
+
+
+## استكشاف الأخطاء وإصلاحها
+
+- تأكد من أن اتصال Teams نشط؛ يجب تحديثه إذا سحب المستأجر الصلاحيات
+- اختبر محلياً بـ `crewai triggers run microsoft_teams/teams_message_created` لرؤية هيكل الحمولة بالضبط
+- تأكد من أن اشتراك webhook في Microsoft 365 لا يزال صالحاً إذا توقفت الحمولات عن الوصول
+- راجع سجلات التنفيذ لعدم تطابق شكل الحمولة — قد تحذف إشعارات Graph حقولاً عندما تكون المحادثة خاصة أو مقيدة
+- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
diff --git a/docs/v1.15.1/ar/enterprise/guides/monorepo-deployments.mdx b/docs/v1.15.1/ar/enterprise/guides/monorepo-deployments.mdx
new file mode 100644
index 000000000..d86f18e92
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/monorepo-deployments.mdx
@@ -0,0 +1,224 @@
+---
+title: "النشر من Monorepo"
+description: "انشر Crew أو Flow من مجلد فرعي داخل مستودع أكبر"
+icon: "folder-tree"
+mode: "wide"
+---
+
+
+ استخدم دليل عمل عندما يكون Crew أو Flow داخل مستودع أكبر. يتحقق CrewAI AMP
+ من الأتمتة ويبنيها ويشغلها من ذلك المجلد الفرعي بدلاً من جذر المستودع.
+
+
+## متى تستخدم ذلك
+
+يكون النشر من monorepo مفيداً عندما يحتوي مستودع واحد على عدة أتمتات أو حزم
+مشتركة أو كود تطبيقات آخر:
+
+```text
+company-ai/
+|-- uv.lock
+|-- packages/
+| `-- shared_tools/
+`-- crews/
+ |-- support_agent/
+ | |-- pyproject.toml
+ | |-- crew.jsonc
+ | `-- agents/
+ | `-- support_agent.jsonc
+ `-- research_flow/
+ |-- pyproject.toml
+ `-- src/
+ `-- research_flow/
+ `-- main.py
+```
+
+لنشر `support_agent`، اضبط دليل العمل على:
+
+```text
+crews/support_agent
+```
+
+لا يزال AMP يجلب المستودع كاملاً أو يرفعه، لكنه يتعامل مع المجلد المحدد كجذر
+مشروع الأتمتة.
+
+## ما الذي يتحكم به دليل العمل
+
+عند تعيين دليل عمل، يستخدم AMP ذلك المجلد من أجل:
+
+- التحقق من المشروع، بما في ذلك `pyproject.toml` وملفات crew JSON وأي نقطة دخول كلاسيكية لـ Crew أو Flow
+- تثبيت الاعتماديات باستخدام `uv`
+- دليل العمل للعملية قيد التشغيل
+- متغير البيئة `CREW_ROOT_DIR`
+
+ترك الحقل فارغاً يحافظ على السلوك الحالي ويستخدم جذر المستودع.
+
+## المصادر المدعومة
+
+يمكنك تعيين دليل عمل عند إنشاء نشر من:
+
+- مستودع GitHub متصل
+- مستودع Git مكوّن في AMP
+- رفع ملف ZIP
+
+
+ اضبط أدلة العمل من واجهة AMP على الويب. لا يطلب تدفق CLI
+ `crewai deploy create` هذا الحقل.
+
+
+يمكنك أيضاً إضافة دليل العمل أو تغييره في نشر موجود من صفحة **Settings** الخاصة
+بالنشر. يسري التغيير في النشر التالي.
+
+
+ لا يمكن استخدام أدلة العمل وauto-deploy معاً. إذا كان للنشر دليل عمل، يتم
+ تعطيل auto-deploy لذلك النشر. أوقف auto-deploy قبل تعيين دليل عمل.
+
+
+## إعداد نشر جديد
+
+
+
+ في CrewAI AMP، أنشئ نشراً جديداً واختر المصدر: GitHub أو Git Repository أو
+ رفع ZIP.
+
+
+
+ اختر المستودع والفرع اللذين يحتويان على monorepo، أو ارفع ملف ZIP يحتوي
+ جذره على محتويات monorepo.
+
+
+
+ وسّع قسم **Advanced** في نموذج النشر.
+
+
+
+ أدخل المسار من جذر المستودع إلى مشروع Crew أو Flow:
+
+ ```text
+ crews/support_agent
+ ```
+
+ لا تضف شرطة مائلة في البداية.
+
+
+
+ أضف أي متغيرات بيئة مطلوبة، ثم ابدأ النشر.
+
+
+
+## إعداد نشر موجود
+
+
+
+ انتقل إلى الأتمتة في AMP وافتح **Settings**.
+
+
+
+ إذا كان auto-deploy مفعلاً، أوقفه أولاً. لا يكون حقل دليل العمل متاحاً
+ أثناء تشغيل auto-deploy.
+
+
+
+ في **Basic settings**، أدخل مسار المجلد الفرعي، مثل:
+
+ ```text
+ crews/support_agent
+ ```
+
+
+
+ احفظ الإعداد وأعد نشر الأتمتة. سيتم استخدام دليل العمل الجديد في النشر
+ التالي.
+
+
+
+## قواعد المسار
+
+يجب أن يكون دليل العمل مساراً نسبياً داخل جذر المستودع أو ZIP.
+
+| القاعدة | المثال |
+|---------|--------|
+| استخدم مساراً نسبياً | `crews/support_agent` |
+| لا تبدأ بـ `/` | `/crews/support_agent` غير صالح |
+| لا تستخدم مقاطع المسار `.` أو `..` | `crews/../support_agent` غير صالح |
+| استخدم الأحرف والأرقام والشرطات والشرطات السفلية والنقاط والشرطات المائلة فقط | `crews/support agent` غير صالح |
+| اجعل المسار 255 حرفاً أو أقل | يتم رفض المسارات الأطول |
+
+يزيل AMP المسافات البيضاء في البداية والنهاية، ويضغط الشرطات المائلة المتكررة،
+ويزيل الشرطة المائلة النهائية. تستخدم القيمة الفارغة جذر المستودع.
+
+## ملفات القفل وUV Workspaces
+
+يجب أن يحتوي المجلد المحدد على `pyproject.toml` وملفات المشروع المناسبة لنوع
+الأتمتة:
+
+- crew بنمط JSON-first: ملف `crew.jsonc` أو `crew.json` مع مجلد `agents/`
+- Crew كلاسيكي أو Flow: مجلد `src/` مع نقطة دخول Python المتوقعة
+
+يمكن أن يوجد ملف `uv.lock` أو `poetry.lock` إما في المجلد المحدد أو في جذر
+المستودع.
+
+يدعم هذا تخطيطي ملفات القفل الشائعين:
+
+
+
+ ```text
+ company-ai/
+ `-- crews/
+ `-- support_agent/
+ |-- pyproject.toml
+ |-- uv.lock
+ |-- crew.jsonc
+ `-- agents/
+ `-- support_agent.jsonc
+ ```
+
+
+
+ ```text
+ company-ai/
+ |-- uv.lock
+ |-- packages/
+ | `-- shared_tools/
+ `-- crews/
+ `-- support_agent/
+ |-- pyproject.toml
+ |-- crew.jsonc
+ `-- agents/
+ `-- support_agent.jsonc
+ ```
+
+
+
+
+ إذا كانت الأتمتة تستورد حزماً مشتركة من مكان آخر في monorepo، فصرّح بهذه
+ الحزم في `pyproject.toml` باستخدام إعدادات UV workspace أو path أو source.
+ يشغل AMP الأتمتة من المجلد المحدد، لذلك يجب تثبيت الكود المشترك كاعتمادية
+ بدلاً من الاعتماد على وجود جذر المستودع في Python path.
+
+
+## استكشاف الأخطاء وإصلاحها
+
+### لم يتم العثور على دليل العمل
+
+تحقق من أن المسار نسبي إلى جذر المستودع أو ZIP. بالنسبة لرفع ZIP، يجب أن
+تتضمن محتويات ZIP مسار دليل العمل تماماً كما أدخلته.
+
+### pyproject.toml مفقود
+
+يجب أن يشير دليل العمل إلى مجلد مشروع Crew أو Flow، وليس فقط إلى مجلد أب
+يحتوي على عدة مشاريع.
+
+### uv.lock أو poetry.lock مفقود
+
+اعمل commit لملف قفل إما في مجلد المشروع المحدد أو في جذر المستودع. بالنسبة
+إلى UV workspaces، يتم دعم إبقاء `uv.lock` في جذر workspace.
+
+### Auto-Deploy غير متاح
+
+يتم تعطيل auto-deploy أثناء تعيين دليل عمل. استخدم إعادة النشر اليدوية أو شغّل
+إعادة النشر من CI/CD باستخدام AMP API.
+
+
+ تابع دليل النشر بعد اختيار دليل عمل monorepo.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/onedrive-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/onedrive-trigger.mdx
new file mode 100644
index 000000000..ef9fd0c40
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/onedrive-trigger.mdx
@@ -0,0 +1,69 @@
+---
+title: "مشغل OneDrive"
+description: "أتمتة الاستجابات لنشاط ملفات OneDrive"
+icon: "cloud"
+mode: "wide"
+---
+
+## نظرة عامة
+
+ابدأ الأتمتات عند تغيير الملفات داخل OneDrive. يمكنك إنشاء ملخصات تدقيق وإخطار فرق الأمان بشأن المشاركة الخارجية أو تحديث أنظمة الأعمال اللاحقة ببيانات المستندات الوصفية الجديدة.
+
+
+ اربط OneDrive في **Tools & Integrations** وبدّل المشغل لعملية
+ النشر.
+
+
+## تفعيل مشغل OneDrive
+
+1. افتح عملية النشر في CrewAI AMP
+2. انتقل إلى علامة تبويب **Triggers**
+3. حدد موقع **OneDrive** وبدّل مفتاح التبديل للتفعيل
+
+
+
+
+
+## مثال: تدقيق صلاحيات الملفات
+
+```python
+from onedrive_file_crew import OneDriveFileTrigger
+
+crew = OneDriveFileTrigger().crew()
+crew.kickoff({
+ "crewai_trigger_payload": onedrive_payload,
+})
+```
+
+يفحص الطاقم بيانات الملف الوصفية ونشاط المستخدم وتغييرات الصلاحيات لإنتاج ملخص متوافق مع متطلبات الامتثال.
+
+## الاختبار المحلي
+
+اختبر تكامل مشغل OneDrive محلياً باستخدام CrewAI CLI:
+
+```bash
+# عرض جميع المشغلات المتاحة
+crewai triggers list
+
+# محاكاة مشغل OneDrive بحمولة واقعية
+crewai triggers run microsoft_onedrive/file_changed
+```
+
+سينفذ أمر `crewai triggers run` طاقمك بحمولة OneDrive كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
+
+
+ استخدم `crewai triggers run microsoft_onedrive/file_changed` (وليس `crewai run`)
+ لمحاكاة تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
+ حمولة المشغل تلقائياً.
+
+
+## استكشاف الأخطاء وإصلاحها
+
+- تأكد من أن الحساب المتصل لديه صلاحية قراءة بيانات الملف الوصفية المضمنة في webhook
+- اختبر محلياً بـ `crewai triggers run microsoft_onedrive/file_changed` لرؤية هيكل الحمولة بالضبط
+- إذا كان المشغل يعمل لكن الحمولة تفتقد `permissions`، تأكد من أن إعدادات المشاركة على مستوى الموقع تسمح لـ Graph بإرجاع هذا الحقل
+- للمستأجرين الكبار، صفّ الإشعارات مسبقاً حتى يعمل الطاقم فقط على المجلدات ذات الصلة
+- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
diff --git a/docs/v1.15.1/ar/enterprise/guides/outlook-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/outlook-trigger.mdx
new file mode 100644
index 000000000..9fa320bc9
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/outlook-trigger.mdx
@@ -0,0 +1,69 @@
+---
+title: "مشغل Outlook"
+description: "إطلاق الأتمتات من رسائل Outlook وتحديثات التقويم"
+icon: "microsoft"
+mode: "wide"
+---
+
+## نظرة عامة
+
+أتمت الاستجابات عندما يسلّم Outlook رسالة جديدة أو عند إزالة حدث من التقويم. تقوم الفرق عادة بتوجيه التصعيدات وإنشاء تذاكر أو تنبيه الحاضرين بالإلغاءات.
+
+
+ اربط Outlook في **Tools & Integrations** وتأكد من تفعيل المشغل
+ لعملية النشر.
+
+
+## تفعيل مشغل Outlook
+
+1. افتح عملية النشر في CrewAI AMP
+2. انتقل إلى علامة تبويب **Triggers**
+3. حدد موقع **Outlook** وبدّل مفتاح التبديل للتفعيل
+
+
+
+
+
+## مثال: تلخيص رسالة بريد إلكتروني جديدة
+
+```python
+from outlook_message_crew import OutlookMessageTrigger
+
+crew = OutlookMessageTrigger().crew()
+crew.kickoff({
+ "crewai_trigger_payload": outlook_payload,
+})
+```
+
+يستخرج الطاقم تفاصيل المرسل والموضوع ومعاينة النص والمرفقات قبل إنشاء استجابة منظمة.
+
+## الاختبار المحلي
+
+اختبر تكامل مشغل Outlook محلياً باستخدام CrewAI CLI:
+
+```bash
+# عرض جميع المشغلات المتاحة
+crewai triggers list
+
+# محاكاة مشغل Outlook بحمولة واقعية
+crewai triggers run microsoft_outlook/email_received
+```
+
+سينفذ أمر `crewai triggers run` طاقمك بحمولة Outlook كاملة، مما يتيح لك اختبار منطق التحليل قبل النشر.
+
+
+ استخدم `crewai triggers run microsoft_outlook/email_received` (وليس `crewai run`)
+ لمحاكاة تنفيذ المشغل أثناء التطوير. بعد النشر، سيتلقى طاقمك
+ حمولة المشغل تلقائياً.
+
+
+## استكشاف الأخطاء وإصلاحها
+
+- تحقق من أن موصل Outlook لا يزال مفوّضاً؛ يجب تجديد الاشتراك دورياً
+- اختبر محلياً بـ `crewai triggers run microsoft_outlook/email_received` لرؤية هيكل الحمولة بالضبط
+- إذا كانت المرفقات مفقودة، تأكد من أن اشتراك webhook يتضمن علامة `includeResourceData`
+- راجع سجلات التنفيذ عندما تفشل الأحداث في المطابقة — حمولات الإلغاء تفتقد قوائم الحاضرين حسب التصميم ويجب أن يأخذ الطاقم ذلك في الاعتبار
+- تذكر: استخدم `crewai triggers run` (وليس `crewai run`) لمحاكاة تنفيذ المشغل
diff --git a/docs/v1.15.1/ar/enterprise/guides/prepare-for-deployment.mdx b/docs/v1.15.1/ar/enterprise/guides/prepare-for-deployment.mdx
new file mode 100644
index 000000000..d12eff408
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/prepare-for-deployment.mdx
@@ -0,0 +1,343 @@
+---
+title: "التحضير للنشر"
+description: "تأكد من جاهزية طاقمك أو تدفقك للنشر على CrewAI AMP"
+icon: "clipboard-check"
+mode: "wide"
+---
+
+
+ قبل النشر على CrewAI AMP، من الضروري التحقق من صحة بنية مشروعك.
+ يمكن نشر كل من الطواقم والتدفقات كـ "أتمتات"، لكن لهما بنى مشاريع
+ ومتطلبات مختلفة يجب استيفاؤها لنجاح النشر.
+
+
+## فهم الأتمتات
+
+في CrewAI AMP، **الأتمتات** هو المصطلح الشامل لمشاريع الذكاء الاصطناعي الوكيل القابلة للنشر. يمكن أن تكون الأتمتة إما:
+
+- **طاقم**: فريق مستقل من وكلاء الذكاء الاصطناعي يعملون معاً على المهام
+- **تدفق**: سير عمل مُنسّق يمكنه الجمع بين طواقم متعددة واستدعاءات LLM المباشرة والمنطق الإجرائي
+
+فهم النوع الذي تنشره ضروري لأن لهما بنى مشاريع ونقاط دخول مختلفة.
+
+## الطواقم مقابل التدفقات: الفروقات الرئيسية
+
+
+
+ فرق وكلاء ذكاء اصطناعي مستقلة. الـ crews الجديدة تستخدم بنية JSON-first مع `crew.jsonc` و `agents/`؛ ويمكن للـ crews الكلاسيكية الاستمرار في استخدام `crew.py`.
+
+
+ سير عمل مُنسّق مع طواقم مضمنة في مجلد `crews/`. الأفضل للعمليات المعقدة متعددة المراحل.
+
+
+
+| الجانب | الطاقم | التدفق |
+|--------|--------|--------|
+| **بنية المشروع** | جذر المشروع مع `crew.jsonc` و `agents/` | `src/project_name/` مع مجلد `crews/` |
+| **موقع المنطق الرئيسي** | `crew.jsonc` (كلاسيكي: `src/project_name/crew.py`) | `src/project_name/main.py` (فئة Flow) |
+| **دالة نقطة الدخول** | تُحمّل من `crew.jsonc` (كلاسيكي: `run()` في `main.py`) | `kickoff()` في `main.py` |
+| **نوع pyproject.toml** | `type = "crew"` | `type = "flow"` |
+| **أمر CLI للإنشاء** | `crewai create crew name` | `crewai create flow name` |
+| **موقع التهيئة** | `crew.jsonc` و `agents/` و `tools/` اختياريًا | `src/project_name/crews/crew_name/config/` أو مجلدات crew JSON مضمنة |
+| **يمكن أن يحتوي طواقم أخرى** | لا | نعم (في مجلد `crews/`) |
+
+## مرجع بنية المشروع
+
+### بنية مشروع الطاقم
+
+عند تشغيل `crewai create crew my_crew`، تحصل على بنية JSON-first:
+
+```
+my_crew/
+├── .gitignore
+├── pyproject.toml # Must have type = "crew"
+├── README.md
+├── .env
+├── uv.lock # REQUIRED for deployment
+├── crew.jsonc # إعدادات الـ crew والمهام والعملية والمدخلات
+├── agents/
+│ └── researcher.jsonc # تعريفات الـ Agents
+├── tools/ # أدوات custom: اختيارية
+├── knowledge/
+└── skills/
+```
+
+
+ في crews بنمط JSON-first، أبقِ `crew.jsonc` و `agents/` و `tools/` و `knowledge/` و `skills/`
+ في جذر المشروع. وضعها داخل `src/` يمنع `crewai run` والتحقق قبل النشر من العثور على تعريف الـ crew.
+
+
+
+ المشاريع الكلاسيكية التي تُنشأ عبر `crewai create crew my_crew --classic` تستخدم البنية القديمة
+ `src/project_name/crew.py` و `src/project_name/config/agents.yaml` و
+ `src/project_name/config/tasks.yaml`. تظل هذه البنية مدعومة للـ crews المكتوبة في Python مع decorators.
+
+
+### بنية مشروع التدفق
+
+عند تشغيل `crewai create flow my_flow`، تحصل على هذه البنية:
+
+```
+my_flow/
+├── .gitignore
+├── pyproject.toml # Must have type = "flow"
+├── README.md
+├── .env
+├── uv.lock # REQUIRED for deployment
+└── src/
+ └── my_flow/
+ ├── __init__.py
+ ├── main.py # Entry point with kickoff() function + Flow class
+ ├── crews/ # Embedded crews folder
+ │ └── poem_crew/
+ │ ├── __init__.py
+ │ ├── poem_crew.py # Crew with @CrewBase decorator
+ │ └── config/
+ │ ├── agents.yaml
+ │ └── tasks.yaml
+ └── tools/
+ ├── __init__.py
+ └── custom_tool.py
+```
+
+
+ الـ crews المستقلة بنمط JSON-first تستخدم ملفات JSON في جذر المشروع. أما Flows فتظل تستخدم
+ `src/project_name/` ويمكن أن تحتوي crews مضمنة كلاسيكية أو مجلدات crew JSON يتم تحميلها عبر
+ `crewai.project.load_crew`.
+
+
+## قائمة فحص ما قبل النشر
+
+استخدم هذه القائمة للتحقق من جاهزية مشروعك للنشر.
+
+### 1. التحقق من تهيئة pyproject.toml
+
+يجب أن يتضمن `pyproject.toml` قسم `[tool.crewai]` الصحيح:
+
+
+
+ ```toml
+ [tool.crewai]
+ type = "crew"
+ ```
+
+
+ ```toml
+ [tool.crewai]
+ type = "flow"
+ ```
+
+
+
+
+ إذا لم يتطابق `type` مع بنية مشروعك، سيفشل البناء أو
+ لن تعمل الأتمتة بشكل صحيح.
+
+
+### 2. التأكد من وجود ملف uv.lock
+
+يستخدم CrewAI `uv` لإدارة الاعتماديات. يضمن ملف `uv.lock` بناءً قابلاً للتكرار وهو **مطلوب** للنشر.
+
+```bash
+# إنشاء أو تحديث ملف القفل
+uv lock
+
+# التحقق من وجوده
+ls -la uv.lock
+```
+
+إذا لم يكن الملف موجوداً، شغّل `uv lock` وارفعه إلى مستودعك:
+
+```bash
+uv lock
+git add uv.lock
+git commit -m "Add uv.lock for deployment"
+git push
+```
+
+### 3. التحقق من تعريف الـ Crew
+
+
+
+ يجب أن تحتوي crews بنمط JSON-first على `crew.jsonc` أو `crew.json` في جذر المشروع.
+ يجب أن يشير مصفوفة `agents` إلى ملفات داخل `agents/`، ويجب أن تشير كل task إلى اسم Agent صحيح.
+
+ ```jsonc crew.jsonc
+ {
+ "name": "Research Crew",
+ "agents": ["researcher"],
+ "tasks": [
+ {
+ "name": "research_task",
+ "description": "Research {topic}.",
+ "expected_output": "A concise report.",
+ "agent": "researcher"
+ }
+ ],
+ "inputs": {
+ "topic": "AI Agents"
+ }
+ }
+ ```
+
+ تُشار الأدوات المخصصة بصيغة `"custom:"` ويجب تنفيذها في
+ `tools/.py` كصنف يرث من `BaseTool`.
+
+
+ يجب أن تستخدم الـ crews الكلاسيكية وPython crews المضمنة داخل Flows مزخرف `@CrewBase`.
+
+ ```python
+ from crewai import Agent, Crew, Process, Task
+ from crewai.project import CrewBase, agent, crew, task
+ from crewai.agents.agent_builder.base_agent import BaseAgent
+ from typing import List
+
+ @CrewBase
+ class MyCrew():
+ """My crew description"""
+
+ agents: List[BaseAgent]
+ tasks: List[Task]
+
+ @agent
+ def my_agent(self) -> Agent:
+ return Agent(
+ config=self.agents_config['my_agent'], # type: ignore[index]
+ verbose=True
+ )
+
+ @task
+ def my_task(self) -> Task:
+ return Task(
+ config=self.tasks_config['my_task'] # type: ignore[index]
+ )
+
+ @crew
+ def crew(self) -> Crew:
+ return Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ verbose=True,
+ )
+ ```
+
+
+
+### 4. التحقق من نقاط دخول المشروع
+
+لا تحتاج crews المستقلة بنمط JSON-first إلى ملف `src/project_name/main.py` مكتوب يدويًا؛
+يقوم `crewai run` وتغليف النشر بتحميل `crew.jsonc` مباشرة. تستخدم crews الكلاسيكية وFlows نقاط دخول Python:
+
+
+
+ شغّل محليًا من جذر المشروع:
+
+ ```bash
+ crewai run
+ ```
+
+
+ تستخدم نقطة الدخول دالة `run()`:
+
+ ```python
+ # src/my_crew/main.py
+ from my_crew.crew import MyCrew
+
+ def run():
+ """Run the crew."""
+ inputs = {'topic': 'AI in Healthcare'}
+ result = MyCrew().crew().kickoff(inputs=inputs)
+ return result
+
+ if __name__ == "__main__":
+ run()
+ ```
+
+
+ تستخدم نقطة الدخول دالة `kickoff()` مع فئة Flow:
+
+ ```python
+ # src/my_flow/main.py
+ from crewai.flow import Flow, listen, start
+ from my_flow.crews.poem_crew.poem_crew import PoemCrew
+
+ class MyFlow(Flow):
+ @start()
+ def begin(self):
+ # Flow logic here
+ result = PoemCrew().crew().kickoff(inputs={...})
+ return result
+
+ def kickoff():
+ """Run the flow."""
+ MyFlow().kickoff()
+
+ if __name__ == "__main__":
+ kickoff()
+ ```
+
+
+
+### 5. تحضير متغيرات البيئة
+
+قبل النشر، تأكد من أن لديك:
+
+1. **مفاتيح API لـ LLM** جاهزة (OpenAI، Anthropic، Google، إلخ.)
+2. **مفاتيح API للأدوات** إذا كنت تستخدم أدوات خارجية (Serper، إلخ.)
+
+
+ إذا كان مشروعك يعتمد على حزم من **سجل PyPI خاص**، ستحتاج أيضاً لتهيئة
+ بيانات اعتماد مصادقة السجل كمتغيرات بيئة. راجع
+ دليل [سجلات الحزم الخاصة](/ar/enterprise/guides/private-package-registry) للتفاصيل.
+
+
+
+ اختبر مشروعك محلياً بنفس متغيرات البيئة قبل النشر
+ لاكتشاف مشاكل التهيئة مبكراً.
+
+
+## أوامر التحقق السريع
+
+شغّل هذه الأوامر من جذر مشروعك للتحقق السريع من إعدادك:
+
+```bash
+# 1. Check project type in pyproject.toml
+grep -A2 "\[tool.crewai\]" pyproject.toml
+
+# 2. Verify uv.lock exists
+ls -la uv.lock || echo "ERROR: uv.lock missing! Run 'uv lock'"
+
+# 3. For JSON-first crews, verify crew.jsonc and agents/
+([ -f crew.jsonc ] || [ -f crew.json ]) || echo "No crew.jsonc or crew.json found"
+test -d agents || echo "No agents/ directory found"
+
+# 4. For classic Crews - verify crew.py exists
+ls -la src/*/crew.py 2>/dev/null || echo "No crew.py (expected for Crews)"
+
+# 5. For Flows - verify crews/ folder exists
+ls -la src/*/crews/ 2>/dev/null || echo "No crews/ folder (expected for Flows)"
+
+# 6. For classic Python crews - check for CrewBase usage
+grep -r "@CrewBase" . --include="*.py"
+```
+
+## أخطاء الإعداد الشائعة
+
+| الخطأ | العرض | الإصلاح |
+|-------|-------|---------|
+| `uv.lock` مفقود | فشل البناء أثناء حل الاعتماديات | شغّل `uv lock` وارفعه |
+| `type` خاطئ في pyproject.toml | نجاح البناء لكن فشل وقت التشغيل | غيّر إلى النوع الصحيح |
+| `crew.jsonc` أو `agents/` مفقود في crew بنمط JSON-first | لا يمكن العثور على تعريف الـ crew | أبقِ `crew.jsonc` و `agents/` في جذر المشروع |
+| مُزخرف `@CrewBase` مفقود في crew كلاسيكية | أخطاء "Config not found" | أضف المُزخرف لجميع فئات الـ crew الكلاسيكية |
+| ملفات كلاسيكية في الجذر بدل `src/` | نقطة الدخول غير موجودة | انقل ملفات Python الكلاسيكية إلى `src/project_name/` |
+| `run()` أو `kickoff()` مفقودة | لا يمكن بدء الأتمتة | أضف دالة الدخول الصحيحة |
+
+## الخطوات التالية
+
+بمجرد اجتياز مشروعك لجميع عناصر القائمة، أنت جاهز للنشر:
+
+
+ اتبع دليل النشر لنشر طاقمك أو تدفقك على CrewAI AMP باستخدام
+ CLI أو واجهة الويب أو تكامل CI/CD.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/private-package-registry.mdx b/docs/v1.15.1/ar/enterprise/guides/private-package-registry.mdx
new file mode 100644
index 000000000..d9633ff0c
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/private-package-registry.mdx
@@ -0,0 +1,263 @@
+---
+title: "سجلات الحزم الخاصة"
+description: "تثبيت حزم Python الخاصة من سجلات PyPI المصادق عليها في CrewAI AMP"
+icon: "lock"
+mode: "wide"
+---
+
+
+ يغطي هذا الدليل كيفية تهيئة مشروع CrewAI لتثبيت حزم Python
+ من سجلات PyPI الخاصة (Azure DevOps Artifacts، GitHub Packages، GitLab، AWS CodeArtifact، إلخ.)
+ عند النشر على CrewAI AMP.
+
+
+## متى تحتاج هذا
+
+إذا كان مشروعك يعتمد على حزم Python داخلية أو خاصة مستضافة على سجل خاص
+بدلاً من PyPI العام، ستحتاج إلى:
+
+1. إخبار UV **أين** يجد الحزمة (رابط فهرس)
+2. إخبار UV **أي** حزم تأتي من ذلك الفهرس (تعيين مصدر)
+3. تقديم **بيانات اعتماد** حتى يتمكن UV من المصادقة أثناء التثبيت
+
+يستخدم CrewAI AMP [UV](https://docs.astral.sh/uv/) لحل وتثبيت الاعتماديات.
+يدعم UV السجلات الخاصة المصادق عليها عبر تهيئة `pyproject.toml` مع
+متغيرات بيئة لبيانات الاعتماد.
+
+## الخطوة 1: تهيئة pyproject.toml
+
+ثلاثة أجزاء تعمل معاً في `pyproject.toml`:
+
+### 1أ. التصريح بالاعتمادية
+
+أضف الحزمة الخاصة إلى `[project.dependencies]` كأي اعتمادية أخرى:
+
+```toml
+[project]
+dependencies = [
+ "crewai[tools]>=0.100.1,<1.0.0",
+ "my-private-package>=1.2.0",
+]
+```
+
+### 1ب. تعريف الفهرس
+
+سجّل سجلك الخاص كفهرس مسمّى تحت `[[tool.uv.index]]`:
+
+```toml
+[[tool.uv.index]]
+name = "my-private-registry"
+url = "https://pkgs.dev.azure.com/my-org/_packaging/my-feed/pypi/simple/"
+explicit = true
+```
+
+
+ حقل `name` مهم — يستخدمه UV لبناء أسماء متغيرات البيئة
+ للمصادقة (راجع [الخطوة 2](#step-2-set-authentication-credentials) أدناه).
+
+ تعيين `explicit = true` يعني أن UV لن يبحث في هذا الفهرس عن كل حزمة — فقط
+ الحزم التي تعيّنها صراحة له في `[tool.uv.sources]`. يتجنب ذلك الاستعلامات غير الضرورية
+ ضد سجلك الخاص ويحمي من هجمات ارتباك الاعتماديات.
+
+
+### 1ج. تعيين الحزمة للفهرس
+
+أخبر UV أي حزم يجب حلها من فهرسك الخاص باستخدام `[tool.uv.sources]`:
+
+```toml
+[tool.uv.sources]
+my-private-package = { index = "my-private-registry" }
+```
+
+### مثال كامل
+
+```toml
+[project]
+name = "my-crew-project"
+version = "0.1.0"
+requires-python = ">=3.10,<=3.13"
+dependencies = [
+ "crewai[tools]>=0.100.1,<1.0.0",
+ "my-private-package>=1.2.0",
+]
+
+[tool.crewai]
+type = "crew"
+
+[[tool.uv.index]]
+name = "my-private-registry"
+url = "https://pkgs.dev.azure.com/my-org/_packaging/my-feed/pypi/simple/"
+explicit = true
+
+[tool.uv.sources]
+my-private-package = { index = "my-private-registry" }
+```
+
+بعد تحديث `pyproject.toml`، أعد إنشاء ملف القفل:
+
+```bash
+uv lock
+```
+
+
+ ارفع دائماً `uv.lock` المُحدّث مع تغييرات `pyproject.toml`.
+ ملف القفل مطلوب للنشر — راجع [التحضير للنشر](/ar/enterprise/guides/prepare-for-deployment).
+
+
+## الخطوة 2: تعيين بيانات اعتماد المصادقة
+
+يصادق UV ضد الفهارس الخاصة باستخدام متغيرات بيئة تتبع اصطلاح تسمية
+بناءً على اسم الفهرس الذي حددته في `pyproject.toml`:
+
+```
+UV_INDEX_{UPPER_NAME}_USERNAME
+UV_INDEX_{UPPER_NAME}_PASSWORD
+```
+
+حيث `{UPPER_NAME}` هو اسم فهرسك محوّلاً إلى **أحرف كبيرة** مع **استبدال الشرطات بشرطات سفلية**.
+
+على سبيل المثال، فهرس باسم `my-private-registry` يستخدم:
+
+| المتغير | القيمة |
+|---------|--------|
+| `UV_INDEX_MY_PRIVATE_REGISTRY_USERNAME` | اسم مستخدم السجل أو اسم الرمز |
+| `UV_INDEX_MY_PRIVATE_REGISTRY_PASSWORD` | كلمة مرور السجل أو الرمز/PAT |
+
+
+ هذه المتغيرات **يجب** إضافتها عبر إعدادات **Environment Variables** في CrewAI AMP —
+ إما عالمياً أو على مستوى النشر. لا يمكن تعيينها في ملفات `.env` أو ترميزها في مشروعك.
+
+ راجع [تعيين متغيرات البيئة في AMP](#setting-environment-variables-in-amp) أدناه.
+
+
+## مرجع مزودي السجلات
+
+يوضح الجدول أدناه تنسيق رابط الفهرس وقيم بيانات الاعتماد لمزودي السجلات الشائعين.
+استبدل القيم المؤقتة بتفاصيل مؤسستك وخلاصتك الفعلية.
+
+| المزود | رابط الفهرس | اسم المستخدم | كلمة المرور |
+|--------|-------------|--------------|-------------|
+| **Azure DevOps Artifacts** | `https://pkgs.dev.azure.com/{org}/_packaging/{feed}/pypi/simple/` | أي نص غير فارغ (مثل `token`) | Personal Access Token (PAT) بنطاق Packaging Read |
+| **GitHub Packages** | `https://pypi.pkg.github.com/{owner}/simple/` | اسم مستخدم GitHub | Personal Access Token (classic) بنطاق `read:packages` |
+| **GitLab Package Registry** | `https://gitlab.com/api/v4/projects/{project_id}/packages/pypi/simple/` | `__token__` | Project أو Personal Access Token بنطاق `read_api` |
+| **AWS CodeArtifact** | استخدم الرابط من `aws codeartifact get-repository-endpoint` | `aws` | رمز من `aws codeartifact get-authorization-token` |
+| **Google Artifact Registry** | `https://{region}-python.pkg.dev/{project}/{repo}/simple/` | `_json_key_base64` | مفتاح حساب الخدمة بتشفير Base64 |
+| **JFrog Artifactory** | `https://{instance}.jfrog.io/artifactory/api/pypi/{repo}/simple/` | اسم المستخدم أو البريد الإلكتروني | مفتاح API أو رمز الهوية |
+| **مستضاف ذاتياً (devpi، Nexus، إلخ.)** | رابط Simple API لسجلك | اسم مستخدم السجل | كلمة مرور السجل |
+
+
+ لـ **AWS CodeArtifact**، تنتهي صلاحية رمز التفويض دورياً.
+ ستحتاج لتحديث قيمة `UV_INDEX_*_PASSWORD` عند انتهاء صلاحيتها.
+ فكّر في أتمتة هذا في خط أنابيب CI/CD.
+
+
+## تعيين متغيرات البيئة في AMP
+
+يجب تهيئة بيانات اعتماد السجل الخاص كمتغيرات بيئة في CrewAI AMP.
+لديك خياران:
+
+
+
+ 1. سجّل الدخول إلى [CrewAI AMP](https://app.crewai.com)
+ 2. انتقل إلى أتمتتك
+ 3. افتح علامة تبويب **Environment Variables**
+ 4. أضف كل متغير (`UV_INDEX_*_USERNAME` و`UV_INDEX_*_PASSWORD`) مع قيمته
+
+ راجع خطوة [النشر على AMP — تعيين متغيرات البيئة](/ar/enterprise/guides/deploy-to-amp#set-environment-variables) للتفاصيل.
+
+
+ أضف المتغيرات إلى ملف `.env` المحلي قبل تشغيل `crewai deploy create`.
+ سينقلها CLI بأمان إلى المنصة:
+
+ ```bash
+ # .env
+ OPENAI_API_KEY=sk-...
+ UV_INDEX_MY_PRIVATE_REGISTRY_USERNAME=token
+ UV_INDEX_MY_PRIVATE_REGISTRY_PASSWORD=your-pat-here
+ ```
+
+ ```bash
+ crewai deploy create
+ ```
+
+
+
+
+ **لا ترفع** أبداً بيانات الاعتماد إلى مستودعك. استخدم متغيرات بيئة AMP لجميع الأسرار.
+ يجب إدراج ملف `.env` في `.gitignore`.
+
+
+لتحديث بيانات الاعتماد في نشر حالي، راجع [تحديث طاقمك — متغيرات البيئة](/ar/enterprise/guides/update-crew).
+
+## كيف يعمل الكل معاً
+
+عندما يبني CrewAI AMP أتمتتك، يعمل تدفق الحل هكذا:
+
+
+
+ يسحب AMP مستودعك ويقرأ `pyproject.toml` و`uv.lock`.
+
+
+ يقرأ UV `[tool.uv.sources]` لتحديد أي فهرس يجب أن تأتي منه كل حزمة.
+
+
+ لكل فهرس خاص، يبحث UV عن `UV_INDEX_{NAME}_USERNAME` و`UV_INDEX_{NAME}_PASSWORD`
+ من متغيرات البيئة التي هيأتها في AMP.
+
+
+ يحمّل UV ويثبّت جميع الحزم — العامة (من PyPI) والخاصة (من سجلك).
+
+
+ يبدأ طاقمك أو تدفقك مع توفر جميع الاعتماديات.
+
+
+
+## استكشاف الأخطاء وإصلاحها
+
+### أخطاء المصادقة أثناء البناء
+
+**العرض**: فشل البناء بـ `401 Unauthorized` أو `403 Forbidden` عند حل حزمة خاصة.
+
+**تحقق من**:
+- أسماء متغيرات البيئة `UV_INDEX_*` تتطابق مع اسم فهرسك بالضبط (أحرف كبيرة، شرطات → شرطات سفلية)
+- بيانات الاعتماد معيّنة في متغيرات بيئة AMP، وليس فقط في `.env` محلي
+- الرمز/PAT لديه صلاحيات القراءة المطلوبة لخلاصة الحزم
+- الرمز لم تنتهِ صلاحيته (ذو صلة خاصة لـ AWS CodeArtifact)
+
+### الحزمة غير موجودة
+
+**العرض**: `No matching distribution found for my-private-package`.
+
+**تحقق من**:
+- رابط الفهرس في `pyproject.toml` ينتهي بـ `/simple/`
+- إدخال `[tool.uv.sources]` يعيّن اسم الحزمة الصحيح لاسم الفهرس الصحيح
+- الحزمة منشورة فعلاً في سجلك الخاص
+- شغّل `uv lock` محلياً بنفس بيانات الاعتماد للتحقق من عمل الحل
+
+### تعارضات ملف القفل
+
+**العرض**: فشل `uv lock` أو نتائج غير متوقعة بعد إضافة فهرس خاص.
+
+**الحل**: عيّن بيانات الاعتماد محلياً وأعد الإنشاء:
+
+```bash
+export UV_INDEX_MY_PRIVATE_REGISTRY_USERNAME=token
+export UV_INDEX_MY_PRIVATE_REGISTRY_PASSWORD=your-pat
+uv lock
+```
+
+ثم ارفع `uv.lock` المُحدّث.
+
+## أدلة ذات صلة
+
+
+
+ تحقق من بنية المشروع والاعتماديات قبل النشر.
+
+
+ انشر طاقمك أو تدفقك وهيّئ متغيرات البيئة.
+
+
+ حدّث متغيرات البيئة وادفع التغييرات إلى نشر قائم.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/react-component-export.mdx b/docs/v1.15.1/ar/enterprise/guides/react-component-export.mdx
new file mode 100644
index 000000000..d1ec9d362
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/react-component-export.mdx
@@ -0,0 +1,112 @@
+---
+title: "تصدير مكون React"
+description: "تعلم كيفية تصدير ودمج مكونات React من CrewAI AMP في تطبيقاتك"
+icon: "react"
+mode: "wide"
+---
+
+يشرح هذا الدليل كيفية تصدير طواقم CrewAI AMP كمكونات React ودمجها في تطبيقاتك.
+
+## تصدير مكون React
+
+
+
+ انقر على القائمة (ثلاث نقاط على يمين طاقمك المنشور) واختر خيار التصدير واحفظ الملف محلياً. سنستخدم `CrewLead.jsx` في مثالنا.
+
+
+
+
+
+
+
+
+## إعداد بيئة React
+
+لتشغيل مكون React هذا محلياً، ستحتاج لإعداد بيئة تطوير React ودمج هذا المكون في مشروع React.
+
+
+
+ - حمّل وثبّت Node.js من الموقع الرسمي: https://nodejs.org/
+ - اختر إصدار LTS (الدعم طويل المدى) للاستقرار.
+
+
+
+ - افتح Command Prompt أو PowerShell
+ - انتقل إلى المجلد الذي تريد إنشاء مشروعك فيه
+ - شغّل الأمر التالي لإنشاء مشروع React جديد:
+
+ ```bash
+ npx create-react-app my-crew-app
+ ```
+ - انتقل إلى مجلد المشروع:
+
+ ```bash
+ cd my-crew-app
+ ```
+
+
+
+ ```bash
+ npm install react-dom
+ ```
+
+
+
+ - انقل الملف المُحمّل `CrewLead.jsx` إلى مجلد `src` في مشروعك.
+
+
+
+ - افتح `src/App.js`
+ - استبدل محتوياته بشيء مثل هذا:
+
+ ```jsx
+ import React from 'react';
+ import CrewLead from './CrewLead';
+
+ function App() {
+ return (
+
+
+
+ );
+ }
+
+ export default App;
+ ```
+ - استبدل `YOUR_API_BASE_URL` و`YOUR_BEARER_TOKEN` بالقيم الفعلية لـ API.
+
+
+
+ - في مجلد مشروعك، شغّل:
+
+ ```bash
+ npm start
+ ```
+ - سيبدأ خادم التطوير، ويجب أن يفتح متصفح الويب الافتراضي تلقائياً على `http://localhost:3000`، حيث سترى تطبيق React يعمل.
+
+
+
+
+## التخصيص
+
+يمكنك بعد ذلك تخصيص `CrewLead.jsx` لإضافة اللون والعنوان وغيرها.
+
+
+
+
+
+
+
+
+## الخطوات التالية
+
+- خصّص تنسيق المكون ليتوافق مع تصميم تطبيقك
+- أضف خصائص إضافية للتهيئة
+- ادمج مع إدارة حالة تطبيقك
+- أضف معالجة الأخطاء وحالات التحميل
diff --git a/docs/v1.15.1/ar/enterprise/guides/salesforce-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/salesforce-trigger.mdx
new file mode 100644
index 000000000..8cd16c026
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/salesforce-trigger.mdx
@@ -0,0 +1,50 @@
+---
+title: "مشغل Salesforce"
+description: "تشغيل طواقم CrewAI من سير عمل Salesforce لأتمتة CRM"
+icon: "salesforce"
+mode: "wide"
+---
+
+يمكن تشغيل CrewAI AMP من Salesforce لأتمتة سير عمل إدارة علاقات العملاء وتعزيز عمليات المبيعات.
+
+## نظرة عامة
+
+Salesforce هي منصة رائدة لإدارة علاقات العملاء (CRM) تساعد الشركات على تبسيط عمليات المبيعات والخدمة والتسويق. من خلال إعداد مشغلات CrewAI من Salesforce، يمكنك:
+
+- أتمتة تسجيل وتأهيل العملاء المحتملين
+- إنشاء مواد مبيعات مخصصة
+- تعزيز خدمة العملاء بردود مدعومة بالذكاء الاصطناعي
+- تبسيط تحليل البيانات وإعداد التقارير
+
+## عرض توضيحي
+
+
+
+## البدء
+
+لإعداد مشغلات Salesforce:
+
+1. **تواصل مع الدعم**: تواصل مع دعم CrewAI AMP للمساعدة في إعداد مشغل Salesforce
+2. **مراجعة المتطلبات**: تأكد من أن لديك صلاحيات Salesforce اللازمة والوصول إلى API
+3. **تهيئة الاتصال**: اعمل مع فريق الدعم لإنشاء الاتصال بين CrewAI ومثيل Salesforce الخاص بك
+4. **اختبار المشغلات**: تحقق من عمل المشغلات بشكل صحيح مع حالات الاستخدام المحددة
+
+## حالات الاستخدام
+
+سيناريوهات Salesforce + CrewAI الشائعة تشمل:
+
+- **معالجة العملاء المحتملين**: تحليل وتسجيل العملاء المحتملين الوافدين تلقائياً
+- **إنشاء العروض**: إنشاء عروض مخصصة بناءً على بيانات الفرص
+- **رؤى العملاء**: إنشاء تقارير تحليلية من سجل تفاعلات العملاء
+- **أتمتة المتابعة**: إنشاء رسائل متابعة وتوصيات مخصصة
+
+## الخطوات التالية
+
+للحصول على تعليمات الإعداد المفصلة وخيارات التهيئة المتقدمة، يرجى التواصل مع دعم CrewAI AMP الذي يمكنه تقديم إرشادات مخصصة لبيئة Salesforce واحتياجات عملك المحددة.
diff --git a/docs/v1.15.1/ar/enterprise/guides/slack-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/slack-trigger.mdx
new file mode 100644
index 000000000..28aed7b6e
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/slack-trigger.mdx
@@ -0,0 +1,62 @@
+---
+title: "مشغل Slack"
+description: "تشغيل طواقم CrewAI مباشرة من Slack باستخدام أوامر الشرطة المائلة"
+icon: "slack"
+mode: "wide"
+---
+
+يشرح هذا الدليل كيفية بدء طاقم مباشرة من Slack باستخدام مشغلات CrewAI.
+
+## المتطلبات المسبقة
+
+- مشغل CrewAI لـ Slack مُثبّت ومتصل بمساحة عمل Slack
+- طاقم واحد على الأقل مُهيأ في CrewAI
+
+## خطوات الإعداد
+
+
+
+ في لوحة تحكم CrewAI، انتقل إلى قسم **Triggers**.
+
+
+
+
+
+ تحقق من أن Slack مدرج ومتصل.
+
+
+ - انتقل إلى القناة التي تريد تشغيل الطاقم منها.
+ - اكتب أمر الشرطة المائلة "**/kickoff**" لبدء عملية تشغيل الطاقم.
+ - يجب أن ترى "**Kickoff crew**" تظهر أثناء الكتابة:
+
+
+
+ - اضغط Enter أو اختر خيار "**Kickoff crew**". سيظهر مربع حوار بعنوان "**Kickoff an AI Crew**".
+
+
+ - في القائمة المنسدلة "**Select of the crews online:**"، اختر الطاقم الذي تريد بدءه.
+ - في المثال أدناه، تم اختيار "**prep-for-meeting**":
+
+
+
+ - إذا كان طاقمك يتطلب أي مدخلات، انقر على زر "**Add Inputs**" لتقديمها.
+
+ زر "**Add Inputs**" معروض في المثال أعلاه لكن لم يُنقر عليه بعد.
+
+
+
+ - بمجرد اختيار الطاقم وإضافة أي مدخلات ضرورية، انقر على "**Kickoff**" لبدء الطاقم.
+
+
+
+ - سيبدأ الطاقم بالتنفيذ وسترى النتائج في قناة Slack.
+
+
+
+
+
+
+## نصائح
+
+- تأكد من أن لديك الصلاحيات اللازمة لاستخدام أمر `/kickoff` في مساحة عمل Slack.
+- إذا لم تر الطاقم المطلوب في القائمة المنسدلة، تأكد من أنه مُهيأ بشكل صحيح ومتصل في CrewAI.
diff --git a/docs/v1.15.1/ar/enterprise/guides/team-management.mdx b/docs/v1.15.1/ar/enterprise/guides/team-management.mdx
new file mode 100644
index 000000000..7381958e4
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/team-management.mdx
@@ -0,0 +1,91 @@
+---
+title: "إدارة الفريق"
+description: "تعلم كيفية دعوة وإدارة أعضاء الفريق في مؤسسة CrewAI AMP"
+icon: "users"
+mode: "wide"
+---
+
+بصفتك مسؤولاً عن حساب CrewAI AMP، يمكنك بسهولة دعوة أعضاء جدد للانضمام إلى مؤسستك. يرشدك هذا الدليل خلال العملية خطوة بخطوة.
+
+## دعوة أعضاء الفريق
+
+
+
+ - سجّل الدخول إلى حساب CrewAI AMP - ابحث عن أيقونة الترس في
+ الزاوية العلوية اليمنى من لوحة التحكم - انقر على أيقونة الترس للوصول إلى
+ صفحة **Settings**:
+
+
+
+
+
+ - في صفحة الإعدادات، سترى علامة تبويب `Members` - انقر على علامة تبويب `Members`
+ للوصول إلى صفحة **Members**:
+
+
+
+
+
+ - في قسم الأعضاء، سترى قائمة بالأعضاء الحاليين (بما فيهم
+ أنت) - حدد موقع حقل إدخال `Email` - أدخل عنوان البريد الإلكتروني للشخص
+ الذي تريد دعوته - انقر على زر `Invite` لإرسال الدعوة
+
+
+ - يمكنك تكرار هذه العملية لدعوة أعضاء فريق متعددين - سيتلقى كل عضو
+ مدعو دعوة عبر البريد الإلكتروني للانضمام إلى مؤسستك
+
+
+
+## إضافة الأدوار
+
+يمكنك إضافة أدوار لأعضاء فريقك للتحكم في وصولهم إلى أجزاء مختلفة من المنصة.
+
+
+
+ - سجّل الدخول إلى حساب CrewAI AMP - ابحث عن أيقونة الترس في
+ الزاوية العلوية اليمنى من لوحة التحكم - انقر على أيقونة الترس للوصول إلى
+ صفحة **Settings**:
+
+
+
+
+
+ - في صفحة الإعدادات، سترى علامة تبويب `Roles` - انقر على علامة تبويب `Roles`
+ للوصول إلى صفحة **Roles**.
+
+
+
+ - انقر على زر `Add Role` لإضافة دور جديد. - أدخل
+ تفاصيل وصلاحيات الدور وانقر على زر `Create Role` لإنشاء
+ الدور.
+
+
+
+
+
+ - في قسم الأعضاء، سترى قائمة بالأعضاء الحاليين (بما فيهم
+ أنت)
+
+
+
+ - بمجرد قبول العضو للدعوة، يمكنك إضافة دور
+ له. - عد إلى علامة تبويب `Roles` - انتقل إلى العضو الذي تريد إضافة
+ دور له وتحت عمود `Role`، انقر على القائمة المنسدلة - اختر الدور
+ الذي تريد إضافته للعضو - انقر على زر `Update` لحفظ الدور
+
+
+
+
+
+
+## ملاحظات مهمة
+
+- **صلاحيات المسؤول**: فقط المستخدمون ذوو الصلاحيات الإدارية يمكنهم دعوة أعضاء جدد
+- **دقة البريد الإلكتروني**: تأكد من صحة عناوين البريد الإلكتروني لأعضاء فريقك
+- **قبول الدعوة**: سيحتاج الأعضاء المدعوون لقبول الدعوة للانضمام إلى مؤسستك
+- **إشعارات البريد الإلكتروني**: قد ترغب في إعلام أعضاء فريقك بالتحقق من بريدهم الإلكتروني (بما في ذلك مجلدات البريد غير المرغوب) للدعوة
+
+باتباع هذه الخطوات، يمكنك بسهولة توسيع فريقك والتعاون بشكل أكثر فعالية داخل مؤسسة CrewAI AMP.
diff --git a/docs/v1.15.1/ar/enterprise/guides/tool-repository.mdx b/docs/v1.15.1/ar/enterprise/guides/tool-repository.mdx
new file mode 100644
index 000000000..9ff6b35b0
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/tool-repository.mdx
@@ -0,0 +1,154 @@
+---
+title: مستودع الأدوات
+description: "استخدام مستودع الأدوات لإدارة أدواتك"
+icon: "toolbox"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مستودع الأدوات هو مدير حزم لأدوات CrewAI. يتيح للمستخدمين نشر وتثبيت وإدارة الأدوات التي تتكامل مع طواقم وتدفقات CrewAI.
+
+يمكن أن تكون الأدوات:
+
+- **خاصة**: متاحة فقط داخل مؤسستك (افتراضي)
+- **عامة**: متاحة لجميع مستخدمي CrewAI إذا نُشرت بعلامة `--public`
+
+المستودع ليس نظام تحكم في الإصدارات. استخدم Git لتتبع تغييرات الكود وتمكين التعاون.
+
+## المتطلبات المسبقة
+
+قبل استخدام مستودع الأدوات، تأكد من أن لديك:
+
+- حساب [CrewAI AMP](https://app.crewai.com)
+- [CrewAI CLI](/ar/concepts/cli#cli) مُثبّت
+- uv>=0.5.0 مُثبّت. راجع [كيفية الترقية](https://docs.astral.sh/uv/getting-started/installation/#upgrading-uv)
+- [Git](https://git-scm.com) مُثبّت ومُهيأ
+- صلاحيات الوصول للنشر أو التثبيت في مؤسسة CrewAI AMP
+
+## تثبيت الأدوات
+
+لتثبيت أداة:
+
+```bash
+crewai tool install
+```
+
+يثبّت هذا الأداة ويضيفها إلى `pyproject.toml`.
+
+يمكنك استخدام الأداة باستيرادها وإضافتها إلى وكلائك:
+
+```python
+from your_tool.tool import YourTool
+
+custom_tool = YourTool()
+
+researcher = Agent(
+ role='Market Research Analyst',
+ goal='Provide up-to-date market analysis of the AI industry',
+ backstory='An expert analyst with a keen eye for market trends.',
+ tools=[custom_tool],
+ verbose=True
+)
+```
+
+## إضافة حزم أخرى بعد تثبيت أداة
+
+بعد تثبيت أداة من مستودع أدوات CrewAI AMP، تحتاج لاستخدام أمر `crewai uv` لإضافة حزم أخرى لمشروعك.
+استخدام أوامر `uv` المباشرة سيفشل لأن المصادقة لمستودع الأدوات يتم التعامل معها عبر CLI. باستخدام أمر `crewai uv`، يمكنك إضافة حزم أخرى لمشروعك دون القلق بشأن المصادقة.
+يمكن استخدام أي أمر `uv` مع أمر `crewai uv`، مما يجعله أداة قوية لإدارة اعتماديات مشروعك دون عناء إدارة المصادقة عبر متغيرات البيئة أو طرق أخرى.
+
+لنفرض أنك ثبّت أداة مخصصة من مستودع أدوات CrewAI AMP تسمى "my-tool":
+
+```bash
+crewai tool install my-tool
+```
+
+والآن تريد إضافة حزمة أخرى لمشروعك، يمكنك استخدام الأمر التالي:
+
+```bash
+crewai uv add requests
+```
+
+أوامر أخرى مثل `uv sync` أو `uv remove` يمكن أيضاً استخدامها مع أمر `crewai uv`:
+
+```bash
+crewai uv sync
+```
+
+```bash
+crewai uv remove requests
+```
+
+سيضيف هذا الحزمة لمشروعك ويحدّث `pyproject.toml` وفقاً لذلك.
+
+## إنشاء ونشر الأدوات
+
+لإنشاء مشروع أداة جديد:
+
+```bash
+crewai tool create
+```
+
+يولّد هذا مشروع أداة مُهيكل محلياً.
+
+بعد إجراء التغييرات، أنشئ مستودع Git وارفع الكود:
+
+```bash
+git init
+git add .
+git commit -m "Initial version"
+```
+
+لنشر الأداة:
+
+```bash
+crewai tool publish
+```
+
+افتراضياً، تُنشر الأدوات كخاصة. لجعل الأداة عامة:
+
+```bash
+crewai tool publish --public
+```
+
+لمزيد من التفاصيل حول بناء الأدوات، راجع [إنشاء أدواتك الخاصة](/ar/concepts/tools#creating-your-own-tools).
+
+## تحديث الأدوات
+
+لتحديث أداة منشورة:
+
+1. عدّل الأداة محلياً
+2. حدّث الإصدار في `pyproject.toml` (مثل من `0.1.0` إلى `0.1.1`)
+3. ارفع التغييرات وانشر
+
+```bash
+git commit -m "Update version to 0.1.1"
+crewai tool publish
+```
+
+## حذف الأدوات
+
+لحذف أداة:
+
+1. انتقل إلى [CrewAI AMP](https://app.crewai.com)
+2. انتقل إلى **Tools**
+3. اختر الأداة
+4. انقر على **Delete**
+
+
+ الحذف نهائي. لا يمكن استعادة أو إعادة تثبيت الأدوات المحذوفة.
+
+
+## فحوصات الأمان
+
+كل إصدار منشور يخضع لفحوصات أمان آلية، ولا يكون متاحاً للتثبيت إلا بعد اجتيازها.
+
+يمكنك التحقق من حالة فحص الأمان للأداة في:
+
+`CrewAI AMP > Tools > Your Tool > Versions`
+
+
+ تواصل مع فريق الدعم للمساعدة في تكامل API أو
+ استكشاف الأخطاء.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/training-crews.mdx b/docs/v1.15.1/ar/enterprise/guides/training-crews.mdx
new file mode 100644
index 000000000..77f9bb7bf
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/training-crews.mdx
@@ -0,0 +1,132 @@
+---
+title: "تدريب الطواقم"
+description: "قم بتدريب طواقمك المنشورة مباشرة من منصة CrewAI AMP لتحسين أداء الوكلاء بمرور الوقت"
+icon: "dumbbell"
+mode: "wide"
+---
+
+يتيح لك التدريب تحسين أداء الطاقم من خلال تشغيل جلسات تدريب تكرارية مباشرة من علامة تبويب **Training** في CrewAI AMP. تستخدم المنصة **وضع التدريب التلقائي** — حيث تتولى العملية التكرارية تلقائياً، على عكس تدريب CLI الذي يتطلب ملاحظات بشرية تفاعلية لكل تكرار.
+
+بعد اكتمال التدريب، يقوم CrewAI بتقييم مخرجات الوكلاء ودمج الملاحظات في اقتراحات قابلة للتنفيذ لكل وكيل. يتم بعد ذلك تطبيق هذه الاقتراحات على تشغيلات الطاقم المستقبلية لتحسين جودة المخرجات.
+
+
+ للحصول على تفاصيل حول كيفية عمل تدريب CrewAI، راجع صفحة [مفاهيم التدريب](/ar/concepts/training).
+
+
+## المتطلبات الأساسية
+
+
+
+ تحتاج إلى حساب CrewAI AMP مع نشر نشط في حالة **Ready** (نوع Crew).
+
+
+ يجب أن يكون لحسابك صلاحية تشغيل للنشر الذي تريد تدريبه.
+
+
+
+## كيفية تدريب طاقم
+
+
+
+ انتقل إلى **Deployments**، انقر على نشرك، ثم اختر علامة تبويب **Training**.
+
+
+
+ قدم **Training Name** — سيصبح هذا اسم ملف `.pkl` المستخدم لتخزين نتائج التدريب. على سبيل المثال، "Expert Mode Training" ينتج `expert_mode_training.pkl`.
+
+
+
+ أدخل حقول إدخال الطاقم. هذه هي نفس المدخلات التي ستقدمها للتشغيل العادي — يتم تحميلها ديناميكياً بناءً على تكوين طاقمك.
+
+
+
+ انقر على **Train Crew**. يتغير الزر إلى "Training..." مع مؤشر دوران أثناء تشغيل العملية.
+
+ خلف الكواليس:
+ - يتم إنشاء سجل تدريب للنشر الخاص بك
+ - تستدعي المنصة نقطة نهاية التدريب التلقائي للنشر
+ - يقوم الطاقم بتشغيل تكراراته تلقائياً — لا حاجة لملاحظات يدوية
+
+
+
+ تعرض لوحة **Current Training Status**:
+ - **Status** — الحالة الحالية لجلسة التدريب
+ - **Nº Iterations** — عدد تكرارات التدريب المُهيأة
+ - **Filename** — ملف `.pkl` الذي يتم إنشاؤه
+ - **Started At** — وقت بدء التدريب
+ - **Training Inputs** — المدخلات التي قدمتها
+
+
+
+## فهم نتائج التدريب
+
+بمجرد اكتمال التدريب، سترى بطاقات نتائج لكل وكيل تحتوي على المعلومات التالية:
+
+- **Agent Role** — اسم/دور الوكيل في طاقمك
+- **Final Quality** — درجة من 0 إلى 10 تقيّم جودة مخرجات الوكيل
+- **Final Summary** — ملخص لأداء الوكيل أثناء التدريب
+- **Suggestions** — توصيات قابلة للتنفيذ لتحسين سلوك الوكيل
+
+### تحرير الاقتراحات
+
+يمكنك تحسين الاقتراحات لأي وكيل:
+
+
+
+ في بطاقة نتائج أي وكيل، انقر على زر **Edit** بجوار الاقتراحات.
+
+
+
+ حدّث نص الاقتراحات ليعكس التحسينات التي تريدها بشكل أفضل.
+
+
+
+ انقر على **Save**. تتم مزامنة الاقتراحات المُعدّلة مع النشر وتُستخدم في جميع التشغيلات المستقبلية.
+
+
+
+## استخدام بيانات التدريب
+
+لتطبيق نتائج التدريب على طاقمك:
+
+1. لاحظ **Training Filename** (ملف `.pkl`) من جلسة التدريب المكتملة.
+2. حدد اسم الملف هذا في تكوين kickoff أو التشغيل الخاص بنشرك.
+3. يقوم الطاقم تلقائياً بتحميل ملف التدريب وتطبيق الاقتراحات المخزنة على كل وكيل.
+
+هذا يعني أن الوكلاء يستفيدون من الملاحظات المُنشأة أثناء التدريب في كل تشغيل لاحق.
+
+## التدريبات السابقة
+
+يعرض الجزء السفلي من علامة تبويب Training **سجل جميع جلسات التدريب السابقة** للنشر. استخدم هذا لمراجعة التدريبات السابقة، ومقارنة النتائج، أو اختيار ملف تدريب مختلف للاستخدام.
+
+## معالجة الأخطاء
+
+إذا فشل تشغيل التدريب، تعرض لوحة الحالة حالة خطأ مع رسالة تصف ما حدث خطأ.
+
+الأسباب الشائعة لفشل التدريب:
+- **لم يتم تحديث وقت تشغيل النشر** — تأكد من أن نشرك يعمل بأحدث إصدار
+- **أخطاء تنفيذ الطاقم** — مشاكل في منطق مهام الطاقم أو تكوين الوكيل
+- **مشاكل الشبكة** — مشاكل الاتصال بين المنصة والنشر
+
+## القيود
+
+
+ ضع هذه القيود في الاعتبار عند التخطيط لسير عمل التدريب الخاص بك:
+ - **تدريب نشط واحد في كل مرة** لكل نشر — انتظر حتى ينتهي التشغيل الحالي قبل بدء آخر
+ - **وضع التدريب التلقائي فقط** — لا تدعم المنصة الملاحظات التفاعلية لكل تكرار مثل CLI
+ - **بيانات التدريب خاصة بالنشر** — ترتبط نتائج التدريب بمثيل وإصدار النشر المحدد
+
+
+## الموارد ذات الصلة
+
+
+
+ تعلم كيف يعمل تدريب CrewAI.
+
+
+ قم بتشغيل طاقمك المنشور من منصة AMP.
+
+
+ انشر طاقمك واجعله جاهزاً للتدريب.
+
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/update-crew.mdx b/docs/v1.15.1/ar/enterprise/guides/update-crew.mdx
new file mode 100644
index 000000000..1bb9ec82f
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/update-crew.mdx
@@ -0,0 +1,91 @@
+---
+title: "تحديث الطاقم"
+description: "تحديث طاقم على CrewAI AMP"
+icon: "pencil"
+mode: "wide"
+---
+
+
+ بعد نشر طاقمك على CrewAI AMP، قد تحتاج لإجراء تحديثات على
+ الكود أو إعدادات الأمان أو التهيئة. يشرح هذا الدليل كيفية تنفيذ
+ عمليات التحديث الشائعة.
+
+
+## لماذا تحديث طاقمك؟
+
+لن يلتقط CrewAI تحديثات GitHub تلقائياً بشكل افتراضي، لذا ستحتاج لتشغيل التحديثات يدوياً، ما لم تكن قد حددت خيار `Auto-update` عند نشر طاقمك.
+
+هناك عدة أسباب قد تدفعك لتحديث نشر طاقمك:
+
+- تريد تحديث الكود بأحدث إيداع دفعته إلى GitHub
+- تريد إعادة تعيين رمز الحامل لأسباب أمنية
+- تريد تحديث متغيرات البيئة
+
+## 1. تحديث كود طاقمك لأحدث إيداع
+
+عندما تدفع إيداعات جديدة إلى مستودع GitHub وتريد تحديث نشرك:
+
+1. انتقل إلى طاقمك في منصة CrewAI AMP
+2. انقر على زر `Re-deploy` في صفحة تفاصيل طاقمك
+
+
+
+سيؤدي ذلك إلى تشغيل تحديث يمكنك تتبعه عبر شريط التقدم. سيسحب النظام أحدث كود من مستودعك ويعيد بناء نشرك.
+
+## 2. إعادة تعيين رمز الحامل
+
+إذا كنت تحتاج لإنشاء رمز حامل جديد (مثلاً، إذا كنت تشتبه في أن الرمز الحالي ربما تم اختراقه):
+
+1. انتقل إلى طاقمك في منصة CrewAI AMP
+2. ابحث عن قسم `Bearer Token`
+3. انقر على زر `Reset` بجانب رمزك الحالي
+
+
+
+
+ إعادة تعيين رمز الحامل ستبطل الرمز السابق فوراً.
+ تأكد من تحديث أي تطبيقات أو نصوص برمجية تستخدم الرمز القديم.
+
+
+## 3. تحديث متغيرات البيئة
+
+لتحديث متغيرات البيئة لطاقمك:
+
+1. أولاً ادخل صفحة النشر بالنقر على اسم طاقمك
+
+
+ 
+
+
+2. حدد موقع قسم `Environment Variables` (ستحتاج للنقر على أيقونة `Settings` للوصول إليه)
+3. عدّل المتغيرات الحالية أو أضف جديدة في الحقول المتوفرة
+4. انقر على زر `Update` بجانب كل متغير تعدّله
+
+
+ 
+
+
+5. أخيراً، انقر على زر `Update Deployment` في أسفل الصفحة لتطبيق التغييرات
+
+
+ تحديث متغيرات البيئة سيشغّل نشراً جديداً، لكن هذا سيحدّث
+ فقط تهيئة البيئة وليس الكود نفسه.
+
+
+## بعد التحديث
+
+بعد إجراء أي تحديث:
+
+1. سيعيد النظام بناء وإعادة نشر طاقمك
+2. يمكنك مراقبة تقدم النشر في الوقت الفعلي
+3. بمجرد الاكتمال، اختبر طاقمك للتأكد من أن التغييرات تعمل كما هو متوقع
+
+
+ إذا واجهت أي مشاكل بعد التحديث، يمكنك عرض سجلات النشر في
+ المنصة أو التواصل مع الدعم للمساعدة.
+
+
+
+ تواصل مع فريق الدعم للمساعدة في تحديث طاقمك أو
+ استكشاف أخطاء النشر.
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/webhook-automation.mdx b/docs/v1.15.1/ar/enterprise/guides/webhook-automation.mdx
new file mode 100644
index 000000000..86d4ffe86
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/webhook-automation.mdx
@@ -0,0 +1,157 @@
+---
+title: "أتمتة Webhook"
+description: "أتمتة سير عمل CrewAI AMP باستخدام webhooks مع منصات مثل ActivePieces وZapier وMake.com"
+icon: "webhook"
+mode: "wide"
+---
+
+يتيح لك CrewAI AMP أتمتة سير عملك باستخدام webhooks. ستوجهك هذه المقالة خلال عملية إعداد واستخدام webhooks لبدء تنفيذ طاقمك، مع التركيز على التكامل مع ActivePieces، وهي منصة أتمتة سير العمل مشابهة لـ Zapier وMake.com.
+
+## إعداد Webhooks
+
+
+
+ - انتقل إلى لوحة تحكم CrewAI AMP
+ - ابحث عن قسم `/kickoff`، الذي يُستخدم لبدء تنفيذ الطاقم
+
+
+
+
+
+
+ في قسم محتوى JSON، ستحتاج إلى تقديم المعلومات التالية:
+
+ - **inputs**: كائن JSON يحتوي على:
+ - `company`: اسم الشركة (مثال: "tesla")
+ - `product_name`: اسم المنتج (مثال: "crewai")
+ - `form_response`: نوع الاستجابة (مثال: "financial")
+ - `icp_description`: وصف موجز لملف العميل المثالي
+ - `product_description`: وصف قصير للمنتج
+ - `taskWebhookUrl`، `stepWebhookUrl`، `crewWebhookUrl`: عناوين URL لنقاط نهاية webhook المختلفة (ActivePieces أو Zapier أو Make.com أو منصة أخرى متوافقة)
+
+
+
+ في هذا المثال سنستخدم ActivePieces. يمكنك استخدام منصات أخرى مثل Zapier وMake.com
+
+ للتكامل مع ActivePieces:
+
+ 1. أنشئ تدفقًا جديدًا في ActivePieces
+ 2. أضف مشغلًا (مثال: جدول `Every Day`)
+
+
+
+
+ 3. أضف خطوة إجراء HTTP
+ - عيّن الإجراء إلى `Send HTTP request`
+ - استخدم `POST` كطريقة
+ - عيّن عنوان URL إلى نقطة نهاية بدء CrewAI AMP
+ - أضف الترويسات اللازمة (مثال: `Bearer Token`)
+
+
+
+
+ - في النص، ضمّن محتوى JSON كما تم تكوينه في الخطوة 2
+
+
+
+
+ - سيبدأ الطاقم بعد ذلك في الوقت المحدد مسبقًا.
+
+
+
+ 1. أنشئ تدفقًا جديدًا في ActivePieces وسمّه
+
+
+
+
+ 2. أضف خطوة webhook كمشغل:
+ - اختر `Catch Webhook` كنوع المشغل
+ - سيولّد هذا عنوان URL فريدًا سيستقبل طلبات HTTP ويشغل تدفقك
+
+
+
+
+ - كوّن البريد الإلكتروني لاستخدام نص جسم webhook الخاص بالطاقم
+
+
+
+
+
+
+
+## أمثلة مخرجات Webhook
+
+**ملاحظة:** أي كائن `meta` مُقدم في طلب البدء الخاص بك سيتم تضمينه في جميع حمولات webhook، مما يتيح لك تتبع الطلبات والحفاظ على السياق عبر دورة حياة تنفيذ الطاقم بالكامل.
+
+
+
+ `stepWebhookUrl` - رد نداء يتم تنفيذه عند كل فكرة داخلية للوكيل
+
+ ```json
+ {
+ "prompt": "Research the financial industry for potential AI solutions",
+ "thought": "I need to conduct preliminary research on the financial industry",
+ "tool": "research_tool",
+ "tool_input": "financial industry AI solutions",
+ "result": "**Preliminary Research Report on the Financial Industry for crewai Enterprise Solution**\n1. Industry Overview and Trends\nThe financial industry in ....\nConclusion:\nThe financial industry presents a fertile ground for implementing AI solutions like crewai, particularly in areas such as digital customer engagement, risk management, and regulatory compliance. Further engagement with the lead is recommended to better tailor the crewai solution to their specific needs and scale.",
+ "kickoff_id": "97eba64f-958c-40a0-b61c-625fe635a3c0",
+ "meta": {
+ "requestId": "travel-req-123",
+ "source": "web-app"
+ }
+ }
+ ```
+
+
+ `taskWebhookUrl` - رد نداء يتم تنفيذه عند انتهاء كل مهمة
+
+ ```json
+ {
+ "description": "Using the information gathered from the lead's data, conduct preliminary research on the lead's industry, company background, and potential use cases for crewai. Focus on finding relevant data that can aid in scoring the lead and planning a strategy to pitch them crewai.",
+ "name": "Industry Research Task",
+ "expected_output": "Detailed research report on the financial industry",
+ "summary": "The financial industry presents a fertile ground for implementing AI solutions like crewai, particularly in areas such as digital customer engagement, risk management, and regulatory compliance. Further engagement with the lead is recommended to better tailor the crewai solution to their specific needs and scale.",
+ "agent": "Research Agent",
+ "output": "**Preliminary Research Report on the Financial Industry for crewai Enterprise Solution**\n1. Industry Overview and Trends\nThe financial industry in ....\nConclusion:\nThe financial industry presents a fertile ground for implementing AI solutions like crewai, particularly in areas such as digital customer engagement, risk management, and regulatory compliance.",
+ "output_json": {
+ "industry": "financial",
+ "key_opportunities": ["digital customer engagement", "risk management", "regulatory compliance"]
+ },
+ "kickoff_id": "97eba64f-958c-40a0-b61c-625fe635a3c0",
+ "meta": {
+ "requestId": "travel-req-123",
+ "source": "web-app"
+ }
+ }
+ ```
+
+
+ `crewWebhookUrl` - رد نداء يتم تنفيذه عند انتهاء تنفيذ الطاقم
+
+ ```json
+ {
+ "kickoff_id": "97eba64f-958c-40a0-b61c-625fe635a3c0",
+ "result": "**Final Analysis Report**\n\nLead Score: Customer service enhancement and compliance are particularly relevant.\n\nTalking Points:\n- Highlight how crewai's AI solutions can transform customer service\n- Discuss crewai's potential for sustainability goals\n- Emphasize compliance capabilities\n- Stress adaptability for various operation scales",
+ "result_json": {
+ "lead_score": "Customer service enhancement, and compliance are particularly relevant.",
+ "talking_points": [
+ "Highlight how crewai's AI solutions can transform customer service with automated, personalized experiences and 24/7 support, improving both customer satisfaction and operational efficiency.",
+ "Discuss crewai's potential to help the institution achieve its sustainability goals through better data analysis and decision-making, contributing to responsible investing and green initiatives.",
+ "Emphasize crewai's ability to enhance compliance with evolving regulations through efficient data processing and reporting, reducing the risk of non-compliance penalties.",
+ "Stress the adaptability of crewai to support both extensive multinational operations and smaller, targeted projects, ensuring the solution grows with the institution's needs."
+ ]
+ },
+ "token_usage": {
+ "total_tokens": 1250,
+ "prompt_tokens": 800,
+ "completion_tokens": 450
+ },
+ "meta": {
+ "requestId": "travel-req-123",
+ "source": "web-app"
+ }
+ }
+ ```
+
+
+
diff --git a/docs/v1.15.1/ar/enterprise/guides/zapier-trigger.mdx b/docs/v1.15.1/ar/enterprise/guides/zapier-trigger.mdx
new file mode 100644
index 000000000..ebeb1c863
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/guides/zapier-trigger.mdx
@@ -0,0 +1,105 @@
+---
+title: "مشغل Zapier"
+description: "تشغيل أطقم CrewAI من سير عمل Zapier لأتمتة سير العمل عبر التطبيقات"
+icon: "bolt"
+mode: "wide"
+---
+
+سيرشدك هذا الدليل خلال عملية إعداد مشغلات Zapier لـ CrewAI AMP، مما يتيح لك أتمتة سير العمل بين CrewAI AMP والتطبيقات الأخرى.
+
+## المتطلبات الأساسية
+
+- حساب CrewAI AMP
+- حساب Zapier
+- حساب Slack (لهذا المثال المحدد)
+
+## الإعداد خطوة بخطوة
+
+
+
+ - في Zapier، أنشئ Zap جديدًا.
+
+
+
+
+
+
+
+
+
+
+ - اختر `New Pushed Message` كحدث المشغل.
+ - اربط حساب Slack الخاص بك إذا لم تفعل ذلك بالفعل.
+
+
+
+ - أضف خطوة إجراء جديدة إلى Zap الخاص بك.
+ - اختر CrewAI+ كتطبيق الإجراء وKickoff كحدث الإجراء
+
+
+
+
+
+
+
+ - اربط حساب CrewAI AMP الخاص بك.
+ - اختر الطاقم المناسب لسير عملك.
+
+
+
+
+ - كوّن مدخلات الطاقم باستخدام البيانات من رسالة Slack.
+
+
+
+ - أضف خطوة إجراء أخرى لتنسيق مخرجات النص من CrewAI AMP.
+ - استخدم أدوات التنسيق في Zapier لتحويل مخرجات Markdown إلى HTML.
+
+
+
+
+
+
+
+
+
+
+ - أضف خطوة إجراء نهائية لإرسال المخرجات المنسقة عبر البريد الإلكتروني.
+ - اختر خدمة البريد الإلكتروني المفضلة لديك (مثال: Gmail، Outlook).
+ - كوّن تفاصيل البريد الإلكتروني، بما في ذلك المستلم والموضوع والنص.
+ - أدرج مخرجات CrewAI AMP المنسقة في نص البريد الإلكتروني.
+
+
+
+
+
+
+
+ - أدخل النص في قناة Slack الخاصة بك
+
+
+
+
+
+ - اختر زر النقاط الثلاث ثم اختر Push to Zapier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## نصائح للنجاح
+
+- تأكد من أن مدخلات CrewAI AMP مربوطة بشكل صحيح من رسالة Slack.
+- اختبر Zap الخاص بك جيدًا قبل تفعيله لاكتشاف أي مشاكل محتملة.
+- فكر في إضافة خطوات معالجة الأخطاء لإدارة حالات الفشل المحتملة في سير العمل.
+
+باتباع هذه الخطوات، ستكون قد أعددت بنجاح مشغلات Zapier لـ CrewAI AMP، مما يتيح سير عمل آلي يتم تشغيله بواسطة رسائل Slack وينتج عنه إشعارات بالبريد الإلكتروني مع مخرجات CrewAI AMP.
diff --git a/docs/v1.15.1/ar/enterprise/integrations/asana.mdx b/docs/v1.15.1/ar/enterprise/integrations/asana.mdx
new file mode 100644
index 000000000..394d2193b
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/asana.mdx
@@ -0,0 +1,271 @@
+---
+title: تكامل Asana
+description: "تنسيق مهام الفريق والمشاريع مع تكامل Asana لـ CrewAI."
+icon: "circle"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة المهام والمشاريع وتنسيق الفريق عبر Asana. أنشئ المهام وحدّث حالة المشروع وأدر التعيينات وبسّط سير عمل فريقك مع الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Asana، تأكد من أن لديك:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك نشط
+- حساب Asana مع الأذونات المناسبة
+- ربط حساب Asana الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Asana
+
+### 1. ربط حساب Asana الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Asana** في قسم تكاملات المصادقة
+3. انقر على **ربط** وأكمل تدفق OAuth
+4. امنح الأذونات اللازمة لإدارة المهام والمشاريع
+5. انسخ رمز Enterprise الخاص بك من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز Enterprise الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** إنشاء تعليق في Asana.
+
+ **المعاملات:**
+ - `task` (string, مطلوب): معرف المهمة - معرف المهمة التي سيُضاف إليها التعليق. سيُنسب التعليق للمستخدم المصادق عليه حاليًا.
+ - `text` (string, مطلوب): النص (مثال: "This is a comment.").
+
+
+
+
+ **الوصف:** إنشاء مشروع في Asana.
+
+ **المعاملات:**
+ - `name` (string, مطلوب): الاسم (مثال: "Stuff to buy").
+ - `workspace` (string, مطلوب): مساحة العمل - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار مساحة العمل لإنشاء المشاريع فيها. الافتراضي هو أول مساحة عمل للمستخدم إذا تُرك فارغًا.
+ - `team` (string, اختياري): الفريق - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار الفريق لمشاركة هذا المشروع معه. الافتراضي هو أول فريق للمستخدم إذا تُرك فارغًا.
+ - `notes` (string, اختياري): ملاحظات (مثال: "These are things we need to purchase.").
+
+
+
+
+ **الوصف:** الحصول على قائمة المشاريع في Asana.
+
+ **المعاملات:**
+ - `archived` (string, اختياري): مؤرشف - اختر "true" لعرض المشاريع المؤرشفة، "false" لعرض المشاريع النشطة فقط، أو "default" لعرض كليهما.
+ - الخيارات: `default`, `true`, `false`
+
+
+
+
+ **الوصف:** الحصول على مشروع بواسطة المعرف في Asana.
+
+ **المعاملات:**
+ - `projectFilterId` (string, مطلوب): معرف المشروع.
+
+
+
+
+ **الوصف:** إنشاء مهمة في Asana.
+
+ **المعاملات:**
+ - `name` (string, مطلوب): الاسم (مثال: "Task Name").
+ - `workspace` (string, اختياري): مساحة العمل - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار مساحة العمل لإنشاء المهام فيها. الافتراضي هو أول مساحة عمل للمستخدم إذا تُرك فارغًا.
+ - `project` (string, اختياري): المشروع - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار المشروع لإنشاء هذه المهمة فيه.
+ - `notes` (string, اختياري): ملاحظات.
+ - `dueOnDate` (string, اختياري): تاريخ الاستحقاق - التاريخ الذي تستحق فيه هذه المهمة. لا يمكن استخدامه مع Due At. (مثال: "YYYY-MM-DD").
+ - `dueAtDate` (string, اختياري): الاستحقاق في - التاريخ والوقت (طابع زمني ISO) الذي تستحق فيه هذه المهمة. لا يمكن استخدامه مع Due On. (مثال: "2019-09-15T02:06:58.147Z").
+ - `assignee` (string, اختياري): المُكلف - معرف مستخدم Asana الذي سيتم تعيين هذه المهمة له. استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار المُكلف.
+ - `gid` (string, اختياري): معرف خارجي - معرف من تطبيقك لربط هذه المهمة به. يمكنك استخدام هذا المعرف لمزامنة التحديثات لهذه المهمة لاحقًا.
+
+
+
+
+ **الوصف:** تحديث مهمة في Asana.
+
+ **المعاملات:**
+ - `taskId` (string, مطلوب): معرف المهمة - معرف المهمة التي سيتم تحديثها.
+ - `completeStatus` (string, اختياري): حالة الإكمال.
+ - الخيارات: `true`, `false`
+ - `name` (string, اختياري): الاسم (مثال: "Task Name").
+ - `notes` (string, اختياري): ملاحظات.
+ - `dueOnDate` (string, اختياري): تاريخ الاستحقاق - التاريخ الذي تستحق فيه هذه المهمة. لا يمكن استخدامه مع Due At. (مثال: "YYYY-MM-DD").
+ - `dueAtDate` (string, اختياري): الاستحقاق في - التاريخ والوقت (طابع زمني ISO) الذي تستحق فيه هذه المهمة. لا يمكن استخدامه مع Due On. (مثال: "2019-09-15T02:06:58.147Z").
+ - `assignee` (string, اختياري): المُكلف - معرف مستخدم Asana الذي سيتم تعيين هذه المهمة له.
+ - `gid` (string, اختياري): معرف خارجي - معرف من تطبيقك لربط هذه المهمة به.
+
+
+
+
+ **الوصف:** الحصول على قائمة المهام في Asana.
+
+ **المعاملات:**
+ - `workspace` (string, اختياري): مساحة العمل - معرف مساحة العمل لتصفية المهام عليها.
+ - `project` (string, اختياري): المشروع - معرف المشروع لتصفية المهام عليه.
+ - `assignee` (string, اختياري): المُكلف - معرف المُكلف لتصفية المهام عليه.
+ - `completedSince` (string, اختياري): مكتملة منذ - إرجاع المهام غير المكتملة فقط أو التي اكتملت منذ هذا الوقت (طابع زمني ISO أو Unix). (مثال: "2014-04-25T16:15:47-04:00").
+
+
+
+
+ **الوصف:** الحصول على قائمة المهام بواسطة المعرف في Asana.
+
+ **المعاملات:**
+ - `taskId` (string, مطلوب): معرف المهمة.
+
+
+
+
+ **الوصف:** الحصول على مهمة بواسطة المعرف الخارجي في Asana.
+
+ **المعاملات:**
+ - `gid` (string, مطلوب): المعرف الخارجي - المعرف الذي ترتبط أو تتزامن به هذه المهمة، من تطبيقك.
+
+
+
+
+ **الوصف:** إضافة مهمة إلى قسم في Asana.
+
+ **المعاملات:**
+ - `sectionId` (string, مطلوب): معرف القسم - معرف القسم لإضافة هذه المهمة إليه.
+ - `taskId` (string, مطلوب): معرف المهمة - معرف المهمة. (مثال: "1204619611402340").
+ - `beforeTaskId` (string, اختياري): معرف المهمة السابقة - معرف مهمة في هذا القسم سيتم إدراج هذه المهمة قبلها. لا يمكن استخدامه مع After Task ID. (مثال: "1204619611402340").
+ - `afterTaskId` (string, اختياري): معرف المهمة التالية - معرف مهمة في هذا القسم سيتم إدراج هذه المهمة بعدها. لا يمكن استخدامه مع Before Task ID. (مثال: "1204619611402340").
+
+
+
+
+ **الوصف:** الحصول على قائمة الفرق في Asana.
+
+ **المعاملات:**
+ - `workspace` (string, مطلوب): مساحة العمل - إرجاع الفرق في مساحة العمل هذه المرئية للمستخدم المصرح له.
+
+
+
+
+ **الوصف:** الحصول على قائمة مساحات العمل في Asana.
+
+ **المعاملات:** لا توجد معاملات مطلوبة.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد وكيل Asana الأساسي
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Asana capabilities
+asana_agent = Agent(
+ role="Project Manager",
+ goal="Manage tasks and projects in Asana efficiently",
+ backstory="An AI assistant specialized in project management and task coordination.",
+ apps=['asana'] # All Asana actions will be available
+)
+
+# Task to create a new project
+create_project_task = Task(
+ description="Create a new project called 'Q1 Marketing Campaign' in the Marketing workspace",
+ agent=asana_agent,
+ expected_output="Confirmation that the project was created successfully with project ID"
+)
+
+# Run the task
+crew = Crew(
+ agents=[asana_agent],
+ tasks=[create_project_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات Asana محددة
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with specific Asana actions only
+task_manager_agent = Agent(
+ role="Task Manager",
+ goal="Create and manage tasks efficiently",
+ backstory="An AI assistant that focuses on task creation and management.",
+ apps=[
+ 'asana/create_task',
+ 'asana/update_task',
+ 'asana/get_tasks'
+ ] # Specific Asana actions
+)
+
+# Task to create and assign a task
+task_management = Task(
+ description="Create a task called 'Review quarterly reports' and assign it to the appropriate team member",
+ agent=task_manager_agent,
+ expected_output="Task created and assigned successfully"
+)
+
+crew = Crew(
+ agents=[task_manager_agent],
+ tasks=[task_management]
+)
+
+crew.kickoff()
+```
+
+### إدارة المشاريع المتقدمة
+
+```python
+from crewai import Agent, Task, Crew
+
+project_coordinator = Agent(
+ role="Project Coordinator",
+ goal="Coordinate project activities and track progress",
+ backstory="An experienced project coordinator who ensures projects run smoothly.",
+ apps=['asana']
+)
+
+# Complex task involving multiple Asana operations
+coordination_task = Task(
+ description="""
+ 1. Get all active projects in the workspace
+ 2. For each project, get the list of incomplete tasks
+ 3. Create a summary report task in the 'Management Reports' project
+ 4. Add comments to overdue tasks to request status updates
+ """,
+ agent=project_coordinator,
+ expected_output="Summary report created and status update requests sent for overdue tasks"
+)
+
+crew = Crew(
+ agents=[project_coordinator],
+ tasks=[coordination_task]
+)
+
+crew.kickoff()
+```
diff --git a/docs/v1.15.1/ar/enterprise/integrations/box.mdx b/docs/v1.15.1/ar/enterprise/integrations/box.mdx
new file mode 100644
index 000000000..08186175f
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/box.mdx
@@ -0,0 +1,280 @@
+---
+title: تكامل Box
+description: "تخزين الملفات وإدارة المستندات مع تكامل Box لـ CrewAI."
+icon: "box"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة الملفات والمجلدات والمستندات عبر Box. ارفع الملفات، ونظّم هياكل المجلدات، وابحث في المحتوى، وبسّط إدارة مستندات فريقك باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Box، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Box بالصلاحيات المناسبة
+- ربط حساب Box الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Box
+
+### 1. ربط حساب Box الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Box** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة الملفات والمجلدات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** حفظ ملف من عنوان URL في Box.
+
+ **المعاملات:**
+ - `fileAttributes` (object, مطلوب): السمات - بيانات وصفية للملف تشمل الاسم والمجلد الأصلي والطوابع الزمنية.
+ ```json
+ {
+ "content_created_at": "2012-12-12T10:53:43-08:00",
+ "content_modified_at": "2012-12-12T10:53:43-08:00",
+ "name": "qwerty.png",
+ "parent": { "id": "1234567" }
+ }
+ ```
+ - `file` (string, مطلوب): عنوان URL للملف - يجب أن يكون حجم الملفات أقل من 50 ميجابايت. (مثال: "https://picsum.photos/200/300").
+
+
+
+
+ **الوصف:** حفظ ملف في Box.
+
+ **المعاملات:**
+ - `file` (string, مطلوب): الملف - يقبل كائن ملف يحتوي على بيانات الملف. يجب أن يكون حجم الملفات أقل من 50 ميجابايت.
+ - `fileName` (string, مطلوب): اسم الملف (مثال: "qwerty.png").
+ - `folder` (string, اختياري): المجلد - استخدم إعدادات سير عمل بوابة الاتصال للسماح للمستخدمين باختيار وجهة مجلد الملف. يستخدم المجلد الجذري افتراضياً إذا تُرك فارغاً.
+
+
+
+
+ **الوصف:** الحصول على ملف بواسطة المعرّف في Box.
+
+ **المعاملات:**
+ - `fileId` (string, مطلوب): معرّف الملف - المعرّف الفريد الذي يمثل ملفاً. (مثال: "12345").
+
+
+
+
+ **الوصف:** عرض قائمة الملفات في Box.
+
+ **المعاملات:**
+ - `folderId` (string, مطلوب): معرّف المجلد - المعرّف الفريد الذي يمثل مجلداً. (مثال: "0").
+ - `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل - OR لمجموعات AND من شروط فردية.
+ ```json
+ {
+ "operator": "OR",
+ "conditions": [
+ {
+ "operator": "AND",
+ "conditions": [
+ {
+ "field": "direction",
+ "operator": "$stringExactlyMatches",
+ "value": "ASC"
+ }
+ ]
+ }
+ ]
+ }
+ ```
+
+
+
+
+ **الوصف:** إنشاء مجلد في Box.
+
+ **المعاملات:**
+ - `folderName` (string, مطلوب): الاسم - اسم المجلد الجديد. (مثال: "New Folder").
+ - `folderParent` (object, مطلوب): المجلد الأصلي - المجلد الأصلي الذي سيُنشأ فيه المجلد الجديد.
+ ```json
+ {
+ "id": "123456"
+ }
+ ```
+
+
+
+
+ **الوصف:** نقل مجلد في Box.
+
+ **المعاملات:**
+ - `folderId` (string, مطلوب): معرّف المجلد - المعرّف الفريد الذي يمثل مجلداً. (مثال: "0").
+ - `folderName` (string, مطلوب): الاسم - اسم المجلد. (مثال: "New Folder").
+ - `folderParent` (object, مطلوب): المجلد الأصلي - وجهة المجلد الأصلي الجديد.
+ ```json
+ {
+ "id": "123456"
+ }
+ ```
+
+
+
+
+ **الوصف:** الحصول على مجلد بواسطة المعرّف في Box.
+
+ **المعاملات:**
+ - `folderId` (string, مطلوب): معرّف المجلد - المعرّف الفريد الذي يمثل مجلداً. (مثال: "0").
+
+
+
+
+ **الوصف:** البحث في المجلدات في Box.
+
+ **المعاملات:**
+ - `folderId` (string, مطلوب): معرّف المجلد - المجلد المراد البحث فيه.
+ - `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل - OR لمجموعات AND من شروط فردية.
+ ```json
+ {
+ "operator": "OR",
+ "conditions": [
+ {
+ "operator": "AND",
+ "conditions": [
+ {
+ "field": "sort",
+ "operator": "$stringExactlyMatches",
+ "value": "name"
+ }
+ ]
+ }
+ ]
+ }
+ ```
+
+
+
+
+ **الوصف:** حذف مجلد في Box.
+
+ **المعاملات:**
+ - `folderId` (string, مطلوب): معرّف المجلد - المعرّف الفريد الذي يمثل مجلداً. (مثال: "0").
+ - `recursive` (boolean, اختياري): تكراري - حذف مجلد غير فارغ بحذف المجلد وجميع محتوياته تكرارياً.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Box
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Box capabilities
+box_agent = Agent(
+ role="Document Manager",
+ goal="Manage files and folders in Box efficiently",
+ backstory="An AI assistant specialized in document management and file organization.",
+ apps=['box'] # All Box actions will be available
+)
+
+# Task to create a folder structure
+create_structure_task = Task(
+ description="Create a folder called 'Project Files' in the root directory and upload a document from URL",
+ agent=box_agent,
+ expected_output="Folder created and file uploaded successfully"
+)
+
+# Run the task
+crew = Crew(
+ agents=[box_agent],
+ tasks=[create_structure_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات Box محددة
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with specific Box actions only
+file_organizer_agent = Agent(
+ role="File Organizer",
+ goal="Organize and manage file storage efficiently",
+ backstory="An AI assistant that focuses on file organization and storage management.",
+ apps=['box/create_folder', 'box/save_file', 'box/list_files'] # Specific Box actions
+)
+
+# Task to organize files
+organization_task = Task(
+ description="Create a folder structure for the marketing team and organize existing files",
+ agent=file_organizer_agent,
+ expected_output="Folder structure created and files organized"
+)
+
+crew = Crew(
+ agents=[file_organizer_agent],
+ tasks=[organization_task]
+)
+
+crew.kickoff()
+```
+
+### إدارة الملفات المتقدمة
+
+```python
+from crewai import Agent, Task, Crew
+
+file_manager = Agent(
+ role="File Manager",
+ goal="Maintain organized file structure and manage document lifecycle",
+ backstory="An experienced file manager who ensures documents are properly organized and accessible.",
+ apps=['box']
+)
+
+# Complex task involving multiple Box operations
+management_task = Task(
+ description="""
+ 1. List all files in the root folder
+ 2. Create monthly archive folders for the current year
+ 3. Move old files to appropriate archive folders
+ 4. Generate a summary report of the file organization
+ """,
+ agent=file_manager,
+ expected_output="Files organized into archive structure with summary report"
+)
+
+crew = Crew(
+ agents=[file_manager],
+ tasks=[management_task]
+)
+
+crew.kickoff()
+```
diff --git a/docs/v1.15.1/ar/enterprise/integrations/clickup.mdx b/docs/v1.15.1/ar/enterprise/integrations/clickup.mdx
new file mode 100644
index 000000000..a8b75526c
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/clickup.mdx
@@ -0,0 +1,301 @@
+---
+title: تكامل ClickUp
+description: "إدارة المهام والإنتاجية مع تكامل ClickUp لـ CrewAI."
+icon: "list-check"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة المهام والمشاريع وسير عمل الإنتاجية عبر ClickUp. أنشئ المهام وحدّثها، ونظّم المشاريع، وأدر تعيينات الفريق، وبسّط إدارة إنتاجيتك باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل ClickUp، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب ClickUp بالصلاحيات المناسبة
+- ربط حساب ClickUp الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل ClickUp
+
+### 1. ربط حساب ClickUp الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **ClickUp** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة المهام والمشاريع
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** البحث عن المهام في ClickUp باستخدام فلاتر متقدمة.
+
+ **المعاملات:**
+ - `taskFilterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل - OR لمجموعات AND من شروط فردية.
+ ```json
+ {
+ "operator": "OR",
+ "conditions": [
+ {
+ "operator": "AND",
+ "conditions": [
+ {
+ "field": "statuses%5B%5D",
+ "operator": "$stringExactlyMatches",
+ "value": "open"
+ }
+ ]
+ }
+ ]
+ }
+ ```
+ الحقول المتاحة: `space_ids%5B%5D`, `project_ids%5B%5D`, `list_ids%5B%5D`, `statuses%5B%5D`, `include_closed`, `assignees%5B%5D`, `tags%5B%5D`, `due_date_gt`, `due_date_lt`, `date_created_gt`, `date_created_lt`, `date_updated_gt`, `date_updated_lt`
+
+
+
+
+ **الوصف:** الحصول على المهام في قائمة محددة في ClickUp.
+
+ **المعاملات:**
+ - `listId` (string, مطلوب): القائمة - اختر قائمة للحصول على المهام منها. استخدم إعدادات المستخدم في بوابة الاتصال للسماح للمستخدمين باختيار قائمة ClickUp.
+ - `taskFilterFormula` (string, اختياري): البحث عن المهام التي تطابق الفلاتر المحددة. مثال: name=task1.
+
+
+
+
+ **الوصف:** إنشاء مهمة في ClickUp.
+
+ **المعاملات:**
+ - `listId` (string, مطلوب): القائمة - اختر قائمة لإنشاء هذه المهمة فيها.
+ - `name` (string, مطلوب): الاسم - اسم المهمة.
+ - `description` (string, اختياري): الوصف - وصف المهمة.
+ - `status` (string, اختياري): الحالة - اختر حالة لهذه المهمة.
+ - `assignees` (string, اختياري): المكلّفون - اختر عضواً (أو مصفوفة من معرّفات الأعضاء) ليتم تعيينهم لهذه المهمة.
+ - `dueDate` (string, اختياري): تاريخ الاستحقاق - حدد تاريخ استحقاق لهذه المهمة.
+ - `additionalFields` (string, اختياري): حقول إضافية - حدد حقولاً إضافية لتضمينها في هذه المهمة بصيغة JSON.
+
+
+
+
+ **الوصف:** تحديث مهمة في ClickUp.
+
+ **المعاملات:**
+ - `taskId` (string, مطلوب): معرّف المهمة - معرّف المهمة المراد تحديثها.
+ - `listId` (string, مطلوب): القائمة - اختر قائمة لإنشاء هذه المهمة فيها.
+ - `name` (string, اختياري): الاسم - اسم المهمة.
+ - `description` (string, اختياري): الوصف - وصف المهمة.
+ - `status` (string, اختياري): الحالة - اختر حالة لهذه المهمة.
+ - `assignees` (string, اختياري): المكلّفون - اختر عضواً (أو مصفوفة من معرّفات الأعضاء) ليتم تعيينهم لهذه المهمة.
+ - `dueDate` (string, اختياري): تاريخ الاستحقاق - حدد تاريخ استحقاق لهذه المهمة.
+ - `additionalFields` (string, اختياري): حقول إضافية - حدد حقولاً إضافية لتضمينها في هذه المهمة بصيغة JSON.
+
+
+
+
+ **الوصف:** حذف مهمة في ClickUp.
+
+ **المعاملات:**
+ - `taskId` (string, مطلوب): معرّف المهمة - معرّف المهمة المراد حذفها.
+
+
+
+
+ **الوصف:** الحصول على معلومات القائمة في ClickUp.
+
+ **المعاملات:**
+ - `spaceId` (string, مطلوب): معرّف المساحة - معرّف المساحة التي تحتوي على القوائم.
+
+
+
+
+ **الوصف:** الحصول على الحقول المخصصة في قائمة في ClickUp.
+
+ **المعاملات:**
+ - `listId` (string, مطلوب): معرّف القائمة - معرّف القائمة للحصول على الحقول المخصصة منها.
+
+
+
+
+ **الوصف:** الحصول على جميع الحقول في قائمة في ClickUp.
+
+ **المعاملات:**
+ - `listId` (string, مطلوب): معرّف القائمة - معرّف القائمة للحصول على جميع الحقول منها.
+
+
+
+
+ **الوصف:** الحصول على معلومات المساحة في ClickUp.
+
+ **المعاملات:**
+ - `spaceId` (string, اختياري): معرّف المساحة - معرّف المساحة المراد استرجاعها.
+
+
+
+
+ **الوصف:** الحصول على المجلدات في ClickUp.
+
+ **المعاملات:**
+ - `spaceId` (string, مطلوب): معرّف المساحة - معرّف المساحة التي تحتوي على المجلدات.
+
+
+
+
+ **الوصف:** الحصول على معلومات العضو في ClickUp.
+
+ **المعاملات:** لا توجد معاملات مطلوبة.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ ClickUp
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Clickup capabilities
+clickup_agent = Agent(
+ role="Task Manager",
+ goal="Manage tasks and projects in ClickUp efficiently",
+ backstory="An AI assistant specialized in task management and productivity coordination.",
+ apps=['clickup'] # All Clickup actions will be available
+)
+
+# Task to create a new task
+create_task = Task(
+ description="Create a task called 'Review Q1 Reports' in the Marketing list with high priority",
+ agent=clickup_agent,
+ expected_output="Task created successfully with task ID"
+)
+
+# Run the task
+crew = Crew(
+ agents=[clickup_agent],
+ tasks=[create_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات ClickUp محددة
+
+```python
+
+task_coordinator = Agent(
+ role="Task Coordinator",
+ goal="Create and manage tasks efficiently",
+ backstory="An AI assistant that focuses on task creation and status management.",
+ apps=['clickup/create_task']
+)
+
+# Task to manage task workflow
+task_workflow = Task(
+ description="Create a task for project planning and assign it to the development team",
+ agent=task_coordinator,
+ expected_output="Task created and assigned successfully"
+)
+
+crew = Crew(
+ agents=[task_coordinator],
+ tasks=[task_workflow]
+)
+
+crew.kickoff()
+```
+
+### إدارة المشاريع المتقدمة
+
+```python
+from crewai import Agent, Task, Crew
+
+project_manager = Agent(
+ role="Project Manager",
+ goal="Coordinate project activities and track team productivity",
+ backstory="An experienced project manager who ensures projects are delivered on time.",
+ apps=['clickup']
+)
+
+# Complex task involving multiple ClickUp operations
+project_coordination = Task(
+ description="""
+ 1. Get all open tasks in the current space
+ 2. Identify overdue tasks and update their status
+ 3. Create a weekly report task summarizing project progress
+ 4. Assign the report task to the team lead
+ """,
+ agent=project_manager,
+ expected_output="Project status updated and weekly report task created and assigned"
+)
+
+crew = Crew(
+ agents=[project_manager],
+ tasks=[project_coordination]
+)
+
+crew.kickoff()
+```
+
+### البحث في المهام وإدارتها
+
+```python
+from crewai import Agent, Task, Crew
+
+task_analyst = Agent(
+ role="Task Analyst",
+ goal="Analyze task patterns and optimize team productivity",
+ backstory="An AI assistant that analyzes task data to improve team efficiency.",
+ apps=['clickup']
+)
+
+# Task to analyze and optimize task distribution
+task_analysis = Task(
+ description="""
+ Search for all tasks assigned to team members in the last 30 days,
+ analyze completion patterns, and create optimization recommendations
+ """,
+ agent=task_analyst,
+ expected_output="Task analysis report with optimization recommendations"
+)
+
+crew = Crew(
+ agents=[task_analyst],
+ tasks=[task_analysis]
+)
+
+crew.kickoff()
+```
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل ClickUp أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/databricks.mdx b/docs/v1.15.1/ar/enterprise/integrations/databricks.mdx
new file mode 100644
index 000000000..270f95e5e
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/databricks.mdx
@@ -0,0 +1,123 @@
+---
+title: تكامل Databricks
+description: "اربط وكلاء CrewAI بـ Databricks Genie وSQL وUnity Catalog Functions وVector Search عبر خوادم MCP المُدارة من Databricks."
+icon: "layer-group"
+mode: "wide"
+---
+
+## نظرة عامة
+
+اربط وكلاء CrewAI مباشرةً بمساحة عمل Databricks الخاصة بك عبر [خوادم MCP المُدارة من Databricks](https://docs.databricks.com/aws/en/generative-ai/mcp/managed-mcp). يتيح تكامل Databricks لوكلائك طرح أسئلة بلغة طبيعية باستخدام **Genie**، وتنفيذ **SQL** خاضع للحوكمة، واستدعاء **Unity Catalog Functions**، واسترجاع المستندات باستخدام **Vector Search** — كل ذلك دون كتابة أو استضافة أي كود موصِّل، مع تطبيق أذونات Unity Catalog في كل استدعاء.
+
+في الخلفية، يُعدّ تكامل Databricks غلافًا مُدارًا حول دعم [خوادم MCP المخصصة](/ar/enterprise/guides/custom-mcp-server) في CrewAI. تكشف Databricks عن كل قدرة كنقطة نهاية [Model Context Protocol](https://modelcontextprotocol.io/) خاصة بها، ويتصل بها CrewAI بأمان نيابةً عنك. ولأن كل خادم يُضاف بشكل منفصل، يمكنك تفعيل القدرات التي تحتاجها فرقك (crews) بالضبط.
+
+## القدرات الرئيسية
+
+
+
+ اطرح أسئلة بلغة طبيعية واحصل على إجابات مستندة إلى بياناتك باستخدام [Genie](https://docs.databricks.com/aws/en/genie/)، الذي يستعلم من Genie Spaces وUnity Catalog ويوفّر روابط تعود إلى واجهة Databricks.
+
+
+ نفّذ SQL خاضعًا للحوكمة على مستودعات Databricks لديك للاستعلام عن البيانات وتحويلها وإنشاء خطوط أنابيب البيانات مباشرةً من وكلائك.
+
+
+ استدعِ [دوال Unity Catalog](https://docs.databricks.com/aws/en/udf/unity-catalog) لتنفيذ SQL مُعرّف مسبقًا ومنطق أعمال مخصّص كأدوات قابلة لإعادة الاستخدام وخاضعة للحوكمة.
+
+
+ استرجع المستندات ذات الصلة لسير عمل RAG والمعرفة من فهارس [Mosaic AI Vector Search](https://docs.databricks.com/aws/en/generative-ai/vector-search) باستخدام التشابه الدلالي.
+
+
+
+تعمل جميع الخوادم خلف Unity AI Gateway وتطبّق ضوابط الوصول في Unity Catalog، بحيث لا يرى وكلاؤك سوى البيانات والأدوات المصرَّح لهم باستخدامها.
+
+## المتطلبات المسبقة
+
+قبل استخدام تكامل Databricks، تأكّد من توفّر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) باشتراك نشط
+- مساحة عمل Databricks تحتوي على القدرات التي تريد كشفها (Genie Spaces، مستودعات SQL، دوال Unity Catalog، أو فهارس Vector Search)
+- [امتيازات Unity Catalog](https://docs.databricks.com/aws/en/data-governance/unity-catalog) المناسبة على الكائنات الأساسية
+- اسم مضيف مساحة عمل Databricks الخاص بك (مثال: `your-workspace.cloud.databricks.com`)
+
+## خوادم MCP المُدارة من Databricks
+
+تنشر Databricks خادم MCP مُدارًا منفصلًا لكل قدرة. يكشف CrewAI عنها كاتصالات فردية، يُهيَّأ كل منها باستخدام مضيف مساحة العمل ومعرّفات Unity Catalog ذات الصلة. تتبع نقاط النهاية الأنماط التالية:
+
+| الخادم | الوظيفة | نمط عنوان MCP |
+|--------|---------|---------------|
+| **Genie** | أسئلة وأجوبة بلغة طبيعية على Genie Space | `https:///api/2.0/mcp/genie/{genie_space_id}` |
+| **Databricks SQL** | تنفيذ SQL على مستودعاتك | `https:///api/2.0/mcp/sql` |
+| **Unity Catalog Functions** | تشغيل دوال UC المسجّلة | `https:///api/2.0/mcp/functions/{catalog}/{schema}` |
+| **Vector Search** | الاستعلام من فهرس Vector Search | `https:///api/2.0/mcp/vector-search/{catalog}/{schema}` |
+
+
+لا حاجة لإنشاء عناوين URL هذه يدويًا — يُنشئ CrewAI كل نقطة نهاية من مضيف مساحة العمل والمعرّفات (Genie Space ID، أو catalog/schema) التي تقدّمها عند تهيئة الاتصال. للاطّلاع على المواصفات الكاملة وأحدث تفاصيل نقاط النهاية، راجع [وثائق MCP المُدارة من Databricks](https://docs.databricks.com/aws/en/generative-ai/mcp/managed-mcp).
+
+
+## ربط Databricks في CrewAI AMP
+
+
+
+
+
+تظهر كل قدرة من قدرات Databricks — **Databricks Genie** و**Databricks SQL** و**Databricks Unity Catalog Functions** و**Databricks Vector Search** — كخادم MCP خاص بها ضمن مجموعة Databricks في صفحة **Tools & Integrations**. هيّئ ما تحتاجه:
+
+
+
+ انتقل إلى **Tools & Integrations** في الشريط الجانبي الأيسر في CrewAI AMP وحدِّد مجموعة **Databricks** في قائمة Connections. سترى خوادم Genie وSQL وUnity Catalog Functions وVector Search مُدرجة أسفلها.
+
+
+
+ انقر على **Configure** بجوار القدرة التي تريد تفعيلها وقدّم تفاصيل الاتصال الخاصة بها:
+
+ - **Workspace Host** — اسم مضيف مساحة عمل Databricks الخاص بك (مثال: `my-workspace.cloud.databricks.com`).
+ - **Genie** — **Genie Space ID** المراد الاستعلام عنه.
+ - **Unity Catalog Functions** — الـ **catalog** والـ **schema** اللذان يحتويان على دوالك.
+ - **Vector Search** — الـ **catalog** والـ **schema** اللذان يحتويان على الفهرس.
+ - **Databricks SQL** — لا توجد معرّفات إضافية؛ تُنفَّذ الاستعلامات على مستودعات SQL في مساحة عملك.
+
+
+
+ اختر كيف يصادق CrewAI على Databricks. يُوصى باستخدام **OAuth**.
+
+ - **Use OAuth** — اتصل بأمان باستخدام OAuth 2.0. يصادق كل مستخدم على حدة، وتُصدر Databricks رموزًا (tokens) محدّدة النطاق للقدرة (`genie` أو `sql` أو `unity-catalog` أو `vector-search`). يتولّى CrewAI تدفّق التفويض ويُجدّد الرموز تلقائيًا.
+ - **Use personal access token** — صادِق باستخدام [رمز وصول شخصي من Databricks](https://docs.databricks.com/aws/en/dev-tools/auth/pat). استخدم هوية بأقل الامتيازات للحدّ من التعرّض.
+
+
+
+ أكمل المصادقة. بمجرد الاتصال، تصبح أدوات الخادم متاحة لفرقك. كرّر العملية لأي قدرات Databricks أخرى تريد تفعيلها.
+
+
+
+
+لأن كل قدرة هي اتصال منفصل، يمكنك المزج والمطابقة — على سبيل المثال، فعّل Genie وVector Search لفريق بحث، مع حجز SQL وUnity Catalog Functions لفريق هندسة البيانات. تتيح لك إعدادات الرؤية (Visibility) التحكّم في أعضاء الفريق الذين يمكنهم استخدام كل منها.
+
+
+## استخدام أدوات Databricks في فرقك
+
+بمجرد الاتصال، تظهر الأدوات التي يكشفها كل خادم MCP جنبًا إلى جنب مع الاتصالات المدمجة في صفحة **Tools & Integrations**. يمكنك:
+
+- **إسناد الأدوات إلى الوكلاء** في فرقك تمامًا مثل أي أداة أخرى في CrewAI.
+- **إدارة الرؤية** للتحكّم في أعضاء الفريق الذين يمكنهم استخدام كل اتصال.
+- **تعديل أو إزالة** أي اتصال في أي وقت من قائمة Connections.
+
+يمكن لوكلائك الآن طلب إجابات مستندة من Genie، وتنفيذ SQL على مستودعاتك، واستدعاء دوال Unity Catalog، والبحث في فهارس Vector Search — مع تدفّق النتائج تلقائيًا إلى استدلالهم.
+
+
+تطبّق Databricks الحوكمة عبر Unity Catalog وUnity AI Gateway: لا يمكن للمستخدم اكتشاف الأدوات واستدعاؤها إلا تلك المصرَّح بها لهوية مساحة عمله. إذا فشل استدعاء أداة، فتأكّد من أن المستخدم المتصل (أو هوية الرمز) يمتلك امتيازات Unity Catalog المطلوبة على Genie Space أو المستودع أو الدالة أو الفهرس. تُنفَّذ بعض استعلامات Genie وSQL بشكل غير متزامن وقد تستغرق لحظة لإرجاع النتائج.
+
+
+## مزيد من المعلومات
+
+
+
+ وثائق Databricks الرسمية لخوادم MCP المُدارة Genie وSQL وUnity Catalog Functions وVector Search.
+
+
+ تعرّف على كيفية اتصال CrewAI بأي خادم MCP، وهو الأساس الذي يُبنى عليه تكامل Databricks.
+
+
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في تهيئة تكامل Databricks أو في حل المشكلات.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/github.mdx b/docs/v1.15.1/ar/enterprise/integrations/github.mdx
new file mode 100644
index 000000000..7737e6c3c
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/github.mdx
@@ -0,0 +1,330 @@
+---
+title: تكامل GitHub
+description: "إدارة المستودعات والمشكلات مع تكامل GitHub لـ CrewAI."
+icon: "github"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة المستودعات والمشكلات والإصدارات عبر GitHub. أنشئ المشكلات وحدّثها، وأدر الإصدارات، وتتبع تطور المشاريع، وبسّط سير عمل تطوير البرمجيات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل GitHub، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب GitHub بصلاحيات المستودع المناسبة
+- ربط حساب GitHub الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل GitHub
+
+### 1. ربط حساب GitHub الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **GitHub** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة المستودعات والمشكلات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** إنشاء مشكلة في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
+ - `title` (string, مطلوب): عنوان المشكلة - حدد عنوان المشكلة المراد إنشاؤها.
+ - `body` (string, اختياري): محتوى المشكلة - حدد محتوى نص المشكلة المراد إنشاؤها.
+ - `assignees` (string, اختياري): المكلّفون - حدد اسم (أسماء) تسجيل الدخول في GitHub للمكلّفين كمصفوفة من السلاسل النصية لهذه المشكلة. (مثال: `["octocat"]`).
+
+
+
+
+ **الوصف:** تحديث مشكلة في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
+ - `issue_number` (string, مطلوب): رقم المشكلة - حدد رقم المشكلة المراد تحديثها.
+ - `title` (string, مطلوب): عنوان المشكلة - حدد عنوان المشكلة المراد تحديثها.
+ - `body` (string, اختياري): محتوى المشكلة - حدد محتوى نص المشكلة المراد تحديثها.
+ - `assignees` (string, اختياري): المكلّفون - حدد اسم (أسماء) تسجيل الدخول في GitHub للمكلّفين كمصفوفة من السلاسل النصية لهذه المشكلة. (مثال: `["octocat"]`).
+ - `state` (string, اختياري): الحالة - حدد الحالة المحدّثة للمشكلة.
+ - الخيارات: `open`, `closed`
+
+
+
+
+ **الوصف:** الحصول على مشكلة بواسطة الرقم في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
+ - `issue_number` (string, مطلوب): رقم المشكلة - حدد رقم المشكلة المراد جلبها.
+
+
+
+
+ **الوصف:** قفل مشكلة في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
+ - `issue_number` (string, مطلوب): رقم المشكلة - حدد رقم المشكلة المراد قفلها.
+ - `lock_reason` (string, مطلوب): سبب القفل - حدد سبب قفل محادثة المشكلة أو طلب السحب.
+ - الخيارات: `off-topic`, `too heated`, `resolved`, `spam`
+
+
+
+
+ **الوصف:** البحث عن المشكلات في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذه المشكلة. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذه المشكلة.
+ - `filter` (object, مطلوب): فلتر بصيغة التعبير العادي المنفصل - OR لمجموعات AND من شروط فردية.
+ ```json
+ {
+ "operator": "OR",
+ "conditions": [
+ {
+ "operator": "AND",
+ "conditions": [
+ {
+ "field": "assignee",
+ "operator": "$stringExactlyMatches",
+ "value": "octocat"
+ }
+ ]
+ }
+ ]
+ }
+ ```
+ الحقول المتاحة: `assignee`, `creator`, `mentioned`, `labels`
+
+
+
+
+ **الوصف:** إنشاء إصدار في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
+ - `tag_name` (string, مطلوب): الاسم - حدد اسم وسم الإصدار المراد إنشاؤه. (مثال: "v1.0.0").
+ - `target_commitish` (string, اختياري): الهدف - حدد هدف الإصدار. يمكن أن يكون اسم فرع أو SHA لعملية إيداع. الافتراضي هو الفرع الرئيسي. (مثال: "master").
+ - `body` (string, اختياري): المحتوى - حدد وصفاً لهذا الإصدار.
+ - `draft` (string, اختياري): مسودة - حدد ما إذا كان الإصدار المُنشأ يجب أن يكون مسودة (غير منشور).
+ - الخيارات: `true`, `false`
+ - `prerelease` (string, اختياري): إصدار تجريبي - حدد ما إذا كان الإصدار المُنشأ يجب أن يكون إصداراً تجريبياً.
+ - الخيارات: `true`, `false`
+ - `discussion_category_name` (string, اختياري): اسم فئة المناقشة - إذا حُدد، يتم إنشاء مناقشة من الفئة المحددة وربطها بالإصدار.
+ - `generate_release_notes` (string, اختياري): ملاحظات الإصدار - حدد ما إذا كان يجب إنشاء ملاحظات الإصدار تلقائياً.
+ - الخيارات: `true`, `false`
+
+
+
+
+ **الوصف:** تحديث إصدار في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
+ - `id` (string, مطلوب): معرّف الإصدار - حدد معرّف الإصدار المراد تحديثه.
+ - `tag_name` (string, اختياري): الاسم - حدد اسم وسم الإصدار المراد تحديثه. (مثال: "v1.0.0").
+ - `target_commitish` (string, اختياري): الهدف - حدد هدف الإصدار. يمكن أن يكون اسم فرع أو SHA لعملية إيداع. الافتراضي هو الفرع الرئيسي. (مثال: "master").
+ - `body` (string, اختياري): المحتوى - حدد وصفاً لهذا الإصدار.
+ - `draft` (string, اختياري): مسودة - حدد ما إذا كان الإصدار يجب أن يكون مسودة (غير منشور).
+ - الخيارات: `true`, `false`
+ - `prerelease` (string, اختياري): إصدار تجريبي - حدد ما إذا كان الإصدار يجب أن يكون إصداراً تجريبياً.
+ - الخيارات: `true`, `false`
+ - `discussion_category_name` (string, اختياري): اسم فئة المناقشة - إذا حُدد، يتم إنشاء مناقشة من الفئة المحددة وربطها بالإصدار.
+ - `generate_release_notes` (string, اختياري): ملاحظات الإصدار - حدد ما إذا كان يجب إنشاء ملاحظات الإصدار تلقائياً.
+ - الخيارات: `true`, `false`
+
+
+
+
+ **الوصف:** الحصول على إصدار بواسطة المعرّف في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
+ - `id` (string, مطلوب): معرّف الإصدار - حدد معرّف الإصدار المراد جلبه.
+
+
+
+
+ **الوصف:** الحصول على إصدار بواسطة اسم الوسم في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
+ - `tag_name` (string, مطلوب): الاسم - حدد وسم الإصدار المراد جلبه. (مثال: "v1.0.0").
+
+
+
+
+ **الوصف:** حذف إصدار في GitHub.
+
+ **المعاملات:**
+ - `owner` (string, مطلوب): المالك - حدد اسم مالك الحساب للمستودع المرتبط بهذا الإصدار. (مثال: "abc").
+ - `repo` (string, مطلوب): المستودع - حدد اسم المستودع المرتبط بهذا الإصدار.
+ - `id` (string, مطلوب): معرّف الإصدار - حدد معرّف الإصدار المراد حذفه.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ GitHub
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Github capabilities
+github_agent = Agent(
+ role="Repository Manager",
+ goal="Manage GitHub repositories, issues, and releases efficiently",
+ backstory="An AI assistant specialized in repository management and issue tracking.",
+ apps=['github'] # All Github actions will be available
+)
+
+# Task to create a new issue
+create_issue_task = Task(
+ description="Create a bug report issue for the login functionality in the main repository",
+ agent=github_agent,
+ expected_output="Issue created successfully with issue number"
+)
+
+# Run the task
+crew = Crew(
+ agents=[github_agent],
+ tasks=[create_issue_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات GitHub محددة
+
+```python
+
+issue_manager = Agent(
+ role="Issue Manager",
+ goal="Create and manage GitHub issues efficiently",
+ backstory="An AI assistant that focuses on issue tracking and management.",
+ apps=['github/create_issue']
+)
+
+# Task to manage issue workflow
+issue_workflow = Task(
+ description="Create a feature request issue and assign it to the development team",
+ agent=issue_manager,
+ expected_output="Feature request issue created and assigned successfully"
+)
+
+crew = Crew(
+ agents=[issue_manager],
+ tasks=[issue_workflow]
+)
+
+crew.kickoff()
+```
+
+### إدارة الإصدارات
+
+```python
+from crewai import Agent, Task, Crew
+
+release_manager = Agent(
+ role="Release Manager",
+ goal="Manage software releases and versioning",
+ backstory="An experienced release manager who handles version control and release processes.",
+ apps=['github']
+)
+
+# Task to create a new release
+release_task = Task(
+ description="""
+ Create a new release v2.1.0 for the project with:
+ - Auto-generated release notes
+ - Target the main branch
+ - Include a description of new features and bug fixes
+ """,
+ agent=release_manager,
+ expected_output="Release v2.1.0 created successfully with release notes"
+)
+
+crew = Crew(
+ agents=[release_manager],
+ tasks=[release_task]
+)
+
+crew.kickoff()
+```
+
+### تتبع المشكلات وإدارتها
+
+```python
+from crewai import Agent, Task, Crew
+
+project_coordinator = Agent(
+ role="Project Coordinator",
+ goal="Track and coordinate project issues and development progress",
+ backstory="An AI assistant that helps coordinate development work and track project progress.",
+ apps=['github']
+)
+
+# Complex task involving multiple GitHub operations
+coordination_task = Task(
+ description="""
+ 1. Search for all open issues assigned to the current milestone
+ 2. Identify overdue issues and update their priority labels
+ 3. Create a weekly progress report issue
+ 4. Lock resolved issues that have been inactive for 30 days
+ """,
+ agent=project_coordinator,
+ expected_output="Project coordination completed with progress report and issue management"
+)
+
+crew = Crew(
+ agents=[project_coordinator],
+ tasks=[coordination_task]
+)
+
+crew.kickoff()
+```
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل GitHub أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/gmail.mdx b/docs/v1.15.1/ar/enterprise/integrations/gmail.mdx
new file mode 100644
index 000000000..3b4db3fff
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/gmail.mdx
@@ -0,0 +1,302 @@
+---
+title: تكامل Gmail
+description: "إدارة البريد الإلكتروني وجهات الاتصال مع تكامل Gmail لـ CrewAI."
+icon: "envelope"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة رسائل البريد الإلكتروني وجهات الاتصال والمسودات عبر Gmail. أرسل رسائل البريد الإلكتروني، وابحث في الرسائل، وأدر جهات الاتصال، وأنشئ المسودات، وبسّط اتصالات البريد الإلكتروني باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Gmail، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Gmail بالصلاحيات المناسبة
+- ربط حساب Gmail الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Gmail
+
+### 1. ربط حساب Gmail الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Gmail** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة البريد الإلكتروني وجهات الاتصال
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** استرجاع قائمة بالرسائل.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
+ - `q` (string, اختياري): استعلام بحث لتصفية الرسائل (مثال: 'from:someone@example.com is:unread').
+ - `maxResults` (integer, اختياري): الحد الأقصى لعدد الرسائل المُرجعة (1-500). (الافتراضي: 100)
+ - `pageToken` (string, اختياري): رمز الصفحة لاسترجاع صفحة محددة من النتائج.
+ - `labelIds` (array, اختياري): إرجاع الرسائل ذات التصنيفات التي تطابق جميع معرّفات التصنيف المحددة فقط.
+ - `includeSpamTrash` (boolean, اختياري): تضمين رسائل البريد العشوائي والمحذوفات في النتائج. (الافتراضي: false)
+
+
+
+
+ **الوصف:** إرسال بريد إلكتروني.
+
+ **المعاملات:**
+ - `to` (string, مطلوب): عنوان البريد الإلكتروني للمستلم.
+ - `subject` (string, مطلوب): سطر موضوع البريد الإلكتروني.
+ - `body` (string, مطلوب): محتوى رسالة البريد الإلكتروني.
+ - `userId` (string, اختياري): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
+ - `cc` (string, اختياري): عناوين نسخة كربونية (مفصولة بفواصل).
+ - `bcc` (string, اختياري): عناوين نسخة كربونية مخفية (مفصولة بفواصل).
+ - `from` (string, اختياري): عنوان المرسل (إذا كان مختلفاً عن المستخدم المصادق عليه).
+ - `replyTo` (string, اختياري): عنوان الرد.
+ - `threadId` (string, اختياري): معرّف السلسلة إذا كان الرد على محادثة موجودة.
+
+
+
+
+ **الوصف:** حذف بريد إلكتروني بواسطة المعرّف.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه.
+ - `id` (string, مطلوب): معرّف الرسالة المراد حذفها.
+
+
+
+
+ **الوصف:** إنشاء مسودة بريد إلكتروني جديدة.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه.
+ - `message` (object, مطلوب): كائن الرسالة الذي يحتوي على محتوى المسودة.
+ - `raw` (string, مطلوب): رسالة البريد الإلكتروني بترميز base64url.
+
+
+
+
+ **الوصف:** استرجاع رسالة محددة بواسطة المعرّف.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
+ - `id` (string, مطلوب): معرّف الرسالة المراد استرجاعها.
+ - `format` (string, اختياري): صيغة إرجاع الرسالة. الخيارات: "full", "metadata", "minimal", "raw". (الافتراضي: "full")
+ - `metadataHeaders` (array, اختياري): عند التحديد وكانت الصيغة METADATA، يتم تضمين الترويسات المحددة فقط.
+
+
+
+
+ **الوصف:** استرجاع مرفق رسالة.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
+ - `messageId` (string, مطلوب): معرّف الرسالة التي تحتوي على المرفق.
+ - `id` (string, مطلوب): معرّف المرفق المراد استرجاعه.
+
+
+
+
+ **الوصف:** استرجاع سلسلة بريد إلكتروني محددة بواسطة المعرّف.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
+ - `id` (string, مطلوب): معرّف السلسلة المراد استرجاعها.
+ - `format` (string, اختياري): صيغة إرجاع الرسائل. الخيارات: "full", "metadata", "minimal". (الافتراضي: "full")
+ - `metadataHeaders` (array, اختياري): عند التحديد وكانت الصيغة METADATA، يتم تضمين الترويسات المحددة فقط.
+
+
+
+
+ **الوصف:** تعديل التصنيفات المُطبقة على سلسلة.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
+ - `id` (string, مطلوب): معرّف السلسلة المراد تعديلها.
+ - `addLabelIds` (array, اختياري): قائمة بمعرّفات التصنيفات المراد إضافتها لهذه السلسلة.
+ - `removeLabelIds` (array, اختياري): قائمة بمعرّفات التصنيفات المراد إزالتها من هذه السلسلة.
+
+
+
+
+ **الوصف:** نقل سلسلة إلى سلة المحذوفات.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
+ - `id` (string, مطلوب): معرّف السلسلة المراد حذفها.
+
+
+
+
+ **الوصف:** إزالة سلسلة من سلة المحذوفات.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم أو 'me' للمستخدم المصادق عليه. (الافتراضي: "me")
+ - `id` (string, مطلوب): معرّف السلسلة المراد استعادتها.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Gmail
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Gmail capabilities
+gmail_agent = Agent(
+ role="Email Manager",
+ goal="Manage email communications and messages efficiently",
+ backstory="An AI assistant specialized in email management and communication.",
+ apps=['gmail'] # All Gmail actions will be available
+)
+
+# Task to send a follow-up email
+send_email_task = Task(
+ description="Send a follow-up email to john@example.com about the project update meeting",
+ agent=gmail_agent,
+ expected_output="Email sent successfully with confirmation"
+)
+
+# Run the task
+crew = Crew(
+ agents=[gmail_agent],
+ tasks=[send_email_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات Gmail محددة
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with specific Gmail actions only
+email_coordinator = Agent(
+ role="Email Coordinator",
+ goal="Coordinate email communications and manage drafts",
+ backstory="An AI assistant that focuses on email coordination and draft management.",
+ apps=[
+ 'gmail/send_email',
+ 'gmail/fetch_emails',
+ 'gmail/create_draft'
+ ]
+)
+
+# Task to prepare and send emails
+email_coordination = Task(
+ description="Search for emails from the marketing team, create a summary draft, and send it to stakeholders",
+ agent=email_coordinator,
+ expected_output="Summary email sent to stakeholders"
+)
+
+crew = Crew(
+ agents=[email_coordinator],
+ tasks=[email_coordination]
+)
+
+crew.kickoff()
+```
+
+### البحث في البريد الإلكتروني وتحليله
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with Gmail search and analysis capabilities
+email_analyst = Agent(
+ role="Email Analyst",
+ goal="Analyze email patterns and provide insights",
+ backstory="An AI assistant that analyzes email data to provide actionable insights.",
+ apps=['gmail/fetch_emails', 'gmail/get_message'] # Specific actions for email analysis
+)
+
+# Task to analyze email patterns
+analysis_task = Task(
+ description="""
+ Search for all unread emails from the last 7 days,
+ categorize them by sender domain,
+ and create a summary report of communication patterns
+ """,
+ agent=email_analyst,
+ expected_output="Email analysis report with communication patterns and recommendations"
+)
+
+crew = Crew(
+ agents=[email_analyst],
+ tasks=[analysis_task]
+)
+
+crew.kickoff()
+```
+
+### إدارة السلاسل
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with Gmail thread management capabilities
+thread_manager = Agent(
+ role="Thread Manager",
+ goal="Organize and manage email threads efficiently",
+ backstory="An AI assistant that specializes in email thread organization and management.",
+ apps=[
+ 'gmail/fetch_thread',
+ 'gmail/modify_thread',
+ 'gmail/trash_thread'
+ ]
+)
+
+# Task to organize email threads
+thread_task = Task(
+ description="""
+ 1. Fetch all threads from the last month
+ 2. Apply appropriate labels to organize threads by project
+ 3. Archive or trash threads that are no longer relevant
+ """,
+ agent=thread_manager,
+ expected_output="Email threads organized with appropriate labels and cleanup completed"
+)
+
+crew = Crew(
+ agents=[thread_manager],
+ tasks=[thread_task]
+)
+
+crew.kickoff()
+```
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Gmail أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/google_calendar.mdx b/docs/v1.15.1/ar/enterprise/integrations/google_calendar.mdx
new file mode 100644
index 000000000..f82b6cb18
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/google_calendar.mdx
@@ -0,0 +1,366 @@
+---
+title: تكامل Google Calendar
+description: "إدارة الأحداث والجداول الزمنية مع تكامل Google Calendar لـ CrewAI."
+icon: "calendar"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة أحداث التقويم والجداول الزمنية والتوفر عبر Google Calendar. أنشئ الأحداث وحدّثها، وأدر الحضور، وتحقق من التوفر، وبسّط سير عمل الجدولة باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Google Calendar، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Google مع إمكانية الوصول إلى Google Calendar
+- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Google Calendar
+
+### 1. ربط حساب Google الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Google Calendar** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى التقويم
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** الحصول على توفر التقويم (معلومات مشغول/متاح).
+
+ **المعاملات:**
+ - `timeMin` (string, مطلوب): وقت البداية (بصيغة RFC3339)
+ - `timeMax` (string, مطلوب): وقت النهاية (بصيغة RFC3339)
+ - `items` (array, مطلوب): معرّفات التقاويم المراد التحقق منها
+ ```json
+ [
+ {
+ "id": "calendar_id"
+ }
+ ]
+ ```
+ - `timeZone` (string, اختياري): المنطقة الزمنية المستخدمة في الاستجابة. الافتراضي هو UTC.
+ - `groupExpansionMax` (integer, اختياري): الحد الأقصى لعدد معرّفات التقاويم لمجموعة واحدة. الحد الأقصى: 100
+ - `calendarExpansionMax` (integer, اختياري): الحد الأقصى لعدد التقاويم لتقديم معلومات التوفر. الحد الأقصى: 50
+
+
+
+
+ **الوصف:** إنشاء حدث جديد في التقويم المحدد.
+
+ **المعاملات:**
+ - `calendarId` (string, مطلوب): معرّف التقويم (استخدم 'primary' للتقويم الرئيسي)
+ - `summary` (string, مطلوب): عنوان/ملخص الحدث
+ - `start_dateTime` (string, مطلوب): وقت البداية بصيغة RFC3339 (مثال: 2024-01-20T10:00:00-07:00)
+ - `end_dateTime` (string, مطلوب): وقت النهاية بصيغة RFC3339
+ - `description` (string, اختياري): وصف الحدث
+ - `timeZone` (string, اختياري): المنطقة الزمنية (مثال: America/Los_Angeles)
+ - `location` (string, اختياري): الموقع الجغرافي للحدث كنص حر.
+ - `attendees` (array, اختياري): قائمة الحضور للحدث.
+ ```json
+ [
+ {
+ "email": "attendee@example.com",
+ "displayName": "Attendee Name",
+ "optional": false
+ }
+ ]
+ ```
+ - `reminders` (object, اختياري): معلومات حول تذكيرات الحدث.
+ ```json
+ {
+ "useDefault": true,
+ "overrides": [
+ {
+ "method": "email",
+ "minutes": 15
+ }
+ ]
+ }
+ ```
+ - `conferenceData` (object, اختياري): المعلومات المتعلقة بالمؤتمر، مثل تفاصيل مؤتمر Google Meet.
+ ```json
+ {
+ "createRequest": {
+ "requestId": "unique-request-id",
+ "conferenceSolutionKey": {
+ "type": "hangoutsMeet"
+ }
+ }
+ }
+ ```
+ - `visibility` (string, اختياري): ظهور الحدث. الخيارات: default, public, private, confidential. الافتراضي: default
+ - `transparency` (string, اختياري): ما إذا كان الحدث يحجب الوقت في التقويم. الخيارات: opaque, transparent. الافتراضي: opaque
+
+
+
+
+ **الوصف:** استرجاع الأحداث للتقويم المحدد.
+
+ **المعاملات:**
+ - `calendarId` (string, مطلوب): معرّف التقويم (استخدم 'primary' للتقويم الرئيسي)
+ - `timeMin` (string, اختياري): الحد الأدنى للأحداث (بصيغة RFC3339)
+ - `timeMax` (string, اختياري): الحد الأعلى للأحداث (بصيغة RFC3339)
+ - `maxResults` (integer, اختياري): الحد الأقصى لعدد الأحداث (الافتراضي 10). الحد الأدنى: 1، الحد الأقصى: 2500
+ - `orderBy` (string, اختياري): ترتيب الأحداث في النتيجة. الخيارات: startTime, updated. الافتراضي: startTime
+ - `singleEvents` (boolean, اختياري): ما إذا كان يجب توسيع الأحداث المتكررة إلى نُسخ فردية. الافتراضي: true
+ - `showDeleted` (boolean, اختياري): ما إذا كان يجب تضمين الأحداث المحذوفة. الافتراضي: false
+ - `showHiddenInvitations` (boolean, اختياري): ما إذا كان يجب تضمين الدعوات المخفية. الافتراضي: false
+ - `q` (string, اختياري): مصطلحات بحث نصية حرة للعثور على الأحداث المطابقة في أي حقل.
+ - `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
+ - `timeZone` (string, اختياري): المنطقة الزمنية المستخدمة في الاستجابة.
+ - `updatedMin` (string, اختياري): الحد الأدنى لوقت آخر تعديل للحدث (بصيغة RFC3339) للتصفية.
+ - `iCalUID` (string, اختياري): يحدد معرّف حدث بصيغة iCalendar ليتم تقديمه في الاستجابة.
+
+
+
+
+ **الوصف:** تحديث حدث موجود.
+
+ **المعاملات:**
+ - `calendarId` (string, مطلوب): معرّف التقويم
+ - `eventId` (string, مطلوب): معرّف الحدث المراد تحديثه
+ - `summary` (string, اختياري): عنوان الحدث المحدّث
+ - `description` (string, اختياري): وصف الحدث المحدّث
+ - `start_dateTime` (string, اختياري): وقت البداية المحدّث
+ - `end_dateTime` (string, اختياري): وقت النهاية المحدّث
+
+
+
+
+ **الوصف:** حذف حدث محدد.
+
+ **المعاملات:**
+ - `calendarId` (string, مطلوب): معرّف التقويم
+ - `eventId` (string, مطلوب): معرّف الحدث المراد حذفه
+
+
+
+
+ **الوصف:** استرجاع قائمة تقاويم المستخدم.
+
+ **المعاملات:**
+ - `maxResults` (integer, اختياري): الحد الأقصى لعدد الإدخالات في صفحة نتائج واحدة. الحد الأدنى: 1
+ - `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
+ - `showDeleted` (boolean, اختياري): ما إذا كان يجب تضمين إدخالات قائمة التقويم المحذوفة. الافتراضي: false
+ - `showHidden` (boolean, اختياري): ما إذا كان يجب عرض الإدخالات المخفية. الافتراضي: false
+ - `minAccessRole` (string, اختياري): الحد الأدنى لدور الوصول للمستخدم. الخيارات: freeBusyReader, owner, reader, writer
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي للتقويم
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Google Calendar capabilities
+calendar_agent = Agent(
+ role="Schedule Manager",
+ goal="Manage calendar events and scheduling efficiently",
+ backstory="An AI assistant specialized in calendar management and scheduling coordination.",
+ apps=['google_calendar'] # All Google Calendar actions will be available
+)
+
+# Task to create a meeting
+create_meeting_task = Task(
+ description="Create a team standup meeting for tomorrow at 9 AM with the development team",
+ agent=calendar_agent,
+ expected_output="Meeting created successfully with Google Meet link"
+)
+
+# Run the task
+crew = Crew(
+ agents=[calendar_agent],
+ tasks=[create_meeting_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات التقويم المحددة
+
+```python
+meeting_coordinator = Agent(
+ role="Meeting Coordinator",
+ goal="Coordinate meetings and check availability",
+ backstory="An AI assistant that focuses on meeting scheduling and availability management.",
+ apps=['google_calendar/create_event', 'google_calendar/get_availability']
+)
+
+# Task to schedule a meeting with availability check
+schedule_meeting = Task(
+ description="Check availability for next week and schedule a project review meeting with stakeholders",
+ agent=meeting_coordinator,
+ expected_output="Meeting scheduled after checking availability of all participants"
+)
+
+crew = Crew(
+ agents=[meeting_coordinator],
+ tasks=[schedule_meeting]
+)
+
+crew.kickoff()
+```
+
+### إدارة الأحداث وتحديثاتها
+
+```python
+from crewai import Agent, Task, Crew
+
+event_manager = Agent(
+ role="Event Manager",
+ goal="Manage and update calendar events efficiently",
+ backstory="An experienced event manager who handles event logistics and updates.",
+ apps=['google_calendar']
+)
+
+# Task to manage event updates
+event_management = Task(
+ description="""
+ 1. List all events for this week
+ 2. Update any events that need location changes to include video conference links
+ 3. Check availability for upcoming meetings
+ """,
+ agent=event_manager,
+ expected_output="Weekly events updated with proper locations and availability checked"
+)
+
+crew = Crew(
+ agents=[event_manager],
+ tasks=[event_management]
+)
+
+crew.kickoff()
+```
+
+### التوفر وإدارة التقويم
+
+```python
+from crewai import Agent, Task, Crew
+
+availability_coordinator = Agent(
+ role="Availability Coordinator",
+ goal="Coordinate availability and manage calendars for scheduling",
+ backstory="An AI assistant that specializes in availability management and calendar coordination.",
+ apps=['google_calendar']
+)
+
+# Task to coordinate availability
+availability_task = Task(
+ description="""
+ 1. Get the list of available calendars
+ 2. Check availability for all calendars next Friday afternoon
+ 3. Create a team meeting for the first available 2-hour slot
+ 4. Include Google Meet link and send invitations
+ """,
+ agent=availability_coordinator,
+ expected_output="Team meeting scheduled based on availability with all team members invited"
+)
+
+crew = Crew(
+ agents=[availability_coordinator],
+ tasks=[availability_task]
+)
+
+crew.kickoff()
+```
+
+### سير عمل الجدولة الآلية
+
+```python
+from crewai import Agent, Task, Crew
+
+scheduling_automator = Agent(
+ role="Scheduling Automator",
+ goal="Automate scheduling workflows and calendar management",
+ backstory="An AI assistant that automates complex scheduling scenarios and calendar workflows.",
+ apps=['google_calendar']
+)
+
+# Complex scheduling automation task
+automation_task = Task(
+ description="""
+ 1. List all upcoming events for the next two weeks
+ 2. Identify any scheduling conflicts or back-to-back meetings
+ 3. Suggest optimal meeting times by checking availability
+ 4. Create buffer time between meetings where needed
+ 5. Update event descriptions with agenda items and meeting links
+ """,
+ agent=scheduling_automator,
+ expected_output="Calendar optimized with resolved conflicts, buffer times, and updated meeting details"
+)
+
+crew = Crew(
+ agents=[scheduling_automator],
+ tasks=[automation_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء المصادقة**
+
+- تأكد من أن حساب Google الخاص بك لديه الصلاحيات اللازمة للوصول إلى التقويم
+- تحقق من أن اتصال OAuth يتضمن جميع النطاقات المطلوبة لـ Google Calendar API
+- تحقق مما إذا كانت إعدادات مشاركة التقويم تسمح بمستوى الوصول المطلوب
+
+**مشاكل إنشاء الأحداث**
+
+- تحقق من صحة صيغ الوقت (صيغة RFC3339)
+- تأكد من صحة صيغة عناوين البريد الإلكتروني للحضور
+- تحقق من وجود التقويم المستهدف وإمكانية الوصول إليه
+- تحقق من صحة تحديد المناطق الزمنية
+
+**التوفر وتعارضات الوقت**
+
+- استخدم صيغة RFC3339 المناسبة لنطاقات الوقت عند التحقق من التوفر
+- تأكد من اتساق المناطق الزمنية عبر جميع العمليات
+- تحقق من صحة معرّفات التقاويم عند التحقق من تقاويم متعددة
+
+**تحديث الأحداث وحذفها**
+
+- تحقق من صحة معرّفات الأحداث ووجودها
+- تأكد من أن لديك صلاحيات التحرير للأحداث
+- تحقق من أن ملكية التقويم تسمح بالتعديلات
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Calendar
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/google_contacts.mdx b/docs/v1.15.1/ar/enterprise/integrations/google_contacts.mdx
new file mode 100644
index 000000000..d3627ec83
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/google_contacts.mdx
@@ -0,0 +1,493 @@
+---
+title: تكامل Google Contacts
+description: "إدارة جهات الاتصال والدليل مع تكامل Google Contacts لـ CrewAI."
+icon: "address-book"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة جهات الاتصال ومعلومات الدليل عبر Google Contacts. يمكنك الوصول إلى جهات الاتصال الشخصية، والبحث في أشخاص الدليل، وإنشاء معلومات الاتصال وتحديثها، وإدارة مجموعات جهات الاتصال باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Google Contacts، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Google مع إمكانية الوصول إلى Google Contacts
+- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Google Contacts
+
+### 1. ربط حساب Google الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Google Contacts** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى جهات الاتصال والدليل
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** استرجاع جهات اتصال المستخدم من Google Contacts.
+
+ **المعاملات:**
+ - `pageSize` (integer, اختياري): عدد جهات الاتصال المراد إرجاعها (الحد الأقصى 1000). الحد الأدنى: 1، الحد الأقصى: 1000
+ - `pageToken` (string, اختياري): رمز الصفحة المراد استرجاعها.
+ - `personFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'names,emailAddresses,phoneNumbers'). الافتراضي: names,emailAddresses,phoneNumbers
+ - `requestSyncToken` (boolean, اختياري): ما إذا كان يجب أن تتضمن الاستجابة رمز مزامنة. الافتراضي: false
+ - `sortOrder` (string, اختياري): ترتيب الفرز للاتصالات. الخيارات: LAST_MODIFIED_ASCENDING, LAST_MODIFIED_DESCENDING, FIRST_NAME_ASCENDING, LAST_NAME_ASCENDING
+
+
+
+
+ **الوصف:** البحث عن جهات اتصال باستخدام سلسلة استعلام.
+
+ **المعاملات:**
+ - `query` (string, مطلوب): سلسلة استعلام البحث
+ - `readMask` (string, مطلوب): الحقول المراد قراءتها (مثال: 'names,emailAddresses,phoneNumbers')
+ - `pageSize` (integer, اختياري): عدد النتائج المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 30
+ - `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
+ - `sources` (array, اختياري): المصادر المراد البحث فيها. الخيارات: READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_PROFILE. الافتراضي: READ_SOURCE_TYPE_CONTACT
+
+
+
+
+ **الوصف:** عرض قائمة الأشخاص في دليل المستخدم المصادق عليه.
+
+ **المعاملات:**
+ - `sources` (array, مطلوب): مصادر الدليل المراد البحث فيها. الخيارات: DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE, DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT. الافتراضي: DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE
+ - `pageSize` (integer, اختياري): عدد الأشخاص المراد إرجاعهم. الحد الأدنى: 1، الحد الأقصى: 1000
+ - `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
+ - `readMask` (string, اختياري): الحقول المراد قراءتها (مثال: 'names,emailAddresses')
+ - `requestSyncToken` (boolean, اختياري): ما إذا كان يجب أن تتضمن الاستجابة رمز مزامنة. الافتراضي: false
+ - `mergeSources` (array, اختياري): بيانات إضافية لدمجها في استجابات أشخاص الدليل. الخيارات: CONTACT
+
+
+
+
+ **الوصف:** البحث عن أشخاص في الدليل.
+
+ **المعاملات:**
+ - `query` (string, مطلوب): استعلام البحث
+ - `sources` (string, مطلوب): مصادر الدليل (استخدم 'DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE')
+ - `pageSize` (integer, اختياري): عدد النتائج المراد إرجاعها
+ - `readMask` (string, اختياري): الحقول المراد قراءتها
+
+
+
+
+ **الوصف:** عرض جهات الاتصال الأخرى (غير الموجودة في جهات الاتصال الشخصية).
+
+ **المعاملات:**
+ - `pageSize` (integer, اختياري): عدد جهات الاتصال المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 1000
+ - `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
+ - `readMask` (string, اختياري): الحقول المراد قراءتها
+ - `requestSyncToken` (boolean, اختياري): ما إذا كان يجب أن تتضمن الاستجابة رمز مزامنة. الافتراضي: false
+
+
+
+
+ **الوصف:** البحث في جهات الاتصال الأخرى.
+
+ **المعاملات:**
+ - `query` (string, مطلوب): استعلام البحث
+ - `readMask` (string, مطلوب): الحقول المراد قراءتها (مثال: 'names,emailAddresses')
+ - `pageSize` (integer, اختياري): عدد النتائج
+
+
+
+
+ **الوصف:** الحصول على معلومات الاتصال لشخص واحد بواسطة اسم المورد.
+
+ **المعاملات:**
+ - `resourceName` (string, مطلوب): اسم المورد للشخص المراد الحصول عليه (مثال: 'people/c123456789')
+ - `personFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'names,emailAddresses,phoneNumbers'). الافتراضي: names,emailAddresses,phoneNumbers
+
+
+
+
+ **الوصف:** إنشاء جهة اتصال جديدة في دفتر عناوين المستخدم.
+
+ **المعاملات:**
+ - `names` (array, اختياري): أسماء الشخص
+ ```json
+ [
+ {
+ "givenName": "John",
+ "familyName": "Doe",
+ "displayName": "John Doe"
+ }
+ ]
+ ```
+ - `emailAddresses` (array, اختياري): عناوين البريد الإلكتروني
+ ```json
+ [
+ {
+ "value": "john.doe@example.com",
+ "type": "work"
+ }
+ ]
+ ```
+ - `phoneNumbers` (array, اختياري): أرقام الهاتف
+ ```json
+ [
+ {
+ "value": "+1234567890",
+ "type": "mobile"
+ }
+ ]
+ ```
+ - `addresses` (array, اختياري): العناوين البريدية
+ ```json
+ [
+ {
+ "formattedValue": "123 Main St, City, State 12345",
+ "type": "home"
+ }
+ ]
+ ```
+ - `organizations` (array, اختياري): المؤسسات/الشركات
+ ```json
+ [
+ {
+ "name": "Company Name",
+ "title": "Job Title",
+ "type": "work"
+ }
+ ]
+ ```
+
+
+
+
+ **الوصف:** تحديث معلومات جهة اتصال موجودة.
+
+ **المعاملات:**
+ - `resourceName` (string, مطلوب): اسم المورد للشخص المراد تحديثه (مثال: 'people/c123456789')
+ - `updatePersonFields` (string, مطلوب): الحقول المراد تحديثها (مثال: 'names,emailAddresses,phoneNumbers')
+ - `names` (array, اختياري): أسماء الشخص
+ - `emailAddresses` (array, اختياري): عناوين البريد الإلكتروني
+ - `phoneNumbers` (array, اختياري): أرقام الهاتف
+
+
+
+
+ **الوصف:** حذف جهة اتصال من دفتر عناوين المستخدم.
+
+ **المعاملات:**
+ - `resourceName` (string, مطلوب): اسم المورد للشخص المراد حذفه (مثال: 'people/c123456789')
+
+
+
+
+ **الوصف:** الحصول على معلومات عن عدة أشخاص في طلب واحد.
+
+ **المعاملات:**
+ - `resourceNames` (array, مطلوب): أسماء موارد الأشخاص المراد الحصول عليهم. الحد الأقصى: 200 عنصر
+ - `personFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'names,emailAddresses,phoneNumbers'). الافتراضي: names,emailAddresses,phoneNumbers
+
+
+
+
+ **الوصف:** عرض مجموعات جهات اتصال المستخدم (التصنيفات).
+
+ **المعاملات:**
+ - `pageSize` (integer, اختياري): عدد مجموعات جهات الاتصال المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 1000
+ - `pageToken` (string, اختياري): رمز يحدد صفحة النتائج المراد إرجاعها.
+ - `groupFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'name,memberCount,clientData'). الافتراضي: name,memberCount
+
+
+
+
+ **الوصف:** الحصول على مجموعة جهات اتصال محددة بواسطة اسم المورد.
+
+ **المعاملات:**
+ - `resourceName` (string, مطلوب): اسم المورد لمجموعة جهات الاتصال (مثال: 'contactGroups/myContactGroup')
+ - `maxMembers` (integer, اختياري): الحد الأقصى لعدد الأعضاء المراد تضمينهم. الحد الأدنى: 0، الحد الأقصى: 20000
+ - `groupFields` (string, اختياري): الحقول المراد تضمينها (مثال: 'name,memberCount,clientData'). الافتراضي: name,memberCount
+
+
+
+
+ **الوصف:** إنشاء مجموعة جهات اتصال جديدة (تصنيف).
+
+ **المعاملات:**
+ - `name` (string, مطلوب): اسم مجموعة جهات الاتصال
+ - `clientData` (array, اختياري): بيانات خاصة بالعميل
+ ```json
+ [
+ {
+ "key": "data_key",
+ "value": "data_value"
+ }
+ ]
+ ```
+
+
+
+
+ **الوصف:** تحديث معلومات مجموعة جهات اتصال.
+
+ **المعاملات:**
+ - `resourceName` (string, مطلوب): اسم المورد لمجموعة جهات الاتصال (مثال: 'contactGroups/myContactGroup')
+ - `name` (string, مطلوب): اسم مجموعة جهات الاتصال
+ - `clientData` (array, اختياري): بيانات خاصة بالعميل
+ ```json
+ [
+ {
+ "key": "data_key",
+ "value": "data_value"
+ }
+ ]
+ ```
+
+
+
+
+ **الوصف:** حذف مجموعة جهات اتصال.
+
+ **المعاملات:**
+ - `resourceName` (string, مطلوب): اسم المورد لمجموعة جهات الاتصال المراد حذفها (مثال: 'contactGroups/myContactGroup')
+ - `deleteContacts` (boolean, اختياري): ما إذا كان يجب حذف جهات الاتصال في المجموعة أيضاً. الافتراضي: false
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Google Contacts
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Google Contacts capabilities
+contacts_agent = Agent(
+ role="Contact Manager",
+ goal="Manage contacts and directory information efficiently",
+ backstory="An AI assistant specialized in contact management and directory operations.",
+ apps=['google_contacts'] # All Google Contacts actions will be available
+)
+
+# Task to retrieve and organize contacts
+contact_management_task = Task(
+ description="Retrieve all contacts and organize them by company affiliation",
+ agent=contacts_agent,
+ expected_output="Contacts retrieved and organized by company with summary report"
+)
+
+# Run the task
+crew = Crew(
+ agents=[contacts_agent],
+ tasks=[contact_management_task]
+)
+
+crew.kickoff()
+```
+
+### البحث في الدليل وإدارته
+
+```python
+from crewai import Agent, Task, Crew
+
+directory_manager = Agent(
+ role="Directory Manager",
+ goal="Search and manage directory people and contacts",
+ backstory="An AI assistant that specializes in directory management and people search.",
+ apps=[
+ 'google_contacts/search_directory_people',
+ 'google_contacts/list_directory_people',
+ 'google_contacts/search_contacts'
+ ]
+)
+
+# Task to search and manage directory
+directory_task = Task(
+ description="Search for team members in the company directory and create a team contact list",
+ agent=directory_manager,
+ expected_output="Team directory compiled with contact information"
+)
+
+crew = Crew(
+ agents=[directory_manager],
+ tasks=[directory_task]
+)
+
+crew.kickoff()
+```
+
+### إنشاء جهات الاتصال وتحديثاتها
+
+```python
+from crewai import Agent, Task, Crew
+
+contact_curator = Agent(
+ role="Contact Curator",
+ goal="Create and update contact information systematically",
+ backstory="An AI assistant that maintains accurate and up-to-date contact information.",
+ apps=['google_contacts']
+)
+
+# Task to create and update contacts
+curation_task = Task(
+ description="""
+ 1. Search for existing contacts related to new business partners
+ 2. Create new contacts for partners not in the system
+ 3. Update existing contact information with latest details
+ 4. Organize contacts into appropriate groups
+ """,
+ agent=contact_curator,
+ expected_output="Contact database updated with new partners and organized groups"
+)
+
+crew = Crew(
+ agents=[contact_curator],
+ tasks=[curation_task]
+)
+
+crew.kickoff()
+```
+
+### إدارة مجموعات جهات الاتصال
+
+```python
+from crewai import Agent, Task, Crew
+
+group_organizer = Agent(
+ role="Contact Group Organizer",
+ goal="Organize contacts into meaningful groups and categories",
+ backstory="An AI assistant that specializes in contact organization and group management.",
+ apps=['google_contacts']
+)
+
+# Task to organize contact groups
+organization_task = Task(
+ description="""
+ 1. List all existing contact groups
+ 2. Analyze contact distribution across groups
+ 3. Create new groups for better organization
+ 4. Move contacts to appropriate groups based on their information
+ """,
+ agent=group_organizer,
+ expected_output="Contacts organized into logical groups with improved structure"
+)
+
+crew = Crew(
+ agents=[group_organizer],
+ tasks=[organization_task]
+)
+
+crew.kickoff()
+```
+
+### إدارة جهات الاتصال الشاملة
+
+```python
+from crewai import Agent, Task, Crew
+
+contact_specialist = Agent(
+ role="Contact Management Specialist",
+ goal="Provide comprehensive contact management across all sources",
+ backstory="An AI assistant that handles all aspects of contact management including personal, directory, and other contacts.",
+ apps=['google_contacts']
+)
+
+# Complex contact management task
+comprehensive_task = Task(
+ description="""
+ 1. Retrieve contacts from all sources (personal, directory, other)
+ 2. Search for duplicate contacts and merge information
+ 3. Update outdated contact information
+ 4. Create missing contacts for important stakeholders
+ 5. Organize contacts into meaningful groups
+ 6. Generate a comprehensive contact report
+ """,
+ agent=contact_specialist,
+ expected_output="Complete contact management performed with unified contact database and detailed report"
+)
+
+crew = Crew(
+ agents=[contact_specialist],
+ tasks=[comprehensive_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء الصلاحيات**
+
+- تأكد من أن حساب Google الخاص بك لديه الصلاحيات المناسبة للوصول إلى جهات الاتصال
+- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة لـ Google Contacts API
+- تحقق من منح صلاحيات الوصول للدليل لجهات اتصال المؤسسة
+
+**مشاكل صيغة اسم المورد**
+
+- تأكد من أن أسماء الموارد تتبع الصيغة الصحيحة (مثال: 'people/c123456789' لجهات الاتصال)
+- تحقق من أن أسماء موارد مجموعات جهات الاتصال تستخدم الصيغة 'contactGroups/groupId'
+- تأكد من وجود أسماء الموارد وإمكانية الوصول إليها
+
+**مشاكل البحث والاستعلام**
+
+- تأكد من صحة صيغة استعلامات البحث وعدم كونها فارغة
+- استخدم حقول readMask المناسبة للبيانات التي تحتاجها
+- تحقق من صحة تحديد مصادر البحث (جهات اتصال مقابل ملفات تعريف)
+
+**إنشاء جهات الاتصال وتحديثاتها**
+
+- تأكد من توفير الحقول المطلوبة عند إنشاء جهات الاتصال
+- تحقق من صحة صيغة عناوين البريد الإلكتروني وأرقام الهاتف
+- تأكد من أن معامل updatePersonFields يتضمن جميع الحقول التي يتم تحديثها
+
+**مشاكل الوصول إلى الدليل**
+
+- تأكد من أن لديك الصلاحيات المناسبة للوصول إلى دليل المؤسسة
+- تحقق من صحة تحديد مصادر الدليل
+- تأكد من أن مؤسستك تسمح بالوصول عبر API إلى معلومات الدليل
+
+**الترقيم والحدود**
+
+- انتبه لحدود حجم الصفحة (تختلف حسب نقطة النهاية)
+- استخدم pageToken للترقيم عبر مجموعات النتائج الكبيرة
+- احترم حدود معدل API وطبّق تأخيرات مناسبة
+
+**مجموعات جهات الاتصال والتنظيم**
+
+- تأكد من أن أسماء مجموعات جهات الاتصال فريدة عند إنشاء مجموعات جديدة
+- تحقق من وجود جهات الاتصال قبل إضافتها إلى المجموعات
+- تأكد من أن لديك صلاحيات تعديل مجموعات جهات الاتصال
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Contacts
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/google_docs.mdx b/docs/v1.15.1/ar/enterprise/integrations/google_docs.mdx
new file mode 100644
index 000000000..ea1cc4caf
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/google_docs.mdx
@@ -0,0 +1,550 @@
+---
+title: تكامل Google Docs
+description: "إنشاء المستندات وتحريرها مع تكامل Google Docs لـ CrewAI."
+icon: "file-lines"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إنشاء وتحرير وإدارة مستندات Google Docs مع معالجة النصوص والتنسيق. أتمت إنشاء المستندات، وأدرج النصوص واستبدلها، وأدر نطاقات المحتوى، وبسّط سير عمل المستندات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Google Docs، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Google مع إمكانية الوصول إلى Google Docs
+- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Google Docs
+
+### 1. ربط حساب Google الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Google Docs** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى المستندات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** إنشاء مستند Google جديد.
+
+ **المعاملات:**
+ - `title` (string, اختياري): عنوان المستند الجديد.
+
+
+
+
+ **الوصف:** الحصول على محتويات وبيانات وصفية لمستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند المراد استرجاعه.
+ - `includeTabsContent` (boolean, اختياري): ما إذا كان يجب تضمين محتوى علامات التبويب. الافتراضي هو `false`.
+ - `suggestionsViewMode` (string, اختياري): وضع عرض الاقتراحات المراد تطبيقه. القيم: `DEFAULT_FOR_CURRENT_ACCESS`, `PREVIEW_SUGGESTIONS_ACCEPTED`, `PREVIEW_WITHOUT_SUGGESTIONS`. الافتراضي: `DEFAULT_FOR_CURRENT_ACCESS`.
+
+
+
+
+ **الوصف:** تطبيق تحديث واحد أو أكثر على مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
+ - `requests` (array, مطلوب): قائمة بالتحديثات المراد تطبيقها على المستند.
+ - `writeControl` (object, اختياري): يوفر التحكم في كيفية تنفيذ طلبات الكتابة.
+
+
+
+
+ **الوصف:** إدراج نص في مستند Google في موقع محدد.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
+ - `text` (string, مطلوب): النص المراد إدراجه.
+ - `index` (integer, اختياري): الفهرس القائم على الصفر حيث يتم إدراج النص. الافتراضي هو `1`.
+
+
+
+
+ **الوصف:** استبدال جميع نُسخ النص في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
+ - `containsText` (string, مطلوب): النص المراد البحث عنه واستبداله.
+ - `replaceText` (string, مطلوب): النص البديل.
+ - `matchCase` (boolean, اختياري): ما إذا كان البحث يجب أن يراعي حالة الأحرف. الافتراضي هو `false`.
+
+
+
+
+ **الوصف:** حذف المحتوى من نطاق محدد في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
+ - `startIndex` (integer, مطلوب): فهرس بداية النطاق المراد حذفه.
+ - `endIndex` (integer, مطلوب): فهرس نهاية النطاق المراد حذفه.
+
+
+
+
+ **الوصف:** إدراج فاصل صفحة في موقع محدد في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
+ - `index` (integer, اختياري): الفهرس القائم على الصفر حيث يتم إدراج فاصل الصفحة. الافتراضي هو `1`.
+
+
+
+
+ **الوصف:** إنشاء نطاق مسمّى في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند المراد تحديثه.
+ - `name` (string, مطلوب): اسم النطاق المسمّى.
+ - `startIndex` (integer, مطلوب): فهرس بداية النطاق.
+ - `endIndex` (integer, مطلوب): فهرس نهاية النطاق.
+
+
+
+
+ **الوصف:** إنشاء مستند Google جديد مع محتوى في إجراء واحد.
+
+ **المعاملات:**
+ - `title` (string, مطلوب): عنوان المستند الجديد.
+ - `content` (string, اختياري): المحتوى النصي المراد إدراجه في المستند. استخدم `\n` لفقرات جديدة.
+
+
+
+
+ **الوصف:** إلحاق نص بنهاية مستند Google. يُدرج تلقائياً في نهاية المستند دون الحاجة لتحديد فهرس.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `text` (string, مطلوب): النص المراد إلحاقه بنهاية المستند. استخدم `\n` لفقرات جديدة.
+
+
+
+
+ **الوصف:** جعل النص غامقاً أو إزالة التنسيق الغامق في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
+ - `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
+ - `bold` (boolean, مطلوب): عيّن `true` لجعله غامقاً، `false` لإزالة الغامق.
+
+
+
+
+ **الوصف:** جعل النص مائلاً أو إزالة التنسيق المائل في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
+ - `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
+ - `italic` (boolean, مطلوب): عيّن `true` لجعله مائلاً، `false` لإزالة المائل.
+
+
+
+
+ **الوصف:** إضافة أو إزالة تنسيق التسطير من النص في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
+ - `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
+ - `underline` (boolean, مطلوب): عيّن `true` للتسطير، `false` لإزالة التسطير.
+
+
+
+
+ **الوصف:** إضافة أو إزالة تنسيق يتوسطه خط من النص في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
+ - `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
+ - `strikethrough` (boolean, مطلوب): عيّن `true` لإضافة يتوسطه خط، `false` للإزالة.
+
+
+
+
+ **الوصف:** تغيير حجم خط النص في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
+ - `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
+ - `fontSize` (number, مطلوب): حجم الخط بالنقاط. الأحجام الشائعة: 10, 11, 12, 14, 16, 18, 24, 36.
+
+
+
+
+ **الوصف:** تغيير لون النص باستخدام قيم RGB (مقياس 0-1) في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية النص المراد تنسيقه.
+ - `endIndex` (integer, مطلوب): موضع نهاية النص المراد تنسيقه (حصري).
+ - `red` (number, مطلوب): مكوّن الأحمر (0-1). مثال: `1` للأحمر الكامل.
+ - `green` (number, مطلوب): مكوّن الأخضر (0-1). مثال: `0.5` لنصف الأخضر.
+ - `blue` (number, مطلوب): مكوّن الأزرق (0-1). مثال: `0` لعدم وجود أزرق.
+
+
+
+
+ **الوصف:** تحويل نص موجود إلى رابط قابل للنقر في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية النص المراد تحويله إلى رابط.
+ - `endIndex` (integer, مطلوب): موضع نهاية النص المراد تحويله إلى رابط (حصري).
+ - `url` (string, مطلوب): عنوان URL الذي يجب أن يشير إليه الرابط. مثال: `"https://example.com"`.
+
+
+
+
+ **الوصف:** تطبيق نمط عنوان أو فقرة على نطاق نصي في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية الفقرة (الفقرات) المراد تنسيقها.
+ - `endIndex` (integer, مطلوب): موضع نهاية الفقرة (الفقرات) المراد تنسيقها.
+ - `style` (string, مطلوب): النمط المراد تطبيقه. القيم: `NORMAL_TEXT`, `TITLE`, `SUBTITLE`, `HEADING_1`, `HEADING_2`, `HEADING_3`, `HEADING_4`, `HEADING_5`, `HEADING_6`.
+
+
+
+
+ **الوصف:** تعيين محاذاة النص للفقرات في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية الفقرة (الفقرات) المراد محاذاتها.
+ - `endIndex` (integer, مطلوب): موضع نهاية الفقرة (الفقرات) المراد محاذاتها.
+ - `alignment` (string, مطلوب): محاذاة النص. القيم: `START` (يسار), `CENTER`, `END` (يمين), `JUSTIFIED`.
+
+
+
+
+ **الوصف:** تعيين تباعد الأسطر للفقرات في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية الفقرة (الفقرات).
+ - `endIndex` (integer, مطلوب): موضع نهاية الفقرة (الفقرات).
+ - `lineSpacing` (number, مطلوب): تباعد الأسطر كنسبة مئوية. `100` = مفرد، `115` = 1.15x، `150` = 1.5x، `200` = مزدوج.
+
+
+
+
+ **الوصف:** تحويل الفقرات إلى قائمة نقطية أو مرقمة في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية الفقرات المراد تحويلها إلى قائمة.
+ - `endIndex` (integer, مطلوب): موضع نهاية الفقرات المراد تحويلها إلى قائمة.
+ - `bulletPreset` (string, مطلوب): نمط النقاط/الترقيم. القيم: `BULLET_DISC_CIRCLE_SQUARE`, `BULLET_DIAMONDX_ARROW3D_SQUARE`, `BULLET_CHECKBOX`, `BULLET_ARROW_DIAMOND_DISC`, `BULLET_STAR_CIRCLE_SQUARE`, `NUMBERED_DECIMAL_ALPHA_ROMAN`, `NUMBERED_DECIMAL_ALPHA_ROMAN_PARENS`, `NUMBERED_DECIMAL_NESTED`, `NUMBERED_UPPERALPHA_ALPHA_ROMAN`, `NUMBERED_UPPERROMAN_UPPERALPHA_DECIMAL`.
+
+
+
+
+ **الوصف:** إزالة النقاط أو الترقيم من الفقرات في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `startIndex` (integer, مطلوب): موضع بداية فقرات القائمة.
+ - `endIndex` (integer, مطلوب): موضع نهاية فقرات القائمة.
+
+
+
+
+ **الوصف:** إدراج جدول مع محتوى في مستند Google في إجراء واحد. قدم المحتوى كمصفوفة ثنائية الأبعاد.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `rows` (integer, مطلوب): عدد الصفوف في الجدول.
+ - `columns` (integer, مطلوب): عدد الأعمدة في الجدول.
+ - `index` (integer, اختياري): الموضع لإدراج الجدول. إذا لم يُحدد، يُدرج الجدول في نهاية المستند.
+ - `content` (array, مطلوب): محتوى الجدول كمصفوفة ثنائية الأبعاد. كل مصفوفة داخلية هي صف. مثال: `[["Year", "Revenue"], ["2023", "$43B"], ["2024", "$45B"]]`.
+
+
+
+
+ **الوصف:** إدراج صف جديد فوق أو أسفل خلية مرجعية في جدول موجود.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
+ - `rowIndex` (integer, مطلوب): فهرس الصف (قائم على الصفر) للخلية المرجعية.
+ - `columnIndex` (integer, اختياري): فهرس العمود (قائم على الصفر) للخلية المرجعية. الافتراضي هو `0`.
+ - `insertBelow` (boolean, اختياري): إذا `true`، يُدرج أسفل الصف المرجعي. إذا `false`، يُدرج فوقه. الافتراضي هو `true`.
+
+
+
+
+ **الوصف:** إدراج عمود جديد يساراً أو يميناً لخلية مرجعية في جدول موجود.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
+ - `rowIndex` (integer, اختياري): فهرس الصف (قائم على الصفر) للخلية المرجعية. الافتراضي هو `0`.
+ - `columnIndex` (integer, مطلوب): فهرس العمود (قائم على الصفر) للخلية المرجعية.
+ - `insertRight` (boolean, اختياري): إذا `true`، يُدرج إلى اليمين. إذا `false`، يُدرج إلى اليسار. الافتراضي هو `true`.
+
+
+
+
+ **الوصف:** حذف صف من جدول موجود في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
+ - `rowIndex` (integer, مطلوب): فهرس الصف (قائم على الصفر) المراد حذفه.
+ - `columnIndex` (integer, اختياري): فهرس العمود (قائم على الصفر) لأي خلية في الصف. الافتراضي هو `0`.
+
+
+
+
+ **الوصف:** حذف عمود من جدول موجود في مستند Google.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
+ - `rowIndex` (integer, اختياري): فهرس الصف (قائم على الصفر) لأي خلية في العمود. الافتراضي هو `0`.
+ - `columnIndex` (integer, مطلوب): فهرس العمود (قائم على الصفر) المراد حذفه.
+
+
+
+
+ **الوصف:** دمج نطاق من خلايا الجدول في خلية واحدة. يتم الاحتفاظ بمحتوى جميع الخلايا.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
+ - `rowIndex` (integer, مطلوب): فهرس الصف البادئ (قائم على الصفر) للدمج.
+ - `columnIndex` (integer, مطلوب): فهرس العمود البادئ (قائم على الصفر) للدمج.
+ - `rowSpan` (integer, مطلوب): عدد الصفوف المراد دمجها.
+ - `columnSpan` (integer, مطلوب): عدد الأعمدة المراد دمجها.
+
+
+
+
+ **الوصف:** إلغاء دمج خلايا جدول مدمجة سابقاً وإعادتها إلى خلايا فردية.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `tableStartIndex` (integer, مطلوب): فهرس بداية الجدول.
+ - `rowIndex` (integer, مطلوب): فهرس الصف (قائم على الصفر) للخلية المدمجة.
+ - `columnIndex` (integer, مطلوب): فهرس العمود (قائم على الصفر) للخلية المدمجة.
+ - `rowSpan` (integer, مطلوب): عدد الصفوف التي تمتد عليها الخلية المدمجة.
+ - `columnSpan` (integer, مطلوب): عدد الأعمدة التي تمتد عليها الخلية المدمجة.
+
+
+
+
+ **الوصف:** إدراج صورة من عنوان URL عام في مستند Google. يجب أن تكون الصورة متاحة للعموم، وأقل من 50 ميجابايت، وبصيغة PNG/JPEG/GIF.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `uri` (string, مطلوب): عنوان URL العام للصورة. يجب أن يكون متاحاً بدون مصادقة.
+ - `index` (integer, اختياري): الموضع لإدراج الصورة. إذا لم يُحدد، تُدرج الصورة في نهاية المستند. الافتراضي هو `1`.
+
+
+
+
+ **الوصف:** إدراج فاصل قسم لإنشاء أقسام مستند بتنسيقات مختلفة.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `index` (integer, مطلوب): الموضع لإدراج فاصل القسم.
+ - `sectionType` (string, مطلوب): نوع فاصل القسم. القيم: `CONTINUOUS` (يبقى في نفس الصفحة), `NEXT_PAGE` (يبدأ صفحة جديدة).
+
+
+
+
+ **الوصف:** إنشاء ترويسة للمستند. يُرجع headerId يمكن استخدامه مع insert_text لإضافة محتوى الترويسة.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `type` (string, اختياري): نوع الترويسة. القيم: `DEFAULT`. الافتراضي هو `DEFAULT`.
+
+
+
+
+ **الوصف:** إنشاء تذييل للمستند. يُرجع footerId يمكن استخدامه مع insert_text لإضافة محتوى التذييل.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `type` (string, اختياري): نوع التذييل. القيم: `DEFAULT`. الافتراضي هو `DEFAULT`.
+
+
+
+
+ **الوصف:** حذف ترويسة من المستند. استخدم get_document للعثور على headerId.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `headerId` (string, مطلوب): معرّف الترويسة المراد حذفها.
+
+
+
+
+ **الوصف:** حذف تذييل من المستند. استخدم get_document للعثور على footerId.
+
+ **المعاملات:**
+ - `documentId` (string, مطلوب): معرّف المستند.
+ - `footerId` (string, مطلوب): معرّف التذييل المراد حذفه.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Google Docs
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Google Docs capabilities
+docs_agent = Agent(
+ role="Document Creator",
+ goal="Create and manage Google Docs documents efficiently",
+ backstory="An AI assistant specialized in Google Docs document creation and editing.",
+ apps=['google_docs'] # All Google Docs actions will be available
+)
+
+# Task to create a new document
+create_doc_task = Task(
+ description="Create a new Google Document titled 'Project Status Report'",
+ agent=docs_agent,
+ expected_output="New Google Document 'Project Status Report' created successfully"
+)
+
+# Run the task
+crew = Crew(
+ agents=[docs_agent],
+ tasks=[create_doc_task]
+)
+
+crew.kickoff()
+```
+
+### تحرير النصوص وإدارة المحتوى
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent focused on text editing
+text_editor = Agent(
+ role="Document Editor",
+ goal="Edit and update content in Google Docs documents",
+ backstory="An AI assistant skilled in precise text editing and content management.",
+ apps=['google_docs/insert_text', 'google_docs/replace_text', 'google_docs/delete_content_range']
+)
+
+# Task to edit document content
+edit_content_task = Task(
+ description="In document 'your_document_id', insert the text 'Executive Summary: ' at the beginning, then replace all instances of 'TODO' with 'COMPLETED'.",
+ agent=text_editor,
+ expected_output="Document updated with new text inserted and TODO items replaced."
+)
+
+crew = Crew(
+ agents=[text_editor],
+ tasks=[edit_content_task]
+)
+
+crew.kickoff()
+```
+
+### عمليات المستندات المتقدمة
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent for advanced document operations
+document_formatter = Agent(
+ role="Document Formatter",
+ goal="Apply advanced formatting and structure to Google Docs",
+ backstory="An AI assistant that handles complex document formatting and organization.",
+ apps=['google_docs/batch_update', 'google_docs/insert_page_break', 'google_docs/create_named_range']
+)
+
+# Task to format document
+format_doc_task = Task(
+ description="In document 'your_document_id', insert a page break at position 100, create a named range called 'Introduction' for characters 1-50, and apply batch formatting updates.",
+ agent=document_formatter,
+ expected_output="Document formatted with page break, named range, and styling applied."
+)
+
+crew = Crew(
+ agents=[document_formatter],
+ tasks=[format_doc_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء المصادقة**
+
+- تأكد من أن حساب Google الخاص بك لديه الصلاحيات اللازمة للوصول إلى Google Docs.
+- تحقق من أن اتصال OAuth يتضمن جميع النطاقات المطلوبة (`https://www.googleapis.com/auth/documents`).
+
+**مشاكل معرّف المستند**
+
+- تحقق جيداً من صحة معرّفات المستندات.
+- تأكد من وجود المستند وإمكانية الوصول إليه من حسابك.
+- يمكن العثور على معرّفات المستندات في عنوان URL لـ Google Docs.
+
+**عمليات إدراج النص والنطاقات**
+
+- عند استخدام `insert_text` أو `delete_content_range`، تأكد من صحة مواضع الفهرس.
+- تذكر أن Google Docs يستخدم فهرسة قائمة على الصفر.
+- يجب أن يحتوي المستند على محتوى في مواضع الفهرس المحددة.
+
+**تنسيق طلبات التحديث الدفعي**
+
+- عند استخدام `batch_update`، تأكد من صحة تنسيق مصفوفة `requests` وفقاً لتوثيق Google Docs API.
+- تتطلب التحديثات المعقدة هياكل JSON محددة لكل نوع طلب.
+
+**عمليات استبدال النص**
+
+- لـ `replace_text`، تأكد من مطابقة معامل `containsText` تماماً للنص المراد استبداله.
+- استخدم معامل `matchCase` للتحكم في حساسية حالة الأحرف.
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Docs أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/google_drive.mdx b/docs/v1.15.1/ar/enterprise/integrations/google_drive.mdx
new file mode 100644
index 000000000..18b8a3371
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/google_drive.mdx
@@ -0,0 +1,238 @@
+---
+title: تكامل Google Drive
+description: "تخزين الملفات وإدارتها مع تكامل Google Drive لـ CrewAI."
+icon: "google"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة الملفات والمجلدات عبر Google Drive. ارفع الملفات وحمّلها ونظّمها وشاركها، وأنشئ المجلدات، وبسّط سير عمل إدارة المستندات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Google Drive، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Google مع إمكانية الوصول إلى Google Drive
+- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Google Drive
+
+### 1. ربط حساب Google الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Google Drive** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة الملفات والمجلدات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** الحصول على ملف بواسطة المعرّف من Google Drive.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف الملف المراد استرجاعه.
+
+
+
+
+ **الوصف:** عرض قائمة الملفات في Google Drive.
+
+ **المعاملات:**
+ - `q` (string, اختياري): سلسلة استعلام لتصفية الملفات (مثال: "name contains 'report'").
+ - `page_size` (integer, اختياري): الحد الأقصى لعدد الملفات المُرجعة (الافتراضي: 100، الحد الأقصى: 1000).
+ - `page_token` (string, اختياري): رمز لاسترجاع الصفحة التالية من النتائج.
+ - `order_by` (string, اختياري): ترتيب الفرز (مثال: "name", "createdTime desc", "modifiedTime").
+ - `spaces` (string, اختياري): قائمة مفصولة بفواصل للمساحات المراد الاستعلام عنها (drive, appDataFolder, photos).
+
+
+
+
+ **الوصف:** رفع ملف إلى Google Drive.
+
+ **المعاملات:**
+ - `name` (string, مطلوب): اسم الملف المراد إنشاؤه.
+ - `content` (string, مطلوب): محتوى الملف المراد رفعه.
+ - `mime_type` (string, اختياري): نوع MIME للملف (مثال: "text/plain", "application/pdf").
+ - `parent_folder_id` (string, اختياري): معرّف المجلد الأصلي حيث يجب إنشاء الملف.
+ - `description` (string, اختياري): وصف الملف.
+
+
+
+
+ **الوصف:** تحميل ملف من Google Drive.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف الملف المراد تحميله.
+ - `mime_type` (string, اختياري): نوع MIME للتصدير (مطلوب لمستندات Google Workspace).
+
+
+
+
+ **الوصف:** إنشاء مجلد جديد في Google Drive.
+
+ **المعاملات:**
+ - `name` (string, مطلوب): اسم المجلد المراد إنشاؤه.
+ - `parent_folder_id` (string, اختياري): معرّف المجلد الأصلي حيث يجب إنشاء المجلد الجديد.
+ - `description` (string, اختياري): وصف المجلد.
+
+
+
+
+ **الوصف:** حذف ملف من Google Drive.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف الملف المراد حذفه.
+
+
+
+
+ **الوصف:** مشاركة ملف في Google Drive مع مستخدمين محددين أو جعله عاماً.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف الملف المراد مشاركته.
+ - `role` (string, مطلوب): الدور الممنوح بهذا الإذن (reader, writer, commenter, owner).
+ - `type` (string, مطلوب): نوع المستفيد (user, group, domain, anyone).
+ - `email_address` (string, اختياري): عنوان البريد الإلكتروني للمستخدم أو المجموعة المراد المشاركة معهم (مطلوب لأنواع user/group).
+ - `domain` (string, اختياري): النطاق المراد المشاركة معه (مطلوب لنوع domain).
+ - `send_notification_email` (boolean, اختياري): ما إذا كان يجب إرسال بريد إلكتروني إشعاري (الافتراضي: true).
+ - `email_message` (string, اختياري): رسالة نصية مخصصة لتضمينها في البريد الإلكتروني الإشعاري.
+
+
+
+
+ **الوصف:** تحديث ملف موجود في Google Drive.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف الملف المراد تحديثه.
+ - `name` (string, اختياري): الاسم الجديد للملف.
+ - `content` (string, اختياري): المحتوى الجديد للملف.
+ - `mime_type` (string, اختياري): نوع MIME الجديد للملف.
+ - `description` (string, اختياري): الوصف الجديد للملف.
+ - `add_parents` (string, اختياري): قائمة مفصولة بفواصل لمعرّفات المجلدات الأصلية المراد إضافتها.
+ - `remove_parents` (string, اختياري): قائمة مفصولة بفواصل لمعرّفات المجلدات الأصلية المراد إزالتها.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Google Drive
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Google Drive capabilities
+drive_agent = Agent(
+ role="File Manager",
+ goal="Manage files and folders in Google Drive efficiently",
+ backstory="An AI assistant specialized in document and file management.",
+ apps=['google_drive'] # All Google Drive actions will be available
+)
+
+# Task to organize files
+organize_files_task = Task(
+ description="List all files in the root directory and organize them into appropriate folders",
+ agent=drive_agent,
+ expected_output="Summary of files organized with folder structure"
+)
+
+# Run the task
+crew = Crew(
+ agents=[drive_agent],
+ tasks=[organize_files_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات Google Drive المحددة
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with specific Google Drive actions only
+file_manager_agent = Agent(
+ role="Document Manager",
+ goal="Upload and manage documents efficiently",
+ backstory="An AI assistant that focuses on document upload and organization.",
+ apps=[
+ 'google_drive/upload_file',
+ 'google_drive/create_folder',
+ 'google_drive/share_file'
+ ] # Specific Google Drive actions
+)
+
+# Task to upload and share documents
+document_task = Task(
+ description="Upload the quarterly report and share it with the finance team",
+ agent=file_manager_agent,
+ expected_output="Document uploaded and sharing permissions configured"
+)
+
+crew = Crew(
+ agents=[file_manager_agent],
+ tasks=[document_task]
+)
+
+crew.kickoff()
+```
+
+### إدارة الملفات المتقدمة
+
+```python
+from crewai import Agent, Task, Crew
+
+file_organizer = Agent(
+ role="File Organizer",
+ goal="Maintain organized file structure and manage permissions",
+ backstory="An experienced file manager who ensures proper organization and access control.",
+ apps=['google_drive']
+)
+
+# Complex task involving multiple Google Drive operations
+organization_task = Task(
+ description="""
+ 1. List all files in the shared folder
+ 2. Create folders for different document types (Reports, Presentations, Spreadsheets)
+ 3. Move files to appropriate folders based on their type
+ 4. Set appropriate sharing permissions for each folder
+ 5. Create a summary document of the organization changes
+ """,
+ agent=file_organizer,
+ expected_output="Files organized into categorized folders with proper permissions and summary report"
+)
+
+crew = Crew(
+ agents=[file_organizer],
+ tasks=[organization_task]
+)
+
+crew.kickoff()
+```
diff --git a/docs/v1.15.1/ar/enterprise/integrations/google_sheets.mdx b/docs/v1.15.1/ar/enterprise/integrations/google_sheets.mdx
new file mode 100644
index 000000000..5651ef83d
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/google_sheets.mdx
@@ -0,0 +1,254 @@
+---
+title: تكامل Google Sheets
+description: "مزامنة بيانات جداول البيانات مع تكامل Google Sheets لـ CrewAI."
+icon: "google"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة بيانات جداول البيانات عبر Google Sheets. اقرأ الصفوف، وأنشئ إدخالات جديدة، وحدّث البيانات الموجودة، وبسّط سير عمل إدارة البيانات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي. مثالي لتتبع البيانات وإعداد التقارير وإدارة البيانات التعاونية.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Google Sheets، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Google مع إمكانية الوصول إلى Google Sheets
+- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+- جداول بيانات بترويسات أعمدة مناسبة لعمليات البيانات
+
+## إعداد تكامل Google Sheets
+
+### 1. ربط حساب Google الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Google Sheets** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى جداول البيانات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** استرجاع خصائص وبيانات جدول البيانات.
+
+ **المعاملات:**
+ - `spreadsheetId` (string, مطلوب): معرّف جدول البيانات المراد استرجاعه.
+ - `ranges` (array, اختياري): النطاقات المراد استرجاعها من جدول البيانات.
+ - `includeGridData` (boolean, اختياري): true إذا كان يجب إرجاع بيانات الشبكة. الافتراضي: false
+ - `fields` (string, اختياري): الحقول المراد تضمينها في الاستجابة.
+
+
+
+
+ **الوصف:** إرجاع نطاق من القيم من جدول البيانات.
+
+ **المعاملات:**
+ - `spreadsheetId` (string, مطلوب): معرّف جدول البيانات المراد استرجاع البيانات منه.
+ - `range` (string, مطلوب): ترميز A1 أو R1C1 للنطاق المراد استرجاع القيم منه.
+ - `valueRenderOption` (string, اختياري): كيفية تمثيل القيم في الإخراج. الخيارات: FORMATTED_VALUE, UNFORMATTED_VALUE, FORMULA. الافتراضي: FORMATTED_VALUE
+ - `dateTimeRenderOption` (string, اختياري): كيفية تمثيل التواريخ والأوقات في الإخراج. الخيارات: SERIAL_NUMBER, FORMATTED_STRING. الافتراضي: SERIAL_NUMBER
+ - `majorDimension` (string, اختياري): البُعد الرئيسي للنتائج. الخيارات: ROWS, COLUMNS. الافتراضي: ROWS
+
+
+
+
+ **الوصف:** تعيين القيم في نطاق من جدول البيانات.
+
+ **المعاملات:**
+ - `spreadsheetId` (string, مطلوب): معرّف جدول البيانات المراد تحديثه.
+ - `range` (string, مطلوب): ترميز A1 للنطاق المراد تحديثه.
+ - `values` (array, مطلوب): البيانات المراد كتابتها. كل مصفوفة تمثل صفاً.
+ ```json
+ [
+ ["Value1", "Value2", "Value3"],
+ ["Value4", "Value5", "Value6"]
+ ]
+ ```
+ - `valueInputOption` (string, اختياري): كيفية تفسير بيانات الإدخال. الخيارات: RAW, USER_ENTERED. الافتراضي: USER_ENTERED
+
+
+
+
+ **الوصف:** إلحاق قيم بجدول البيانات.
+
+ **المعاملات:**
+ - `spreadsheetId` (string, مطلوب): معرّف جدول البيانات المراد تحديثه.
+ - `range` (string, مطلوب): ترميز A1 لنطاق البحث عن جدول بيانات منطقي.
+ - `values` (array, مطلوب): البيانات المراد إلحاقها. كل مصفوفة تمثل صفاً.
+ ```json
+ [
+ ["Value1", "Value2", "Value3"],
+ ["Value4", "Value5", "Value6"]
+ ]
+ ```
+ - `valueInputOption` (string, اختياري): كيفية تفسير بيانات الإدخال. الخيارات: RAW, USER_ENTERED. الافتراضي: USER_ENTERED
+ - `insertDataOption` (string, اختياري): كيفية إدراج بيانات الإدخال. الخيارات: OVERWRITE, INSERT_ROWS. الافتراضي: INSERT_ROWS
+
+
+
+
+ **الوصف:** إنشاء جدول بيانات جديد.
+
+ **المعاملات:**
+ - `title` (string, مطلوب): عنوان جدول البيانات الجديد.
+ - `sheets` (array, اختياري): الأوراق التي تشكل جزءاً من جدول البيانات.
+ ```json
+ [
+ {
+ "properties": {
+ "title": "Sheet1"
+ }
+ }
+ ]
+ ```
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Google Sheets
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Google Sheets capabilities
+sheets_agent = Agent(
+ role="Data Manager",
+ goal="Manage spreadsheet data and track information efficiently",
+ backstory="An AI assistant specialized in data management and spreadsheet operations.",
+ apps=['google_sheets']
+)
+
+# Task to add new data to a spreadsheet
+data_entry_task = Task(
+ description="Add a new customer record to the customer database spreadsheet with name, email, and signup date",
+ agent=sheets_agent,
+ expected_output="New customer record added successfully to the spreadsheet"
+)
+
+# Run the task
+crew = Crew(
+ agents=[sheets_agent],
+ tasks=[data_entry_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات Google Sheets المحددة
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with specific Google Sheets actions only
+data_collector = Agent(
+ role="Data Collector",
+ goal="Collect and organize data in spreadsheets",
+ backstory="An AI assistant that focuses on data collection and organization.",
+ apps=[
+ 'google_sheets/get_values',
+ 'google_sheets/update_values'
+ ]
+)
+
+# Task to collect and organize data
+data_collection = Task(
+ description="Retrieve current inventory data and add new product entries to the inventory spreadsheet",
+ agent=data_collector,
+ expected_output="Inventory data retrieved and new products added successfully"
+)
+
+crew = Crew(
+ agents=[data_collector],
+ tasks=[data_collection]
+)
+
+crew.kickoff()
+```
+
+### تحليل البيانات وإعداد التقارير
+
+```python
+from crewai import Agent, Task, Crew
+
+data_analyst = Agent(
+ role="Data Analyst",
+ goal="Analyze spreadsheet data and generate insights",
+ backstory="An experienced data analyst who extracts insights from spreadsheet data.",
+ apps=['google_sheets']
+)
+
+# Task to analyze data and create reports
+analysis_task = Task(
+ description="""
+ 1. Retrieve all sales data from the current month's spreadsheet
+ 2. Analyze the data for trends and patterns
+ 3. Create a summary report in a new row with key metrics
+ """,
+ agent=data_analyst,
+ expected_output="Sales data analyzed and summary report created with key insights"
+)
+
+crew = Crew(
+ agents=[data_analyst],
+ tasks=[analysis_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء الصلاحيات**
+
+- تأكد من أن حساب Google الخاص بك لديه صلاحية التحرير على جداول البيانات المستهدفة
+- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة لـ Google Sheets API
+- تأكد من مشاركة جداول البيانات مع الحساب المصادق عليه
+
+**مشاكل هيكل جدول البيانات**
+
+- تأكد من أن أوراق العمل تحتوي على ترويسات أعمدة مناسبة قبل إنشاء الصفوف أو تحديثها
+- تحقق من صحة ترميز النطاق (صيغة A1) للخلايا المستهدفة
+- تأكد من وجود معرّف جدول البيانات المحدد وإمكانية الوصول إليه
+
+**مشاكل نوع البيانات والصيغة**
+
+- تأكد من تطابق قيم البيانات مع الصيغة المتوقعة لكل عمود
+- استخدم صيغ التاريخ المناسبة لأعمدة التاريخ (يُنصح بصيغة ISO)
+- تحقق من صحة تنسيق القيم الرقمية لأعمدة الأرقام
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Sheets
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/google_slides.mdx b/docs/v1.15.1/ar/enterprise/integrations/google_slides.mdx
new file mode 100644
index 000000000..77029f244
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/google_slides.mdx
@@ -0,0 +1,382 @@
+---
+title: تكامل Google Slides
+description: "إنشاء العروض التقديمية وإدارتها مع تكامل Google Slides لـ CrewAI."
+icon: "chart-bar"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إنشاء وتحرير وإدارة عروض Google Slides التقديمية. أنشئ العروض التقديمية، وحدّث المحتوى، واستورد البيانات من Google Sheets، وأدر الصفحات والصور المصغرة، وبسّط سير عمل العروض التقديمية باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Google Slides، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Google مع إمكانية الوصول إلى Google Slides
+- ربط حساب Google الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Google Slides
+
+### 1. ربط حساب Google الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Google Slides** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى العروض التقديمية وجداول البيانات وDrive
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** إنشاء عرض تقديمي فارغ بدون محتوى.
+
+ **المعاملات:**
+ - `title` (string, مطلوب): عنوان العرض التقديمي.
+
+
+
+
+ **الوصف:** الحصول على بيانات وصفية خفيفة حول العرض التقديمي (العنوان، عدد الشرائح، معرّفات الشرائح).
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي المراد استرجاعه.
+
+
+
+
+ **الوصف:** استخراج جميع المحتوى النصي من العرض التقديمي.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+
+
+
+
+ **الوصف:** استرجاع عرض تقديمي بواسطة المعرّف.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي المراد استرجاعه.
+ - `fields` (string, اختياري): الحقول المراد تضمينها في الاستجابة.
+
+
+
+
+ **الوصف:** تطبيق التحديثات أو إضافة المحتوى أو إزالته من العرض التقديمي.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي المراد تحديثه.
+ - `requests` (array, مطلوب): قائمة بالتحديثات المراد تطبيقها.
+ ```json
+ [
+ {
+ "insertText": {
+ "objectId": "slide_id",
+ "text": "Your text content here"
+ }
+ }
+ ]
+ ```
+ - `writeControl` (object, اختياري): يوفر التحكم في كيفية تنفيذ طلبات الكتابة.
+
+
+
+
+ **الوصف:** استخراج المحتوى النصي من شريحة واحدة.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `pageObjectId` (string, مطلوب): معرّف الشريحة/الصفحة.
+
+
+
+
+ **الوصف:** استرجاع صفحة محددة بواسطة معرّفها.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `pageObjectId` (string, مطلوب): معرّف الصفحة المراد استرجاعها.
+
+
+
+
+ **الوصف:** إنشاء صورة مصغرة للصفحة.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `pageObjectId` (string, مطلوب): معرّف الصفحة لإنشاء الصورة المصغرة.
+
+
+
+
+ **الوصف:** إضافة شريحة فارغة إضافية للعرض التقديمي.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `insertionIndex` (integer, اختياري): مكان إدراج الشريحة (قائم على الصفر). إذا حُذف، تُضاف في النهاية.
+
+
+
+
+ **الوصف:** إنشاء شريحة بتخطيط محدد مسبقاً يحتوي على مناطق عناصر نائبة للعنوان والمحتوى وغيرها.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `layout` (string, مطلوب): نوع التخطيط. أحد: `BLANK`, `TITLE`, `TITLE_AND_BODY`, `TITLE_AND_TWO_COLUMNS`, `TITLE_ONLY`, `SECTION_HEADER`, `ONE_COLUMN_TEXT`, `MAIN_POINT`, `BIG_NUMBER`.
+ - `insertionIndex` (integer, اختياري): مكان الإدراج (قائم على الصفر). حُذف للإضافة في النهاية.
+
+
+
+
+ **الوصف:** إنشاء مربع نص على شريحة مع محتوى.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideId` (string, مطلوب): معرّف الشريحة لإضافة مربع النص إليها.
+ - `text` (string, مطلوب): المحتوى النصي لمربع النص.
+ - `x` (integer, اختياري): موضع X بوحدة EMU (914400 = 1 بوصة). الافتراضي: 914400.
+ - `y` (integer, اختياري): موضع Y بوحدة EMU. الافتراضي: 914400.
+ - `width` (integer, اختياري): العرض بوحدة EMU. الافتراضي: 7315200.
+ - `height` (integer, اختياري): الارتفاع بوحدة EMU. الافتراضي: 914400.
+
+
+
+
+ **الوصف:** إزالة شريحة من العرض التقديمي.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideId` (string, مطلوب): معرّف الشريحة المراد حذفها.
+
+
+
+
+ **الوصف:** إنشاء نسخة من شريحة موجودة.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideId` (string, مطلوب): معرّف الشريحة المراد تكرارها.
+
+
+
+
+ **الوصف:** إعادة ترتيب الشرائح بنقلها إلى موضع جديد.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideIds` (array of strings, مطلوب): مصفوفة من معرّفات الشرائح المراد نقلها.
+ - `insertionIndex` (integer, مطلوب): الموضع المستهدف (قائم على الصفر).
+
+
+
+
+ **الوصف:** تضمين فيديو YouTube على شريحة.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideId` (string, مطلوب): معرّف الشريحة لإضافة الفيديو إليها.
+ - `videoId` (string, مطلوب): معرّف فيديو YouTube (القيمة بعد v= في عنوان URL).
+
+
+
+
+ **الوصف:** تضمين فيديو من Google Drive على شريحة.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideId` (string, مطلوب): معرّف الشريحة لإضافة الفيديو إليها.
+ - `fileId` (string, مطلوب): معرّف ملف Google Drive للفيديو.
+
+
+
+
+ **الوصف:** تعيين صورة خلفية لشريحة.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideId` (string, مطلوب): معرّف الشريحة لتعيين الخلفية لها.
+ - `imageUrl` (string, مطلوب): عنوان URL المتاح للعموم للصورة المراد استخدامها كخلفية.
+
+
+
+
+ **الوصف:** إنشاء جدول فارغ على شريحة.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideId` (string, مطلوب): معرّف الشريحة لإضافة الجدول إليها.
+ - `rows` (integer, مطلوب): عدد الصفوف في الجدول.
+ - `columns` (integer, مطلوب): عدد الأعمدة في الجدول.
+
+
+
+
+ **الوصف:** إنشاء جدول مع محتوى في إجراء واحد.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `slideId` (string, مطلوب): معرّف الشريحة لإضافة الجدول إليها.
+ - `rows` (integer, مطلوب): عدد الصفوف في الجدول.
+ - `columns` (integer, مطلوب): عدد الأعمدة في الجدول.
+ - `content` (array, مطلوب): محتوى الجدول كمصفوفة ثنائية الأبعاد. مثال: [["Year", "Revenue"], ["2023", "$10M"]].
+
+
+
+
+ **الوصف:** استيراد البيانات من Google Sheet إلى العرض التقديمي.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `sheetId` (string, مطلوب): معرّف Google Sheet المراد الاستيراد منه.
+ - `dataRange` (string, مطلوب): نطاق البيانات المراد استيرادها من الورقة.
+
+
+
+
+ **الوصف:** رفع ملف إلى Google Drive المرتبط بالعرض التقديمي.
+
+ **المعاملات:**
+ - `file` (string, مطلوب): بيانات الملف المراد رفعها.
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي لربط الملف المرفوع.
+
+
+
+
+ **الوصف:** ربط ملف في Google Drive بالعرض التقديمي.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي.
+ - `fileId` (string, مطلوب): معرّف الملف المراد ربطه.
+
+
+
+
+ **الوصف:** عرض قائمة بجميع العروض التقديمية المتاحة للمستخدم.
+
+ **المعاملات:**
+ - `pageSize` (integer, اختياري): عدد العروض التقديمية المراد إرجاعها لكل صفحة.
+ - `pageToken` (string, اختياري): رمز للترقيم.
+
+
+
+
+ **الوصف:** حذف عرض تقديمي بواسطة المعرّف.
+
+ **المعاملات:**
+ - `presentationId` (string, مطلوب): معرّف العرض التقديمي المراد حذفه.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Google Slides
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Google Slides capabilities
+slides_agent = Agent(
+ role="Presentation Manager",
+ goal="Create and manage presentations efficiently",
+ backstory="An AI assistant specialized in presentation creation and content management.",
+ apps=['google_slides'] # All Google Slides actions will be available
+)
+
+# Task to create a presentation
+create_presentation_task = Task(
+ description="Create a new presentation for the quarterly business review with key slides",
+ agent=slides_agent,
+ expected_output="Quarterly business review presentation created with structured content"
+)
+
+# Run the task
+crew = Crew(
+ agents=[slides_agent],
+ tasks=[create_presentation_task]
+)
+
+crew.kickoff()
+```
+
+### إدارة محتوى العروض التقديمية
+
+```python
+from crewai import Agent, Task, Crew
+
+content_manager = Agent(
+ role="Content Manager",
+ goal="Manage presentation content and updates",
+ backstory="An AI assistant that focuses on content creation and presentation updates.",
+ apps=[
+ 'google_slides/create_blank_presentation',
+ 'google_slides/batch_update_presentation',
+ 'google_slides/get_presentation'
+ ]
+)
+
+# Task to create and update presentations
+content_task = Task(
+ description="Create a new presentation and add content slides with charts and text",
+ agent=content_manager,
+ expected_output="Presentation created with updated content and visual elements"
+)
+
+crew = Crew(
+ agents=[content_manager],
+ tasks=[content_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء الصلاحيات**
+
+- تأكد من أن حساب Google الخاص بك لديه الصلاحيات المناسبة لـ Google Slides
+- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة للعروض التقديمية وجداول البيانات وDrive
+
+**مشاكل معرّف العرض التقديمي**
+
+- تحقق من صحة معرّفات العروض التقديمية ووجودها
+- تأكد من أن لديك صلاحيات الوصول للعروض التقديمية التي تحاول تعديلها
+
+**مشاكل تحديث المحتوى**
+
+- تأكد من صحة تنسيق طلبات التحديث الدفعي وفقاً لمواصفات Google Slides API
+- تحقق من وجود معرّفات الكائنات للشرائح والعناصر في العرض التقديمي
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Google Slides
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/hubspot.mdx b/docs/v1.15.1/ar/enterprise/integrations/hubspot.mdx
new file mode 100644
index 000000000..b328cebb7
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/hubspot.mdx
@@ -0,0 +1,360 @@
+---
+title: تكامل HubSpot
+description: "إدارة الشركات وجهات الاتصال في HubSpot مع CrewAI."
+icon: "briefcase"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة الشركات وجهات الاتصال داخل HubSpot. أنشئ سجلات جديدة وبسّط عمليات CRM باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل HubSpot، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال.
+- حساب HubSpot بالصلاحيات المناسبة.
+- ربط حساب HubSpot الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors).
+
+## إعداد تكامل HubSpot
+
+### 1. ربط حساب HubSpot الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors).
+2. ابحث عن **HubSpot** في قسم تكاملات المصادقة.
+3. انقر على **Connect** وأكمل عملية OAuth.
+4. امنح الصلاحيات اللازمة لإدارة الشركات وجهات الاتصال.
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** إنشاء سجل شركة جديد في HubSpot.
+
+ **المعاملات:**
+ - `name` (string, مطلوب): اسم الشركة.
+ - `domain` (string, اختياري): اسم نطاق الشركة.
+ - `industry` (string, اختياري): القطاع.
+ - `phone` (string, اختياري): رقم الهاتف.
+ - `hubspot_owner_id` (string, اختياري): معرّف مالك الشركة.
+ - `type` (string, اختياري): نوع الشركة. القيم المتاحة: `PROSPECT`, `PARTNER`, `RESELLER`, `VENDOR`, `OTHER`.
+ - `city` (string, اختياري): المدينة.
+ - `state` (string, اختياري): الولاية/المنطقة.
+ - `zip` (string, اختياري): الرمز البريدي.
+ - `numberofemployees` (number, اختياري): عدد الموظفين.
+ - `annualrevenue` (number, اختياري): الإيرادات السنوية.
+ - `description` (string, اختياري): الوصف.
+ - `website` (string, اختياري): عنوان URL للموقع الإلكتروني.
+
+
+
+
+ **الوصف:** إنشاء سجل جهة اتصال جديد في HubSpot.
+
+ **المعاملات:**
+ - `email` (string, مطلوب): عنوان البريد الإلكتروني لجهة الاتصال.
+ - `firstname` (string, اختياري): الاسم الأول.
+ - `lastname` (string, اختياري): اسم العائلة.
+ - `phone` (string, اختياري): رقم الهاتف.
+ - `hubspot_owner_id` (string, اختياري): مالك جهة الاتصال.
+ - `lifecyclestage` (string, اختياري): مرحلة دورة الحياة. القيم المتاحة: `subscriber`, `lead`, `marketingqualifiedlead`, `salesqualifiedlead`, `opportunity`, `customer`, `evangelist`, `other`.
+ - `company` (string, اختياري): اسم الشركة.
+ - `jobtitle` (string, اختياري): المسمى الوظيفي.
+
+
+
+
+ **الوصف:** إنشاء سجل صفقة جديد في HubSpot.
+
+ **المعاملات:**
+ - `dealname` (string, مطلوب): اسم الصفقة.
+ - `amount` (number, اختياري): قيمة الصفقة.
+ - `dealstage` (string, اختياري): مرحلة مسار الصفقة.
+ - `pipeline` (string, اختياري): مسار المبيعات الذي تنتمي إليه الصفقة.
+ - `closedate` (string, اختياري): التاريخ المتوقع لإغلاق الصفقة.
+ - `hubspot_owner_id` (string, اختياري): مالك الصفقة.
+ - `dealtype` (string, اختياري): نوع الصفقة. القيم المتاحة: `newbusiness`, `existingbusiness`.
+ - `description` (string, اختياري): وصف الصفقة.
+ - `hs_priority` (string, اختياري): أولوية الصفقة. القيم المتاحة: `low`, `medium`, `high`.
+
+
+
+
+ **الوصف:** إنشاء تفاعل جديد (مثل ملاحظة، بريد إلكتروني، مكالمة، اجتماع، مهمة) في HubSpot.
+
+ **المعاملات:**
+ - `engagementType` (string, مطلوب): نوع التفاعل. القيم المتاحة: `NOTE`, `EMAIL`, `CALL`, `MEETING`, `TASK`.
+ - `hubspot_owner_id` (string, اختياري): المستخدم المعيّن للنشاط.
+ - `hs_timestamp` (string, اختياري): تاريخ ووقت النشاط.
+ - `hs_note_body` (string, اختياري): نص الملاحظة. (يُستخدم لـ `NOTE`)
+ - `hs_task_subject` (string, اختياري): عنوان المهمة. (يُستخدم لـ `TASK`)
+ - `hs_meeting_title` (string, اختياري): عنوان الاجتماع. (يُستخدم لـ `MEETING`)
+
+
+
+
+ **الوصف:** تحديث سجل شركة موجود في HubSpot.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف الشركة المراد تحديثها.
+ - `name` (string, اختياري): اسم الشركة.
+ - `domain` (string, اختياري): اسم نطاق الشركة.
+ - `industry` (string, اختياري): القطاع.
+ - `phone` (string, اختياري): رقم الهاتف.
+ - `description` (string, اختياري): الوصف.
+
+
+
+
+ **الوصف:** تحديث سجل جهة اتصال موجود في HubSpot.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف جهة الاتصال المراد تحديثها.
+ - `firstname` (string, اختياري): الاسم الأول.
+ - `lastname` (string, اختياري): اسم العائلة.
+ - `email` (string, اختياري): عنوان البريد الإلكتروني.
+ - `phone` (string, اختياري): رقم الهاتف.
+ - `company` (string, اختياري): اسم الشركة.
+ - `jobtitle` (string, اختياري): المسمى الوظيفي.
+
+
+
+
+ **الوصف:** تحديث سجل صفقة موجود في HubSpot.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف الصفقة المراد تحديثها.
+ - `dealname` (string, اختياري): اسم الصفقة.
+ - `amount` (number, اختياري): قيمة الصفقة.
+ - `dealstage` (string, اختياري): مرحلة مسار الصفقة.
+ - `closedate` (string, اختياري): تاريخ الإغلاق المتوقع.
+
+
+
+
+ **الوصف:** الحصول على قائمة بسجلات الشركات من HubSpot.
+
+ **المعاملات:**
+ - `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
+
+
+
+
+ **الوصف:** الحصول على قائمة بسجلات جهات الاتصال من HubSpot.
+
+ **المعاملات:**
+ - `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
+
+
+
+
+ **الوصف:** الحصول على قائمة بسجلات الصفقات من HubSpot.
+
+ **المعاملات:**
+ - `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
+
+
+
+
+ **الوصف:** الحصول على سجل شركة واحد بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف الشركة المراد استرجاعها.
+
+
+
+
+ **الوصف:** الحصول على سجل جهة اتصال واحد بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف جهة الاتصال المراد استرجاعها.
+
+
+
+
+ **الوصف:** الحصول على سجل صفقة واحد بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف الصفقة المراد استرجاعها.
+
+
+
+
+ **الوصف:** البحث عن سجلات الشركات في HubSpot باستخدام صيغة فلتر.
+
+ **المعاملات:**
+ - `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل (OR لمجموعات AND).
+ - `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
+
+
+
+
+ **الوصف:** البحث عن سجلات جهات الاتصال في HubSpot باستخدام صيغة فلتر.
+
+ **المعاملات:**
+ - `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل (OR لمجموعات AND).
+ - `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
+
+
+
+
+ **الوصف:** البحث عن سجلات الصفقات في HubSpot باستخدام صيغة فلتر.
+
+ **المعاملات:**
+ - `filterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل (OR لمجموعات AND).
+ - `paginationParameters` (object, اختياري): استخدم `pageCursor` لجلب الصفحات اللاحقة.
+
+
+
+
+ **الوصف:** حذف سجل شركة بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف الشركة المراد حذفها.
+
+
+
+
+ **الوصف:** حذف سجل جهة اتصال بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف جهة الاتصال المراد حذفها.
+
+
+
+
+ **الوصف:** حذف سجل صفقة بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف الصفقة المراد حذفها.
+
+
+
+
+ **الوصف:** الحصول على المخطط المتوقع لنوع كائن وعملية معينة.
+
+ **المعاملات:**
+ - `recordType` (string, مطلوب): معرّف نوع الكائن (مثال: 'companies').
+ - `operation` (string, مطلوب): نوع العملية (مثال: 'CREATE_RECORD').
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ HubSpot
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with HubSpot capabilities
+hubspot_agent = Agent(
+ role="CRM Manager",
+ goal="Manage company and contact records in HubSpot",
+ backstory="An AI assistant specialized in CRM management.",
+ apps=['hubspot'] # All HubSpot actions will be available
+)
+
+# Task to create a new company
+create_company_task = Task(
+ description="Create a new company in HubSpot with name 'Innovate Corp' and domain 'innovatecorp.com'.",
+ agent=hubspot_agent,
+ expected_output="Company created successfully with confirmation"
+)
+
+# Run the task
+crew = Crew(
+ agents=[hubspot_agent],
+ tasks=[create_company_task]
+)
+
+crew.kickoff()
+```
+
+### تصفية أدوات HubSpot المحددة
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with specific HubSpot actions only
+contact_creator = Agent(
+ role="Contact Creator",
+ goal="Create new contacts in HubSpot",
+ backstory="An AI assistant that focuses on creating new contact entries in the CRM.",
+ apps=['hubspot/create_contact'] # Only contact creation action
+)
+
+# Task to create a contact
+create_contact = Task(
+ description="Create a new contact for 'John Doe' with email 'john.doe@example.com'.",
+ agent=contact_creator,
+ expected_output="Contact created successfully in HubSpot."
+)
+
+crew = Crew(
+ agents=[contact_creator],
+ tasks=[create_contact]
+)
+
+crew.kickoff()
+```
+
+### إدارة جهات الاتصال
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with HubSpot contact management capabilities
+crm_manager = Agent(
+ role="CRM Manager",
+ goal="Manage and organize HubSpot contacts efficiently.",
+ backstory="An experienced CRM manager who maintains an organized contact database.",
+ apps=['hubspot'] # All HubSpot actions including contact management
+)
+
+# Task to manage contacts
+contact_task = Task(
+ description="Create a new contact for 'Jane Smith' at 'Global Tech Inc.' with email 'jane.smith@globaltech.com'.",
+ agent=crm_manager,
+ expected_output="Contact database updated with the new contact."
+)
+
+crew = Crew(
+ agents=[crm_manager],
+ tasks=[contact_task]
+)
+
+crew.kickoff()
+```
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل HubSpot أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/jira.mdx b/docs/v1.15.1/ar/enterprise/integrations/jira.mdx
new file mode 100644
index 000000000..87fdea8a1
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/jira.mdx
@@ -0,0 +1,248 @@
+---
+title: تكامل Jira
+description: "تتبع المشكلات وإدارة المشاريع مع تكامل Jira لـ CrewAI."
+icon: "bug"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة المشكلات والمشاريع وسير العمل عبر Jira. أنشئ المشكلات وحدّثها، وتتبع تقدم المشاريع، وأدر التعيينات، وبسّط إدارة مشاريعك باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Jira، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Jira بصلاحيات المشروع المناسبة
+- ربط حساب Jira الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Jira
+
+### 1. ربط حساب Jira الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Jira** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة المشكلات والمشاريع
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** إنشاء مشكلة في Jira.
+
+ **المعاملات:**
+ - `summary` (string, مطلوب): الملخص - ملخص موجز من سطر واحد للمشكلة. (مثال: "The printer stopped working").
+ - `project` (string, اختياري): المشروع - المشروع الذي تنتمي إليه المشكلة.
+ - `issueType` (string, اختياري): نوع المشكلة - الافتراضي هو Task.
+ - `jiraIssueStatus` (string, اختياري): الحالة - الافتراضي هو أول حالة في المشروع.
+ - `assignee` (string, اختياري): المكلّف - الافتراضي هو المستخدم المصادق عليه.
+ - `description` (string, اختياري): الوصف - وصف تفصيلي للمشكلة.
+ - `additionalFields` (string, اختياري): حقول إضافية - حدد أي حقول أخرى بصيغة JSON.
+
+
+
+
+ **الوصف:** تحديث مشكلة في Jira.
+
+ **المعاملات:**
+ - `issueKey` (string, مطلوب): مفتاح المشكلة (مثال: "TEST-1234").
+ - `summary` (string, اختياري): الملخص.
+ - `issueType` (string, اختياري): نوع المشكلة.
+ - `jiraIssueStatus` (string, اختياري): الحالة.
+ - `assignee` (string, اختياري): المكلّف.
+ - `description` (string, اختياري): الوصف.
+ - `additionalFields` (string, اختياري): حقول إضافية بصيغة JSON.
+
+
+
+
+ **الوصف:** الحصول على مشكلة بواسطة المفتاح في Jira.
+
+ **المعاملات:**
+ - `issueKey` (string, مطلوب): مفتاح المشكلة (مثال: "TEST-1234").
+
+
+
+
+ **الوصف:** البحث عن المشكلات في Jira باستخدام الفلاتر.
+
+ **المعاملات:**
+ - `jqlQuery` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل.
+ - `limit` (string, اختياري): حدود النتائج - الافتراضي 10.
+
+
+
+
+ **الوصف:** البحث عن المشكلات بواسطة JQL في Jira.
+
+ **المعاملات:**
+ - `jqlQuery` (string, مطلوب): استعلام JQL (مثال: "project = PROJECT").
+ - `paginationParameters` (object, اختياري): معاملات الترقيم.
+
+
+
+
+ **الوصف:** الحصول على المخطط المتوقع لنوع مشكلة.
+
+ **المعاملات:**
+ - `issueTypeId` (string, مطلوب): معرّف نوع المشكلة.
+ - `projectKey` (string, مطلوب): مفتاح المشروع.
+ - `operation` (string, مطلوب): نوع العملية، مثال CREATE_ISSUE أو UPDATE_ISSUE.
+
+
+
+
+ **الوصف:** الحصول على المشاريع في Jira.
+
+ **المعاملات:**
+ - `paginationParameters` (object, اختياري): معاملات الترقيم.
+
+
+
+
+ **الوصف:** الحصول على أنواع المشكلات بواسطة المشروع في Jira.
+
+ **المعاملات:**
+ - `project` (string, مطلوب): مفتاح المشروع.
+
+
+
+
+ **الوصف:** الحصول على جميع أنواع المشكلات في Jira.
+
+ **المعاملات:** لا توجد معاملات مطلوبة.
+
+
+
+
+ **الوصف:** الحصول على حالات المشكلات لمشروع معين.
+
+ **المعاملات:**
+ - `project` (string, مطلوب): مفتاح المشروع.
+
+
+
+
+ **الوصف:** الحصول على المكلّفين لمشروع معين.
+
+ **المعاملات:**
+ - `project` (string, مطلوب): مفتاح المشروع.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Jira
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Jira capabilities
+jira_agent = Agent(
+ role="Issue Manager",
+ goal="Manage Jira issues and track project progress efficiently",
+ backstory="An AI assistant specialized in issue tracking and project management.",
+ apps=['jira'] # All Jira actions will be available
+)
+
+# Task to create a bug report
+create_bug_task = Task(
+ description="Create a bug report for the login functionality with high priority and assign it to the development team",
+ agent=jira_agent,
+ expected_output="Bug report created successfully with issue key"
+)
+
+# Run the task
+crew = Crew(
+ agents=[jira_agent],
+ tasks=[create_bug_task]
+)
+
+crew.kickoff()
+```
+
+### تحليل المشاريع وإعداد التقارير
+
+```python
+from crewai import Agent, Task, Crew
+
+project_analyst = Agent(
+ role="Project Analyst",
+ goal="Analyze project data and generate insights from Jira",
+ backstory="An experienced project analyst who extracts insights from project management data.",
+ apps=['jira']
+)
+
+# Task to analyze project status
+analysis_task = Task(
+ description="""
+ 1. Get all projects and their issue types
+ 2. Search for all open issues across projects
+ 3. Analyze issue distribution by status and assignee
+ 4. Create a summary report issue with findings
+ """,
+ agent=project_analyst,
+ expected_output="Project analysis completed with summary report created"
+)
+
+crew = Crew(
+ agents=[project_analyst],
+ tasks=[analysis_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء الصلاحيات**
+
+- تأكد من أن حساب Jira الخاص بك لديه الصلاحيات اللازمة للمشاريع المستهدفة
+- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة لـ Jira API
+
+**مفاتيح المشاريع أو المشكلات غير الصالحة**
+
+- تحقق جيداً من مفاتيح المشاريع ومفاتيح المشكلات للتأكد من صحة الصيغة (مثال: "PROJ-123")
+- تأكد من وجود المشاريع وإمكانية الوصول إليها من حسابك
+
+**مشاكل استعلام JQL**
+
+- اختبر استعلامات JQL في بحث مشكلات Jira قبل استخدامها في استدعاءات API
+- تأكد من صحة إملاء أسماء الحقول في JQL ووجودها في مثيل Jira الخاص بك
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Jira أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/linear.mdx b/docs/v1.15.1/ar/enterprise/integrations/linear.mdx
new file mode 100644
index 000000000..c2eb34f84
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/linear.mdx
@@ -0,0 +1,261 @@
+---
+title: تكامل Linear
+description: "إدارة المشاريع البرمجية وتتبع الأخطاء مع تكامل Linear لـ CrewAI."
+icon: "list-check"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة المشكلات والمشاريع وسير عمل التطوير عبر Linear. أنشئ المشكلات وحدّثها، وأدر جداول المشاريع الزمنية، ونظّم الفرق، وبسّط عملية تطوير البرمجيات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Linear، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Linear بصلاحيات مساحة العمل المناسبة
+- ربط حساب Linear الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Linear
+
+### 1. ربط حساب Linear الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Linear** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة المشكلات والمشاريع
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** إنشاء مشكلة جديدة في Linear.
+
+ **المعاملات:**
+ - `teamId` (string, مطلوب): معرّف الفريق للمشكلة الجديدة.
+ - `title` (string, مطلوب): العنوان.
+ - `description` (string, اختياري): الوصف.
+ - `statusId` (string, اختياري): الحالة.
+ - `priority` (string, اختياري): الأولوية كعدد صحيح.
+ - `dueDate` (string, اختياري): تاريخ الاستحقاق بصيغة ISO 8601.
+ - `cycleId` (string, اختياري): معرّف الدورة المرتبطة.
+ - `additionalFields` (object, اختياري): حقول إضافية.
+
+
+
+
+ **الوصف:** تحديث مشكلة في Linear.
+
+ **المعاملات:**
+ - `issueId` (string, مطلوب): معرّف المشكلة المراد تحديثها.
+ - `title` (string, اختياري): العنوان.
+ - `description` (string, اختياري): الوصف.
+ - `statusId` (string, اختياري): الحالة.
+ - `priority` (string, اختياري): الأولوية.
+ - `dueDate` (string, اختياري): تاريخ الاستحقاق.
+
+
+
+
+ **الوصف:** الحصول على مشكلة بواسطة المعرّف في Linear.
+
+ **المعاملات:**
+ - `issueId` (string, مطلوب): معرّف المشكلة المراد جلبها.
+
+
+
+
+ **الوصف:** البحث عن المشكلات في Linear.
+
+ **المعاملات:**
+ - `queryTerm` (string, مطلوب): مصطلح البحث.
+ - `issueFilterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل.
+
+
+
+
+ **الوصف:** حذف مشكلة في Linear.
+
+ **المعاملات:**
+ - `issueId` (string, مطلوب): معرّف المشكلة المراد حذفها.
+
+
+
+
+ **الوصف:** أرشفة مشكلة في Linear.
+
+ **المعاملات:**
+ - `issueId` (string, مطلوب): معرّف المشكلة المراد أرشفتها.
+
+
+
+
+ **الوصف:** إنشاء مشكلة فرعية في Linear.
+
+ **المعاملات:**
+ - `parentId` (string, مطلوب): معرّف المشكلة الأصلية.
+ - `teamId` (string, مطلوب): معرّف الفريق.
+ - `title` (string, مطلوب): العنوان.
+ - `description` (string, اختياري): الوصف.
+
+
+
+
+ **الوصف:** إنشاء مشروع جديد في Linear.
+
+ **المعاملات:**
+ - `teamIds` (object, مطلوب): معرّف (معرّفات) الفريق المرتبطة بالمشروع.
+ - `projectName` (string, مطلوب): اسم المشروع.
+ - `description` (string, اختياري): وصف المشروع.
+
+
+
+
+ **الوصف:** تحديث مشروع في Linear.
+
+ **المعاملات:**
+ - `projectId` (string, مطلوب): معرّف المشروع المراد تحديثه.
+ - `projectName` (string, اختياري): اسم المشروع.
+ - `description` (string, اختياري): وصف المشروع.
+
+
+
+
+ **الوصف:** الحصول على مشروع بواسطة المعرّف في Linear.
+
+ **المعاملات:**
+ - `projectId` (string, مطلوب): معرّف المشروع المراد جلبه.
+
+
+
+
+ **الوصف:** حذف مشروع في Linear.
+
+ **المعاملات:**
+ - `projectId` (string, مطلوب): معرّف المشروع المراد حذفه.
+
+
+
+
+ **الوصف:** البحث عن الفرق في Linear.
+
+ **المعاملات:**
+ - `teamFilterFormula` (object, اختياري): فلتر بصيغة التعبير العادي المنفصل.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Linear
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Linear capabilities
+linear_agent = Agent(
+ role="Development Manager",
+ goal="Manage Linear issues and track development progress efficiently",
+ backstory="An AI assistant specialized in software development project management.",
+ apps=['linear'] # All Linear actions will be available
+)
+
+# Task to create a bug report
+create_bug_task = Task(
+ description="Create a high-priority bug report for the authentication system and assign it to the backend team",
+ agent=linear_agent,
+ expected_output="Bug report created successfully with issue ID"
+)
+
+# Run the task
+crew = Crew(
+ agents=[linear_agent],
+ tasks=[create_bug_task]
+)
+
+crew.kickoff()
+```
+
+### إدارة المشاريع والفرق
+
+```python
+from crewai import Agent, Task, Crew
+
+project_coordinator = Agent(
+ role="Project Coordinator",
+ goal="Coordinate projects and teams in Linear efficiently",
+ backstory="An experienced project coordinator who manages development cycles and team workflows.",
+ apps=['linear']
+)
+
+# Task to coordinate project setup
+project_coordination = Task(
+ description="""
+ 1. Search for engineering teams in Linear
+ 2. Create a new project for Q2 feature development
+ 3. Associate the project with relevant teams
+ 4. Create initial project milestones as issues
+ """,
+ agent=project_coordinator,
+ expected_output="Q2 project created with teams assigned and initial milestones established"
+)
+
+crew = Crew(
+ agents=[project_coordinator],
+ tasks=[project_coordination]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء الصلاحيات**
+
+- تأكد من أن حساب Linear الخاص بك لديه الصلاحيات اللازمة لمساحة العمل المستهدفة
+- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة لـ Linear API
+
+**معرّفات ومراجع غير صالحة**
+
+- تحقق جيداً من معرّفات الفرق والمشكلات والمشاريع للتأكد من صحة صيغة UUID
+- تأكد من وجود الكيانات المشار إليها وإمكانية الوصول إليها
+
+**مشاكل التاريخ والوقت**
+
+- استخدم صيغة ISO 8601 لتواريخ الاستحقاق والطوابع الزمنية
+- تأكد من معالجة المناطق الزمنية بشكل صحيح
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Linear أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/microsoft_excel.mdx b/docs/v1.15.1/ar/enterprise/integrations/microsoft_excel.mdx
new file mode 100644
index 000000000..0ce049695
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/microsoft_excel.mdx
@@ -0,0 +1,269 @@
+---
+title: تكامل Microsoft Excel
+description: "إدارة المصنفات والبيانات مع تكامل Microsoft Excel لـ CrewAI."
+icon: "table"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إنشاء وإدارة مصنفات Excel وأوراق العمل والجداول والرسوم البيانية في OneDrive أو SharePoint. تعامل مع نطاقات البيانات، وأنشئ المرئيات، وأدر الجداول، وبسّط سير عمل جداول البيانات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Microsoft Excel، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Microsoft 365 مع إمكانية الوصول إلى Excel وOneDrive/SharePoint
+- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Microsoft Excel
+
+### 1. ربط حساب Microsoft الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Microsoft Excel** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى الملفات ومصنفات Excel
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** إنشاء مصنف Excel جديد في OneDrive أو SharePoint.
+
+ **المعاملات:**
+ - `file_path` (string, مطلوب): المسار حيث يتم إنشاء المصنف (مثال: 'MyWorkbook.xlsx')
+ - `worksheets` (array, اختياري): أوراق العمل الأولية المراد إنشاؤها
+
+
+
+
+ **الوصف:** الحصول على جميع مصنفات Excel من OneDrive أو SharePoint.
+
+ **المعاملات:**
+ - `select` (string, اختياري): اختيار خصائص محددة للإرجاع
+ - `filter` (string, اختياري): تصفية النتائج باستخدام صيغة OData
+ - `top` (integer, اختياري): عدد العناصر المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 999
+
+
+
+
+ **الوصف:** الحصول على جميع أوراق العمل في مصنف Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+
+
+
+
+ **الوصف:** إنشاء ورقة عمل جديدة في مصنف Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `name` (string, مطلوب): اسم ورقة العمل الجديدة
+
+
+
+
+ **الوصف:** الحصول على البيانات من نطاق محدد في ورقة عمل Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+ - `range` (string, مطلوب): عنوان النطاق (مثال: 'A1:C10')
+
+
+
+
+ **الوصف:** تحديث البيانات في نطاق محدد في ورقة عمل Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+ - `range` (string, مطلوب): عنوان النطاق (مثال: 'A1:C10')
+ - `values` (array, مطلوب): مصفوفة ثنائية الأبعاد من القيم لتعيينها في النطاق
+
+
+
+
+ **الوصف:** إنشاء جدول في ورقة عمل Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+ - `range` (string, مطلوب): النطاق للجدول (مثال: 'A1:D10')
+ - `has_headers` (boolean, اختياري): ما إذا كان الصف الأول يحتوي على ترويسات. الافتراضي: true
+
+
+
+
+ **الوصف:** إضافة صف جديد إلى جدول Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+ - `table_name` (string, مطلوب): اسم الجدول
+ - `values` (array, مطلوب): مصفوفة من القيم للصف الجديد
+
+
+
+
+ **الوصف:** إنشاء رسم بياني في ورقة عمل Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+ - `chart_type` (string, مطلوب): نوع الرسم البياني (مثال: 'ColumnClustered', 'Line', 'Pie')
+ - `source_data` (string, مطلوب): نطاق البيانات للرسم البياني (مثال: 'A1:B10')
+ - `series_by` (string, اختياري): كيفية تفسير البيانات ('Auto', 'Columns', 'Rows'). الافتراضي: Auto
+
+
+
+
+ **الوصف:** الحصول على قيمة خلية واحدة في ورقة عمل Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+ - `row` (integer, مطلوب): رقم الصف (قائم على الصفر)
+ - `column` (integer, مطلوب): رقم العمود (قائم على الصفر)
+
+
+
+
+ **الوصف:** الحصول على النطاق المستخدم لورقة عمل Excel (يحتوي على جميع البيانات).
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+
+
+
+
+ **الوصف:** الحصول على جميع الجداول في ورقة عمل Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+
+
+
+
+ **الوصف:** الحصول على البيانات من جدول محدد في ورقة عمل Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+ - `table_name` (string, مطلوب): اسم الجدول
+
+
+
+
+ **الوصف:** حذف ورقة عمل من مصنف Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل المراد حذفها
+
+
+
+
+ **الوصف:** حذف جدول من ورقة عمل Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+ - `worksheet_name` (string, مطلوب): اسم ورقة العمل
+ - `table_name` (string, مطلوب): اسم الجدول المراد حذفه
+
+
+
+
+ **الوصف:** الحصول على جميع النطاقات المسماة في مصنف Excel.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف ملف Excel
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Excel
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Excel capabilities
+excel_agent = Agent(
+ role="Excel Data Manager",
+ goal="Manage Excel workbooks and data efficiently",
+ backstory="An AI assistant specialized in Excel data management and analysis.",
+ apps=['microsoft_excel'] # All Excel actions will be available
+)
+
+# Task to create and populate a workbook
+data_management_task = Task(
+ description="Create a new sales report workbook with data analysis and charts",
+ agent=excel_agent,
+ expected_output="Excel workbook created with sales data, analysis, and visualizations"
+)
+
+# Run the task
+crew = Crew(
+ agents=[excel_agent],
+ tasks=[data_management_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء الصلاحيات**
+
+- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات المناسبة لـ Excel وOneDrive/SharePoint
+- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة (Files.Read.All, Files.ReadWrite.All)
+
+**مشاكل النطاق وورقة العمل**
+
+- تحقق من وجود أسماء أوراق العمل في المصنف المحدد
+- تأكد من صحة تنسيق عناوين النطاقات (مثال: 'A1:C10')
+
+**مشاكل الرسوم البيانية**
+
+- تحقق من دعم أنواع الرسوم البيانية (ColumnClustered, Line, Pie، إلخ.)
+- تأكد من أن نطاقات بيانات المصدر تحتوي على بيانات مناسبة لنوع الرسم البياني
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft Excel
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/microsoft_onedrive.mdx b/docs/v1.15.1/ar/enterprise/integrations/microsoft_onedrive.mdx
new file mode 100644
index 000000000..7ce92c1c0
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/microsoft_onedrive.mdx
@@ -0,0 +1,218 @@
+---
+title: تكامل Microsoft OneDrive
+description: "إدارة الملفات والمجلدات مع تكامل Microsoft OneDrive لـ CrewAI."
+icon: "cloud"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من رفع وتحميل وإدارة الملفات والمجلدات في Microsoft OneDrive. أتمت عمليات الملفات، ونظّم المحتوى، وأنشئ روابط المشاركة، وبسّط سير عمل التخزين السحابي باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Microsoft OneDrive، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Microsoft مع إمكانية الوصول إلى OneDrive
+- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Microsoft OneDrive
+
+### 1. ربط حساب Microsoft الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Microsoft OneDrive** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى الملفات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** عرض الملفات والمجلدات في OneDrive.
+
+ **المعاملات:**
+ - `top` (integer, اختياري): عدد العناصر المراد استرجاعها (الحد الأقصى 1000). الافتراضي: `50`.
+ - `orderby` (string, اختياري): الترتيب حسب حقل (مثال: "name asc", "lastModifiedDateTime desc"). الافتراضي: "name asc".
+ - `filter` (string, اختياري): تعبير فلتر OData.
+
+
+
+
+ **الوصف:** الحصول على معلومات حول ملف أو مجلد محدد.
+
+ **المعاملات:**
+ - `item_id` (string, مطلوب): معرّف الملف أو المجلد.
+
+
+
+
+ **الوصف:** تحميل ملف من OneDrive.
+
+ **المعاملات:**
+ - `item_id` (string, مطلوب): معرّف الملف المراد تحميله.
+
+
+
+
+ **الوصف:** رفع ملف إلى OneDrive.
+
+ **المعاملات:**
+ - `file_name` (string, مطلوب): اسم الملف المراد رفعه.
+ - `content` (string, مطلوب): محتوى الملف بترميز Base64.
+
+
+
+
+ **الوصف:** إنشاء مجلد جديد في OneDrive.
+
+ **المعاملات:**
+ - `folder_name` (string, مطلوب): اسم المجلد المراد إنشاؤه.
+
+
+
+
+ **الوصف:** حذف ملف أو مجلد من OneDrive.
+
+ **المعاملات:**
+ - `item_id` (string, مطلوب): معرّف الملف أو المجلد المراد حذفه.
+
+
+
+
+ **الوصف:** نسخ ملف أو مجلد في OneDrive.
+
+ **المعاملات:**
+ - `item_id` (string, مطلوب): معرّف الملف أو المجلد المراد نسخه.
+ - `parent_id` (string, اختياري): معرّف مجلد الوجهة (اختياري، الافتراضي هو الجذر).
+ - `new_name` (string, اختياري): الاسم الجديد للعنصر المنسوخ (اختياري).
+
+
+
+
+ **الوصف:** نقل ملف أو مجلد في OneDrive.
+
+ **المعاملات:**
+ - `item_id` (string, مطلوب): معرّف الملف أو المجلد المراد نقله.
+ - `parent_id` (string, مطلوب): معرّف مجلد الوجهة.
+ - `new_name` (string, اختياري): الاسم الجديد للعنصر (اختياري).
+
+
+
+
+ **الوصف:** البحث عن الملفات والمجلدات في OneDrive.
+
+ **المعاملات:**
+ - `query` (string, مطلوب): سلسلة استعلام البحث.
+ - `top` (integer, اختياري): عدد النتائج المراد إرجاعها (الحد الأقصى 1000). الافتراضي: `50`.
+
+
+
+
+ **الوصف:** إنشاء رابط مشاركة لملف أو مجلد.
+
+ **المعاملات:**
+ - `item_id` (string, مطلوب): معرّف الملف أو المجلد المراد مشاركته.
+ - `type` (string, اختياري): نوع رابط المشاركة. القيم: `view`, `edit`, `embed`. الافتراضي: `view`.
+ - `scope` (string, اختياري): نطاق رابط المشاركة. القيم: `anonymous`, `organization`. الافتراضي: `anonymous`.
+
+
+
+
+ **الوصف:** الحصول على الملفات التي تم الوصول إليها مؤخراً من OneDrive.
+
+ **المعاملات:**
+ - `top` (integer, اختياري): عدد العناصر المراد استرجاعها (الحد الأقصى 200). الافتراضي: `25`.
+
+
+
+
+ **الوصف:** الحصول على الملفات والمجلدات المشاركة مع المستخدم.
+
+ **المعاملات:**
+ - `top` (integer, اختياري): عدد العناصر المراد استرجاعها (الحد الأقصى 200). الافتراضي: `50`.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Microsoft OneDrive
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Microsoft OneDrive capabilities
+onedrive_agent = Agent(
+ role="File Manager",
+ goal="Manage files and folders in OneDrive efficiently",
+ backstory="An AI assistant specialized in Microsoft OneDrive file operations and organization.",
+ apps=['microsoft_onedrive'] # All OneDrive actions will be available
+)
+
+# Task to list files and create a folder
+organize_files_task = Task(
+ description="List all files in my OneDrive root directory and create a new folder called 'Project Documents'.",
+ agent=onedrive_agent,
+ expected_output="List of files displayed and new folder 'Project Documents' created."
+)
+
+# Run the task
+crew = Crew(
+ agents=[onedrive_agent],
+ tasks=[organize_files_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء المصادقة**
+
+- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات اللازمة للوصول إلى الملفات (مثال: `Files.Read`, `Files.ReadWrite`).
+- تحقق من أن اتصال OAuth يتضمن جميع النطاقات المطلوبة.
+
+**مشاكل رفع الملفات**
+
+- تأكد من توفير `file_name` و`content` لعمليات رفع الملفات.
+- يجب أن يكون المحتوى بترميز Base64 للملفات الثنائية.
+
+**عمليات الملفات (النسخ/النقل)**
+
+- لـ `move_item`، تأكد من توفير كل من `item_id` و`parent_id`.
+- تحقق من وجود مجلدات الوجهة وإمكانية الوصول إليها.
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft OneDrive
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/microsoft_outlook.mdx b/docs/v1.15.1/ar/enterprise/integrations/microsoft_outlook.mdx
new file mode 100644
index 000000000..f1a6cd99e
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/microsoft_outlook.mdx
@@ -0,0 +1,227 @@
+---
+title: تكامل Microsoft Outlook
+description: "إدارة البريد الإلكتروني والتقويم وجهات الاتصال مع تكامل Microsoft Outlook لـ CrewAI."
+icon: "envelope"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من الوصول إلى رسائل Outlook الإلكترونية وأحداث التقويم وجهات الاتصال وإدارتها. أرسل رسائل البريد الإلكتروني، واسترجع الرسائل، وأدر أحداث التقويم، ونظّم جهات الاتصال باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Microsoft Outlook، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Microsoft مع إمكانية الوصول إلى Outlook
+- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Microsoft Outlook
+
+### 1. ربط حساب Microsoft الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Microsoft Outlook** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى البريد والتقويم وجهات الاتصال
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** الحصول على رسائل البريد الإلكتروني من صندوق بريد المستخدم.
+
+ **المعاملات:**
+ - `top` (integer, اختياري): عدد الرسائل (الحد الأقصى 1000). الافتراضي: `10`.
+ - `filter` (string, اختياري): تعبير فلتر OData (مثال: "isRead eq false").
+ - `search` (string, اختياري): سلسلة استعلام البحث.
+ - `orderby` (string, اختياري): الترتيب (مثال: "receivedDateTime desc"). الافتراضي: "receivedDateTime desc".
+
+
+
+
+ **الوصف:** إرسال رسالة بريد إلكتروني.
+
+ **المعاملات:**
+ - `to_recipients` (array, مطلوب): مصفوفة عناوين المستلمين.
+ - `subject` (string, مطلوب): موضوع البريد الإلكتروني.
+ - `body` (string, مطلوب): محتوى البريد الإلكتروني.
+ - `body_type` (string, اختياري): نوع المحتوى. القيم: `Text`, `HTML`. الافتراضي: `HTML`.
+ - `importance` (string, اختياري): مستوى الأهمية. القيم: `low`, `normal`, `high`. الافتراضي: `normal`.
+ - `cc_recipients` (array, اختياري): مصفوفة عناوين النسخة الكربونية.
+
+
+
+
+ **الوصف:** الحصول على أحداث التقويم من تقويم المستخدم.
+
+ **المعاملات:**
+ - `top` (integer, اختياري): عدد الأحداث (الحد الأقصى 1000). الافتراضي: `10`.
+ - `filter` (string, اختياري): تعبير فلتر OData.
+ - `orderby` (string, اختياري): الترتيب. الافتراضي: "start/dateTime asc".
+
+
+
+
+ **الوصف:** إنشاء حدث تقويم جديد.
+
+ **المعاملات:**
+ - `subject` (string, مطلوب): موضوع/عنوان الحدث.
+ - `start_datetime` (string, مطلوب): وقت البداية بصيغة ISO 8601.
+ - `end_datetime` (string, مطلوب): وقت النهاية بصيغة ISO 8601.
+ - `timezone` (string, اختياري): المنطقة الزمنية. الافتراضي: `UTC`.
+ - `location` (string, اختياري): موقع الحدث.
+ - `attendees` (array, اختياري): مصفوفة عناوين الحضور.
+
+
+
+
+ **الوصف:** الحصول على جهات الاتصال من دفتر عناوين المستخدم.
+
+ **المعاملات:**
+ - `top` (integer, اختياري): عدد جهات الاتصال (الحد الأقصى 1000). الافتراضي: `10`.
+ - `filter` (string, اختياري): تعبير فلتر OData.
+
+
+
+
+ **الوصف:** إنشاء جهة اتصال جديدة في دفتر عناوين المستخدم.
+
+ **المعاملات:**
+ - `displayName` (string, مطلوب): اسم العرض لجهة الاتصال.
+ - `givenName` (string, اختياري): الاسم الأول.
+ - `surname` (string, اختياري): اسم العائلة.
+ - `emailAddresses` (array, اختياري): مصفوفة عناوين البريد الإلكتروني.
+ - `jobTitle` (string, اختياري): المسمى الوظيفي.
+ - `companyName` (string, اختياري): اسم الشركة.
+
+
+
+
+ **الوصف:** الرد على رسالة بريد إلكتروني.
+
+ **المعاملات:**
+ - `message_id` (string, مطلوب): المعرّف الفريد للرسالة المراد الرد عليها.
+ - `comment` (string, مطلوب): محتوى الرد.
+
+
+
+
+ **الوصف:** إعادة توجيه رسالة بريد إلكتروني.
+
+ **المعاملات:**
+ - `message_id` (string, مطلوب): المعرّف الفريد للرسالة المراد إعادة توجيهها.
+ - `to_recipients` (array, مطلوب): مصفوفة عناوين المستلمين.
+ - `comment` (string, اختياري): رسالة اختيارية لتضمينها فوق المحتوى المُعاد توجيهه.
+
+
+
+
+ **الوصف:** حذف رسالة بريد إلكتروني.
+
+ **المعاملات:**
+ - `message_id` (string, مطلوب): المعرّف الفريد للرسالة المراد حذفها.
+
+
+
+
+ **الوصف:** تحديث حدث تقويم موجود.
+
+ **المعاملات:**
+ - `event_id` (string, مطلوب): المعرّف الفريد للحدث.
+ - `subject` (string, اختياري): الموضوع/العنوان الجديد.
+ - `start_time` (string, اختياري): وقت البداية الجديد بصيغة ISO 8601.
+ - `location` (string, اختياري): الموقع الجديد.
+
+
+
+
+ **الوصف:** حذف حدث تقويم.
+
+ **المعاملات:**
+ - `event_id` (string, مطلوب): المعرّف الفريد للحدث المراد حذفه.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Microsoft Outlook
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Microsoft Outlook capabilities
+outlook_agent = Agent(
+ role="Email Assistant",
+ goal="Manage emails, calendar events, and contacts efficiently",
+ backstory="An AI assistant specialized in Microsoft Outlook operations and communication management.",
+ apps=['microsoft_outlook'] # All Outlook actions will be available
+)
+
+# Task to send an email
+send_email_task = Task(
+ description="Send an email to 'colleague@example.com' with subject 'Project Update' and body 'Hi, here is the latest project update. Best regards.'",
+ agent=outlook_agent,
+ expected_output="Email sent successfully to colleague@example.com"
+)
+
+# Run the task
+crew = Crew(
+ agents=[outlook_agent],
+ tasks=[send_email_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء المصادقة**
+
+- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات اللازمة للوصول إلى البريد والتقويم وجهات الاتصال.
+- النطاقات المطلوبة تشمل: `Mail.Read`, `Mail.Send`, `Calendars.ReadWrite`, `Contacts.ReadWrite`.
+
+**مشاكل إرسال البريد الإلكتروني**
+
+- تأكد من توفير `to_recipients` و`subject` و`body` لـ `send_email`.
+- تحقق من صحة صيغة عناوين البريد الإلكتروني.
+
+**إنشاء أحداث التقويم**
+
+- تأكد من توفير `subject` و`start_datetime` و`end_datetime`.
+- استخدم صيغة ISO 8601 المناسبة لحقول التاريخ والوقت.
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft Outlook
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/microsoft_sharepoint.mdx b/docs/v1.15.1/ar/enterprise/integrations/microsoft_sharepoint.mdx
new file mode 100644
index 000000000..56b88708d
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/microsoft_sharepoint.mdx
@@ -0,0 +1,270 @@
+---
+title: تكامل Microsoft SharePoint
+description: "إدارة المواقع والقوائم والمستندات مع تكامل Microsoft SharePoint لـ CrewAI."
+icon: "folder-tree"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من الوصول إلى مواقع SharePoint والقوائم ومكتبات المستندات وإدارتها. استرجع معلومات المواقع، وأدر عناصر القوائم، وارفع الملفات ونظّمها، وبسّط سير عمل SharePoint باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Microsoft SharePoint، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Microsoft 365 مع إمكانية الوصول إلى SharePoint
+- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Microsoft SharePoint
+
+### 1. ربط حساب Microsoft الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Microsoft SharePoint** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى مواقع SharePoint ومحتوياتها
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** الحصول على جميع مواقع SharePoint التي يمكن للمستخدم الوصول إليها.
+
+ **المعاملات:**
+ - `search` (string, اختياري): استعلام بحث لتصفية المواقع
+ - `top` (integer, اختياري): عدد العناصر المراد إرجاعها. الحد الأدنى: 1، الحد الأقصى: 999
+
+
+
+
+ **الوصف:** الحصول على معلومات حول موقع SharePoint محدد.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint
+
+
+
+
+ **الوصف:** عرض جميع مكتبات المستندات (drives) في موقع SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
+
+
+
+
+ **الوصف:** الحصول على جميع القوائم في موقع SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint
+
+
+
+
+ **الوصف:** الحصول على عناصر من قائمة SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint
+ - `list_id` (string, مطلوب): معرّف القائمة
+ - `expand` (string, اختياري): توسيع البيانات المرتبطة (مثال: 'fields')
+
+
+
+
+ **الوصف:** إنشاء عنصر جديد في قائمة SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint
+ - `list_id` (string, مطلوب): معرّف القائمة
+ - `fields` (object, مطلوب): قيم الحقول للعنصر الجديد
+
+
+
+
+ **الوصف:** تحديث عنصر في قائمة SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint
+ - `list_id` (string, مطلوب): معرّف القائمة
+ - `item_id` (string, مطلوب): معرّف العنصر المراد تحديثه
+ - `fields` (object, مطلوب): قيم الحقول المراد تحديثها
+
+
+
+
+ **الوصف:** حذف عنصر من قائمة SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint
+ - `list_id` (string, مطلوب): معرّف القائمة
+ - `item_id` (string, مطلوب): معرّف العنصر المراد حذفه
+
+
+
+
+ **الوصف:** رفع ملف إلى مكتبة مستندات SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint
+ - `file_path` (string, مطلوب): المسار حيث يتم رفع الملف
+ - `content` (string, مطلوب): محتوى الملف المراد رفعه
+
+
+
+
+ **الوصف:** استرجاع الملفات والمجلدات من مكتبة مستندات SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
+ - `drive_id` (string, مطلوب): معرّف مكتبة المستندات
+ - `folder_id` (string, اختياري): معرّف المجلد. الافتراضي: 'root'
+ - `top` (integer, اختياري): الحد الأقصى لعدد العناصر. الافتراضي: 50
+
+
+
+
+ **الوصف:** البحث عن الملفات والمجلدات في مكتبة مستندات SharePoint بالكلمات المفتاحية.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
+ - `drive_id` (string, مطلوب): معرّف مكتبة المستندات
+ - `query` (string, مطلوب): كلمات البحث المفتاحية
+
+
+
+
+ **الوصف:** حذف ملف أو مجلد من مكتبة مستندات SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
+ - `drive_id` (string, مطلوب): معرّف مكتبة المستندات
+ - `item_id` (string, مطلوب): المعرّف الفريد للملف أو المجلد المراد حذفه
+
+
+
+
+ **الوصف:** إنشاء مجلد جديد في مكتبة مستندات SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
+ - `drive_id` (string, مطلوب): معرّف مكتبة المستندات
+ - `folder_name` (string, مطلوب): اسم المجلد الجديد
+ - `parent_id` (string, اختياري): معرّف المجلد الأصلي. الافتراضي: 'root'
+
+
+
+
+ **الوصف:** تحميل محتوى ملف خام من مكتبة مستندات SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
+ - `drive_id` (string, مطلوب): معرّف مكتبة المستندات
+ - `item_id` (string, مطلوب): المعرّف الفريد للملف المراد تحميله
+
+
+
+
+ **الوصف:** نسخ ملف أو مجلد إلى موقع جديد داخل SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
+ - `drive_id` (string, مطلوب): معرّف مكتبة المستندات
+ - `item_id` (string, مطلوب): المعرّف الفريد للملف أو المجلد المراد نسخه
+ - `destination_folder_id` (string, مطلوب): معرّف مجلد الوجهة
+
+
+
+
+ **الوصف:** نقل ملف أو مجلد إلى موقع جديد داخل SharePoint.
+
+ **المعاملات:**
+ - `site_id` (string, مطلوب): معرّف موقع SharePoint الكامل
+ - `drive_id` (string, مطلوب): معرّف مكتبة المستندات
+ - `item_id` (string, مطلوب): المعرّف الفريد للملف أو المجلد المراد نقله
+ - `destination_folder_id` (string, مطلوب): معرّف مجلد الوجهة
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ SharePoint
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with SharePoint capabilities
+sharepoint_agent = Agent(
+ role="SharePoint Manager",
+ goal="Manage SharePoint sites, lists, and documents efficiently",
+ backstory="An AI assistant specialized in SharePoint content management and collaboration.",
+ apps=['microsoft_sharepoint'] # All SharePoint actions will be available
+)
+
+# Task to organize SharePoint content
+content_organization_task = Task(
+ description="List all accessible SharePoint sites and organize content by department",
+ agent=sharepoint_agent,
+ expected_output="SharePoint sites listed and content organized by department"
+)
+
+# Run the task
+crew = Crew(
+ agents=[sharepoint_agent],
+ tasks=[content_organization_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء الصلاحيات**
+
+- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات المناسبة لمواقع SharePoint
+- تحقق من أن اتصال OAuth يتضمن النطاقات المطلوبة (Sites.Read.All, Sites.ReadWrite.All)
+
+**مشاكل معرّفات المواقع والقوائم**
+
+- تحقق من صحة معرّفات المواقع والقوائم وصيغتها الصحيحة
+- استخدم إجراءات get_sites وget_site_lists لاكتشاف المعرّفات الصالحة
+
+**مشاكل الحقول والمخطط**
+
+- تأكد من تطابق أسماء الحقول تماماً مع مخطط قائمة SharePoint
+- تحقق من تضمين الحقول المطلوبة عند إنشاء أو تحديث عناصر القوائم
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft SharePoint
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/microsoft_teams.mdx b/docs/v1.15.1/ar/enterprise/integrations/microsoft_teams.mdx
new file mode 100644
index 000000000..9714fa580
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/microsoft_teams.mdx
@@ -0,0 +1,205 @@
+---
+title: تكامل Microsoft Teams
+description: "التعاون الجماعي والتواصل مع تكامل Microsoft Teams لـ CrewAI."
+icon: "users"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من الوصول إلى بيانات Teams وإرسال الرسائل وإنشاء الاجتماعات وإدارة القنوات. أتمت التواصل الجماعي، وجدوِل الاجتماعات، واسترجع الرسائل، وبسّط سير عمل التعاون باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Microsoft Teams، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Microsoft مع إمكانية الوصول إلى Teams
+- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Microsoft Teams
+
+### 1. ربط حساب Microsoft الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Microsoft Teams** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى Teams
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** الحصول على جميع الفرق التي ينتمي إليها المستخدم.
+
+ **المعاملات:**
+ - لا توجد معاملات مطلوبة.
+
+
+
+
+ **الوصف:** الحصول على القنوات في فريق محدد.
+
+ **المعاملات:**
+ - `team_id` (string, مطلوب): معرّف الفريق.
+
+
+
+
+ **الوصف:** إرسال رسالة إلى قناة Teams.
+
+ **المعاملات:**
+ - `team_id` (string, مطلوب): معرّف الفريق.
+ - `channel_id` (string, مطلوب): معرّف القناة.
+ - `message` (string, مطلوب): محتوى الرسالة.
+ - `content_type` (string, اختياري): نوع المحتوى (html أو text). الافتراضي: `text`.
+
+
+
+
+ **الوصف:** الحصول على الرسائل من قناة Teams.
+
+ **المعاملات:**
+ - `team_id` (string, مطلوب): معرّف الفريق.
+ - `channel_id` (string, مطلوب): معرّف القناة.
+ - `top` (integer, اختياري): عدد الرسائل (الحد الأقصى 50). الافتراضي: `20`.
+
+
+
+
+ **الوصف:** إنشاء اجتماع Teams.
+
+ **المعاملات:**
+ - `subject` (string, مطلوب): موضوع/عنوان الاجتماع.
+ - `startDateTime` (string, مطلوب): وقت بداية الاجتماع (صيغة ISO 8601 مع المنطقة الزمنية).
+ - `endDateTime` (string, مطلوب): وقت نهاية الاجتماع (صيغة ISO 8601 مع المنطقة الزمنية).
+
+
+
+
+ **الوصف:** الحصول على أعضاء فريق محدد.
+
+ **المعاملات:**
+ - `team_id` (string, مطلوب): المعرّف الفريد للفريق.
+ - `top` (integer, اختياري): الحد الأقصى لعدد الأعضاء (1-999). الافتراضي: `100`.
+
+
+
+
+ **الوصف:** إنشاء قناة جديدة في فريق.
+
+ **المعاملات:**
+ - `team_id` (string, مطلوب): المعرّف الفريد للفريق.
+ - `display_name` (string, مطلوب): اسم القناة. الحد الأقصى 50 حرفاً.
+ - `description` (string, اختياري): وصف اختياري يشرح غرض القناة.
+ - `membership_type` (string, اختياري): ظهور القناة. القيم: `standard`, `private`. الافتراضي: `standard`.
+
+
+
+
+ **الوصف:** الرد على رسالة في قناة Teams.
+
+ **المعاملات:**
+ - `team_id` (string, مطلوب): المعرّف الفريد للفريق.
+ - `channel_id` (string, مطلوب): المعرّف الفريد للقناة.
+ - `message_id` (string, مطلوب): المعرّف الفريد للرسالة المراد الرد عليها.
+ - `message` (string, مطلوب): محتوى الرد.
+ - `content_type` (string, اختياري): صيغة المحتوى. القيم: `html`, `text`. الافتراضي: `text`.
+
+
+
+
+ **الوصف:** تحديث اجتماع عبر الإنترنت موجود.
+
+ **المعاملات:**
+ - `meeting_id` (string, مطلوب): المعرّف الفريد للاجتماع.
+ - `subject` (string, اختياري): عنوان الاجتماع الجديد.
+ - `startDateTime` (string, اختياري): وقت البداية الجديد بصيغة ISO 8601.
+ - `endDateTime` (string, اختياري): وقت النهاية الجديد بصيغة ISO 8601.
+
+
+
+
+ **الوصف:** حذف اجتماع عبر الإنترنت.
+
+ **المعاملات:**
+ - `meeting_id` (string, مطلوب): المعرّف الفريد للاجتماع المراد حذفه.
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Microsoft Teams
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Microsoft Teams capabilities
+teams_agent = Agent(
+ role="Teams Coordinator",
+ goal="Manage Teams communication and meetings efficiently",
+ backstory="An AI assistant specialized in Microsoft Teams operations and team collaboration.",
+ apps=['microsoft_teams'] # All Teams actions will be available
+)
+
+# Task to list teams and channels
+explore_teams_task = Task(
+ description="List all teams I'm a member of and then get the channels for the first team.",
+ agent=teams_agent,
+ expected_output="List of teams and channels displayed."
+)
+
+# Run the task
+crew = Crew(
+ agents=[teams_agent],
+ tasks=[explore_teams_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء المصادقة**
+
+- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات اللازمة للوصول إلى Teams.
+- النطاقات المطلوبة تشمل: `Team.ReadBasic.All`, `Channel.ReadBasic.All`, `ChannelMessage.Send`, `OnlineMeetings.ReadWrite`.
+
+**إنشاء الاجتماعات**
+
+- تأكد من توفير `subject` و`startDateTime` و`endDateTime`.
+- استخدم صيغة ISO 8601 مع المنطقة الزمنية لحقول التاريخ والوقت.
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft Teams
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/microsoft_word.mdx b/docs/v1.15.1/ar/enterprise/integrations/microsoft_word.mdx
new file mode 100644
index 000000000..32ab4eb5b
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/microsoft_word.mdx
@@ -0,0 +1,168 @@
+---
+title: تكامل Microsoft Word
+description: "إنشاء المستندات وإدارتها مع تكامل Microsoft Word لـ CrewAI."
+icon: "file-word"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إنشاء وقراءة وإدارة مستندات Word والملفات النصية في OneDrive أو SharePoint. أتمت إنشاء المستندات، واسترجع المحتوى، وأدر خصائص المستندات، وبسّط سير عمل المستندات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Microsoft Word، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Microsoft مع إمكانية الوصول إلى Word وOneDrive/SharePoint
+- ربط حساب Microsoft الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Microsoft Word
+
+### 1. ربط حساب Microsoft الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Microsoft Word** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى الملفات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** الحصول على جميع مستندات Word من OneDrive أو SharePoint.
+
+ **المعاملات:**
+ - `top` (integer, اختياري): عدد العناصر المراد إرجاعها (الحد الأدنى 1، الحد الأقصى 999).
+ - `filter` (string, اختياري): تصفية النتائج باستخدام صيغة OData.
+
+
+
+
+ **الوصف:** إنشاء مستند نصي (.txt) مع محتوى. يُنصح به لإنشاء المحتوى برمجياً.
+
+ **المعاملات:**
+ - `file_name` (string, مطلوب): اسم المستند النصي (يجب أن ينتهي بـ .txt).
+ - `content` (string, اختياري): المحتوى النصي للمستند.
+
+
+
+
+ **الوصف:** الحصول على محتوى مستند (يعمل بشكل أفضل مع الملفات النصية).
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف المستند.
+
+
+
+
+ **الوصف:** الحصول على خصائص وبيانات وصفية لمستند.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف المستند.
+
+
+
+
+ **الوصف:** حذف مستند.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف المستند المراد حذفه.
+
+
+
+
+ **الوصف:** نسخ مستند إلى موقع جديد في OneDrive.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف المستند المراد نسخه
+ - `name` (string, اختياري): الاسم الجديد للمستند المنسوخ
+ - `parent_id` (string, اختياري): معرّف مجلد الوجهة (الافتراضي هو الجذر)
+
+
+
+
+ **الوصف:** نقل مستند إلى موقع جديد في OneDrive.
+
+ **المعاملات:**
+ - `file_id` (string, مطلوب): معرّف المستند المراد نقله
+ - `parent_id` (string, مطلوب): معرّف مجلد الوجهة
+ - `name` (string, اختياري): الاسم الجديد للمستند المنقول
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Microsoft Word
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Microsoft Word capabilities
+word_agent = Agent(
+ role="Document Manager",
+ goal="Manage Word documents and text files efficiently",
+ backstory="An AI assistant specialized in Microsoft Word document operations and content management.",
+ apps=['microsoft_word'] # All Word actions will be available
+)
+
+# Task to create a new text document
+create_doc_task = Task(
+ description="Create a new text document named 'meeting_notes.txt' with content 'Meeting Notes from January 2024: Key discussion points and action items.'",
+ agent=word_agent,
+ expected_output="New text document 'meeting_notes.txt' created successfully."
+)
+
+# Run the task
+crew = Crew(
+ agents=[word_agent],
+ tasks=[create_doc_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء المصادقة**
+
+- تأكد من أن حساب Microsoft الخاص بك لديه الصلاحيات اللازمة للوصول إلى الملفات (`Files.Read.All`, `Files.ReadWrite.All`).
+
+**مشاكل إنشاء الملفات**
+
+- عند إنشاء مستندات نصية، تأكد من أن `file_name` ينتهي بامتداد `.txt`.
+- تحقق من أن لديك صلاحيات الكتابة للموقع المستهدف.
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Microsoft Word
+ أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/notion.mdx b/docs/v1.15.1/ar/enterprise/integrations/notion.mdx
new file mode 100644
index 000000000..ef7849009
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/notion.mdx
@@ -0,0 +1,149 @@
+---
+title: تكامل Notion
+description: "إدارة المستخدمين والتعليقات مع تكامل Notion لـ CrewAI."
+icon: "book"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة المستخدمين وإنشاء التعليقات عبر Notion. يمكنك الوصول إلى معلومات مستخدمي مساحة العمل وإنشاء تعليقات على الصفحات والمناقشات، مما يبسّط سير عمل التعاون باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Notion، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Notion بصلاحيات مساحة العمل المناسبة
+- ربط حساب Notion الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/crewai_plus/connectors)
+
+## إعداد تكامل Notion
+
+### 1. ربط حساب Notion الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Notion** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للوصول إلى المستخدمين وإنشاء التعليقات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الإجراءات المتاحة
+
+
+
+ **الوصف:** عرض جميع المستخدمين في مساحة العمل.
+
+ **المعاملات:**
+ - `page_size` (integer, اختياري): عدد العناصر في الاستجابة. الحد الأدنى: 1، الحد الأقصى: 100، الافتراضي: 100
+ - `start_cursor` (string, اختياري): مؤشر للترقيم.
+
+
+
+
+ **الوصف:** استرجاع مستخدم محدد بواسطة المعرّف.
+
+ **المعاملات:**
+ - `user_id` (string, مطلوب): معرّف المستخدم المراد استرجاعه.
+
+
+
+
+ **الوصف:** إنشاء تعليق على صفحة أو مناقشة.
+
+ **المعاملات:**
+ - `parent` (object, مطلوب): الصفحة الأصلية أو المناقشة للتعليق عليها.
+ ```json
+ {
+ "type": "page_id",
+ "page_id": "PAGE_ID_HERE"
+ }
+ ```
+ - `rich_text` (array, مطلوب): المحتوى النصي الغني للتعليق.
+ ```json
+ [
+ {
+ "type": "text",
+ "text": {
+ "content": "This is my comment text"
+ }
+ }
+ ]
+ ```
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Notion
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Notion capabilities
+notion_agent = Agent(
+ role="Workspace Manager",
+ goal="Manage workspace users and facilitate collaboration through comments",
+ backstory="An AI assistant specialized in user management and team collaboration.",
+ apps=['notion'] # All Notion actions will be available
+)
+
+# Task to list workspace users
+user_management_task = Task(
+ description="List all users in the workspace and provide a summary of team members",
+ agent=notion_agent,
+ expected_output="Complete list of workspace users with their details"
+)
+
+# Run the task
+crew = Crew(
+ agents=[notion_agent],
+ tasks=[user_management_task]
+)
+
+crew.kickoff()
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**أخطاء الصلاحيات**
+
+- تأكد من أن حساب Notion الخاص بك لديه الصلاحيات المناسبة لقراءة معلومات المستخدمين
+- تحقق من أن لديك صلاحيات التعليق على الصفحات أو المناقشات المستهدفة
+
+**مشاكل إنشاء التعليقات**
+
+- تحقق من صحة معرّفات الصفحات أو المناقشات وإمكانية الوصول إليها
+- تأكد من اتباع محتوى النص الغني لمواصفات صيغة Notion API
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Notion أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/salesforce.mdx b/docs/v1.15.1/ar/enterprise/integrations/salesforce.mdx
new file mode 100644
index 000000000..3807a27ea
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/salesforce.mdx
@@ -0,0 +1,378 @@
+---
+title: تكامل Salesforce
+description: "أتمتة CRM والمبيعات مع تكامل Salesforce لـ CrewAI."
+icon: "salesforce"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة علاقات العملاء وعمليات المبيعات والبيانات عبر Salesforce. أنشئ السجلات وحدّثها، وأدر العملاء المحتملين والفرص، ونفّذ استعلامات SOQL، وبسّط سير عمل CRM باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Salesforce، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Salesforce بالصلاحيات المناسبة
+- ربط حساب Salesforce الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
+
+
+ يتطلب Salesforce **تثبيتًا واحدًا يقوم به مسؤول النظام (admin)** لحزمة
+ CrewAI في مؤسستك قبل أن يتمكن أي مستخدم من الاتصال. هذا متطلب من منصة
+ Salesforce لجميع التكاملات المعتمدة على ExternalClientApp اعتبارًا من
+ إصدار Spring '26 — وليس خطوة خاصة بـ CrewAI. تدليلك خطوة Connect
+ Salesforce في CrewAI AMP خلال هذه العملية عند المحاولة الأولى.
+
+
+## إعداد تكامل Salesforce
+
+### 1. ربط حساب Salesforce الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/unified_tools).
+2. ابحث عن **Salesforce** في قسم تكاملات المصادقة.
+3. انقر على **Connect**.
+
+ما يحدث بعد ذلك يعتمد على ما إذا كان مسؤول Salesforce في مؤسستك قد ثبّت
+حزمة CrewAI بالفعل:
+
+- **الحزمة مثبتة بالفعل:** سيتم نقلك مباشرة إلى شاشة موافقة OAuth في
+ Salesforce — اعتمدها وسيكتمل الاتصال.
+- **الحزمة غير مثبتة بعد:** سترى صفحة **Install CrewAI in Salesforce**.
+ اتبع خطوات التثبيت لمرة واحدة أدناه، ثم عُد إلى CrewAI AMP وانقر على
+ **Connect** مرة أخرى.
+
+4. امنح الصلاحيات اللازمة لإدارة CRM والمبيعات.
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations).
+
+#### تثبيت لمرة واحدة بواسطة المسؤول (مسؤول Salesforce فقط)
+
+عند أول نقرة على **Connect Salesforce** من أي مستخدم في مؤسستك، تقوم CrewAI
+بإعادة توجيهك إلى صفحة تثبيت تُشير إلى حزمة CrewAI المُدارة. يحتاج مسؤول
+Salesforce إلى تثبيتها مرة واحدة فقط لكامل المؤسسة.
+
+1. في صفحة التثبيت داخل CrewAI، انقر على **Install in Salesforce**. (يمكنك
+ أيضًا مشاركة عنوان URL لتلك الصفحة مع المسؤول — رابط التثبيت يعمل لأي
+ شخص يفتحه.)
+2. سجّل الدخول إلى Salesforce بصلاحيات مسؤول. لبيئات Sandbox، استبدل
+ `login.salesforce.com` بـ `test.salesforce.com` في الرابط قبل فتحه.
+3. اختر **Install for All Users**، ووافق على إشعار تطبيقات الجهات
+ الخارجية، ثم انقر **Install**.
+4. من Setup في Salesforce، ابحث عن **External Client App Manager** ←
+ **CrewAI App** ← افتح علامة التبويب **Policies** ← **Edit**، واضبط
+ القيم التالية:
+ - **Permitted Users:** All users may self-authorize
+ - **IP Relaxation:** Relax IP restrictions
+ - **Refresh Token Policy:** Refresh token is valid until revoked
+5. احفظ التغييرات.
+6. عُد إلى CrewAI AMP وانقر على **Connect Salesforce** مرة أخرى. سيكتمل
+ OAuth هذه المرة.
+
+
+ **لست مسؤول Salesforce؟** أعِد توجيه عنوان URL لصفحة التثبيت (أو رابط
+ التثبيت نفسه) إلى مسؤول Salesforce لديكم واطلب منه إكمال الخطوات أعلاه.
+ بمجرد انتهائه، عُد إلى CrewAI AMP وانقر على **Connect** مرة أخرى.
+
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الأدوات المتاحة
+
+### **إدارة السجلات**
+
+
+
+ **الوصف:** إنشاء سجل جهة اتصال جديد في Salesforce.
+
+ **المعاملات:**
+ - `LastName` (string, مطلوب): اسم العائلة - هذا الحقل مطلوب
+ - `FirstName` (string, اختياري): الاسم الأول
+ - `Email` (string, اختياري): عنوان البريد الإلكتروني
+ - `accountId` (string, اختياري): معرّف الحساب المرتبط
+ - `Title` (string, اختياري): المسمى الوظيفي
+
+
+
+
+ **الوصف:** إنشاء سجل عميل محتمل جديد في Salesforce.
+
+ **المعاملات:**
+ - `LastName` (string, مطلوب): اسم العائلة - هذا الحقل مطلوب
+ - `Company` (string, مطلوب): الشركة - هذا الحقل مطلوب
+ - `FirstName` (string, اختياري): الاسم الأول
+ - `Email` (string, اختياري): عنوان البريد الإلكتروني
+ - `Status` (string, اختياري): حالة العميل المحتمل
+
+
+
+
+ **الوصف:** إنشاء سجل فرصة جديد في Salesforce.
+
+ **المعاملات:**
+ - `Name` (string, مطلوب): اسم الفرصة - هذا الحقل مطلوب
+ - `StageName` (string, اختياري): مرحلة الفرصة
+ - `CloseDate` (string, اختياري): تاريخ الإغلاق بصيغة YYYY-MM-DD
+ - `Amount` (string, اختياري): المبلغ المقدر للبيع
+
+
+
+
+ **الوصف:** إنشاء سجل حساب جديد في Salesforce.
+
+ **المعاملات:**
+ - `Name` (string, مطلوب): اسم الحساب - هذا الحقل مطلوب
+ - `Website` (string, اختياري): عنوان URL للموقع الإلكتروني
+ - `Phone` (string, اختياري): رقم الهاتف
+ - `Description` (string, اختياري): وصف الحساب
+
+
+
+
+ **الوصف:** إنشاء سجل مهمة جديد في Salesforce.
+
+ **المعاملات:**
+ - `subject` (string, مطلوب): موضوع المهمة
+ - `taskSubtype` (string, مطلوب): النوع الفرعي للمهمة - الخيارات: task, email, listEmail, call
+ - `whatId` (string, اختياري): معرّف الحساب أو الفرصة المرتبطة
+ - `Status` (string, اختياري): الحالة - الخيارات: Not Started, In Progress, Completed
+
+
+
+
+### **تحديث السجلات**
+
+
+
+ **الوصف:** تحديث سجل جهة اتصال موجود في Salesforce.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف السجل المراد تحديثه
+ - `FirstName` (string, اختياري): الاسم الأول
+ - `LastName` (string, اختياري): اسم العائلة
+ - `Email` (string, اختياري): عنوان البريد الإلكتروني
+
+
+
+
+ **الوصف:** تحديث سجل عميل محتمل موجود في Salesforce.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف السجل المراد تحديثه
+ - `LastName` (string, اختياري): اسم العائلة
+ - `Company` (string, اختياري): اسم الشركة
+ - `Status` (string, اختياري): حالة العميل المحتمل
+
+
+
+
+ **الوصف:** تحديث سجل فرصة موجود في Salesforce.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف السجل المراد تحديثه
+ - `Name` (string, اختياري): اسم الفرصة
+ - `StageName` (string, اختياري): مرحلة الفرصة
+ - `Amount` (string, اختياري): المبلغ المقدر
+
+
+
+
+ **الوصف:** تحديث سجل حساب موجود في Salesforce.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف السجل المراد تحديثه
+ - `Name` (string, اختياري): اسم الحساب
+ - `Website` (string, اختياري): عنوان URL للموقع الإلكتروني
+
+
+
+
+### **استرجاع السجلات**
+
+
+
+ **الوصف:** الحصول على سجل جهة اتصال بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف سجل جهة الاتصال
+
+
+
+
+ **الوصف:** الحصول على سجل عميل محتمل بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف سجل العميل المحتمل
+
+
+
+
+ **الوصف:** الحصول على سجل فرصة بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف سجل الفرصة
+
+
+
+
+ **الوصف:** الحصول على سجل حساب بواسطة معرّفه.
+
+ **المعاملات:**
+ - `recordId` (string, مطلوب): معرّف سجل الحساب
+
+
+
+
+### **البحث في السجلات**
+
+
+
+ **الوصف:** البحث عن سجلات جهات الاتصال بتصفية متقدمة.
+
+ **المعاملات:**
+ - `filterFormula` (object, اختياري): فلتر متقدم بصيغة التعبير العادي المنفصل
+ - `sortBy` (string, اختياري): حقل الفرز
+ - `sortDirection` (string, اختياري): اتجاه الفرز - الخيارات: ASC, DESC
+
+
+
+
+ **الوصف:** البحث عن سجلات العملاء المحتملين بتصفية متقدمة.
+
+ **المعاملات:**
+ - `filterFormula` (object, اختياري): فلتر متقدم
+ - `sortBy` (string, اختياري): حقل الفرز
+
+
+
+
+ **الوصف:** البحث عن سجلات الفرص بتصفية متقدمة.
+
+ **المعاملات:**
+ - `filterFormula` (object, اختياري): فلتر متقدم
+ - `sortBy` (string, اختياري): حقل الفرز
+
+
+
+
+### **العمليات المتقدمة**
+
+
+
+ **الوصف:** تنفيذ استعلامات SOQL مخصصة على بيانات Salesforce.
+
+ **المعاملات:**
+ - `query` (string, مطلوب): استعلام SOQL (مثال: "SELECT Id, Name FROM Account WHERE Name = 'Example'")
+
+
+
+
+ **الوصف:** نشر كائن مخصص جديد في Salesforce.
+
+ **المعاملات:**
+ - `label` (string, مطلوب): تسمية الكائن
+ - `pluralLabel` (string, مطلوب): التسمية الجمعية
+ - `recordName` (string, مطلوب): اسم السجل
+
+
+
+
+ **الوصف:** الحصول على المخطط المتوقع لعمليات على أنواع كائنات محددة.
+
+ **المعاملات:**
+ - `recordType` (string, مطلوب): نوع السجل المراد وصفه
+ - `operation` (string, مطلوب): نوع العملية (مثال: "CREATE_RECORD" أو "UPDATE_RECORD")
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Salesforce
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Salesforce capabilities
+salesforce_agent = Agent(
+ role="CRM Manager",
+ goal="Manage customer relationships and sales processes efficiently",
+ backstory="An AI assistant specialized in CRM operations and sales automation.",
+ apps=['salesforce'] # All Salesforce actions will be available
+)
+
+# Task to create a new lead
+create_lead_task = Task(
+ description="Create a new lead for John Doe from Example Corp with email john.doe@example.com",
+ agent=salesforce_agent,
+ expected_output="Lead created successfully with lead ID"
+)
+
+# Run the task
+crew = Crew(
+ agents=[salesforce_agent],
+ tasks=[create_lead_task]
+)
+
+crew.kickoff()
+```
+
+### استعلامات SOQL المتقدمة وإعداد التقارير
+
+```python
+from crewai import Agent, Task, Crew
+
+data_analyst = Agent(
+ role="Sales Data Analyst",
+ goal="Generate insights from Salesforce data using SOQL queries",
+ backstory="An analytical AI that excels at extracting meaningful insights from CRM data.",
+ apps=['salesforce']
+)
+
+# Complex task involving SOQL queries and data analysis
+analysis_task = Task(
+ description="""
+ 1. Execute a SOQL query to find all opportunities closing this quarter
+ 2. Search for contacts at companies with opportunities over $100K
+ 3. Create a summary report of the sales pipeline status
+ 4. Update high-value opportunities with next steps
+ """,
+ agent=data_analyst,
+ expected_output="Comprehensive sales pipeline analysis with actionable insights"
+)
+
+crew = Crew(
+ agents=[data_analyst],
+ tasks=[analysis_task]
+)
+
+crew.kickoff()
+```
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Salesforce أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/shopify.mdx b/docs/v1.15.1/ar/enterprise/integrations/shopify.mdx
new file mode 100644
index 000000000..fdd790a44
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/shopify.mdx
@@ -0,0 +1,196 @@
+---
+title: تكامل Shopify
+description: "إدارة التجارة الإلكترونية والمتجر الإلكتروني مع تكامل Shopify لـ CrewAI."
+icon: "shopify"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة عمليات التجارة الإلكترونية عبر Shopify. تعامل مع العملاء والطلبات والمنتجات والمخزون وتحليلات المتجر لتبسيط أعمالك التجارية عبر الإنترنت باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Shopify، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- متجر Shopify بصلاحيات المسؤول المناسبة
+- ربط متجر Shopify الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
+
+## إعداد تكامل Shopify
+
+### 1. ربط متجر Shopify الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Shopify** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة المتجر والمنتجات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الأدوات المتاحة
+
+### **إدارة العملاء**
+
+
+
+ **الوصف:** استرجاع قائمة العملاء من متجر Shopify.
+
+ **المعاملات:**
+ - `customerIds` (string, اختياري): قائمة معرّفات العملاء مفصولة بفواصل
+ - `limit` (string, اختياري): الحد الأقصى لعدد العملاء (الافتراضي: 250)
+
+
+
+
+ **الوصف:** إنشاء عميل جديد في متجر Shopify.
+
+ **المعاملات:**
+ - `firstName` (string, مطلوب): الاسم الأول للعميل
+ - `lastName` (string, مطلوب): اسم العائلة للعميل
+ - `email` (string, مطلوب): عنوان البريد الإلكتروني للعميل
+ - `phone` (string, اختياري): رقم الهاتف
+ - `tags` (string, اختياري): الوسوم كمصفوفة أو قائمة مفصولة بفواصل
+
+
+
+
+ **الوصف:** تحديث عميل موجود في متجر Shopify.
+
+ **المعاملات:**
+ - `customerId` (string, مطلوب): معرّف العميل المراد تحديثه
+ - `firstName` (string, اختياري): الاسم الأول
+ - `lastName` (string, اختياري): اسم العائلة
+ - `email` (string, اختياري): عنوان البريد الإلكتروني
+
+
+
+
+### **إدارة الطلبات**
+
+
+
+ **الوصف:** استرجاع قائمة الطلبات من متجر Shopify.
+
+ **المعاملات:**
+ - `orderIds` (string, اختياري): قائمة معرّفات الطلبات مفصولة بفواصل
+ - `limit` (string, اختياري): الحد الأقصى لعدد الطلبات (الافتراضي: 250)
+
+
+
+
+ **الوصف:** إنشاء طلب جديد في متجر Shopify.
+
+ **المعاملات:**
+ - `email` (string, مطلوب): عنوان البريد الإلكتروني للعميل
+ - `lineItems` (object, مطلوب): عناصر سطر الطلب بصيغة JSON
+ - `fulfillmentStatus` (string, اختياري): حالة التنفيذ - الخيارات: fulfilled, null, partial, restocked
+
+
+
+
+ **الوصف:** استرجاع سلال التسوق المهجورة من متجر Shopify.
+
+ **المعاملات:**
+ - `status` (string, اختياري): عرض عمليات الدفع بالحالة المحددة - الخيارات: open, closed (الافتراضي: open)
+ - `limit` (string, اختياري): الحد الأقصى لعدد السلال (الافتراضي: 250)
+
+
+
+
+### **إدارة المنتجات**
+
+
+
+ **الوصف:** استرجاع قائمة المنتجات من متجر Shopify.
+
+ **المعاملات:**
+ - `title` (string, اختياري): تصفية حسب عنوان المنتج
+ - `status` (string, اختياري): تصفية حسب الحالة - الخيارات: active, archived, draft
+ - `limit` (string, اختياري): الحد الأقصى لعدد المنتجات (الافتراضي: 250)
+
+
+
+
+ **الوصف:** إنشاء منتج جديد في متجر Shopify.
+
+ **المعاملات:**
+ - `title` (string, مطلوب): عنوان المنتج
+ - `productType` (string, مطلوب): نوع/فئة المنتج
+ - `vendor` (string, مطلوب): مورد المنتج
+ - `productDescription` (string, اختياري): وصف المنتج
+ - `price` (string, اختياري): سعر المنتج
+
+
+
+
+ **الوصف:** تحديث منتج موجود في متجر Shopify.
+
+ **المعاملات:**
+ - `productId` (string, مطلوب): معرّف المنتج المراد تحديثه
+ - `title` (string, اختياري): عنوان المنتج
+ - `price` (string, اختياري): سعر المنتج
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Shopify
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Shopify capabilities
+shopify_agent = Agent(
+ role="E-commerce Manager",
+ goal="Manage online store operations and customer relationships efficiently",
+ backstory="An AI assistant specialized in e-commerce operations and online store management.",
+ apps=['shopify'] # All Shopify actions will be available
+)
+
+# Task to create a new customer
+create_customer_task = Task(
+ description="Create a new VIP customer Jane Smith with email jane.smith@example.com and phone +1-555-0123",
+ agent=shopify_agent,
+ expected_output="Customer created successfully with customer ID"
+)
+
+# Run the task
+crew = Crew(
+ agents=[shopify_agent],
+ tasks=[create_customer_task]
+)
+
+crew.kickoff()
+```
+
+### الحصول على المساعدة
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Shopify أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/slack.mdx b/docs/v1.15.1/ar/enterprise/integrations/slack.mdx
new file mode 100644
index 000000000..bc3835c6e
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/slack.mdx
@@ -0,0 +1,170 @@
+---
+title: تكامل Slack
+description: "التواصل الجماعي والتعاون مع تكامل Slack لـ CrewAI."
+icon: "slack"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة التواصل الجماعي عبر Slack. أرسل الرسائل، وابحث في المحادثات، وأدر القنوات، ونسّق أنشطة الفريق لتبسيط سير عمل التعاون باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Slack، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- مساحة عمل Slack بالصلاحيات المناسبة
+- ربط مساحة عمل Slack الخاصة بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
+
+## إعداد تكامل Slack
+
+### 1. ربط مساحة عمل Slack الخاصة بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Slack** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة للتواصل الجماعي
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الأدوات المتاحة
+
+### **إدارة المستخدمين**
+
+
+
+ **الوصف:** عرض جميع الأعضاء في قناة Slack.
+
+ **المعاملات:**
+ - لا توجد معاملات مطلوبة
+
+
+
+
+ **الوصف:** البحث عن مستخدم في مساحة عمل Slack بواسطة عنوان بريده الإلكتروني.
+
+ **المعاملات:**
+ - `email` (string, مطلوب): عنوان البريد الإلكتروني للمستخدم في مساحة العمل
+
+
+
+
+ **الوصف:** البحث عن المستخدمين بواسطة اسمهم أو اسم العرض.
+
+ **المعاملات:**
+ - `name` (string, مطلوب): الاسم الحقيقي للمستخدم للبحث عنه
+ - `displayName` (string, مطلوب): اسم عرض المستخدم للبحث عنه
+
+
+
+
+### **إدارة القنوات**
+
+
+
+ **الوصف:** عرض جميع القنوات في مساحة عمل Slack.
+
+ **المعاملات:**
+ - لا توجد معاملات مطلوبة
+
+
+
+
+### **المراسلة**
+
+
+
+ **الوصف:** إرسال رسالة إلى قناة Slack.
+
+ **المعاملات:**
+ - `channel` (string, مطلوب): اسم القناة أو معرّفها
+ - `message` (string, مطلوب): نص الرسالة المراد إرسالها
+ - `botName` (string, مطلوب): اسم البوت الذي يرسل هذه الرسالة
+ - `botIcon` (string, مطلوب): أيقونة البوت - يمكن أن تكون عنوان URL لصورة أو رمز تعبيري
+
+
+
+
+ **الوصف:** إرسال رسالة مباشرة إلى مستخدم محدد في Slack.
+
+ **المعاملات:**
+ - `memberId` (string, مطلوب): معرّف المستخدم المستلم
+ - `message` (string, مطلوب): نص الرسالة المراد إرسالها
+ - `botName` (string, مطلوب): اسم البوت الذي يرسل هذه الرسالة
+ - `botIcon` (string, مطلوب): أيقونة البوت
+
+
+
+
+### **البحث والاكتشاف**
+
+
+
+ **الوصف:** البحث عن الرسائل عبر مساحة عمل Slack.
+
+ **المعاملات:**
+ - `query` (string, مطلوب): استعلام بحث باستخدام صيغة بحث Slack للعثور على الرسائل المطابقة
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Slack
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with Slack capabilities
+slack_agent = Agent(
+ role="Team Communication Manager",
+ goal="Facilitate team communication and coordinate collaboration efficiently",
+ backstory="An AI assistant specialized in team communication and workspace coordination.",
+ apps=['slack'] # All Slack actions will be available
+)
+
+# Task to send project updates
+update_task = Task(
+ description="Send a project status update to the #general channel with current progress",
+ agent=slack_agent,
+ expected_output="Project update message sent successfully to team channel"
+)
+
+# Run the task
+crew = Crew(
+ agents=[slack_agent],
+ tasks=[update_task]
+)
+
+crew.kickoff()
+```
+
+## التواصل مع الدعم
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في إعداد تكامل Slack أو
+ استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/snowflake.mdx b/docs/v1.15.1/ar/enterprise/integrations/snowflake.mdx
new file mode 100644
index 000000000..be78d05da
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/snowflake.mdx
@@ -0,0 +1,134 @@
+---
+title: تكامل Snowflake
+description: "ربط وكلاء CrewAI بـ Snowflake Cortex Analyst و Cortex Search وتنفيذ SQL من خلال خادم MCP المُدار من Snowflake."
+icon: "snowflake"
+mode: "wide"
+---
+
+## نظرة عامة
+
+اربط وكلاء CrewAI مباشرة ببيانات Snowflake الخاصة بك من خلال [خادم MCP المُدار من Snowflake](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp). يتيح تكامل Snowflake لوكلائك الاستعلام عن البيانات المنظمة باستخدام **Cortex Analyst**، والبحث في البيانات غير المنظمة باستخدام **Cortex Search**، وتنفيذ SQL مُدار على مستودعات البيانات الخاصة بك — كل ذلك دون كتابة أو استضافة أي كود للموصّل.
+
+داخلياً، تكامل Snowflake هو غلاف مُدار حول دعم [Custom MCP Server](/ar/enterprise/guides/custom-mcp-server) في CrewAI. يكشف Snowflake عن قدرات Cortex AI الخاصة به من خلال نقطة نهاية [Model Context Protocol](https://modelcontextprotocol.io/)، ويتصل CrewAI بها بشكل آمن نيابةً عنك. أي أداة تكشفها على جانب Snowflake — Cortex Analyst أو Cortex Search أو تنفيذ SQL أو Cortex Agents أو أدواتك المخصصة — تصبح متاحة لطواقمك.
+
+## القدرات الرئيسية
+
+
+
+ اطرح أسئلة بلغة طبيعية ودع [Cortex Analyst](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-analyst) يولّد وينفذ SQL على بياناتك **المنظمة** باستخدام نماذج دلالية غنية.
+
+
+ استرجع البيانات **غير المنظمة** ذات الصلة لسير عمل RAG والمعرفة باستخدام [Cortex Search](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-search/cortex-search-overview)، خدمة البحث المُدارة بالكامل من Snowflake.
+
+
+ نفّذ استعلامات SQL مُدارة مباشرة على مستودعات Snowflake الخاصة بك، مع وضع القراءة فقط القابل للتكوين، والمهلات الزمنية، واختيار المستودع.
+
+
+
+نظراً لأن التكامل يكشف عن أي أدوات ينشرها خادم MCP الخاص بك، يمكنك أيضاً كشف **Cortex Agents** و**الأدوات المخصصة** (الدوال المعرّفة من المستخدم والإجراءات المخزّنة) لوكلاء CrewAI.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Snowflake، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Snowflake مع إمكانية الوصول إلى ميزات Cortex AI
+- [خادم MCP مُدار من Snowflake](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp) مُكوّن بالأدوات التي تريد كشفها
+- صلاحيات Snowflake المناسبة (USAGE/SELECT) على خادم MCP والكائنات الأساسية
+
+## إعداد خادم Snowflake MCP
+
+يعمل خادم MCP المُدار من Snowflake داخل حساب Snowflake الخاص بك ويحدد الأدوات المتاحة للعملاء الخارجيين مثل CrewAI. أنشئ واحداً باستخدام أمر [`CREATE MCP SERVER`](https://docs.snowflake.com/en/sql-reference/sql/create-mcp-server)، مع سرد خدمات Cortex Search وعروض Cortex Analyst الدلالية وأدوات SQL التي تريد كشفها.
+
+```sql
+CREATE MCP SERVER my_mcp_server
+ FROM SPECIFICATION $$
+ tools:
+ - name: "sales_analyst"
+ type: "CORTEX_ANALYST"
+ identifier: "MY_DATABASE.MY_SCHEMA.sales_semantic_view"
+ description: "Answer questions about sales metrics"
+ - name: "docs_search"
+ type: "CORTEX_SEARCH_SERVICE_QUERY"
+ identifier: "MY_DATABASE.MY_SCHEMA.support_docs_search"
+ description: "Search internal support documentation"
+ - name: "run_sql"
+ type: "SQL_EXECUTION"
+ description: "Execute read-only SQL queries"
+ $$;
+```
+
+
+تتبع نقطة نهاية MCP التنسيق `https:///api/v2/databases/{database}/schemas/{schema}/mcp-servers/{name}`. يبني CrewAI هذا العنوان تلقائياً من **عنوان URL للحساب** و**قاعدة البيانات** و**المخطط** و**اسم خادم MCP** الذي تقدمه عند تكوين التكامل.
+
+
+للمواصفات الكاملة — بما في ذلك Cortex Agents والأدوات المخصصة وحدود حجم الاستجابة وخيارات الحوكمة — راجع [وثائق خادم MCP المُدار من Snowflake](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp).
+
+## ربط Snowflake في CrewAI AMP
+
+
+
+
+
+
+
+ انتقل إلى **الأدوات والتكاملات** في الشريط الجانبي الأيسر لـ CrewAI AMP، وابحث عن **Snowflake** في قائمة التطبيقات، وافتح لوحة التكوين الخاصة به.
+
+
+
+ املأ حقول الاتصال التي يستخدمها CrewAI للوصول إلى خادم Snowflake MCP الخاص بك:
+
+ | الحقل | مطلوب | الوصف |
+ |-------|-------|-------|
+ | **الاسم** | نعم | اسم وصفي لهذا الاتصال (القيمة الافتراضية `Snowflake`). |
+ | **الوصف** | لا | ملخص اختياري لما يوفره هذا الاتصال. |
+ | **عنوان URL للحساب** | نعم | عنوان URL لحساب Snowflake الخاص بك، مثل `xy12345.us-east-1.snowflakecomputing.com`. |
+ | **قاعدة البيانات** | نعم | قاعدة البيانات التي تحتوي على خادم MCP الخاص بك (مثل `MY_DATABASE`). |
+ | **المخطط** | نعم | المخطط الذي يحتوي على خادم MCP الخاص بك (مثل `MY_SCHEMA`). |
+ | **اسم خادم MCP** | نعم | اسم كائن خادم MCP الذي أنشأته في Snowflake (مثل `MY_MCP_SERVER`). |
+
+
+
+ اختر كيفية مصادقة CrewAI مع Snowflake. يُوصى باستخدام **OAuth**.
+
+ - **استخدام OAuth** — اتصل بشكل آمن باستخدام OAuth 2.0 للمصادقة القائمة على الرموز دون مشاركة بيانات الاعتماد الخاصة بك. يتعامل CrewAI مع تدفق التفويض الكامل ويجدد الرموز تلقائياً. انسخ **عنوان URI لإعادة التوجيه** المعروض في النموذج (`https://oauth.crewai.com/oauth/add`) وسجّله كعنوان URI لإعادة التوجيه المعتمد في [تكامل أمان OAuth](https://docs.snowflake.com/en/user-guide/oauth-custom) في Snowflake.
+ - **استخدام رمز وصول شخصي** — المصادقة باستخدام [رمز وصول برمجي](https://docs.snowflake.com/en/user-guide/programmatic-access-tokens) مُنشأ من إعدادات حساب Snowflake الخاص بك. قم بتعيين دور بأقل صلاحيات للرمز للحد من التعرض.
+
+
+
+ انقر على **المصادقة**. بالنسبة لـ OAuth، ستتم إعادة توجيهك إلى Snowflake لتفويض الوصول. بمجرد المصادقة، يظهر خادم Snowflake في قائمة الاتصالات وتصبح أدواته متاحة لطواقمك.
+
+
+
+
+مع OAuth، يتم مصادقة كل مستخدم بشكل فردي وتُنفّذ الاستعلامات بدور `DEFAULT_ROLE` الخاص به في Snowflake. تأكد من أن المستخدمين المتصلين لديهم دور ومستودع افتراضي محدد (`ALTER USER SET DEFAULT_ROLE = '' DEFAULT_WAREHOUSE = ''`) حتى تتوفر موارد الحوسبة لأدوات Cortex Analyst و SQL.
+
+
+## استخدام أدوات Snowflake في طواقمك
+
+بمجرد الاتصال، تظهر الأدوات التي يكشفها خادم MCP الخاص بك إلى جانب الاتصالات المدمجة في صفحة **الأدوات والتكاملات**. يمكنك:
+
+- **تعيين الأدوات للوكلاء** في طواقمك تماماً مثل أي أداة CrewAI أخرى.
+- **إدارة الرؤية** للتحكم في أعضاء الفريق الذين يمكنهم استخدام الاتصال.
+- **تعديل أو إزالة** الاتصال في أي وقت من قائمة الاتصالات.
+
+يمكن لوكلائك الآن سؤال Cortex Analyst عن المقاييس، وتشغيل Cortex Search على مستنداتك، وتنفيذ SQL — مع تدفق النتائج تلقائياً إلى استدلالهم.
+
+
+يفرض Snowflake الحوكمة على خادم MCP: يحدد التحكم في الوصول القائم على الأدوار الأدوات التي يمكن للمستخدم اكتشافها واستدعاؤها، وتنطبق حدود على حجم الاستجابة وعدد الأدوات (بحد أقصى 50 لكل خادم) وعمق التكرار. إذا فشل استدعاء أداة، تأكد من أن دور المستخدم المتصل لديه الصلاحيات المطلوبة على خادم MCP والكائنات الأساسية.
+
+
+## معرفة المزيد
+
+
+
+ الوثائق الرسمية من Snowflake لإنشاء وإدارة خادم MCP.
+
+
+ تعرّف على كيفية اتصال CrewAI بأي خادم MCP، الأساس الذي يبني عليه تكامل Snowflake.
+
+
+
+
+ تواصل مع فريق الدعم للحصول على المساعدة في تكامل Snowflake أو استكشاف الأخطاء وإصلاحها.
+
diff --git a/docs/v1.15.1/ar/enterprise/integrations/stripe.mdx b/docs/v1.15.1/ar/enterprise/integrations/stripe.mdx
new file mode 100644
index 000000000..26252a4ef
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/stripe.mdx
@@ -0,0 +1,202 @@
+---
+title: تكامل Stripe
+description: "معالجة المدفوعات وإدارة الاشتراكات مع تكامل Stripe لـ CrewAI."
+icon: "stripe"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة المدفوعات والاشتراكات وفواتير العملاء عبر Stripe. تعامل مع بيانات العملاء، ومعالجة الاشتراكات، وإدارة المنتجات، وتتبع المعاملات المالية لتبسيط سير عمل المدفوعات باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Stripe، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Stripe بصلاحيات API المناسبة
+- ربط حساب Stripe الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
+
+## إعداد تكامل Stripe
+
+### 1. ربط حساب Stripe الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Stripe** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لمعالجة المدفوعات
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الأدوات المتاحة
+
+### **إدارة العملاء**
+
+
+
+ **الوصف:** إنشاء عميل جديد في حساب Stripe.
+
+ **المعاملات:**
+ - `emailCreateCustomer` (string, مطلوب): عنوان البريد الإلكتروني للعميل
+ - `name` (string, اختياري): الاسم الكامل للعميل
+ - `description` (string, اختياري): وصف العميل للمرجع الداخلي
+
+
+
+
+ **الوصف:** استرجاع عميل محدد بواسطة معرّف عميل Stripe.
+
+ **المعاملات:**
+ - `idGetCustomer` (string, مطلوب): معرّف عميل Stripe المراد استرجاعه
+
+
+
+
+ **الوصف:** استرجاع قائمة العملاء مع تصفية اختيارية.
+
+ **المعاملات:**
+ - `emailGetCustomers` (string, اختياري): تصفية العملاء حسب البريد الإلكتروني
+ - `limitGetCustomers` (string, اختياري): الحد الأقصى لعدد العملاء (الافتراضي: 10)
+
+
+
+
+ **الوصف:** تحديث معلومات عميل موجود.
+
+ **المعاملات:**
+ - `customerId` (string, مطلوب): معرّف العميل المراد تحديثه
+ - `emailUpdateCustomer` (string, اختياري): عنوان البريد الإلكتروني المحدّث
+ - `name` (string, اختياري): اسم العميل المحدّث
+
+
+
+
+### **إدارة الاشتراكات**
+
+
+
+ **الوصف:** إنشاء اشتراك جديد لعميل.
+
+ **المعاملات:**
+ - `customerIdCreateSubscription` (string, مطلوب): معرّف العميل الذي سيُنشأ له الاشتراك
+ - `plan` (string, مطلوب): معرّف خطة الاشتراك
+
+
+
+
+ **الوصف:** استرجاع الاشتراكات مع تصفية اختيارية.
+
+ **المعاملات:**
+ - `customerIdGetSubscriptions` (string, اختياري): تصفية الاشتراكات حسب معرّف العميل
+ - `subscriptionStatus` (string, اختياري): تصفية حسب حالة الاشتراك - الخيارات: incomplete, trialing, active, past_due, canceled, unpaid
+
+
+
+
+### **إدارة المنتجات**
+
+
+
+ **الوصف:** إنشاء منتج جديد في كتالوج Stripe.
+
+ **المعاملات:**
+ - `productName` (string, مطلوب): اسم المنتج
+ - `description` (string, اختياري): وصف المنتج
+
+
+
+
+ **الوصف:** استرجاع قائمة المنتجات مع تصفية اختيارية.
+
+ **المعاملات:**
+ - `limitGetProducts` (string, اختياري): الحد الأقصى لعدد المنتجات (الافتراضي: 10)
+
+
+
+
+### **العمليات المالية**
+
+
+
+ **الوصف:** استرجاع معاملات الرصيد من حساب Stripe.
+
+ **المعاملات:**
+ - `balanceTransactionType` (string, اختياري): تصفية حسب نوع المعاملة - الخيارات: charge, refund, payment, payment_refund
+
+
+
+
+ **الوصف:** استرجاع خطط الاشتراك من حساب Stripe.
+
+ **المعاملات:**
+ - `isPlanActive` (boolean, اختياري): تصفية حسب حالة الخطة
+
+
+
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Stripe
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Stripe capabilities
+stripe_agent = Agent(
+ role="Payment Manager",
+ goal="Manage customer payments, subscriptions, and billing operations efficiently",
+ backstory="An AI assistant specialized in payment processing and subscription management.",
+ apps=['stripe'] # All Stripe actions will be available
+)
+
+# Task to create a new customer
+create_customer_task = Task(
+ description="Create a new premium customer John Doe with email john.doe@example.com",
+ agent=stripe_agent,
+ expected_output="Customer created successfully with customer ID"
+)
+
+# Run the task
+crew = Crew(
+ agents=[stripe_agent],
+ tasks=[create_customer_task]
+)
+
+crew.kickoff()
+```
+
+## مرجع حالات الاشتراك
+
+فهم حالات الاشتراك:
+
+- **incomplete** - الاشتراك يتطلب طريقة دفع أو تأكيد الدفع
+- **trialing** - الاشتراك في فترة تجريبية
+- **active** - الاشتراك نشط وحالي
+- **past_due** - فشل الدفع لكن الاشتراك لا يزال نشطاً
+- **canceled** - تم إلغاء الاشتراك
+- **unpaid** - فشل الدفع والاشتراك لم يعد نشطاً
+
+يمكّن هذا التكامل أتمتة شاملة لإدارة المدفوعات والاشتراكات، مما يسمح لوكلاء الذكاء الاصطناعي بالتعامل مع عمليات الفوترة بسلاسة ضمن نظام Stripe البيئي.
diff --git a/docs/v1.15.1/ar/enterprise/integrations/zendesk.mdx b/docs/v1.15.1/ar/enterprise/integrations/zendesk.mdx
new file mode 100644
index 000000000..000a6e4c4
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/integrations/zendesk.mdx
@@ -0,0 +1,262 @@
+---
+title: تكامل Zendesk
+description: "دعم العملاء وإدارة مكتب المساعدة مع تكامل Zendesk لـ CrewAI."
+icon: "headset"
+mode: "wide"
+---
+
+## نظرة عامة
+
+مكّن وكلاءك من إدارة عمليات دعم العملاء عبر Zendesk. أنشئ التذاكر وحدّثها، وأدر المستخدمين، وتتبع مقاييس الدعم، وبسّط سير عمل خدمة العملاء باستخدام الأتمتة المدعومة بالذكاء الاصطناعي.
+
+## المتطلبات الأساسية
+
+قبل استخدام تكامل Zendesk، تأكد من توفر ما يلي:
+
+- حساب [CrewAI AMP](https://app.crewai.com) مع اشتراك فعّال
+- حساب Zendesk بصلاحيات API المناسبة
+- ربط حساب Zendesk الخاص بك عبر [صفحة التكاملات](https://app.crewai.com/integrations)
+
+## إعداد تكامل Zendesk
+
+### 1. ربط حساب Zendesk الخاص بك
+
+1. انتقل إلى [تكاملات CrewAI AMP](https://app.crewai.com/crewai_plus/connectors)
+2. ابحث عن **Zendesk** في قسم تكاملات المصادقة
+3. انقر على **Connect** وأكمل عملية OAuth
+4. امنح الصلاحيات اللازمة لإدارة التذاكر والمستخدمين
+5. انسخ رمز المؤسسة من [إعدادات التكامل](https://app.crewai.com/crewai_plus/settings/integrations)
+
+### 2. تثبيت الحزمة المطلوبة
+
+```bash
+uv add crewai-tools
+```
+
+### 3. إعداد متغير البيئة
+
+
+ لاستخدام التكاملات مع `Agent(apps=[])`, يجب تعيين متغير البيئة
+ `CREWAI_PLATFORM_INTEGRATION_TOKEN` برمز المؤسسة الخاص بك.
+
+
+```bash
+export CREWAI_PLATFORM_INTEGRATION_TOKEN="your_enterprise_token"
+```
+
+أو أضفه إلى ملف `.env`:
+
+```
+CREWAI_PLATFORM_INTEGRATION_TOKEN=your_enterprise_token
+```
+
+## الأدوات المتاحة
+
+### **إدارة التذاكر**
+
+
+
+ **الوصف:** إنشاء تذكرة دعم جديدة في Zendesk.
+
+ **المعاملات:**
+ - `ticketSubject` (string, مطلوب): سطر موضوع التذكرة
+ - `ticketDescription` (string, مطلوب): أول تعليق يظهر على التذكرة
+ - `requesterName` (string, مطلوب): اسم المستخدم الذي يطلب الدعم
+ - `requesterEmail` (string, مطلوب): بريد المستخدم الذي يطلب الدعم
+ - `ticketType` (string, اختياري): نوع التذكرة - الخيارات: problem, incident, question, task
+ - `ticketPriority` (string, اختياري): مستوى الأولوية - الخيارات: urgent, high, normal, low
+ - `ticketStatus` (string, اختياري): حالة التذكرة - الخيارات: new, open, pending, hold, solved, closed
+
+
+
+
+ **الوصف:** تحديث تذكرة دعم موجودة في Zendesk.
+
+ **المعاملات:**
+ - `ticketId` (string, مطلوب): معرّف التذكرة المراد تحديثها
+ - `requesterName` (string, مطلوب): اسم المستخدم الذي طلب هذه التذكرة
+ - `requesterEmail` (string, مطلوب): بريد المستخدم الذي طلب هذه التذكرة
+ - `ticketSubject` (string, اختياري): موضوع التذكرة المحدّث
+ - `ticketPriority` (string, اختياري): الأولوية المحدّثة
+ - `ticketStatus` (string, اختياري): الحالة المحدّثة
+
+
+
+
+ **الوصف:** استرجاع تذكرة محددة بواسطة معرّفها.
+
+ **المعاملات:**
+ - `ticketId` (string, مطلوب): معرّف التذكرة المراد استرجاعها
+
+
+
+
+ **الوصف:** إضافة تعليق أو ملاحظة داخلية إلى تذكرة موجودة.
+
+ **المعاملات:**
+ - `ticketId` (string, مطلوب): معرّف التذكرة لإضافة التعليق إليها
+ - `commentBody` (string, مطلوب): رسالة التعليق
+ - `isInternalNote` (boolean, اختياري): عيّن إلى true للملاحظات الداخلية بدلاً من الردود العامة
+
+
+
+
+ **الوصف:** البحث عن التذاكر باستخدام فلاتر ومعايير مختلفة.
+
+ **المعاملات:**
+ - `ticketSubject` (string, اختياري): تصفية حسب النص في موضوع التذكرة
+ - `ticketStatus` (string, اختياري): تصفية حسب الحالة
+ - `ticketPriority` (string, اختياري): تصفية حسب الأولوية
+ - `sort_by` (string, اختياري): حقل الفرز - الخيارات: created_at, updated_at, priority, status
+ - `sort_order` (string, اختياري): اتجاه الفرز - الخيارات: asc, desc
+
+
+
+
+### **إدارة المستخدمين**
+
+
+
+ **الوصف:** إنشاء مستخدم جديد في Zendesk.
+
+ **المعاملات:**
+ - `name` (string, مطلوب): الاسم الكامل للمستخدم
+ - `email` (string, اختياري): عنوان البريد الإلكتروني
+ - `phone` (string, اختياري): رقم الهاتف
+ - `role` (string, اختياري): دور المستخدم - الخيارات: admin, agent, end-user
+
+
+
+
+ **الوصف:** تحديث معلومات مستخدم موجود.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): معرّف المستخدم المراد تحديثه
+ - `name` (string, اختياري): اسم المستخدم المحدّث
+ - `email` (string, اختياري): البريد الإلكتروني المحدّث
+ - `role` (string, اختياري): الدور المحدّث
+
+
+
+
+ **الوصف:** استرجاع مستخدم محدد بواسطة معرّفه.
+
+ **المعاملات:**
+ - `userId` (string, مطلوب): معرّف المستخدم المراد استرجاعه
+
+
+
+
+ **الوصف:** البحث عن المستخدمين باستخدام معايير مختلفة.
+
+ **المعاملات:**
+ - `name` (string, اختياري): تصفية حسب اسم المستخدم
+ - `email` (string, اختياري): تصفية حسب البريد الإلكتروني
+ - `role` (string, اختياري): تصفية حسب الدور
+
+
+
+
+### **أدوات إدارية**
+
+
+
+ **الوصف:** استرجاع جميع الحقول القياسية والمخصصة المتاحة للتذاكر.
+
+ **المعاملات:**
+ - `paginationParameters` (object, اختياري): إعدادات الترقيم
+
+
+
+
+ **الوصف:** الحصول على سجلات التدقيق (السجل للقراءة فقط) للتذاكر.
+
+ **المعاملات:**
+ - `ticketId` (string, اختياري): الحصول على سجلات التدقيق لتذكرة محددة
+
+
+
+
+## مستويات أولوية التذاكر
+
+فهم مستويات الأولوية:
+
+- **urgent** - مشاكل حرجة تتطلب اهتماماً فورياً
+- **high** - مشاكل مهمة يجب معالجتها بسرعة
+- **normal** - أولوية قياسية لمعظم التذاكر
+- **low** - مشاكل ثانوية يمكن معالجتها عند الإمكان
+
+## سير عمل حالة التذكرة
+
+تقدم حالة التذكرة القياسي:
+
+- **new** - أُنشئت حديثاً، لم تُعيّن بعد
+- **open** - يتم العمل عليها بنشاط
+- **pending** - في انتظار رد العميل أو إجراء خارجي
+- **hold** - متوقفة مؤقتاً
+- **solved** - تم حل المشكلة، في انتظار تأكيد العميل
+- **closed** - اكتملت التذكرة وأُغلقت
+
+## أمثلة الاستخدام
+
+### إعداد Agent أساسي لـ Zendesk
+
+```python
+from crewai import Agent, Task, Crew
+from crewai import Agent, Task, Crew
+
+# Create an agent with Zendesk capabilities
+zendesk_agent = Agent(
+ role="Support Manager",
+ goal="Manage customer support tickets and provide excellent customer service",
+ backstory="An AI assistant specialized in customer support operations and ticket management.",
+ apps=['zendesk'] # All Zendesk actions will be available
+)
+
+# Task to create a new support ticket
+create_ticket_task = Task(
+ description="Create a high-priority support ticket for John Smith who is unable to access his account after password reset",
+ agent=zendesk_agent,
+ expected_output="Support ticket created successfully with ticket ID"
+)
+
+# Run the task
+crew = Crew(
+ agents=[zendesk_agent],
+ tasks=[create_ticket_task]
+)
+
+crew.kickoff()
+```
+
+### إدارة التذاكر المتقدمة
+
+```python
+from crewai import Agent, Task, Crew
+
+ticket_manager = Agent(
+ role="Ticket Manager",
+ goal="Manage support ticket workflows and ensure timely resolution",
+ backstory="An AI assistant that specializes in support ticket triage and workflow optimization.",
+ apps=['zendesk']
+)
+
+# Task to manage ticket lifecycle
+ticket_workflow = Task(
+ description="""
+ 1. Create a new support ticket for account access issues
+ 2. Add internal notes with troubleshooting steps
+ 3. Update ticket priority based on customer tier
+ 4. Add resolution comments and close the ticket
+ """,
+ agent=ticket_manager,
+ expected_output="Complete ticket lifecycle managed from creation to resolution"
+)
+
+crew = Crew(
+ agents=[ticket_manager],
+ tasks=[ticket_workflow]
+)
+
+crew.kickoff()
+```
diff --git a/docs/v1.15.1/ar/enterprise/introduction.mdx b/docs/v1.15.1/ar/enterprise/introduction.mdx
new file mode 100644
index 000000000..1d0b15c76
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/introduction.mdx
@@ -0,0 +1,99 @@
+---
+title: "CrewAI AMP"
+description: "نشر ومراقبة وتوسيع سير عمل وكلاء الذكاء الاصطناعي"
+icon: "globe"
+mode: "wide"
+---
+
+## مقدمة
+
+توفر منصة CrewAI AMP (منصة إدارة الوكلاء) بيئة لنشر ومراقبة وتوسيع أطقمك ووكلائك في بيئة إنتاجية.
+
+
+
+
+
+تعمل منصة CrewAI AMP على توسيع قوة إطار العمل مفتوح المصدر بميزات مصممة لعمليات النشر الإنتاجية والتعاون وقابلية التوسع. انشر أطقمك على بنية تحتية مُدارة وراقب تنفيذها في الوقت الفعلي.
+
+## الميزات الرئيسية
+
+
+
+ انشر أطقمك على بنية تحتية مُدارة بنقرات قليلة
+
+
+ الوصول إلى أطقمك المنشورة عبر REST API للتكامل مع الأنظمة الحالية
+
+
+ راقب أطقمك مع تتبع تفصيلي للتنفيذ والسجلات
+
+
+ انشر وثبّت الأدوات لتعزيز قدرات أطقمك
+
+
+ بث الأحداث والتحديثات في الوقت الفعلي إلى أنظمتك
+
+
+ أنشئ وخصص الأطقم باستخدام واجهة بدون كود/منخفضة الكود
+
+
+
+## خيارات النشر
+
+
+
+ اتصل مباشرة بمستودعات GitHub الخاصة بك لنشر الكود
+
+
+ انشر الأطقم المنشأة عبر واجهة استوديو الأطقم بدون كود
+
+
+ استخدم واجهة سطر أوامر CrewAI لسير عمل نشر أكثر تقدمًا
+
+
+
+## البدء
+
+
+
+ أنشئ حسابك على [app.crewai.com](https://app.crewai.com)
+
+ التسجيل
+
+
+
+ استخدم الكود أو استوديو الأطقم لبناء طاقمك
+
+ بناء طاقم
+
+
+
+ انشر طاقمك على منصة Enterprise
+
+ نشر طاقم
+
+
+
+ تكامل مع طاقمك عبر نقاط نهاية API المُنشأة
+
+ استخدام API الطاقم
+
+
+
+
+للحصول على تعليمات مفصلة، اطلع على [دليل النشر](/ar/enterprise/guides/deploy-to-amp) أو انقر على الزر أدناه للبدء.
diff --git a/docs/v1.15.1/ar/enterprise/resources/frequently-asked-questions.mdx b/docs/v1.15.1/ar/enterprise/resources/frequently-asked-questions.mdx
new file mode 100644
index 000000000..65cc02c80
--- /dev/null
+++ b/docs/v1.15.1/ar/enterprise/resources/frequently-asked-questions.mdx
@@ -0,0 +1,152 @@
+---
+title: الأسئلة الشائعة
+description: "الأسئلة المتكررة حول CrewAI AMP"
+icon: "circle-question"
+mode: "wide"
+---
+
+
+
+ في العملية الهرمية، يتم إنشاء وكيل مدير تلقائيًا ينسق سير العمل، ويفوض المهام ويتحقق من النتائج لتنفيذ مبسط وفعال. يستخدم وكيل المدير الأدوات لتسهيل تفويض المهام وتنفيذها بواسطة الوكلاء تحت إشراف المدير. يُعد نموذج اللغة الخاص بالمدير (LLM) أساسيًا للعملية الهرمية ويجب إعداده بشكل صحيح لضمان العمل السليم.
+
+
+
+ يتوفر أحدث توثيق لـ CrewAI على موقع التوثيق الرسمي: https://docs.crewai.com/
+ توثيق CrewAI
+
+
+
+ #### العملية الهرمية:
+ - يتم تفويض المهام وتنفيذها بناءً على سلسلة قيادة منظمة
+ - يجب تحديد نموذج لغة المدير (`manager_llm`) لوكيل المدير
+ - يشرف وكيل المدير على تنفيذ المهام والتخطيط والتفويض والتحقق
+ - لا يتم تعيين المهام مسبقًا؛ يقوم المدير بتخصيص المهام للوكلاء بناءً على قدراتهم
+
+ #### العملية التسلسلية:
+ - يتم تنفيذ المهام واحدة تلو الأخرى، مما يضمن إكمال المهام بتقدم منظم
+ - يُستخدم مخرج مهمة واحدة كسياق للمهمة التالية
+ - يتبع تنفيذ المهام الترتيب المحدد مسبقًا في قائمة المهام
+
+ #### أي عملية أفضل للمشاريع المعقدة؟
+ العملية الهرمية أنسب للمشاريع المعقدة لأنها تسمح بـ:
+ - **تخصيص وتفويض ديناميكي للمهام**: يمكن لوكيل المدير تعيين المهام بناءً على قدرات الوكلاء
+ - **التحقق والإشراف المنظم**: يراجع وكيل المدير مخرجات المهام ويضمن إكمالها
+ - **إدارة المهام المعقدة**: تحكم دقيق في توفر الأدوات على مستوى الوكيل
+
+
+
+ - **التعلم التكيفي**: تصبح الأطقم أكثر كفاءة بمرور الوقت، حيث تتكيف مع المعلومات الجديدة وتحسن نهجها في المهام
+ - **التخصيص المحسن**: تمكّن الذاكرة الوكلاء من تذكر تفضيلات المستخدم والتفاعلات السابقة، مما يؤدي إلى تجارب مخصصة
+ - **تحسين حل المشكلات**: يساعد الوصول إلى مخزن ذاكرة غني الوكلاء في اتخاذ قرارات أكثر استنارة، بالاعتماد على الدروس المستفادة والرؤى السياقية
+
+
+
+ يمنع تعيين حد أقصى لعدد الطلبات في الدقيقة للوكيل من إجراء عدد كبير جدًا من الطلبات إلى الخدمات الخارجية، مما يساعد في تجنب حدود المعدل وتحسين الأداء.
+
+
+
+ يتيح المدخل البشري للوكلاء طلب معلومات إضافية أو توضيحات عند الحاجة. هذه الميزة ضرورية في عمليات صنع القرار المعقدة أو عندما يحتاج الوكلاء إلى مزيد من التفاصيل لإكمال مهمة بفعالية.
+
+ لدمج المدخل البشري في تنفيذ الوكيل، عيّن علامة `human_input` في تعريف المهمة. عند التفعيل، يطلب الوكيل من المستخدم إدخالًا قبل تقديم إجابته النهائية. يمكن أن يوفر هذا الإدخال سياقًا إضافيًا أو يوضح الغموض أو يتحقق من مخرجات الوكيل.
+
+ للحصول على إرشادات تنفيذ مفصلة، راجع [دليل الإنسان في الحلقة](/ar/enterprise/guides/human-in-the-loop).
+
+
+
+ يوفر CrewAI مجموعة من خيارات التخصيص المتقدمة:
+
+ - **تخصيص نموذج اللغة**: يمكن تخصيص الوكلاء بنماذج لغوية محددة (`llm`) ونماذج لغوية لاستدعاء الدوال (`function_calling_llm`)
+ - **إعدادات الأداء والتصحيح**: ضبط أداء الوكيل ومراقبة عملياته
+ - **الوضع المفصل**: يتيح تسجيلًا مفصلًا لإجراءات الوكيل، مفيد للتصحيح والتحسين
+ - **حد RPM**: يحدد العدد الأقصى للطلبات في الدقيقة (`max_rpm`)
+ - **الحد الأقصى للتكرارات**: تسمح خاصية `max_iter` للمستخدمين بتحديد العدد الأقصى للتكرارات التي يمكن للوكيل تنفيذها لمهمة واحدة
+ - **التفويض والاستقلالية**: التحكم في قدرة الوكيل على التفويض أو طرح الأسئلة عبر خاصية `allow_delegation` (الافتراضي: True)
+ - **دمج المدخل البشري**: يمكن للوكلاء طلب معلومات إضافية أو توضيحات عند الحاجة
+
+
+
+ يكون المدخل البشري مفيدًا بشكل خاص عندما:
+ - **يحتاج الوكلاء إلى معلومات إضافية أو توضيحات**: عندما يواجه الوكلاء غموضًا أو بيانات غير مكتملة
+ - **يحتاج الوكلاء إلى اتخاذ قرارات معقدة أو حساسة**: يمكن للمدخل البشري المساعدة في صنع القرارات الأخلاقية أو الدقيقة
+ - **الإشراف والتحقق من مخرجات الوكيل**: يمكن للمدخل البشري المساعدة في التحقق من النتائج ومنع الأخطاء
+ - **تخصيص سلوك الوكيل**: يمكن للمدخل البشري توفير ملاحظات لتحسين استجابات الوكيل بمرور الوقت
+ - **تحديد وحل الأخطاء أو القيود**: يساعد المدخل البشري في معالجة فجوات قدرات الوكيل
+
+
+
+ أنواع الذاكرة المختلفة المتاحة في CrewAI هي:
+ - **الذاكرة قصيرة المدى**: تخزين مؤقت للسياق الفوري
+ - **الذاكرة طويلة المدى**: تخزين دائم للأنماط والمعلومات المكتسبة
+ - **ذاكرة الكيانات**: تخزين مركز على كيانات محددة وخصائصها
+ - **الذاكرة السياقية**: ذاكرة تحافظ على السياق عبر التفاعلات
+
+ تعرف على المزيد حول أنواع الذاكرة المختلفة:
+ ذاكرة CrewAI
+
+
+
+ لاستخدام Output Pydantic في مهمة، تحتاج إلى تعريف المخرج المتوقع للمهمة كنموذج Pydantic. إليك مثال سريع:
+
+
+
+ ```python
+ from pydantic import BaseModel
+
+ class User(BaseModel):
+ name: str
+ age: int
+ ```
+
+
+
+ ```python
+ from crewai import Task, Crew, Agent
+ from my_models import User
+
+ task = Task(
+ description="Create a user with the provided name and age",
+ expected_output=User, # This is the Pydantic model
+ agent=agent,
+ tools=[tool1, tool2]
+ )
+ ```
+
+
+
+ ```python
+ from crewai import Agent
+ from my_models import User
+
+ agent = Agent(
+ role='User Creator',
+ goal='Create users',
+ backstory='I am skilled in creating user accounts',
+ tools=[tool1, tool2],
+ output_pydantic=User
+ )
+ ```
+
+
+
+ إليك درسًا تعليميًا حول كيفية الحصول على مخرجات منظمة بشكل متسق من وكلائك:
+
+
+
+
+ يمكنك إنشاء أدوات مخصصة عن طريق إنشاء فئة فرعية من فئة `BaseTool` المقدمة من CrewAI أو باستخدام مُزخرف الأداة (tool decorator). ينطوي إنشاء الفئة الفرعية على تعريف فئة جديدة ترث من `BaseTool`، مع تحديد الاسم والوصف وطريقة `_run` للمنطق التشغيلي. يتيح لك مُزخرف الأداة إنشاء كائن `Tool` مباشرة مع الخصائص المطلوبة والمنطق الوظيفي.
+
+ دليل أدوات CrewAI
+
+
+
+ تحدد خاصية `max_rpm` العدد الأقصى للطلبات في الدقيقة التي يمكن للطاقم تنفيذها لتجنب حدود المعدل، وستتجاوز إعدادات `max_rpm` الفردية للوكلاء إذا قمت بتعيينها.
+
+
+
diff --git a/docs/v1.15.1/ar/examples/cookbooks.mdx b/docs/v1.15.1/ar/examples/cookbooks.mdx
new file mode 100644
index 000000000..49280d73c
--- /dev/null
+++ b/docs/v1.15.1/ar/examples/cookbooks.mdx
@@ -0,0 +1,49 @@
+---
+title: كتب وصفات CrewAI
+description: بدايات سريعة ودفاتر ملاحظات مركّزة على الميزات لتعلم الأنماط بسرعة.
+icon: book
+mode: "wide"
+---
+
+## بدايات سريعة وعروض توضيحية
+
+
+
+ تنسيق عدة Agents على مهام مشتركة. يتضمن دفتر ملاحظات بنمط تعاون شامل.
+
+
+
+ تعليم الـ Agents التفكير في خطط متعددة المراحل قبل التنفيذ باستخدام أدوات التخطيط.
+
+
+
+ استكشاف حلقات التأمل الذاتي، ومطالبات النقد، وأنماط التفكير المنظم.
+
+
+
+
+
+ تطبيق حواجز حماية على مستوى المهام مع إعادة المحاولة ودوال التحقق والبدائل الآمنة.
+
+
+
+ ربط CrewAI بـ Gemini مع تأريض البحث للحصول على مخرجات واقعية غنية بالاستشهادات.
+
+
+
+ إنشاء ملخصات فيديو باستخدام نموذج Gemini متعدد الوسائط وتنسيق CrewAI.
+
+
+
+
+
+ عرض جميع دفاتر الملاحظات والعروض التوضيحية التي تستعرض إمكانيات CrewAI المحددة.
+
+
+ هل يفتقد نمط معين؟ أرسل طلبًا في منتدى المجتمع وسنوسّع المكتبة.
+
+
+
+
+استخدم كتب الوصفات لتعلم نمط بسرعة، ثم انتقل إلى الأمثلة الكاملة للتطبيقات الجاهزة للإنتاج.
+
diff --git a/docs/v1.15.1/ar/examples/example.mdx b/docs/v1.15.1/ar/examples/example.mdx
new file mode 100644
index 000000000..0987e8dff
--- /dev/null
+++ b/docs/v1.15.1/ar/examples/example.mdx
@@ -0,0 +1,86 @@
+---
+title: أمثلة CrewAI
+description: استكشف أمثلة منسّقة مرتبة حسب Crews وFlows والتكاملات ودفاتر الملاحظات.
+icon: rocket-launch
+mode: "wide"
+---
+
+## Crews
+
+
+
+ تخطيط حملات تسويقية متعددة الـ Agents.
+
+
+ تخطيط رحلات مفاجئة مخصصة.
+
+
+ مطابقة السيرة الذاتية بالوظائف باستخدام البحث المتجهي.
+
+
+ إنشاء أوصاف وظيفية آلية.
+
+
+ فريق متعدد الـ Agents يصمم ويبني ألعاب Python.
+
+
+ استقطاب المرشحين وتقييمهم.
+
+
+ عرض القائمة الكاملة لأمثلة الـ Crews.
+
+
+
+## Flows
+
+
+
+ إنشاء محتوى متعدد الـ Crews مع التوجيه.
+
+
+ مراقبة البريد الإلكتروني والرد الآلي.
+
+
+ تأهيل العملاء المحتملين مع تدخل بشري.
+
+
+ معالجة الملاحظات مع التكاملات.
+
+
+ سير عمل التحسين الذاتي التكراري.
+
+
+ إنشاء الفصول بالتوازي.
+
+
+ عرض القائمة الكاملة لأمثلة الـ Flows.
+
+
+
+## التكاملات
+
+
+
+ التكامل مع إطار عمل LangGraph.
+
+
+ استخدام CrewAI مع Azure OpenAI.
+
+
+ تكاملات منظومة NVIDIA.
+
+
+ عرض جميع أمثلة التكاملات.
+
+
+
+## دفاتر الملاحظات
+
+
+
+ Simple QA Crew + Flow.
+
+
+ أمثلة تفاعلية للتعلم والتجريب.
+
+
diff --git a/docs/v1.15.1/ar/guides/advanced/customizing-prompts.mdx b/docs/v1.15.1/ar/guides/advanced/customizing-prompts.mdx
new file mode 100644
index 000000000..b16c3b0b0
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/advanced/customizing-prompts.mdx
@@ -0,0 +1,331 @@
+---
+title: تخصيص المطالبات
+description: تعمّق في تخصيص المطالبات على المستوى المنخفض في CrewAI، مما يتيح حالات استخدام مخصصة ومعقدة لنماذج ولغات مختلفة.
+icon: message-pen
+mode: "wide"
+---
+
+## لماذا نخصص المطالبات؟
+
+على الرغم من أن مطالبات CrewAI الافتراضية تعمل بشكل جيد في كثير من السيناريوهات، إلا أن التخصيص على المستوى المنخفض يفتح الباب أمام سلوك أكثر مرونة وقوة للـ Agent. إليك لماذا قد ترغب في الاستفادة من هذا التحكم العميق:
+
+1. **التحسين لنماذج LLM محددة** – تزدهر النماذج المختلفة (مثل GPT-4 وClaude وLlama) مع تنسيقات مطالبات مصممة لبنيتها الفريدة.
+2. **تغيير اللغة** – بناء Agents تعمل حصريًا بلغات غير الإنجليزية مع التعامل مع الفروق الدقيقة بدقة.
+3. **التخصص في مجالات معقدة** – تكييف المطالبات لصناعات متخصصة للغاية مثل الرعاية الصحية والمالية والقانون.
+4. **ضبط النبرة والأسلوب** – جعل الـ Agents أكثر رسمية أو عفوية أو إبداعية أو تحليلية.
+5. **دعم حالات استخدام مخصصة للغاية** – استخدام هياكل وتنسيقات مطالبات متقدمة لتلبية متطلبات معقدة خاصة بالمشروع.
+
+يستكشف هذا الدليل كيفية الوصول إلى مطالبات CrewAI على مستوى أعمق، مما يمنحك تحكمًا دقيقًا في كيفية تفكير الـ Agents وتفاعلها.
+
+## فهم نظام المطالبات في CrewAI
+
+تحت الغطاء، يستخدم CrewAI نظام مطالبات معياري يمكنك تخصيصه على نطاق واسع:
+
+- **قوالب الـ Agent** – تحكم في نهج كل Agent تجاه دوره المعيّن.
+- **شرائح المطالبات** – تتحكم في السلوكيات المتخصصة مثل المهام واستخدام الأدوات وهيكل المخرجات.
+- **معالجة الأخطاء** – توجيه كيفية استجابة الـ Agents للإخفاقات والاستثناءات وحالات انتهاء المهلة.
+- **مطالبات خاصة بالأدوات** – تعريف تعليمات مفصلة لكيفية استدعاء الأدوات أو استخدامها.
+
+اطلع على [قوالب المطالبات الأصلية في مستودع CrewAI](https://github.com/crewAIInc/crewAI/blob/main/src/crewai/translations/en.json) لمعرفة كيفية تنظيم هذه العناصر. من هناك، يمكنك تجاوزها أو تكييفها حسب الحاجة لفتح سلوكيات متقدمة.
+
+## فهم تعليمات النظام الافتراضية
+
+
+**مشكلة شفافية الإنتاج**: يحقن CrewAI تلقائيًا تعليمات افتراضية في مطالباتك قد لا تكون على علم بها. يشرح هذا القسم ما يحدث تحت الغطاء وكيفية الحصول على تحكم كامل.
+
+
+عندما تعرّف Agent بـ `role` و`goal` و`backstory`، يضيف CrewAI تلقائيًا تعليمات نظام إضافية تتحكم في التنسيق والسلوك. فهم هذه الحقن الافتراضية أمر بالغ الأهمية لأنظمة الإنتاج التي تحتاج شفافية كاملة في المطالبات.
+
+### ما يحقنه CrewAI تلقائيًا
+
+بناءً على تهيئة الـ Agent، يضيف CrewAI تعليمات افتراضية مختلفة:
+
+#### للـ Agents بدون أدوات
+```text
+"I MUST use these formats, my job depends on it!"
+```
+
+#### للـ Agents مع أدوات
+```text
+"IMPORTANT: Use the following format in your response:
+
+Thought: you should always think about what to do
+Action: the action to take, only one name of [tool_names]
+Action Input: the input to the action, just a simple JSON object...
+```
+
+#### للمخرجات المنظمة (JSON/Pydantic)
+```text
+"Ensure your final answer contains only the content in the following format: {output_format}
+Ensure the final output does not include any code block markers like ```json or ```python."
+```
+
+### عرض مطالبة النظام الكاملة
+
+لمعرفة المطالبة المرسلة بالضبط إلى LLM، يمكنك فحص المطالبة المولّدة:
+
+```python
+from crewai import Agent, Crew, Task
+from crewai.utilities.prompts import Prompts
+
+# Create your agent
+agent = Agent(
+ role="Data Analyst",
+ goal="Analyze data and provide insights",
+ backstory="You are an expert data analyst with 10 years of experience.",
+ verbose=True
+)
+
+# Create a sample task
+task = Task(
+ description="Analyze the sales data and identify trends",
+ expected_output="A detailed analysis with key insights and trends",
+ agent=agent
+)
+
+# Create the prompt generator
+prompt_generator = Prompts(
+ agent=agent,
+ has_tools=len(agent.tools) > 0,
+ use_system_prompt=agent.use_system_prompt
+)
+
+# Generate and inspect the actual prompt
+generated_prompt = prompt_generator.task_execution()
+
+# Print the complete system prompt that will be sent to the LLM
+if "system" in generated_prompt:
+ print("=== SYSTEM PROMPT ===")
+ print(generated_prompt["system"])
+ print("\n=== USER PROMPT ===")
+ print(generated_prompt["user"])
+else:
+ print("=== COMPLETE PROMPT ===")
+ print(generated_prompt["prompt"])
+
+# You can also see how the task description gets formatted
+print("\n=== TASK CONTEXT ===")
+print(f"Task Description: {task.description}")
+print(f"Expected Output: {task.expected_output}")
+```
+
+### تجاوز التعليمات الافتراضية
+
+لديك عدة خيارات للحصول على تحكم كامل في المطالبات:
+
+#### الخيار 1: القوالب المخصصة (مُوصى به)
+```python
+from crewai import Agent
+
+# Define your own system template without default instructions
+custom_system_template = """You are {role}. {backstory}
+Your goal is: {goal}
+
+Respond naturally and conversationally. Focus on providing helpful, accurate information."""
+
+custom_prompt_template = """Task: {input}
+
+Please complete this task thoughtfully."""
+
+agent = Agent(
+ role="Research Assistant",
+ goal="Help users find accurate information",
+ backstory="You are a helpful research assistant.",
+ system_template=custom_system_template,
+ prompt_template=custom_prompt_template,
+ use_system_prompt=True # Use separate system/user messages
+)
+```
+
+#### الخيار 2: ملف مطالبات مخصص
+أنشئ ملف `custom_prompts.json` لتجاوز شرائح مطالبات محددة:
+
+```json
+{
+ "slices": {
+ "no_tools": "\nProvide your best answer in a natural, conversational way.",
+ "tools": "\nYou have access to these tools: {tools}\n\nUse them when helpful, but respond naturally.",
+ "formatted_task_instructions": "Format your response as: {output_format}"
+ }
+}
+```
+
+ثم استخدمه في Crew:
+
+```python
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ prompt_file="custom_prompts.json",
+ verbose=True
+)
+```
+
+
+يُحتفظ بـ `agent.i18n` للتوافق مع الإصدارات السابقة فقط، وقد تم إهماله. لتخصيص المطالبات أثناء التشغيل، مرّر `prompt_file` إلى `Crew`. وللوصول البرمجي المباشر إلى شرائح المطالبات، استخدم أداة i18n مباشرة:
+
+
+```python
+from crewai.utilities.i18n import get_i18n
+
+i18n = get_i18n("custom_prompts.json")
+format_slice = i18n.slice("format")
+tool_prompt = i18n.tools("ask_question")
+```
+
+#### الخيار 3: تعطيل مطالبات النظام لنماذج o1
+```python
+agent = Agent(
+ role="Analyst",
+ goal="Analyze data",
+ backstory="Expert analyst",
+ use_system_prompt=False # Disables system prompt separation
+)
+```
+
+### التصحيح باستخدام أدوات المراقبة
+
+لشفافية الإنتاج، استخدم منصات المراقبة لمتابعة جميع المطالبات وتفاعلات LLM. يتيح لك ذلك رؤية المطالبات المرسلة بالضبط (بما في ذلك التعليمات الافتراضية) إلى نماذج LLM.
+
+راجع [توثيق المراقبة](/ar/observability/overview) للحصول على أدلة تكامل مفصلة مع منصات متعددة بما في ذلك Langfuse وMLflow وWeights & Biases وحلول التسجيل المخصصة.
+
+### أفضل الممارسات للإنتاج
+
+1. **افحص المطالبات المولّدة دائمًا** قبل النشر في الإنتاج
+2. **استخدم قوالب مخصصة** عندما تحتاج تحكمًا كاملاً في محتوى المطالبات
+3. **دمج أدوات المراقبة** للمتابعة المستمرة للمطالبات (راجع [توثيق المراقبة](/ar/observability/overview))
+4. **اختبر مع نماذج LLM مختلفة** حيث قد تعمل التعليمات الافتراضية بشكل مختلف عبر النماذج
+5. **وثّق تخصيصات المطالبات** لشفافية الفريق
+
+
+التعليمات الافتراضية موجودة لضمان سلوك Agent متسق، لكنها قد تتعارض مع المتطلبات الخاصة بالمجال. استخدم خيارات التخصيص أعلاه للحفاظ على تحكم كامل في سلوك Agent في أنظمة الإنتاج.
+
+
+## أفضل الممارسات لإدارة ملفات المطالبات
+
+عند الانخراط في تخصيص المطالبات على المستوى المنخفض، اتبع هذه الإرشادات للحفاظ على التنظيم وسهولة الصيانة:
+
+1. **احتفظ بالملفات منفصلة** – خزّن المطالبات المخصصة في ملفات JSON مخصصة خارج قاعدة الكود الرئيسية.
+2. **التحكم في الإصدارات** – تتبع التغييرات داخل المستودع مع ضمان توثيق واضح لتعديلات المطالبات بمرور الوقت.
+3. **التنظيم حسب النموذج أو اللغة** – استخدم تسميات مثل `prompts_llama.json` أو `prompts_es.json` لتحديد التهيئات المتخصصة بسرعة.
+4. **توثيق التغييرات** – قدم تعليقات أو حافظ على ملف يوضح غرض ونطاق تخصيصاتك.
+5. **قلل التعديلات** – تجاوز فقط الشرائح المحددة التي تحتاج حقًا لتعديلها مع الحفاظ على الوظائف الافتراضية لكل شيء آخر.
+
+## أبسط طريقة لتخصيص المطالبات
+
+إحدى الطرق المباشرة هي إنشاء ملف JSON للمطالبات التي تريد تجاوزها ثم توجيه Crew إلى ذلك الملف:
+
+1. أنشئ ملف JSON بشرائح المطالبات المحدّثة.
+2. أشر إلى ذلك الملف عبر معامل `prompt_file` في Crew.
+
+يدمج CrewAI بعد ذلك تخصيصاتك مع الإعدادات الافتراضية، فلا تحتاج لإعادة تعريف كل مطالبة. إليك الطريقة:
+
+بالنسبة للكود الذي يحتاج إلى قراءة شرائح المطالبات مباشرة، استخدم `crewai.utilities.i18n.get_i18n()` مع ملف المطالبات نفسه بدلًا من قراءة `agent.i18n`.
+
+### مثال: تخصيص أساسي للمطالبات
+
+أنشئ ملف `custom_prompts.json` بالمطالبات التي تريد تعديلها. تأكد من إدراج جميع المطالبات عالية المستوى التي يجب أن يحتويها، وليس فقط تغييراتك:
+
+```json
+{
+ "slices": {
+ "format": "When responding, follow this structure:\n\nTHOUGHTS: Your step-by-step thinking\nACTION: Any tool you're using\nRESULT: Your final answer or conclusion"
+ }
+}
+```
+
+ثم ادمجه هكذا:
+
+```python
+from crewai import Agent, Crew, Task, Process
+
+# Create agents and tasks as normal
+researcher = Agent(
+ role="Research Specialist",
+ goal="Find information on quantum computing",
+ backstory="You are a quantum physics expert",
+ verbose=True
+)
+
+research_task = Task(
+ description="Research quantum computing applications",
+ expected_output="A summary of practical applications",
+ agent=researcher
+)
+
+# Create a crew with your custom prompt file
+crew = Crew(
+ agents=[researcher],
+ tasks=[research_task],
+ prompt_file="path/to/custom_prompts.json",
+ verbose=True
+)
+
+# Run the crew
+result = crew.kickoff()
+```
+
+بهذه التعديلات البسيطة، تحصل على تحكم منخفض المستوى في كيفية تواصل الـ Agents وحل المهام.
+
+## التحسين لنماذج محددة
+
+تزدهر النماذج المختلفة مع مطالبات منظمة بطرق مختلفة. إجراء تعديلات أعمق يمكن أن يعزز الأداء بشكل كبير من خلال مواءمة مطالباتك مع خصائص النموذج.
+
+### مثال: قالب مطالبات Llama 3.3
+
+على سبيل المثال، عند التعامل مع Llama 3.3 من Meta، قد يعكس التخصيص على المستوى الأعمق الهيكل الموصى به الموضح في:
+https://www.llama.com/docs/model-cards-and-prompt-formats/llama3_1/#prompt-template
+
+إليك مثالاً يوضح كيف يمكنك ضبط Agent للاستفادة من Llama 3.3 في الكود:
+
+```python
+from crewai import Agent, Crew, Task, Process
+from crewai_tools import DirectoryReadTool, FileReadTool
+
+# Define templates for system, user (prompt), and assistant (response) messages
+system_template = """<|begin_of_text|><|start_header_id|>system<|end_header_id|>{{ .System }}<|eot_id|>"""
+prompt_template = """<|start_header_id|>user<|end_header_id|>{{ .Prompt }}<|eot_id|>"""
+response_template = """<|start_header_id|>assistant<|end_header_id|>{{ .Response }}<|eot_id|>"""
+
+# Create an Agent using Llama-specific layouts
+principal_engineer = Agent(
+ role="Principal Engineer",
+ goal="Oversee AI architecture and make high-level decisions",
+ backstory="You are the lead engineer responsible for critical AI systems",
+ verbose=True,
+ llm="groq/llama-3.3-70b-versatile", # Using the Llama 3 model
+ system_template=system_template,
+ prompt_template=prompt_template,
+ response_template=response_template,
+ tools=[DirectoryReadTool(), FileReadTool()]
+)
+
+# Define a sample task
+engineering_task = Task(
+ description="Review AI implementation files for potential improvements",
+ expected_output="A summary of key findings and recommendations",
+ agent=principal_engineer
+)
+
+# Create a Crew for the task
+llama_crew = Crew(
+ agents=[principal_engineer],
+ tasks=[engineering_task],
+ process=Process.sequential,
+ verbose=True
+)
+
+# Execute the crew
+result = llama_crew.kickoff()
+print(result.raw)
+```
+
+من خلال هذه التهيئة العميقة، يمكنك ممارسة تحكم شامل منخفض المستوى في سير العمل القائمة على Llama دون الحاجة إلى ملف JSON منفصل.
+
+## الخلاصة
+
+يفتح تخصيص المطالبات على المستوى المنخفض في CrewAI الباب أمام حالات استخدام مخصصة ومعقدة للغاية. من خلال إنشاء ملفات مطالبات منظمة (أو قوالب مضمّنة مباشرة)، يمكنك استيعاب نماذج ولغات ومجالات متخصصة متنوعة. يضمن هذا المستوى من المرونة أنك تستطيع صياغة سلوك الذكاء الاصطناعي الذي تحتاجه بالضبط، مع العلم أن CrewAI لا يزال يوفر إعدادات افتراضية موثوقة عندما لا تتجاوزها.
+
+
+لديك الآن الأساس لتخصيصات المطالبات المتقدمة في CrewAI. سواء كنت تتكيف مع هياكل خاصة بالنموذج أو قيود خاصة بالمجال، يتيح لك هذا النهج المنخفض المستوى تشكيل تفاعلات الـ Agent بطرق متخصصة للغاية.
+
diff --git a/docs/v1.15.1/ar/guides/advanced/fingerprinting.mdx b/docs/v1.15.1/ar/guides/advanced/fingerprinting.mdx
new file mode 100644
index 000000000..12599a88f
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/advanced/fingerprinting.mdx
@@ -0,0 +1,134 @@
+---
+title: البصمات الرقمية
+description: تعلم كيفية استخدام نظام البصمات الرقمية في CrewAI لتحديد وتتبع المكونات بشكل فريد طوال دورة حياتها.
+icon: fingerprint
+mode: "wide"
+---
+
+## نظرة عامة
+
+توفر البصمات الرقمية في CrewAI طريقة لتحديد وتتبع المكونات بشكل فريد طوال دورة حياتها. يتلقى كل `Agent` و`Crew` و`Task` بصمة رقمية فريدة تلقائيًا عند الإنشاء، ولا يمكن تجاوزها يدويًا.
+
+يمكن استخدام هذه البصمات لـ:
+- تدقيق وتتبع استخدام المكونات
+- ضمان سلامة هوية المكونات
+- إرفاق بيانات وصفية بالمكونات
+- إنشاء سلسلة عمليات قابلة للتتبع
+
+## كيف تعمل البصمات الرقمية
+
+البصمة الرقمية هي نسخة من فئة `Fingerprint` من وحدة `crewai.security`. تحتوي كل بصمة على:
+
+- سلسلة UUID: معرّف فريد للمكون يتم إنشاؤه تلقائيًا ولا يمكن تعيينه يدويًا
+- طابع زمني للإنشاء: متى تم إنشاء البصمة، يُعيَّن تلقائيًا ولا يمكن تعديله يدويًا
+- بيانات وصفية: قاموس معلومات إضافية يمكن تخصيصه
+
+تُنشأ البصمات الرقمية وتُعيَّن تلقائيًا عند إنشاء المكون. يكشف كل مكون بصمته من خلال خاصية للقراءة فقط.
+
+## الاستخدام الأساسي
+
+### الوصول إلى البصمات الرقمية
+
+```python
+from crewai import Agent, Crew, Task
+
+# Create components - fingerprints are automatically generated
+agent = Agent(
+ role="Data Scientist",
+ goal="Analyze data",
+ backstory="Expert in data analysis"
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[]
+)
+
+task = Task(
+ description="Analyze customer data",
+ expected_output="Insights from data analysis",
+ agent=agent
+)
+
+# Access the fingerprints
+agent_fingerprint = agent.fingerprint
+crew_fingerprint = crew.fingerprint
+task_fingerprint = task.fingerprint
+
+# Print the UUID strings
+print(f"Agent fingerprint: {agent_fingerprint.uuid_str}")
+print(f"Crew fingerprint: {crew_fingerprint.uuid_str}")
+print(f"Task fingerprint: {task_fingerprint.uuid_str}")
+```
+
+### العمل مع البيانات الوصفية للبصمة
+
+يمكنك إضافة بيانات وصفية إلى البصمات لسياق إضافي:
+
+```python
+# Add metadata to the agent's fingerprint
+agent.security_config.fingerprint.metadata = {
+ "version": "1.0",
+ "department": "Data Science",
+ "project": "Customer Analysis"
+}
+
+# Access the metadata
+print(f"Agent metadata: {agent.fingerprint.metadata}")
+```
+
+## استمرارية البصمة
+
+صُممت البصمات لتبقى ثابتة دون تغيير طوال دورة حياة المكون. إذا عدّلت مكونًا، تظل البصمة كما هي:
+
+```python
+original_fingerprint = agent.fingerprint.uuid_str
+
+# Modify the agent
+agent.goal = "New goal for analysis"
+
+# The fingerprint remains unchanged
+assert agent.fingerprint.uuid_str == original_fingerprint
+```
+
+## البصمات الحتمية
+
+بينما لا يمكنك تعيين UUID والطابع الزمني مباشرة، يمكنك إنشاء بصمات حتمية باستخدام طريقة `generate` مع بذرة:
+
+```python
+from crewai.security import Fingerprint
+
+# Create a deterministic fingerprint using a seed string
+deterministic_fingerprint = Fingerprint.generate(seed="my-agent-id")
+
+# The same seed always produces the same fingerprint
+same_fingerprint = Fingerprint.generate(seed="my-agent-id")
+assert deterministic_fingerprint.uuid_str == same_fingerprint.uuid_str
+
+# You can also set metadata
+custom_fingerprint = Fingerprint.generate(
+ seed="my-agent-id",
+ metadata={"version": "1.0"}
+)
+```
+
+## الاستخدام المتقدم
+
+### هيكل البصمة
+
+لكل بصمة الهيكل التالي:
+
+```python
+from crewai.security import Fingerprint
+
+fingerprint = agent.fingerprint
+
+# UUID string - the unique identifier (auto-generated)
+uuid_str = fingerprint.uuid_str # e.g., "123e4567-e89b-12d3-a456-426614174000"
+
+# Creation timestamp (auto-generated)
+created_at = fingerprint.created_at # A datetime object
+
+# Metadata - for additional information (can be customized)
+metadata = fingerprint.metadata # A dictionary, defaults to {}
+```
diff --git a/docs/v1.15.1/ar/guides/agents/crafting-effective-agents.mdx b/docs/v1.15.1/ar/guides/agents/crafting-effective-agents.mdx
new file mode 100644
index 000000000..c1c6b1db3
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/agents/crafting-effective-agents.mdx
@@ -0,0 +1,453 @@
+---
+title: صياغة Agents فعّالة
+description: تعلم أفضل الممارسات لتصميم Agents ذكاء اصطناعي قوية ومتخصصة تتعاون بفعالية لحل المشكلات المعقدة.
+icon: robot
+mode: "wide"
+---
+
+## فن وعلم تصميم الـ Agent
+
+في قلب CrewAI يكمن الـ Agent - كيان ذكاء اصطناعي متخصص مصمم لأداء أدوار محددة ضمن إطار تعاوني. بينما إنشاء Agents أساسية أمر بسيط، فإن صياغة Agents فعّالة حقًا تنتج نتائج استثنائية يتطلب فهم مبادئ التصميم الأساسية وأفضل الممارسات.
+
+سيساعدك هذا الدليل على إتقان فن تصميم الـ Agent، مما يمكّنك من إنشاء شخصيات AI متخصصة تتعاون بفعالية وتفكر بشكل نقدي وتنتج مخرجات عالية الجودة مصممة لاحتياجاتك المحددة.
+
+### لماذا يهم تصميم الـ Agent
+
+الطريقة التي تعرّف بها الـ Agents تؤثر بشكل كبير على:
+
+1. **جودة المخرجات**: الـ Agents المصممة جيدًا تنتج نتائج أكثر صلة وجودة
+2. **فعالية التعاون**: الـ Agents ذات المهارات المكملة تعمل معًا بكفاءة أكبر
+3. **أداء المهام**: الـ Agents ذات الأدوار والأهداف الواضحة تنفذ المهام بفعالية أكبر
+4. **قابلية التوسع**: الـ Agents المصممة بعناية يمكن إعادة استخدامها عبر Crews وسياقات متعددة
+
+لنستكشف أفضل الممارسات لإنشاء Agents تتفوق في هذه الأبعاد.
+
+## قاعدة 80/20: ركّز على المهام أكثر من الـ Agents
+
+عند بناء أنظمة AI فعّالة، تذكر هذا المبدأ الحاسم: **80% من جهدك يجب أن يذهب لتصميم المهام، و20% فقط لتعريف الـ Agents**.
+
+لماذا؟ لأن حتى أفضل Agent معرّف سيفشل مع مهام مصممة بشكل سيئ، لكن المهام المصممة جيدًا يمكنها رفع مستوى حتى Agent بسيط. هذا يعني:
+
+- اقضِ معظم وقتك في كتابة تعليمات مهام واضحة
+- حدد المدخلات والمخرجات المتوقعة بالتفصيل
+- أضف أمثلة وسياقًا لتوجيه التنفيذ
+- خصص الوقت المتبقي لدور Agent وهدفه وخلفيته
+
+هذا لا يعني أن تصميم الـ Agent ليس مهمًا - بل هو مهم بالتأكيد. لكن تصميم المهام هو حيث تحدث معظم إخفاقات التنفيذ، لذا رتّب أولوياتك وفقًا لذلك.
+
+## المبادئ الأساسية لتصميم Agent فعّال
+
+### 1. إطار الدور-الهدف-الخلفية
+
+أقوى الـ Agents في CrewAI مبنية على أساس قوي من ثلاثة عناصر رئيسية:
+
+#### الدور: الوظيفة المتخصصة للـ Agent
+
+يحدد الدور ما يفعله الـ Agent ومجال خبرته. عند صياغة الأدوار:
+
+- **كن محددًا ومتخصصًا**: بدلاً من "كاتب"، استخدم "متخصص في التوثيق التقني" أو "راوي قصص إبداعي"
+- **تماشَ مع المهن الواقعية**: ابنِ الأدوار على نماذج مهنية معروفة
+- **تضمين خبرة المجال**: حدد مجال معرفة الـ Agent (مثل "محلل مالي متخصص في اتجاهات السوق")
+
+**أمثلة على أدوار فعّالة:**
+```yaml
+role: "Senior UX Researcher specializing in user interview analysis"
+role: "Full-Stack Software Architect with expertise in distributed systems"
+role: "Corporate Communications Director specializing in crisis management"
+```
+
+#### الهدف: غرض الـ Agent ودافعه
+
+يوجه الهدف جهود الـ Agent ويشكّل عملية صنع القرار. الأهداف الفعّالة يجب أن:
+
+- **تكون واضحة ومركّزة على النتائج**: حدد ما يحاول الـ Agent تحقيقه
+- **تؤكد على معايير الجودة**: تضمين توقعات حول جودة العمل
+- **تتضمن معايير النجاح**: ساعد الـ Agent على فهم ما يعنيه "الجيد"
+
+**أمثلة على أهداف فعّالة:**
+```yaml
+goal: "Uncover actionable user insights by analyzing interview data and identifying recurring patterns, unmet needs, and improvement opportunities"
+goal: "Design robust, scalable system architectures that balance performance, maintainability, and cost-effectiveness"
+goal: "Craft clear, empathetic crisis communications that address stakeholder concerns while protecting organizational reputation"
+```
+
+#### الخلفية: تجربة الـ Agent ومنظوره
+
+تمنح الخلفية عمقًا لشخصية الـ Agent، مؤثرة في كيفية تعامله مع المشكلات وتفاعله مع الآخرين. الخلفيات الجيدة:
+
+- **تؤسس الخبرة والتجربة**: تشرح كيف اكتسب الـ Agent مهاراته
+- **تحدد أسلوب العمل والقيم**: تصف كيف يتعامل الـ Agent مع عمله
+- **تنشئ شخصية متماسكة**: تضمن أن جميع عناصر الخلفية تتماشى مع الدور والهدف
+
+**أمثلة على خلفيات فعّالة:**
+```yaml
+backstory: "You have spent 15 years conducting and analyzing user research for top tech companies. You have a talent for reading between the lines and identifying patterns that others miss. You believe that good UX is invisible and that the best insights come from listening to what users don't say as much as what they do say."
+
+backstory: "With 20+ years of experience building distributed systems at scale, you've developed a pragmatic approach to software architecture. You've seen both successful and failed systems and have learned valuable lessons from each. You balance theoretical best practices with practical constraints and always consider the maintenance and operational aspects of your designs."
+
+backstory: "As a seasoned communications professional who has guided multiple organizations through high-profile crises, you understand the importance of transparency, speed, and empathy in crisis response. You have a methodical approach to crafting messages that address concerns while maintaining organizational credibility."
+```
+
+### 2. المتخصصون أفضل من العموميين
+
+يؤدي الـ Agents أداءً أفضل بشكل ملحوظ عند منحهم أدوارًا متخصصة بدلاً من عامة. الـ Agent المركّز بشدة ينتج مخرجات أكثر دقة وصلة:
+
+**عام (أقل فعالية):**
+```yaml
+role: "Writer"
+```
+
+**متخصص (أكثر فعالية):**
+```yaml
+role: "Technical Blog Writer specializing in explaining complex AI concepts to non-technical audiences"
+```
+
+**فوائد التخصص:**
+- فهم أوضح للمخرجات المتوقعة
+- أداء أكثر اتساقًا
+- توافق أفضل مع المهام المحددة
+- قدرة محسّنة على إصدار أحكام خاصة بالمجال
+
+### 3. التوازن بين التخصص والمرونة
+
+الـ Agents الفعّالة تحقق التوازن الصحيح بين التخصص (القيام بشيء واحد بشكل ممتاز) والمرونة (التكيف مع مواقف متنوعة):
+
+- **تخصص في الدور، مرونة في التطبيق**: أنشئ Agents بمهارات متخصصة يمكن تطبيقها عبر سياقات متعددة
+- **تجنب التعريفات الضيقة جدًا**: تأكد من أن الـ Agents يمكنها التعامل مع التنوعات ضمن مجال خبرتها
+- **ضع في الاعتبار السياق التعاوني**: صمم Agents تكمّل تخصصاتها الـ Agents الأخرى التي ستعمل معها
+
+### 4. تعيين مستويات الخبرة المناسبة
+
+مستوى الخبرة الذي تعيّنه للـ Agent يشكّل كيفية تعامله مع المهام:
+
+- **Agents مبتدئة**: جيدة للمهام المباشرة والعصف الذهني والمسودات الأولية
+- **Agents متوسطة**: مناسبة لمعظم المهام القياسية مع تنفيذ موثوق
+- **Agents خبيرة**: الأفضل للمهام المعقدة والمتخصصة التي تتطلب عمقًا ودقة
+- **Agents على مستوى عالمي**: محجوزة للمهام الحرجة حيث الجودة الاستثنائية مطلوبة
+
+اختر مستوى الخبرة المناسب بناءً على تعقيد المهمة ومتطلبات الجودة. لمعظم Crews التعاونية، غالبًا ما يعمل مزيج من مستويات الخبرة بشكل أفضل، مع تعيين خبرة أعلى للوظائف المتخصصة الأساسية.
+
+## أمثلة عملية: قبل وبعد
+
+لنلقِ نظرة على بعض أمثلة تعريفات الـ Agent قبل وبعد تطبيق أفضل الممارسات:
+
+### مثال 1: Agent إنشاء المحتوى
+
+**قبل:**
+```yaml
+role: "Writer"
+goal: "Write good content"
+backstory: "You are a writer who creates content for websites."
+```
+
+**بعد:**
+```yaml
+role: "B2B Technology Content Strategist"
+goal: "Create compelling, technically accurate content that explains complex topics in accessible language while driving reader engagement and supporting business objectives"
+backstory: "You have spent a decade creating content for leading technology companies, specializing in translating technical concepts for business audiences. You excel at research, interviewing subject matter experts, and structuring information for maximum clarity and impact. You believe that the best B2B content educates first and sells second, building trust through genuine expertise rather than marketing hype."
+```
+
+### مثال 2: Agent البحث
+
+**قبل:**
+```yaml
+role: "Researcher"
+goal: "Find information"
+backstory: "You are good at finding information online."
+```
+
+**بعد:**
+```yaml
+role: "Academic Research Specialist in Emerging Technologies"
+goal: "Discover and synthesize cutting-edge research, identifying key trends, methodologies, and findings while evaluating the quality and reliability of sources"
+backstory: "With a background in both computer science and library science, you've mastered the art of digital research. You've worked with research teams at prestigious universities and know how to navigate academic databases, evaluate research quality, and synthesize findings across disciplines. You're methodical in your approach, always cross-referencing information and tracing claims to primary sources before drawing conclusions."
+```
+
+## صياغة مهام فعّالة للـ Agents
+
+بينما تصميم الـ Agent مهم، تصميم المهام حاسم للتنفيذ الناجح. إليك أفضل الممارسات لتصميم مهام تهيئ الـ Agents للنجاح:
+
+### تشريح المهمة الفعّالة
+
+المهمة المصممة جيدًا لها مكونان رئيسيان يخدمان أغراضًا مختلفة:
+
+#### وصف المهمة: العملية
+يجب أن يركز الوصف على ماذا تفعل وكيف تفعله، بما في ذلك:
+- تعليمات مفصلة للتنفيذ
+- سياق ومعلومات خلفية
+- النطاق والقيود
+- خطوات العملية المتبعة
+
+#### المخرجات المتوقعة: التسليم
+يجب أن تحدد المخرجات المتوقعة شكل النتيجة النهائية:
+- مواصفات التنسيق (markdown، JSON، إلخ)
+- متطلبات الهيكل
+- معايير الجودة
+- أمثلة على مخرجات جيدة (عند الإمكان)
+
+### أفضل ممارسات تصميم المهام
+
+#### 1. غرض واحد، مخرج واحد
+تؤدي المهام أفضل أداء عند التركيز على هدف واضح واحد:
+
+**مثال سيئ (واسع جدًا):**
+```yaml
+task_description: "Research market trends, analyze the data, and create a visualization."
+```
+
+**مثال جيد (مركّز):**
+```yaml
+# Task 1
+research_task:
+ description: "Research the top 5 market trends in the AI industry for 2024."
+ expected_output: "A markdown list of the 5 trends with supporting evidence."
+
+# Task 2
+analysis_task:
+ description: "Analyze the identified trends to determine potential business impacts."
+ expected_output: "A structured analysis with impact ratings (High/Medium/Low)."
+
+# Task 3
+visualization_task:
+ description: "Create a visual representation of the analyzed trends."
+ expected_output: "A description of a chart showing trends and their impact ratings."
+```
+
+#### 2. كن صريحًا بشأن المدخلات والمخرجات
+حدد دائمًا بوضوح ما المدخلات التي ستستخدمها المهمة وكيف يجب أن تبدو المخرجات:
+
+**مثال:**
+```yaml
+analysis_task:
+ description: >
+ Analyze the customer feedback data from the CSV file.
+ Focus on identifying recurring themes related to product usability.
+ Consider sentiment and frequency when determining importance.
+ expected_output: >
+ A markdown report with the following sections:
+ 1. Executive summary (3-5 bullet points)
+ 2. Top 3 usability issues with supporting data
+ 3. Recommendations for improvement
+```
+
+#### 3. تضمين الغرض والسياق
+اشرح لماذا تهم المهمة وكيف تتناسب مع سير العمل الأكبر:
+
+**مثال:**
+```yaml
+competitor_analysis_task:
+ description: >
+ Analyze our three main competitors' pricing strategies.
+ This analysis will inform our upcoming pricing model revision.
+ Focus on identifying patterns in how they price premium features
+ and how they structure their tiered offerings.
+```
+
+#### 4. استخدام أدوات المخرجات المنظمة
+للمخرجات القابلة للقراءة آليًا، حدد التنسيق بوضوح:
+
+**مثال:**
+```yaml
+data_extraction_task:
+ description: "Extract key metrics from the quarterly report."
+ expected_output: "JSON object with the following keys: revenue, growth_rate, customer_acquisition_cost, and retention_rate."
+```
+
+## أخطاء شائعة يجب تجنبها
+
+بناءً على الدروس المستفادة من التطبيقات الواقعية، إليك أكثر المزالق شيوعًا في تصميم الـ Agent والمهام:
+
+### 1. تعليمات مهام غير واضحة
+
+**المشكلة:** تفتقر المهام لتفاصيل كافية مما يصعّب على الـ Agents تنفيذها بفعالية.
+
+**مثال تصميم سيئ:**
+```yaml
+research_task:
+ description: "Research AI trends."
+ expected_output: "A report on AI trends."
+```
+
+**نسخة محسّنة:**
+```yaml
+research_task:
+ description: >
+ Research the top emerging AI trends for 2024 with a focus on:
+ 1. Enterprise adoption patterns
+ 2. Technical breakthroughs in the past 6 months
+ 3. Regulatory developments affecting implementation
+
+ For each trend, identify key companies, technologies, and potential business impacts.
+ expected_output: >
+ A comprehensive markdown report with:
+ - Executive summary (5 bullet points)
+ - 5-7 major trends with supporting evidence
+ - For each trend: definition, examples, and business implications
+ - References to authoritative sources
+```
+
+### 2. "مهام إلهية" تحاول فعل الكثير
+
+**المشكلة:** مهام تجمع عمليات معقدة متعددة في مجموعة تعليمات واحدة.
+
+**مثال تصميم سيئ:**
+```yaml
+comprehensive_task:
+ description: "Research market trends, analyze competitor strategies, create a marketing plan, and design a launch timeline."
+```
+
+**نسخة محسّنة:**
+قسّمها إلى مهام متسلسلة ومركّزة:
+```yaml
+# Task 1: Research
+market_research_task:
+ description: "Research current market trends in the SaaS project management space."
+ expected_output: "A markdown summary of key market trends."
+
+# Task 2: Competitive Analysis
+competitor_analysis_task:
+ description: "Analyze strategies of the top 3 competitors based on the market research."
+ expected_output: "A comparison table of competitor strategies."
+ context: [market_research_task]
+
+# Continue with additional focused tasks...
+```
+
+### 3. عدم توافق الوصف والمخرجات المتوقعة
+
+**المشكلة:** وصف المهمة يطلب شيئًا بينما المخرجات المتوقعة تحدد شيئًا مختلفًا.
+
+**مثال تصميم سيئ:**
+```yaml
+analysis_task:
+ description: "Analyze customer feedback to find areas of improvement."
+ expected_output: "A marketing plan for the next quarter."
+```
+
+**نسخة محسّنة:**
+```yaml
+analysis_task:
+ description: "Analyze customer feedback to identify the top 3 areas for product improvement."
+ expected_output: "A report listing the 3 priority improvement areas with supporting customer quotes and data points."
+```
+
+### 4. عدم فهم العملية بنفسك
+
+**المشكلة:** مطالبة الـ Agents بتنفيذ مهام لا تفهمها أنت بالكامل.
+
+**الحل:**
+1. حاول تنفيذ المهمة يدويًا أولاً
+2. وثّق عمليتك ونقاط القرار ومصادر المعلومات
+3. استخدم هذا التوثيق كأساس لوصف مهمتك
+
+### 5. الاستخدام المبكر للهياكل الهرمية
+
+**المشكلة:** إنشاء هرميات Agents معقدة بلا داعٍ حيث تعمل العمليات المتسلسلة بشكل أفضل.
+
+**الحل:** ابدأ بالعمليات المتسلسلة وانتقل إلى النماذج الهرمية فقط عندما يتطلب تعقيد سير العمل ذلك حقًا.
+
+### 6. تعريفات Agent غامضة أو عامة
+
+**المشكلة:** تعريفات Agent العامة تؤدي لمخرجات عامة.
+
+**مثال تصميم سيئ:**
+```yaml
+agent:
+ role: "Business Analyst"
+ goal: "Analyze business data"
+ backstory: "You are good at business analysis."
+```
+
+**نسخة محسّنة:**
+```yaml
+agent:
+ role: "SaaS Metrics Specialist focusing on growth-stage startups"
+ goal: "Identify actionable insights from business data that can directly impact customer retention and revenue growth"
+ backstory: "With 10+ years analyzing SaaS business models, you've developed a keen eye for the metrics that truly matter for sustainable growth. You've helped numerous companies identify the leverage points that turned around their business trajectory. You believe in connecting data to specific, actionable recommendations rather than general observations."
+```
+
+## استراتيجيات متقدمة لتصميم الـ Agent
+
+### التصميم للتعاون
+
+عند إنشاء Agents ستعمل معًا في Crew، ضع في اعتبارك:
+
+- **مهارات مكملة**: صمم Agents بقدرات مميزة ومكملة
+- **نقاط التسليم**: حدد واجهات واضحة لكيفية انتقال العمل بين الـ Agents
+- **توتر بنّاء**: أحيانًا، إنشاء Agents بمنظورات مختلفة قليلاً يمكن أن يؤدي لنتائج أفضل من خلال حوار منتج
+
+على سبيل المثال، قد يتضمن Crew إنشاء محتوى:
+
+```yaml
+# Research Agent
+role: "Research Specialist for technical topics"
+goal: "Gather comprehensive, accurate information from authoritative sources"
+backstory: "You are a meticulous researcher with a background in library science..."
+
+# Writer Agent
+role: "Technical Content Writer"
+goal: "Transform research into engaging, clear content that educates and informs"
+backstory: "You are an experienced writer who excels at explaining complex concepts..."
+
+# Editor Agent
+role: "Content Quality Editor"
+goal: "Ensure content is accurate, well-structured, and polished while maintaining consistency"
+backstory: "With years of experience in publishing, you have a keen eye for detail..."
+```
+
+### إنشاء مستخدمي أدوات متخصصين
+
+يمكن تصميم بعض الـ Agents خصيصًا للاستفادة من أدوات معينة بفعالية:
+
+```yaml
+role: "Data Analysis Specialist"
+goal: "Derive meaningful insights from complex datasets through statistical analysis"
+backstory: "With a background in data science, you excel at working with structured and unstructured data..."
+tools: [PythonREPLTool, DataVisualizationTool, CSVAnalysisTool]
+```
+
+### تكييف الـ Agents مع قدرات LLM
+
+للنماذج المختلفة نقاط قوة مختلفة. صمم الـ Agents مع وضع هذه القدرات في الاعتبار:
+
+```yaml
+# For complex reasoning tasks
+analyst:
+ role: "Data Insights Analyst"
+ goal: "..."
+ backstory: "..."
+ llm: openai/gpt-4o
+
+# For creative content
+writer:
+ role: "Creative Content Writer"
+ goal: "..."
+ backstory: "..."
+ llm: anthropic/claude-3-opus
+```
+
+## اختبار تصميم الـ Agent والتكرار عليه
+
+تصميم الـ Agent غالبًا عملية تكرارية. إليك نهجًا عمليًا:
+
+1. **ابدأ بنموذج أولي**: أنشئ تعريف Agent أولي
+2. **اختبر مع مهام نموذجية**: قيّم الأداء على مهام تمثيلية
+3. **حلل المخرجات**: حدد نقاط القوة والضعف
+4. **صقل التعريف**: اضبط الدور والهدف والخلفية بناءً على الملاحظات
+5. **اختبر في بيئة تعاونية**: قيّم كيف يعمل الـ Agent في إعداد Crew
+
+## الخلاصة
+
+صياغة Agents فعّالة هي فن وعلم في آن واحد. من خلال تعريف الأدوار والأهداف والخلفيات بعناية بما يتماشى مع احتياجاتك المحددة، ودمجها مع مهام مصممة جيدًا، يمكنك إنشاء متعاونين AI متخصصين ينتجون نتائج استثنائية.
+
+تذكر أن تصميم الـ Agent والمهام عملية تكرارية. ابدأ بأفضل الممارسات هذه، وراقب الـ Agents أثناء العمل، وصقل نهجك بناءً على ما تتعلمه. وتذكر دائمًا قاعدة 80/20 - ركّز معظم جهدك على إنشاء مهام واضحة ومركّزة للحصول على أفضل النتائج من الـ Agents.
+
+
+تهانينا! أنت الآن تفهم مبادئ وممارسات تصميم Agent الفعّال. طبّق هذه التقنيات لإنشاء Agents قوية ومتخصصة تعمل معًا بسلاسة لإنجاز مهام معقدة.
+
+
+## الخطوات التالية
+
+- جرّب تهيئات Agent مختلفة لحالة استخدامك المحددة
+- تعلم عن [بناء أول Crew](/ar/guides/crews/first-crew) لمعرفة كيف تعمل الـ Agents معًا
+- استكشف [CrewAI Flows](/ar/guides/flows/first-flow) لتنسيق أكثر تقدمًا
diff --git a/docs/v1.15.1/ar/guides/coding-tools/agents-md.mdx b/docs/v1.15.1/ar/guides/coding-tools/agents-md.mdx
new file mode 100644
index 000000000..e118b72eb
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/coding-tools/agents-md.mdx
@@ -0,0 +1,61 @@
+---
+title: أدوات البرمجة
+description: استخدم AGENTS.md لتوجيه أدوات البرمجة وبيئات التطوير عبر مشاريع CrewAI.
+icon: terminal
+mode: "wide"
+---
+
+## لماذا AGENTS.md
+
+`AGENTS.md` هو ملف تعليمات خفيف محلي للمستودع يمنح أدوات البرمجة توجيهات متسقة خاصة بالمشروع. ضعه في جذر المشروع واعتبره المصدر الموثوق لكيفية عمل المساعدين: الاصطلاحات والأوامر وملاحظات البنية والحدود.
+
+## إنشاء مشروع باستخدام CLI
+
+استخدم CLI الخاص بـ CrewAI لإنشاء هيكل مشروع، وسيُضاف `AGENTS.md` تلقائيًا في الجذر.
+
+```bash
+# Crew
+crewai create crew my_crew
+
+# Flow
+crewai create flow my_flow
+
+# Tool repository
+crewai tool create my_tool
+```
+
+## إعداد الأدوات: توجيه المساعدين إلى AGENTS.md
+
+### Codex
+
+يمكن توجيه Codex بملفات `AGENTS.md` الموضوعة في مستودعك. استخدمها لتوفير سياق مشروع مستمر مثل الاصطلاحات والأوامر وتوقعات سير العمل.
+
+### Claude Code
+
+يخزّن Claude Code ذاكرة المشروع في `CLAUDE.md`. يمكنك تهيئته بـ `/init` وتحريره باستخدام `/memory`. يدعم Claude Code أيضًا الاستيرادات داخل `CLAUDE.md`، فيمكنك إضافة سطر واحد مثل `@AGENTS.md` لسحب التعليمات المشتركة دون تكرارها.
+
+يمكنك ببساطة استخدام:
+
+```bash
+mv AGENTS.md CLAUDE.md
+```
+
+### Gemini CLI وGoogle Antigravity
+
+يقوم Gemini CLI وAntigravity بتحميل ملف سياق المشروع (الافتراضي: `GEMINI.md`) من جذر المستودع والمجلدات الأصلية. يمكنك تهيئته لقراءة `AGENTS.md` بدلاً من ذلك (أو بالإضافة إليه) بتعيين `context.fileName` في إعدادات Gemini CLI. على سبيل المثال، عيّنه إلى `AGENTS.md` فقط، أو أدرج كلاً من `AGENTS.md` و`GEMINI.md` إذا أردت الاحتفاظ بتنسيق كل أداة.
+
+يمكنك ببساطة استخدام:
+
+```bash
+mv AGENTS.md GEMINI.md
+```
+
+### Cursor
+
+يدعم Cursor ملف `AGENTS.md` كملف تعليمات مشروع. ضعه في جذر المشروع لتوفير توجيهات لمساعد البرمجة في Cursor.
+
+### Windsurf
+
+يوفر Claude Code تكاملاً رسميًا مع Windsurf. إذا كنت تستخدم Claude Code داخل Windsurf، اتبع توجيهات Claude Code أعلاه واستورد `AGENTS.md` من `CLAUDE.md`.
+
+إذا كنت تستخدم مساعد Windsurf الأصلي، هيّئ ميزة قواعد أو تعليمات المشروع (إذا كانت متاحة) لقراءة `AGENTS.md` أو الصق المحتويات مباشرة.
diff --git a/docs/v1.15.1/ar/guides/coding-tools/build-with-ai.mdx b/docs/v1.15.1/ar/guides/coding-tools/build-with-ai.mdx
new file mode 100644
index 000000000..fa459655d
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/coding-tools/build-with-ai.mdx
@@ -0,0 +1,214 @@
+---
+title: "البناء باستخدام الذكاء الاصطناعي"
+description: "كل ما يحتاجه وكلاء البرمجة بالذكاء الاصطناعي للبناء والنشر والتوسع مع CrewAI — المهارات، وثائق مقروءة آلياً، النشر، وميزات المؤسسات."
+icon: robot
+mode: "wide"
+---
+
+# البناء باستخدام الذكاء الاصطناعي
+
+CrewAI مُصمَّم أصلاً للعمل مع الذكاء الاصطناعي. تجمع هذه الصفحة ما يحتاجه وكيل البرمجة بالذكاء الاصطناعي للبناء مع CrewAI — سواءً كان Claude Code أو Codex أو Cursor أو Gemini CLI أو أي مساعد آخر يساعد المطوّر على إيصال الـ crews والـ flows.
+
+### وكلاء البرمجة المدعومون
+
+
+
+
+
+
+
+
+
+
+ صُممت هذه الصفحة للبشر وللمساعدين الذكيين على حدٍّ سواء. إذا كنت وكيل برمجة، ابدأ بـ **Skills** للحصول على سياق CrewAI، ثم استخدم **llms.txt** للوصول الكامل إلى الوثائق.
+
+
+---
+
+## 1. Skills — علِّم وكيلك CrewAI
+
+**Skills** حزم تعليمات تمنح وكلاء البرمجة معرفة عميقة بـ CrewAI — كيفية إنشاء هيكل Flows، وضبط Crews، استخدام الأدوات، واتباع اتفاقيات الإطار.
+
+
+
+
+ مهارات CrewAI متاحة في **سوق إضافات Claude Code** — نفس قناة التوزيع التي تستخدمها شركات رائدة في مجال الذكاء الاصطناعي:
+ ```shell
+ /plugin marketplace add crewAIInc/skills
+ /plugin install crewai-skills@crewai-plugins
+ /reload-plugins
+ ```
+
+ تُفعَّل أربع مهارات تلقائياً عند طرح أسئلة متعلقة بـ CrewAI:
+
+ | المهارة | متى تُستخدم |
+ |---------|-------------|
+ | `getting-started` | مشاريع جديدة، الاختيار بين `LLM.call()` / `Agent` / `Crew` / `Flow`، ربط `crew.jsonc` / `main.py` |
+ | `design-agent` | ضبط الوكلاء — الدور، الهدف، الخلفية، الأدوات، نماذج اللغة، الذاكرة، الحدود الآمنة |
+ | `design-task` | وصف المهام، التبعيات، المخرجات المنظمة (`output_pydantic`، `output_json`)، المراجعة البشرية |
+ | `ask-docs` | الاستعلام من [خادم CrewAI docs MCP](https://docs.crewai.com/mcp) للحصول على تفاصيل واجهة البرمجة الحالية |
+
+
+ يعمل مع Claude Code أو Codex أو Cursor أو Gemini CLI أو أي وكيل برمجة:
+ ```shell
+ npx skills add crewaiinc/skills
+ ```
+ يُجلب من [سجل skills.sh](https://skills.sh/crewaiinc/skills).
+
+
+
+
+
+ استخدم إحدى الطريقتين أعلاه — سوق إضافات Claude Code أو `npx skills add`. كلاهما يثبّت الحزمة الرسمية [crewAIInc/skills](https://github.com/crewAIInc/skills).
+
+
+ تعلّم الحزمة وكيلك:
+ - **Flows** — تطبيقات ذات حالة، خطوات، وتشغيل crews
+ - **Crews والوكلاء** — أنماط JSON-first (`crew.jsonc` و `agents/*.jsonc`)، الأدوار، المهام، التفويض
+ - **الأدوات والتكاملات** — البحث، واجهات API، خوادم MCP، وأدوات CrewAI الشائعة
+ - **هيكل المشروع** — هياكل CLI واتفاقيات المستودع
+ - **أنماط محدثة** — يتماشى مع وثائق CrewAI الحالية وأفضل الممارسات
+
+
+ يمكن لوكيلك الآن إنشاء هيكل وبناء مشاريع CrewAI دون أن تعيد شرح الإطار في كل جلسة.
+
+
+
+
+
+ كيف تعمل المهارات في وكلاء CrewAI — الحقن، التفعيل، والأنماط.
+
+
+ نظرة على حزمة crewAIInc/skills وما تتضمنه.
+
+
+ إعداد AGENTS.md لـ Claude Code وCodex وCursor وGemini CLI.
+
+
+ القائمة الرسمية — المهارات، إحصاءات التثبيت، والتدقيق.
+
+
+
+---
+
+## 2. llms.txt — وثائق مقروءة آلياً
+
+ينشر CrewAI ملف `llms.txt` يمنح المساعدين الذكيين وصولاً مباشراً إلى الوثائق الكاملة بصيغة مقروءة آلياً.
+
+```
+https://docs.crewai.com/llms.txt
+```
+
+
+
+ [`llms.txt`](https://llmstxt.org/) معيار ناشئ لجعل الوثائق قابلة للاستهلاك من قبل نماذج اللغة الكبيرة. بدلاً من استخراج HTML، يمكن لوكيلك جلب ملف نصي واحد منظم بكل المحتوى المطلوب.
+
+ ملف `llms.txt` الخاص بـ CrewAI **متاح فعلياً** — يمكن لوكيلك استخدامه الآن.
+
+
+ وجِّه وكيل البرمجة إلى عنوان URL عندما يحتاج إلى مرجع CrewAI:
+
+ ```
+ Fetch https://docs.crewai.com/llms.txt for CrewAI documentation.
+ ```
+
+ يمكن للعديد من وكلاء البرمجة (Claude Code، Cursor، وغيرهما) جلب عناوين URL مباشرة. يحتوي الملف على وثائق منظمة تغطي مفاهيم CrewAI وواجهات البرمجة والأدلة.
+
+
+ - **دون استخراج ويب** — محتوى نظيف ومنظم في طلب واحد
+ - **دائماً محدث** — يُقدَّم مباشرة من docs.crewai.com
+ - **محسّن لنماذج اللغة** — مُنسَّق لنوافذ السياق لا للمتصفحات
+ - **يُكمّل Skills** — المهارات تعلّم الأنماط، وllms.txt يوفّر المرجع
+
+
+
+---
+
+## 3. النشر للمؤسسات
+
+انتقل من crew محلي إلى الإنتاج على **CrewAI AMP** (منصة إدارة الوكلاء) في دقائق.
+
+
+
+ أنشئ الهيكل واختبر crew أو flow:
+ ```bash
+ crewai create crew my_crew
+ cd my_crew
+ crewai run
+ ```
+
+
+ تأكد أن هيكل مشروعك جاهز:
+ ```bash
+ crewai deploy --prepare
+ ```
+ راجع [دليل التحضير](/ar/enterprise/guides/prepare-for-deployment) لتفاصيل الهيكل والمتطلبات.
+
+
+ ادفع إلى منصة CrewAI AMP:
+ ```bash
+ crewai deploy
+ ```
+ يمكنك أيضاً النشر عبر [تكامل GitHub](/ar/enterprise/guides/deploy-to-amp) أو [Crew Studio](/ar/enterprise/guides/enable-crew-studio).
+
+
+ يحصل الـ crew المنشور على نقطة نهاية REST. دمجه في أي تطبيق:
+ ```bash
+ curl -X POST https://app.crewai.com/api/v1/crews//kickoff \
+ -H "Authorization: Bearer $CREWAI_API_KEY" \
+ -H "Content-Type: application/json" \
+ -d '{"inputs": {"topic": "AI agents"}}'
+ ```
+
+
+
+
+
+ دليل النشر الكامل — CLI وGitHub وCrew Studio.
+
+
+ نظرة على المنصة — ما يوفّره AMP لـ crews في الإنتاج.
+
+
+
+---
+
+## 4. ميزات المؤسسات
+
+CrewAI AMP مُصمَّم لفرق الإنتاج. إليك ما تحصل عليه بعد النشر.
+
+
+
+ مسارات تنفيذ مفصّلة، وسجلات، ومقاييس أداء لكل تشغيل crew. راقب قرارات الوكلاء، استدعاءات الأدوات، وإكمال المهام في الوقت الفعلي.
+
+
+ واجهة منخفضة/بدون كود لإنشاء crews وتخصيصها ونشرها بصرياً — ثم التصدير إلى الشيفرة أو النشر مباشرة.
+
+
+ بث أحداث فورية من تنفيذات الـ crews إلى أنظمتك. تكامل مع Slack أو Zapier أو أي مستهلك ويبهوك.
+
+
+ SSO وRBAC وضوابط على مستوى المؤسسة. أدر من يمكنه إنشاء crews ونشرها والوصول إليها.
+
+
+ انشر وشارك أدواتاً مخصصة عبر مؤسستك. ثبّت أدوات المجتمع من السجل.
+
+
+ شغّل CrewAI AMP على بنيتك التحتية. قدرات المنصة كاملة مع ضوابط إقامة البيانات والامتثال.
+
+
+
+
+
+ لفرق تحتاج نقل سير عمل وكلاء الذكاء الاصطناعي من النماذج الأولية إلى الإنتاج — مع المراقبة وضوابط الوصول والبنية التحتية القابلة للتوسع. سواءً كنت ناشئاً أو مؤسسة كبيرة، يتولى AMP التعقيد التشغيلي لتتفرغ لبناء الوكلاء.
+
+
+ - **السحابة (app.crewai.com)** — تُدار من CrewAI، أسرع طريق إلى الإنتاج
+ - **Factory (استضافة ذاتية)** — على بنيتك التحتية لسيطرة كاملة على البيانات
+ - **هجين** — دمج السحابة والاستضافة الذاتية حسب حساسية البيانات
+
+
+
+
+ سجّل وانشر أول crew لك في الإنتاج.
+
diff --git a/docs/v1.15.1/ar/guides/concepts/evaluating-use-cases.mdx b/docs/v1.15.1/ar/guides/concepts/evaluating-use-cases.mdx
new file mode 100644
index 000000000..a0a3d5f42
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/concepts/evaluating-use-cases.mdx
@@ -0,0 +1,485 @@
+---
+title: تقييم حالات الاستخدام لـ CrewAI
+description: تعلم كيفية تقييم احتياجات تطبيقات الذكاء الاصطناعي واختيار النهج الصحيح بين Crews وFlows بناءً على متطلبات التعقيد والدقة.
+icon: scale-balanced
+mode: "wide"
+---
+
+## فهم إطار القرار
+
+عند بناء تطبيقات ذكاء اصطناعي مع CrewAI، أحد أهم القرارات التي ستتخذها هو اختيار النهج الصحيح لحالة الاستخدام المحددة. هل يجب استخدام Crew؟ أم Flow؟ أم مزيج من كليهما؟ سيساعدك هذا الدليل على تقييم متطلباتك واتخاذ قرارات معمارية مدروسة.
+
+في جوهر هذا القرار فهم العلاقة بين **التعقيد** و**الدقة** في تطبيقك:
+
+
+
+
+
+تساعد هذه المصفوفة في تصور كيف تتوافق النهج المختلفة مع متطلبات متفاوتة للتعقيد والدقة. لنستكشف ما يعنيه كل ربع وكيف يوجه خياراتك المعمارية.
+
+## شرح مصفوفة التعقيد-الدقة
+
+### ما هو التعقيد؟
+
+في سياق تطبيقات CrewAI، يشير **التعقيد** إلى:
+
+- عدد الخطوات أو العمليات المميزة المطلوبة
+- تنوع المهام التي يجب تنفيذها
+- التبعيات المتبادلة بين المكونات المختلفة
+- الحاجة للمنطق الشرطي والتفرع
+- تطور سير العمل الكلي
+
+### ما هي الدقة؟
+
+**الدقة** في هذا السياق تشير إلى:
+
+- الدقة المطلوبة في المخرجات النهائية
+- الحاجة لنتائج منظمة وقابلة للتنبؤ
+- أهمية إمكانية التكرار
+- مستوى التحكم المطلوب في كل خطوة
+- تحمّل التباين في المخرجات
+
+### الأرباع الأربعة
+
+#### 1. تعقيد منخفض، دقة منخفضة
+
+**الخصائص:**
+- مهام بسيطة ومباشرة
+- تحمّل بعض التباين في المخرجات
+- عدد محدود من الخطوات
+- تطبيقات إبداعية أو استكشافية
+
+**النهج الموصى به:** Crews بسيطة مع عدد قليل من الـ Agents
+
+**أمثلة على حالات الاستخدام:**
+- إنشاء محتوى أساسي
+- العصف الذهني
+- مهام التلخيص البسيطة
+- مساعدة الكتابة الإبداعية
+
+#### 2. تعقيد منخفض، دقة عالية
+
+**الخصائص:**
+- سير عمل بسيطة تتطلب مخرجات دقيقة ومنظمة
+- حاجة لنتائج قابلة للتكرار
+- خطوات محدودة مع متطلبات دقة عالية
+- غالبًا تتضمن معالجة أو تحويل بيانات
+
+**النهج الموصى به:** Flows مع استدعاءات LLM مباشرة أو Crews بسيطة مع مخرجات منظمة
+
+**أمثلة على حالات الاستخدام:**
+- استخراج البيانات وتحويلها
+- ملء النماذج والتحقق منها
+- إنشاء محتوى منظم (JSON، XML)
+- مهام التصنيف البسيطة
+
+#### 3. تعقيد عالٍ، دقة منخفضة
+
+**الخصائص:**
+- عمليات متعددة المراحل بخطوات كثيرة
+- مخرجات إبداعية أو استكشافية
+- تفاعلات معقدة بين المكونات
+- تحمّل التباين في النتائج النهائية
+
+**النهج الموصى به:** Crews معقدة مع عدة Agents متخصصة
+
+**أمثلة على حالات الاستخدام:**
+- البحث والتحليل
+- خطوط إنتاج المحتوى
+- تحليل البيانات الاستكشافي
+- حل المشكلات الإبداعي
+
+#### 4. تعقيد عالٍ، دقة عالية
+
+**الخصائص:**
+- سير عمل معقدة تتطلب مخرجات منظمة
+- خطوات مترابطة متعددة مع متطلبات دقة صارمة
+- حاجة لمعالجة متطورة ونتائج دقيقة معًا
+- غالبًا تطبيقات حرجة المهمة
+
+**النهج الموصى به:** Flows تنسّق عدة Crews مع خطوات تحقق
+
+**أمثلة على حالات الاستخدام:**
+- أنظمة دعم القرار المؤسسية
+- خطوط معالجة بيانات معقدة
+- معالجة مستندات متعددة المراحل
+- تطبيقات الصناعات المنظمة
+
+## الاختيار بين Crews وFlows
+
+### متى تختار Crews
+
+الـ Crews مثالية عندما:
+
+1. **تحتاج ذكاء تعاوني** - عدة Agents بتخصصات مختلفة تحتاج للعمل معًا
+2. **المشكلة تتطلب تفكيرًا ناشئًا** - الحل يستفيد من منظورات ونُهج مختلفة
+3. **المهمة إبداعية أو تحليلية بالأساس** - العمل يتضمن بحثًا أو إنشاء محتوى أو تحليل
+4. **تقدّر القدرة على التكيف على الهيكل الصارم** - سير العمل يمكن أن يستفيد من استقلالية الـ Agent
+5. **تنسيق المخرجات يمكن أن يكون مرنًا نوعًا ما** - بعض التباين في هيكل المخرجات مقبول
+
+```python
+# Example: Research Crew for market analysis
+from crewai import Agent, Crew, Process, Task
+
+# Create specialized agents
+researcher = Agent(
+ role="Market Research Specialist",
+ goal="Find comprehensive market data on emerging technologies",
+ backstory="You are an expert at discovering market trends and gathering data."
+)
+
+analyst = Agent(
+ role="Market Analyst",
+ goal="Analyze market data and identify key opportunities",
+ backstory="You excel at interpreting market data and spotting valuable insights."
+)
+
+# Define their tasks
+research_task = Task(
+ description="Research the current market landscape for AI-powered healthcare solutions",
+ expected_output="Comprehensive market data including key players, market size, and growth trends",
+ agent=researcher
+)
+
+analysis_task = Task(
+ description="Analyze the market data and identify the top 3 investment opportunities",
+ expected_output="Analysis report with 3 recommended investment opportunities and rationale",
+ agent=analyst,
+ context=[research_task]
+)
+
+# Create the crew
+market_analysis_crew = Crew(
+ agents=[researcher, analyst],
+ tasks=[research_task, analysis_task],
+ process=Process.sequential,
+ verbose=True
+)
+
+# Run the crew
+result = market_analysis_crew.kickoff()
+```
+
+### متى تختار Flows
+
+الـ Flows مثالية عندما:
+
+1. **تحتاج تحكمًا دقيقًا في التنفيذ** - سير العمل يتطلب تسلسلًا دقيقًا وإدارة حالة
+2. **التطبيق له متطلبات حالة معقدة** - تحتاج لصيانة وتحويل الحالة عبر خطوات متعددة
+3. **تحتاج مخرجات منظمة وقابلة للتنبؤ** - التطبيق يتطلب نتائج متسقة ومنسّقة
+4. **سير العمل يتضمن منطقًا شرطيًا** - مسارات مختلفة يجب اتخاذها بناءً على نتائج وسيطة
+5. **تحتاج الجمع بين AI وكود إجرائي** - الحل يتطلب قدرات AI وبرمجة تقليدية معًا
+
+```python
+# Example: Customer Support Flow with structured processing
+from crewai.flow.flow import Flow, listen, router, start
+from pydantic import BaseModel
+from typing import List, Dict
+
+# Define structured state
+class SupportTicketState(BaseModel):
+ ticket_id: str = ""
+ customer_name: str = ""
+ issue_description: str = ""
+ category: str = ""
+ priority: str = "medium"
+ resolution: str = ""
+ satisfaction_score: int = 0
+
+class CustomerSupportFlow(Flow[SupportTicketState]):
+ @start()
+ def receive_ticket(self):
+ self.state.ticket_id = "TKT-12345"
+ self.state.customer_name = "Alex Johnson"
+ self.state.issue_description = "Unable to access premium features after payment"
+ return "Ticket received"
+
+ @listen(receive_ticket)
+ def categorize_ticket(self, _):
+ from crewai import LLM
+ llm = LLM(model="openai/gpt-4o-mini")
+
+ prompt = f"""
+ Categorize the following customer support issue into one of these categories:
+ - Billing
+ - Account Access
+ - Technical Issue
+ - Feature Request
+ - Other
+
+ Issue: {self.state.issue_description}
+
+ Return only the category name.
+ """
+
+ self.state.category = llm.call(prompt).strip()
+ return self.state.category
+
+ @router(categorize_ticket)
+ def route_by_category(self, category):
+ return category.lower().replace(" ", "_")
+
+ @listen("billing")
+ def handle_billing_issue(self):
+ self.state.priority = "high"
+ return "Billing issue handled"
+
+ @listen("account_access")
+ def handle_access_issue(self):
+ self.state.priority = "high"
+ return "Access issue handled"
+
+ @listen("billing", "account_access", "technical_issue", "feature_request", "other")
+ def resolve_ticket(self, resolution_info):
+ self.state.resolution = f"Issue resolved: {resolution_info}"
+ return self.state.resolution
+
+# Run the flow
+support_flow = CustomerSupportFlow()
+result = support_flow.kickoff()
+```
+
+### متى تجمع بين Crews وFlows
+
+أكثر التطبيقات تطورًا غالبًا تستفيد من الجمع بين Crews وFlows:
+
+1. **عمليات معقدة متعددة المراحل** - استخدم Flows لتنسيق العملية الكلية وCrews للمهام الفرعية المعقدة
+2. **تطبيقات تتطلب إبداعًا وهيكلاً معًا** - استخدم Crews للمهام الإبداعية وFlows للمعالجة المنظمة
+3. **تطبيقات AI مؤسسية** - استخدم Flows لإدارة الحالة وتدفق العمليات مع الاستفادة من Crews للعمل المتخصص
+
+```python
+# Example: Content Production Pipeline combining Crews and Flows
+from crewai.flow.flow import Flow, listen, start
+from crewai import Agent, Crew, Process, Task
+from pydantic import BaseModel
+from typing import List, Dict
+
+class ContentState(BaseModel):
+ topic: str = ""
+ target_audience: str = ""
+ content_type: str = ""
+ outline: Dict = {}
+ draft_content: str = ""
+ final_content: str = ""
+ seo_score: int = 0
+
+class ContentProductionFlow(Flow[ContentState]):
+ @start()
+ def initialize_project(self):
+ self.state.topic = "Sustainable Investing"
+ self.state.target_audience = "Millennial Investors"
+ self.state.content_type = "Blog Post"
+ return "Project initialized"
+
+ @listen(initialize_project)
+ def create_outline(self, _):
+ researcher = Agent(
+ role="Content Researcher",
+ goal=f"Research {self.state.topic} for {self.state.target_audience}",
+ backstory="You are an expert researcher with deep knowledge of content creation."
+ )
+
+ outliner = Agent(
+ role="Content Strategist",
+ goal=f"Create an engaging outline for a {self.state.content_type}",
+ backstory="You excel at structuring content for maximum engagement."
+ )
+
+ research_task = Task(
+ description=f"Research {self.state.topic} focusing on what would interest {self.state.target_audience}",
+ expected_output="Comprehensive research notes with key points and statistics",
+ agent=researcher
+ )
+
+ outline_task = Task(
+ description=f"Create an outline for a {self.state.content_type} about {self.state.topic}",
+ expected_output="Detailed content outline with sections and key points",
+ agent=outliner,
+ context=[research_task]
+ )
+
+ outline_crew = Crew(
+ agents=[researcher, outliner],
+ tasks=[research_task, outline_task],
+ process=Process.sequential,
+ verbose=True
+ )
+
+ result = outline_crew.kickoff()
+
+ import json
+ try:
+ self.state.outline = json.loads(result.raw)
+ except:
+ self.state.outline = {"sections": result.raw}
+
+ return "Outline created"
+
+ @listen(create_outline)
+ def write_content(self, _):
+ writer = Agent(
+ role="Content Writer",
+ goal=f"Write engaging content for {self.state.target_audience}",
+ backstory="You are a skilled writer who creates compelling content."
+ )
+
+ editor = Agent(
+ role="Content Editor",
+ goal="Ensure content is polished, accurate, and engaging",
+ backstory="You have a keen eye for detail and a talent for improving content."
+ )
+
+ writing_task = Task(
+ description=f"Write a {self.state.content_type} about {self.state.topic} following this outline: {self.state.outline}",
+ expected_output="Complete draft content in markdown format",
+ agent=writer
+ )
+
+ editing_task = Task(
+ description="Edit and improve the draft content for clarity, engagement, and accuracy",
+ expected_output="Polished final content in markdown format",
+ agent=editor,
+ context=[writing_task]
+ )
+
+ writing_crew = Crew(
+ agents=[writer, editor],
+ tasks=[writing_task, editing_task],
+ process=Process.sequential,
+ verbose=True
+ )
+
+ result = writing_crew.kickoff()
+ self.state.final_content = result.raw
+
+ return "Content created"
+
+ @listen(write_content)
+ def optimize_for_seo(self, _):
+ from crewai import LLM
+ llm = LLM(model="openai/gpt-4o-mini")
+
+ prompt = f"""
+ Analyze this content for SEO effectiveness for the keyword "{self.state.topic}".
+ Rate it on a scale of 1-100 and provide 3 specific recommendations for improvement.
+
+ Content: {self.state.final_content[:1000]}... (truncated for brevity)
+
+ Format your response as JSON with the following structure:
+ {{
+ "score": 85,
+ "recommendations": [
+ "Recommendation 1",
+ "Recommendation 2",
+ "Recommendation 3"
+ ]
+ }}
+ """
+
+ seo_analysis = llm.call(prompt)
+
+ import json
+ try:
+ analysis = json.loads(seo_analysis)
+ self.state.seo_score = analysis.get("score", 0)
+ return analysis
+ except:
+ self.state.seo_score = 50
+ return {"score": 50, "recommendations": ["Unable to parse SEO analysis"]}
+
+# Run the flow
+content_flow = ContentProductionFlow()
+result = content_flow.kickoff()
+```
+
+## إطار التقييم العملي
+
+لتحديد النهج الصحيح لحالة استخدامك المحددة، اتبع إطار التقييم التدريجي هذا:
+
+### الخطوة 1: تقييم التعقيد
+
+قيّم تعقيد تطبيقك على مقياس من 1-10 من خلال النظر في:
+
+1. **عدد الخطوات**: كم عدد العمليات المميزة المطلوبة؟
+ - 1-3 خطوات: تعقيد منخفض (1-3)
+ - 4-7 خطوات: تعقيد متوسط (4-7)
+ - 8+ خطوات: تعقيد عالٍ (8-10)
+
+2. **التبعيات المتبادلة**: ما مدى ترابط الأجزاء المختلفة؟
+ - تبعيات قليلة: تعقيد منخفض (1-3)
+ - بعض التبعيات: تعقيد متوسط (4-7)
+ - تبعيات معقدة كثيرة: تعقيد عالٍ (8-10)
+
+3. **المنطق الشرطي**: ما مقدار التفرع وصنع القرار المطلوب؟
+ - عملية خطية: تعقيد منخفض (1-3)
+ - بعض التفرع: تعقيد متوسط (4-7)
+ - أشجار قرار معقدة: تعقيد عالٍ (8-10)
+
+4. **المعرفة التخصصية**: ما مدى تخصص المعرفة المطلوبة؟
+ - معرفة عامة: تعقيد منخفض (1-3)
+ - بعض المعرفة المتخصصة: تعقيد متوسط (4-7)
+ - خبرة عميقة في مجالات متعددة: تعقيد عالٍ (8-10)
+
+احسب متوسط درجتك لتحديد التعقيد الكلي.
+
+### الخطوة 2: تقييم متطلبات الدقة
+
+قيّم متطلبات الدقة على مقياس من 1-10 من خلال النظر في:
+
+1. **هيكل المخرجات**: ما مدى التنظيم المطلوب في المخرجات؟
+ - نص حر: دقة منخفضة (1-3)
+ - شبه منظم: دقة متوسطة (4-7)
+ - منسّق بشكل صارم (JSON، XML): دقة عالية (8-10)
+
+2. **احتياجات الدقة**: ما أهمية الدقة الواقعية؟
+ - محتوى إبداعي: دقة منخفضة (1-3)
+ - محتوى معلوماتي: دقة متوسطة (4-7)
+ - معلومات حرجة: دقة عالية (8-10)
+
+3. **إمكانية التكرار**: ما مدى اتساق النتائج عبر التشغيلات؟
+ - التباين مقبول: دقة منخفضة (1-3)
+ - بعض الاتساق مطلوب: دقة متوسطة (4-7)
+ - تكرار دقيق مطلوب: دقة عالية (8-10)
+
+4. **تحمّل الأخطاء**: ما تأثير الأخطاء؟
+ - تأثير منخفض: دقة منخفضة (1-3)
+ - تأثير معتدل: دقة متوسطة (4-7)
+ - تأثير عالٍ: دقة عالية (8-10)
+
+احسب متوسط درجتك لتحديد متطلبات الدقة الكلية.
+
+### الخطوة 3: التعيين على المصفوفة
+
+ارسم درجات التعقيد والدقة على المصفوفة:
+
+- **تعقيد منخفض (1-4)، دقة منخفضة (1-4)**: Crews بسيطة
+- **تعقيد منخفض (1-4)، دقة عالية (5-10)**: Flows مع استدعاءات LLM مباشرة
+- **تعقيد عالٍ (5-10)، دقة منخفضة (1-4)**: Crews معقدة
+- **تعقيد عالٍ (5-10)، دقة عالية (5-10)**: Flows تنسّق Crews
+
+### الخطوة 4: مراعاة عوامل إضافية
+
+بالإضافة إلى التعقيد والدقة، ضع في اعتبارك:
+
+1. **وقت التطوير**: غالبًا ما تكون Crews أسرع في النماذج الأولية
+2. **احتياجات الصيانة**: توفر Flows قابلية صيانة أفضل على المدى الطويل
+3. **خبرة الفريق**: ضع في اعتبارك ألفة فريقك مع النُهج المختلفة
+4. **متطلبات التوسع**: عادةً ما تتوسع Flows بشكل أفضل للتطبيقات المعقدة
+5. **احتياجات التكامل**: ضع في اعتبارك كيف سيتكامل الحل مع الأنظمة الحالية
+
+## الخلاصة
+
+الاختيار بين Crews وFlows — أو الجمع بينهما — قرار معماري حاسم يؤثر على فعالية وقابلية صيانة وتوسع تطبيق CrewAI. من خلال تقييم حالة الاستخدام على أبعاد التعقيد والدقة، يمكنك اتخاذ قرارات مدروسة تتماشى مع متطلباتك المحددة.
+
+تذكر أن أفضل نهج غالبًا يتطور مع نضج تطبيقك. ابدأ بأبسط حل يلبي احتياجاتك، وكن مستعدًا لصقل بنيتك مع اكتساب الخبرة ووضوح المتطلبات.
+
+
+لديك الآن إطار لتقييم حالات استخدام CrewAI واختيار النهج الصحيح بناءً على متطلبات التعقيد والدقة. سيساعدك هذا في بناء تطبيقات AI أكثر فعالية وقابلية للصيانة والتوسع.
+
+
+## الخطوات التالية
+
+- تعلم المزيد عن [صياغة Agents فعّالة](/ar/guides/agents/crafting-effective-agents)
+- استكشف [بناء أول Crew](/ar/guides/crews/first-crew)
+- تعمّق في [إتقان إدارة حالة Flow](/ar/guides/flows/mastering-flow-state)
+- اطلع على [المفاهيم الأساسية](/ar/concepts/agents) لفهم أعمق
diff --git a/docs/v1.15.1/ar/guides/crews/first-crew.mdx b/docs/v1.15.1/ar/guides/crews/first-crew.mdx
new file mode 100644
index 000000000..db07c6ff9
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/crews/first-crew.mdx
@@ -0,0 +1,140 @@
+---
+title: ابنِ أول Crew
+description: دليل خطوة بخطوة لإنشاء فريق AI تعاوني باستخدام تهيئة JSON-first.
+icon: users-gear
+mode: "wide"
+---
+
+## بناء Crew للبحث
+
+في هذا الدليل ستنشئ crew من Agentين: واحد للبحث وآخر لكتابة تقرير markdown. مشاريع الـ crew الجديدة هي JSON-first: تُعرّف الـ Agents في `agents/*.jsonc`، وتُعرّف المهام وإعدادات الـ crew في `crew.jsonc`، ويحمّل `crewai run` هذا التعريف مباشرة.
+
+### المتطلبات
+
+1. تثبيت CrewAI من [دليل التثبيت](/ar/installation)
+2. إعداد مفتاح LLM من [دليل LLMs](/ar/concepts/llms#setting-up-your-llm)
+3. مفتاح [Serper.dev](https://serper.dev/) إذا أردت استخدام البحث على الويب
+
+## الخطوة 1: إنشاء Crew جديدة
+
+```bash
+crewai create crew research_crew
+cd research_crew
+```
+
+البنية الناتجة:
+
+```text
+research_crew/
+├── .gitignore
+├── .env
+├── agents/
+│ └── researcher.jsonc
+├── crew.jsonc
+├── knowledge/
+├── pyproject.toml
+├── README.md
+├── skills/
+└── tools/
+```
+
+
+إذا احتجت إلى البنية القديمة التي تحتوي على `crew.py` و `config/agents.yaml` و `config/tasks.yaml`، استخدم `crewai create crew research_crew --classic`.
+
+
+## الخطوة 2: تعريف الـ Agents
+
+عدّل ملف `agents/researcher.jsonc` الذي أنشأه القالب، ثم أضف `agents/analyst.jsonc`. يجب أن تطابق أسماء الملفات الأسماء المشار إليها في `crew.jsonc`.
+
+```jsonc agents/researcher.jsonc
+{
+ "role": "Senior Research Specialist for {topic}",
+ "goal": "Find comprehensive and accurate information about {topic}, with a focus on recent developments and key insights.",
+ "backstory": "You are an experienced research specialist who organizes complex information into clear, useful notes.",
+ // استبدله بالنموذج الذي تستخدمه، مثل "openai/gpt-4o".
+ "llm": "provider/model-id",
+ "tools": ["SerperDevTool"],
+ "settings": {
+ "verbose": true,
+ "allow_delegation": false
+ }
+}
+```
+
+```jsonc agents/analyst.jsonc
+{
+ "role": "Report Analyst for {topic}",
+ "goal": "Turn research findings into a clear, well-structured report.",
+ "backstory": "You are a careful analyst with strong technical writing skills and a talent for extracting useful insights.",
+ // استبدله بالنموذج الذي تستخدمه، مثل "openai/gpt-4o".
+ "llm": "provider/model-id",
+ "settings": {
+ "verbose": true,
+ "allow_delegation": false
+ }
+}
+```
+
+استبدل `provider/model-id` بالنموذج الذي تستخدمه، مثل `openai/gpt-4o` أو `anthropic/claude-sonnet-4-6` أو `gemini/gemini-2.0-flash-001`.
+
+## الخطوة 3: تعريف المهام وإعدادات الـ Crew
+
+استبدل `crew.jsonc` بما يلي:
+
+```jsonc crew.jsonc
+{
+ "name": "Research Crew",
+ "agents": ["researcher", "analyst"],
+ "tasks": [
+ {
+ "name": "research_task",
+ "description": "Conduct thorough research on {topic}. Focus on key concepts, recent developments, major challenges, notable applications, and future outlook.",
+ "expected_output": "A comprehensive research document with organized sections, specific facts, and useful examples about {topic}.",
+ "agent": "researcher"
+ },
+ {
+ "name": "analysis_task",
+ "description": "Analyze the research findings and create a polished report on {topic}. Include an executive summary, key insights, trend analysis, and recommendations.",
+ "expected_output": "A professional markdown report with clear headings, a concise summary, main findings, and recommendations.",
+ "agent": "analyst",
+ "context": ["research_task"],
+ "output_file": "output/report.md",
+ "markdown": true
+ }
+ ],
+ "process": "sequential",
+ "verbose": true,
+ "memory": true,
+ "inputs": {
+ "topic": "Artificial Intelligence in Healthcare"
+ }
+}
+```
+
+يشير `context` إلى أسماء مهام سابقة، لذلك يحصل analyst على مخرجات مهمة البحث. يوفر `inputs` قيمة افتراضية لـ `{topic}`. إذا حذفت القيمة الافتراضية، سيطلبها `crewai run`.
+
+## الخطوة 4: متغيرات البيئة
+
+عدّل `.env`:
+
+```sh
+SERPER_API_KEY=your_serper_api_key
+# أضف مفتاح مزود النموذج أيضًا.
+```
+
+## الخطوة 5: التثبيت والتشغيل
+
+```bash
+crewai install
+crewai run
+```
+
+بعد انتهاء التشغيل، افتح `output/report.md`.
+
+
+شغّل مشاريع JSON crew من مصادر تثق بها فقط. أدوات `custom:` ومراجع `{"python": "module.attribute"}` تنفذ Python محليًا عند تحميل الـ crew.
+
+
+
+أصبحت لديك crew تعمل بأسلوب JSON-first تبحث في موضوع وتكتب تقريرًا.
+
diff --git a/docs/v1.15.1/ar/guides/flows/conversational-flows.mdx b/docs/v1.15.1/ar/guides/flows/conversational-flows.mdx
new file mode 100644
index 000000000..371de79be
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/flows/conversational-flows.mdx
@@ -0,0 +1,473 @@
+---
+title: تدفقات المحادثة
+description: أنشئ تطبيقات دردشة متعددة الجولات مع kickoff لكل جولة وسجل الرسائل وتوجيه النية والتتبع وجسور WebSocket.
+icon: comments
+mode: "wide"
+---
+
+## نظرة عامة
+
+تعامل التطبيقات المحادثية مع كل سطر من المستخدم كـ **تشغيل flow جديد** بنفس **معرّف الجلسة**. توفر CrewAI مساعدات لسجل الرسائل وتصنيف النية الاختياري وتأجيل التتبع وجسور الواجهة، إضافة إلى REPL محلي `flow.chat()` للتدفقات المحادثية.
+
+| المفهوم | التنفيذ |
+|---------|---------|
+| معرّف الجلسة | `handle_turn(..., session_id=...)` → `kickoff(inputs={"id": ...})` → `state.id` |
+| سطر المستخدم | `handle_turn(message)` يضيف الرسالة إلى `state.messages` قبل تشغيل الرسم |
+| اكتمال الجولة | `FlowFinished` لهذا **التشغيل** فقط؛ تستمر المحادثة في `handle_turn` التالي |
+| تتبع الجلسة | `ConversationConfig(defer_trace_finalization=True)` + `finalize_session_traces()` |
+
+## واجهات الجولات
+
+استخدم **`flow.handle_turn(message, session_id=...)`** لكل رسالة مستخدم من REST أو WebSocket أو الاختبارات أو الواجهات المخصصة. استخدم **`flow.chat()`** عندما تريد حلقة دردشة محلية في الطرفية لـ `Flow` محادثي.
+
+لا يقبل `Flow.kickoff()` الوسيطين `user_message=` أو `session_id=`. في التدفقات المحادثية، يخزن `handle_turn()` الرسالة المعلقة ويستدعي داخلياً `kickoff(inputs={"id": session_id})`.
+
+| API | الاستخدام |
+|-----|-----------|
+| `handle_turn(message, session_id=...)` | غلاف مريح لجولة واحدة في `Flow` محادثي |
+| `chat()` | REPL محلي في الطرفية لـ `Flow` محادثي |
+| `kickoff(inputs={...})` | تشغيل متقدم للـ flow بدون معالجة جولة محادثية |
+| `ask()` | مطالبة حاجزة **داخل** خطوة واحدة |
+| `@human_feedback` | الموافقة/الرفض على **مخرجات خطوة** — وليس السطر التالي |
+| `ChatSession.handle_turn(...)` | طبقة نقل فوق `handle_turn` |
+
+## بداية سريعة
+
+```python
+from uuid import uuid4
+
+from crewai import Flow
+from crewai.flow import listen
+from crewai.experimental.conversational import (
+ ConversationConfig,
+ ConversationState,
+)
+
+
+@ConversationConfig(defer_trace_finalization=True)
+class SupportFlow(Flow[ConversationState]):
+ conversational = True
+
+ def route_turn(self, context):
+ message = (self.state.current_user_message or "").lower()
+ if "طلب" in message or "order" in message:
+ return "order"
+ if "وداع" in message or "goodbye" in message:
+ return "goodbye"
+ return "help"
+
+ @listen("order")
+ def handle_order(self):
+ reply = "طلبك في الطريق."
+ self.append_assistant_message(reply)
+ return reply
+
+ @listen("help")
+ def handle_help(self):
+ reply = "كيف يمكنني المساعدة؟"
+ self.append_assistant_message(reply)
+ return reply
+
+ @listen("goodbye")
+ def handle_goodbye(self):
+ reply = "وداعاً!"
+ self.append_assistant_message(reply)
+ return reply
+
+
+session_id = str(uuid4())
+flow = SupportFlow()
+
+try:
+ flow.handle_turn("أين طلبي؟", session_id=session_id)
+ flow.handle_turn("وماذا عن الإرجاع؟", session_id=session_id)
+finally:
+ flow.finalize_session_traces()
+```
+
+## دورة حياة الجولة
+
+كل `handle_turn` يشغّل:
+
+1. **`_configure_conversational_kickoff`** — دمج `session_id` / `user_message` في `inputs` وتطبيق `ConversationalConfig`.
+2. **استعادة الحالة** — عند وجود `inputs["id"]` و`@persist`.
+3. **`FlowStarted`** — في أول جولة للجلسة المؤجلة فقط.
+4. **`prepare_conversational_turn`** — إضافة رسالة المستخدم و`last_user_message` وتصنيف اختياري.
+5. **تنفيذ الرسم** — `@start` → `@router` → معالجات `@listen`.
+6. **نهاية التشغيل** — يُتخطى `flow_finished` والتتبع لكل جولة عند التأجيل؛ `Agent.kickoff()` / crews لا تغلق دفعة الأب.
+
+استدعِ **`append_assistant_message(reply)`** في المعالجات. سطر المستخدم محفوظ عبر `handle_turn` — لا تُضفه مرة أخرى.
+
+## `ConversationalConfig` (افتراضيات على مستوى الصنف)
+
+عيّن على صنف `Flow` كـ `conversational_config: ClassVar[ConversationalConfig | None]`.
+
+| الحقل | الافتراضي | الغرض |
+|-------|-----------|--------|
+| `default_intents` | `None` | تسميات outcome للتصنيف التلقائي قبل kickoff |
+| `intent_llm` | `None` | نموذج التصنيف (مطلوب عند وجود intents) |
+| `interactive_prompt` | `"You: "` | مطالبة `kickoff(interactive=True)` |
+| `interactive_timeout` | `None` | مهلة لكل سطر في الوضع التفاعلي |
+| `exit_commands` | `exit`, `quit` | كلمات إنهاء الوضع التفاعلي |
+| `defer_trace_finalization` | `True` | إبقاء دفعة trace واحدة مفتوحة بين الجولات |
+
+يمكن التجاوز لكل kickoff عبر `intents=` و`intent_llm=`.
+
+## `ChatState` (شكل الحالة الموصى به للحفظ)
+
+```python
+from crewai.flow import ChatState
+
+
+class MyChatState(ChatState):
+ # موروث: id, messages, last_user_message, last_intent, session_ready
+ research_turn_count: int = 0
+ custom_flag: bool = False
+```
+
+| الحقل | الدور |
+|-------|------|
+| `id` | UUID الجلسة (مثل `session_id` / `inputs["id"]`) |
+| `messages` | قائمة `{role, content}` لسجل LLM |
+| `last_user_message` | آخر سطر مستخدم في هذه الجولة |
+| `last_intent` | تسمية المسار بعد التصنيف (إن وُجد) |
+| `session_ready` | علم bootstrap لمرة واحدة |
+
+`ConversationalInputs` هو `TypedDict` لـ `kickoff(inputs={...})`: `id`, `user_message`, `last_intent`.
+
+## API المحادثة على `Flow`
+
+### معاملات `kickoff` / `kickoff_async`
+
+| المعامل | الغرض |
+|---------|--------|
+| `user_message` | نص هذه الجولة (أو `{"role": "user", "content": "..."}`) |
+| `session_id` | UUID المحادثة → `inputs["id"]` / `state.id` |
+| `intents` | تسميات outcome لـ `classify_intent` قبل kickoff |
+| `intent_llm` | LLM للتصنيف (مطلوب مع `intents`) |
+| `interactive` | حلقة CLI عبر `ask()` (للعروض المحلية فقط) |
+| `interactive_prompt` | مطالبة الوضع التفاعلي |
+| `interactive_timeout` | مهلة `ask()` لكل سطر |
+| `exit_commands` | كلمات إنهاء الوضع التفاعلي |
+| `inputs` | حقول حالة إضافية |
+| `restore_from_state_id` | استنساخ من flow محفوظ آخر |
+
+### سمات المثيل
+
+| السمة | الغرض |
+|-------|--------|
+| `conversational_config` | افتراضيات `ConversationalConfig` على مستوى الصنف |
+| `defer_trace_finalization` | علم المثيل؛ يُضبط تلقائياً من config عند kickoff |
+| `suppress_flow_events` | يخفي لوحات console؛ **التتبع يُسجّل** |
+| `stream` | بث؛ مع `ChatSession.handle_turn(..., stream=True)` |
+
+### طرق وخصائص
+
+| الاسم | الوصف |
+|------|--------|
+| `append_message(role, content, **extra)` | إضافة إلى `state.messages` |
+| `conversation_messages` | سجل للقراءة فقط لاستدعاءات LLM |
+| `classify_intent(text, outcomes, *, llm, context=None)` | تعيين outcome |
+| `receive_user_message(text, *, outcomes=None, llm=None)` | إضافة رسالة مستخدم؛ `last_intent` اختياري |
+| `finalize_session_traces()` | إصدار `flow_finished` المؤجل وإنهاء دفعة trace |
+| `_should_defer_trace_finalization()` | هل يُؤجل إنهاء trace لكل جولة |
+| `input_history` | سجل تدقيق مطالبات وردود `ask()` |
+
+### مساعدات الوحدة (`crewai.flow.conversation`)
+
+| الدالة | الوصف |
+|--------|--------|
+| `normalize_kickoff_inputs(...)` | دمج kwargs المحادثة في `inputs` |
+| `get_conversation_messages(flow)` | قراءة الرسائل من الحالة أو المخزن |
+| `append_message(flow, ...)` | مثل طريقة المثيل |
+| `prepare_conversational_turn(flow, ...)` | تهيئة الجولة (عادةً kickoff يستدعيها) |
+| `receive_user_message(flow, ...)` | مثل طريقة المثيل |
+| `set_state_field(flow, name, value)` | تعيين حقل dict أو Pydantic |
+| `get_conversational_config(flow)` | قراءة `conversational_config` |
+| `input_history_to_messages(entries)` | تحويل `input_history` لصيغة رسائل LLM |
+
+## أنماط توجيه النية
+
+### أ. تصنيف مسبق عبر `ConversationalConfig` (الأبسط)
+
+عيّن `default_intents` و`intent_llm`. كل kickoff يصنّف قبل `@router`؛ اقرأ `self.state.last_intent` في `route()`.
+
+### ب. تصنيف داخل `@router` (مطالبات أغنى)
+
+عيّن `default_intents=None` ليضيف kickoff الرسالة فقط. في `route()` استدعِ `classify_intent`:
+
+```python
+@router(bootstrap)
+def route(self):
+ intent = self.classify_intent(
+ self._routing_prompt(self.state.last_user_message),
+ ("GREETING", "ORDER", "RESEARCH", "GOODBYE"),
+ llm=self.conversational_config.intent_llm or "gpt-4o-mini",
+ )
+ self.state.last_intent = intent
+ return intent
+```
+
+للبحث على الويب أو أدوات متعددة الخطوات استخدم **`@listen("RESEARCH")`** مع `Agent.kickoff()` وأدوات — وليس `LLM.call()` فقط.
+
+## عندما ينتهي الـ flow ويستمر المستخدم
+
+`FlowFinished` يعني أن **تنفيذ الرسم هذا** اكتمل. تستمر المحادثة بـ `kickoff` آخر ونفس `session_id`. `@persist` يستعيد `messages` والأعلام والسياق.
+
+**نمط الحفظ:** يُفضّل `@persist` على **خطوة نهائية واحدة** (مثل `finalize`) وليس على صنف `Flow` بالكامل. الحفظ على مستوى الصنف بعد كل method قد يفقد تحديثات المعالجات في نفس الجولة.
+
+لا تستخدم `@human_feedback` لأسطر المتابعة في الدردشة إلا عند الحاجة لموافقة بشرية على مخرجات خطوة محددة.
+
+## `Flow` المحادثاتي (تجريبي)
+
+
+ **ميزة تجريبية.** سطح `Flow` المحادثاتي (`conversational = True`،
+ `handle_turn`، `ConversationConfig`، `RouterConfig`،
+ `ConversationState`، الرسم البياني المدمج والمساعدات) يقع تحت
+ `crewai.experimental` وقد يتغير شكله قبل التخرج. ثبّت إصدار CrewAI إذا
+ كنت تعتمد على سلوك محدد، وراقب changelog للتحديثات الكاسرة. الملاحظات
+ والمشاكل مرحب بها.
+
+
+فعّل الرسم المحادثاتي بتعيين `conversational = True` على صنف فرعي من `Flow`. عندئذٍ يُظهر `Flow` الأساسي رسم `@start` / `@router` / `converse_turn` / `end_conversation` مدمجاً، ويدير `state.messages`، ويُشغّل LLM التوجيه، ويبقي دفعة trace مفتوحة عبر الجولات. أنت تكتب **المسارات المخصصة** فقط؛ والإطار يتولى الباقي.
+
+استخدمه عندما تريد دردشة متعددة الجولات مع موجّه قائم على LLM ومعالجات لكل مسار دون توصيل دورة الحياة يدوياً. استخدم `Flow[ChatState]` (النمط الأدنى مستوى في الأعلى) عندما تحتاج تحكماً كاملاً.
+
+### مثال سريع
+
+```python
+from crewai import LLM, Flow
+from crewai.flow import listen
+from crewai.experimental.conversational import (
+ ConversationConfig,
+ ConversationState,
+ RouterConfig,
+)
+
+
+ROUTER_LLM = LLM(model="gpt-4o-mini")
+
+
+@ConversationConfig(
+ system_prompt="A multi-agent assistant for ordinary chat and tool-backed tasks.",
+ llm=ROUTER_LLM,
+ router=RouterConfig(), # المسارات + الأوصاف تُكتشف تلقائياً من معالجات @listen
+)
+class SupportFlow(Flow[ConversationState]):
+ conversational = True
+
+ @listen("INTERNET_SEARCH")
+ def handle_internet_search(self) -> str:
+ """Fresh web research, current news, real-time lookups."""
+ ...
+ self.append_assistant_message(reply)
+ return reply
+
+ @listen("CREWAI_DOCS")
+ def handle_crewai_docs(self) -> str:
+ """Look up the CrewAI documentation for framework/API questions."""
+ ...
+ self.append_assistant_message(reply)
+ return reply
+
+
+flow = SupportFlow()
+try:
+ flow.handle_turn("ماذا يمكنك أن تفعل؟") # يوجَّه إلى converse (مدمج)
+ flow.handle_turn("ابحث في الويب عن أخبار الذكاء الاصطناعي.") # يوجَّه إلى INTERNET_SEARCH
+ flow.handle_turn("لخص النتيجة الأولى.") # يعود إلى converse
+finally:
+ flow.finalize_session_traces()
+```
+
+للدردشة المحلية في الطرفية، استخدم `chat()`:
+
+```python
+def kickoff() -> None:
+ SupportFlow().chat()
+```
+
+يلف `chat()` استدعاءات `handle_turn()` داخل REPL، ويخرج عند `exit` / `quit`، ويتجاهل الأسطر الفارغة افتراضياً، ويستدعي `finalize_session_traces()` عند انتهاء الجلسة.
+
+### `ConversationConfig`
+
+مزخرف صنف يُلحق افتراضيات الدردشة على مستوى الصنف.
+
+| الحقل | الافتراضي | الغرض |
+|-------|-----------|-------|
+| `system_prompt` | `slices.conversational_system_prompt` من i18n | رسالة system يستخدمها `converse_turn` المدمج. مرر `""` للتعطيل التام. |
+| `llm` | `None` | LLM المحادثة (يستخدمه `converse_turn` وكاحتياطي للموجّه). |
+| `router` | `None` | `RouterConfig` للتوجيه عبر LLM. بدونه، يسقط الـ flow دائماً إلى `converse`. |
+| `answer_from_history_prompt` | افتراضي الإطار | رسالة system للمسار الاختياري `answer_from_history`. |
+| `answer_from_history_llm` | `None` | يُفعّل الاختصار `answer_from_history` عند تعيينه. |
+| `intent_llm` | `None` | LLM لمسار التصنيف المسبق القديم `intents=`/`default_intents`. |
+| `default_intents` | `None` | تسميات النتائج للتصنيف المسبق القديم. |
+| `visible_agent_outputs` | `None` | `"all"` أو قائمة بأسماء الـ agents الذين تُرفع مخرجاتهم من `append_agent_result()` إلى رسائل عامة. |
+| `defer_trace_finalization` | `True` | يبقي دفعة trace واحدة مفتوحة عبر استدعاءات `handle_turn()`. |
+
+### `RouterConfig` وفهرس المسارات المُولَّد تلقائياً
+
+```python
+RouterConfig(
+ prompt="تأطير اختياري للنطاق (سياسة، صوت، شخصية).",
+ response_format=MyRoute, # اختياري؛ يُولَّد تلقائياً عند الإغفال
+ llm=ROUTER_LLM, # يسقط إلى ConversationConfig.llm
+ routes=["INTERNET_SEARCH", "CREWAI_DOCS"], # اختياري؛ يُستنتج من المستمعين
+ route_descriptions={
+ "INTERNET_SEARCH": "تجاوز الـ docstring لهذا المسار فقط.",
+ },
+ default_intent="converse", # يُستخدم عند فشل LLM أو غيابه
+ fallback_intent="converse", # يُستخدم عندما يعيد LLM مساراً غير صالح
+ intent_field="intent",
+)
+```
+
+تُبنى رسالة الموجّه إلى LLM تلقائياً. لكل مسار يختار الإطار وصفاً بهذا الترتيب من الأولوية:
+
+1. `RouterConfig.route_descriptions[label]` — تجاوز صريح.
+2. `Flow.builtin_route_descriptions[label]` — نص جاهز من الإطار لـ `converse` و`end` و`answer_from_history` (مصاغ لـ LLM التوجيه).
+3. أول سطر غير فارغ من docstring معالج `@listen(label)`.
+4. فارغ (المسار يظهر في الفهرس بلا وصف).
+
+عملياً، **إضافة مسار جديد = `@listen("X")` + docstring من سطر واحد**:
+
+```python
+@listen("INTERNET_SEARCH")
+def handle_internet_search(self) -> str:
+ """Fresh web research, current news, real-time lookups."""
+ ...
+```
+
+…وسيرى LLM التوجيه:
+
+```
+Routes:
+- CREWAI_DOCS: Look up the CrewAI documentation for framework/API questions.
+- INTERNET_SEARCH: Fresh web research, current news, real-time lookups.
+- converse: Ordinary chat, follow-ups, summaries, clarifications…
+- end: User signals the conversation is finished (goodbye, exit, done).
+```
+
+`RouterConfig.prompt` مخصص لـ **تأطير النطاق** (شخصية المساعد، قواعد العمل، النبرة). فهرس المسارات يُبنى تلقائياً — لا تُدرج المسارات في `prompt`؛ سيختل التزامن لحظة إضافة معالج جديد.
+
+### المسارات المدمجة
+
+| المسار | المعالج | الغرض |
+|--------|---------|-------|
+| `converse` | `converse_turn` | معالج الدردشة الافتراضي. يستدعي `ConversationConfig.llm` بـ system prompt + التاريخ القانوني للرسائل. |
+| `end` | `end_conversation` | يضبط `state.ended = True` ويُصدر رد إنهاء. |
+| `answer_from_history` | `answer_from_history_turn` | اختياري. يُوجَّه إليه عندما يكون `ConversationConfig.answer_from_history_llm` مُعيَّناً ويمكن الإجابة على الرسالة من التاريخ فقط. |
+
+يمكنك تجاوز أي من هذه بتعريف معالج بنفس الاسم في الصنف الفرعي.
+
+### دلالات `handle_turn()`
+
+`flow.handle_turn(message)` يُشغّل جولة واحدة:
+
+1. يعيد ضبط تعقّب التنفيذ لكل جولة (`_completed_methods`, `_method_outputs`) ليُعاد تشغيل الرسم — بدون ذلك، استدعاءات `kickoff` المتكررة على نفس النسخة ستُحدث دائرة قصر من الجولة الثانية لأن `Flow.kickoff_async` يعتبر `inputs={"id": ...}` استعادة من نقطة تفتيش.
+2. يُلحق رسالة المستخدم بـ `state.messages` ويضبط `current_user_message` / `last_user_message`. يُحافَظ على `last_intent` **من الجولة السابقة** كي يستخدمها LLM التوجيه كإشارة.
+3. يُشغّل `conversation_start` → `route_conversation` → معالج `@listen` المختار.
+4. يخزّن الموجّه قراره في `state.last_intent` (يكون مرئياً لسياق التوجيه في الجولة التالية).
+5. إذا أعاد معالجك سلسلة نصية ولم يستدعِ `append_assistant_message`، فإن `handle_turn` يُلحقها نيابةً عنك.
+
+استدعِ `handle_turn()` لرسائل الدردشة. استدعاء `kickoff(inputs={"id": ...})` مباشرةً يشغل الرسم بدون غلاف الجولة المحادثية.
+
+### `chat()` للـ REPL المحلي
+
+`flow.chat()` هو غلاف الطرفية الجاهز فوق `handle_turn()`:
+
+```python
+flow = SupportFlow()
+flow.chat()
+```
+
+يتولى الحلقة المحلية الشائعة:
+
+1. يطلب رسالة من المستخدم.
+2. يتوقف عند `exit` / `quit` أو `EOFError` أو `KeyboardInterrupt`.
+3. يستدعي `handle_turn(message, session_id=...)`.
+4. يطبع نتيجة المساعد.
+5. ينهي traces الجلسة المؤجلة داخل كتلة `finally`.
+
+خصص سلوك الطرفية عبر I/O قابل للحقن:
+
+```python
+flow.chat(
+ session_id="demo-session",
+ prompt="You: ",
+ assistant_prefix="Assistant: ",
+ exit_commands=("exit", "quit", "bye"),
+)
+```
+
+لتطبيقات الويب والـ workers الخلفية والاختبارات ووسائط النقل المخصصة، استمر في استخدام `handle_turn()` مباشرةً.
+
+### سلوك موجّه مخصص
+
+لتشغيل آثار جانبية (إعداد ناقل أحداث، قياس عن بُعد) في كل قرار توجيه، تجاوز `route_turn`:
+
+```python
+class SupportFlow(Flow[ConversationState]):
+ conversational = True
+
+ def route_turn(self, context: dict[str, Any]) -> str | None:
+ self.event_bus = MyBus(self)
+ return super().route_turn(context)
+```
+
+لتجاوز موجّه LLM واختيار مسار برمجياً، أعد سلسلة نصية من `route_turn`؛ إعادة `None` تسقط إلى `_route_with_config(...)`.
+
+### `append_assistant_message` و`append_agent_result`
+
+داخل معالج `@listen(label)`، اختر:
+
+- `self.append_assistant_message(text)` — يضيف جولة مساعد مرئية للمستخدم إلى `state.messages`. سيراها `converse_turn` في الجولة التالية.
+- `self.append_agent_result(agent_name, result, visibility="private")` — يسجّل حدثاً منظماً في `state.events` وموضوعاً في `state.agent_threads[agent_name]`. الرؤية العامة تستدعي `append_assistant_message` أيضاً. استخدم النتائج الخاصة للعمل الجانبي الذي يجب ألا يلوث التاريخ القانوني.
+
+يمكن لـ `ConversationConfig.visible_agent_outputs` رفع النتائج الخاصة لـ agents محددين إلى عامة عالمياً (`"all"` أو قائمة بالأسماء).
+
+## التتبع عبر الجولات
+
+مع `defer_trace_finalization=True` (افتراضي في `ConversationalConfig`):
+
+- **دفعة trace واحدة** لجلسة الدردشة.
+- **`flow_started`** في الجولة الأولى فقط؛ **`flow_finished`** مرة في `finalize_session_traces()`.
+- **`kickoff` لكل جولة** لا يطبع "Trace batch finalized".
+- **العمل المتداخل** (`Agent.kickoff()`, crews, Exa) يُلحق بدفعة **الأب**؛ flow داخلي من `AgentExecutor` لا يغلق دفعة الجلسة مبكراً.
+
+```python
+flow.chat(session_id=session_id)
+```
+
+`flow.chat()` يستدعي `finalize_session_traces()` نيابةً عنك. عندما تملك الحلقة عبر `handle_turn()` أو `kickoff(...)`، استدعِ `finalize_session_traces()` عند انتهاء الجلسة.
+
+`suppress_flow_events=True` يخفي لوحات Rich فقط؛ أحداث trace والـ methods تُصدر.
+
+### دورة حياة trace لـ `Flow` المحادثاتي
+
+يستخدم [`Flow` المحادثاتي](#flow-المحادثاتي-تجريبي) التجريبي نفس دورة حياة tracing: `defer_trace_finalization` افتراضياً `True`، فيبقي كل `handle_turn()` أثر الجلسة مفتوحاً. أنهِ دوماً عند نهاية الجلسة — لُف حلقتك بـ `try/finally` واستدعِ `flow.finalize_session_traces()` عند الخروج. بدون ذلك، تبقى الدفعة مفتوحة وقد لا تُصدَّر آخر محادثة أبداً.
+
+## البث
+
+اضبط `stream = True` على صنف `Flow`. عندئذٍ يُصدر `kickoff(...)` أحداث `assistant_delta` (وما يرتبط بها) عبر ناقل الأحداث القياسي.
+
+## الاستيراد
+
+```python
+from crewai.flow import (
+ ChatState,
+ ConversationalConfig,
+ ConversationalInputs,
+ Flow,
+ listen,
+ persist,
+ router,
+ start,
+)
+```
+
+## مراجع
+
+- [إتقان إدارة حالة Flow](/ar/guides/flows/mastering-flow-state)
+- [أنشئ أول Flow](/ar/guides/flows/first-flow)
+- Demo: `lib/crewai/runner_conversational_flow_simple.py` — REPL بسيط مع `RESEARCH` ووكيل Exa
diff --git a/docs/v1.15.1/ar/guides/flows/first-flow.mdx b/docs/v1.15.1/ar/guides/flows/first-flow.mdx
new file mode 100644
index 000000000..322e71c2a
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/flows/first-flow.mdx
@@ -0,0 +1,222 @@
+---
+title: ابنِ أول Flow لك
+description: تعلم كيفية إنشاء سير عمل منظمة قائمة على الأحداث مع تحكم دقيق في التنفيذ.
+icon: diagram-project
+mode: "wide"
+---
+
+## التحكم في سير عمل AI مع Flows
+
+تمثل CrewAI Flows المستوى التالي في تنسيق AI - الجمع بين القوة التعاونية لفرق Agents AI مع دقة ومرونة البرمجة الإجرائية. بينما تتفوق Crews في تعاون الـ Agents، تمنحك Flows تحكمًا دقيقًا في كيفية ووقت تفاعل المكونات المختلفة لنظام AI.
+
+في هذا الدليل، سنمشي عبر إنشاء CrewAI Flow قوي ينشئ دليلًا تعليميًا شاملاً حول أي موضوع.
+
+### ما يجعل Flows قوية
+
+تمكّنك Flows من:
+
+1. **الجمع بين أنماط تفاعل AI مختلفة** - استخدام Crews للمهام التعاونية المعقدة واستدعاءات LLM المباشرة للعمليات الأبسط والكود العادي للمنطق الإجرائي
+2. **بناء أنظمة قائمة على الأحداث** - تحديد كيفية استجابة المكونات لأحداث وتغييرات بيانات محددة
+3. **الحفاظ على الحالة عبر المكونات** - مشاركة وتحويل البيانات بين أجزاء مختلفة من تطبيقك
+4. **التكامل مع الأنظمة الخارجية** - ربط سير عمل AI بسلاسة مع قواعد البيانات وواجهات API وواجهات المستخدم
+5. **إنشاء مسارات تنفيذ معقدة** - تصميم فروع شرطية ومعالجة متوازية وسير عمل ديناميكية
+
+### المتطلبات المسبقة
+
+قبل البدء، تأكد من:
+
+1. تثبيت CrewAI باتباع [دليل التثبيت](/ar/installation)
+2. إعداد مفتاح API لنموذج LLM في بيئتك، باتباع [دليل إعداد LLM](/ar/concepts/llms#setting-up-your-llm)
+3. فهم أساسي لـ Python
+
+## الخطوة 1: إنشاء مشروع CrewAI Flow جديد
+
+```bash
+crewai create flow guide_creator_flow
+cd guide_creator_flow
+```
+
+
+
+
+
+## الخطوة 2: فهم هيكل المشروع
+
+يستخدم الـ crew المبدئي المضمّن في مشروع Flow بنية Python/YAML الكلاسيكية. لاستخدام crew بنمط JSON-first داخل Flow، أنشئ `crew.jsonc` و `agents/*.jsonc` داخل مجلد الـ crew وحمّله عبر `crewai.project.load_crew` كما في [Flows](/ar/concepts/flows#building-your-crews).
+
+```
+guide_creator_flow/
+├── .gitignore
+├── pyproject.toml
+├── README.md
+├── .env
+└── src/
+ └── guide_creator_flow/
+ ├── __init__.py
+ ├── main.py
+ ├── crews/
+ │ └── poem_crew/
+ │ ├── config/
+ │ │ ├── agents.yaml
+ │ │ └── tasks.yaml
+ │ └── poem_crew.py
+ └── tools/
+ └── custom_tool.py
+```
+
+يوفر هذا الهيكل فصلاً واضحًا بين مكونات Flow المختلفة. سنعدّل هذا الهيكل لإنشاء Flow منشئ الدليل.
+
+## الخطوة 3: إضافة Crew كتابة المحتوى
+
+```bash
+crewai flow add-crew content-crew
+```
+
+## الخطوة 4: تهيئة Crew كتابة المحتوى
+
+سنهيئ crew كتابة المحتوى باستخدام JSONC. سنعرّف Agent للكتابة وAgent للمراجعة، ثم نحمّل `crew.jsonc` من خطوة Flow.
+
+1. أنشئ `src/guide_creator_flow/crews/content_crew/agents/content_writer.jsonc`:
+
+```jsonc
+{
+ "role": "Educational Content Writer",
+ "goal": "Create engaging, informative content that thoroughly explains the assigned topic and provides valuable insights to the reader.",
+ "backstory": "You are a talented educational writer who explains complex concepts in accessible language and organizes information clearly.",
+ "llm": "provider/model-id",
+ "settings": {
+ "verbose": true
+ }
+}
+```
+
+2. أنشئ `src/guide_creator_flow/crews/content_crew/agents/content_reviewer.jsonc`:
+
+```jsonc
+{
+ "role": "Educational Content Reviewer and Editor",
+ "goal": "Ensure content is accurate, comprehensive, well-structured, and consistent with previously written sections.",
+ "backstory": "You are a meticulous editor with an eye for detail, clarity, and coherence.",
+ "llm": "provider/model-id",
+ "settings": {
+ "verbose": true
+ }
+}
+```
+
+استبدل `provider/model-id` بالنموذج الذي تستخدمه، مثل `openai/gpt-4o` أو `gemini/gemini-2.0-flash-001` أو `anthropic/claude-sonnet-4-6`.
+
+3. أنشئ `src/guide_creator_flow/crews/content_crew/crew.jsonc`:
+
+```jsonc
+{
+ "name": "Content Crew",
+ "agents": ["content_writer", "content_reviewer"],
+ "tasks": [
+ {
+ "name": "write_section_task",
+ "description": "Write a comprehensive section on the topic: \"{section_title}\".\n\nSection description: {section_description}\nTarget audience: {audience_level} level learners\n\nYour content should begin with a brief introduction, explain key concepts clearly with examples, include practical applications where appropriate, end with a summary, and be approximately 500-800 words.\n\nPreviously written sections:\n{previous_sections}",
+ "expected_output": "A well-structured, comprehensive section in Markdown format that thoroughly explains the topic and is appropriate for the target audience.",
+ "agent": "content_writer",
+ "markdown": true
+ },
+ {
+ "name": "review_section_task",
+ "description": "Review and improve this section on \"{section_title}\":\n\n{draft_content}\n\nTarget audience: {audience_level} level learners\nPreviously written sections:\n{previous_sections}\n\nFix errors, improve clarity, verify consistency, enhance structure, and add missing key information.",
+ "expected_output": "An improved, polished version of the section that maintains the original structure but enhances clarity, accuracy, and consistency.",
+ "agent": "content_reviewer",
+ "context": ["write_section_task"],
+ "markdown": true
+ }
+ ],
+ "process": "sequential",
+ "verbose": true
+}
+```
+
+4. استبدل `src/guide_creator_flow/crews/content_crew/content_crew.py` بمحمل صغير:
+
+```python
+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})
+```
+
+## الخطوة 5: إنشاء Flow
+
+الآن الجزء المثير - إنشاء Flow الذي سينسّق عملية إنشاء الدليل بالكامل. راجع الملف الإنجليزي الأصلي للكود الكامل لـ `main.py` حيث أن الكود يبقى كما هو.
+
+## الخطوة 6: إعداد متغيرات البيئة
+
+أنشئ ملف `.env` في جذر مشروعك بمفاتيح API. راجع [دليل إعداد LLM](/ar/concepts/llms#setting-up-your-llm) لتفاصيل تهيئة المزود.
+
+```sh .env
+OPENAI_API_KEY=your_openai_api_key
+# or
+GEMINI_API_KEY=your_gemini_api_key
+# or
+ANTHROPIC_API_KEY=your_anthropic_api_key
+```
+
+## الخطوة 7: تثبيت التبعيات
+
+```bash
+crewai install
+```
+
+## الخطوة 8: تشغيل Flow
+
+```bash
+crewai run
+```
+
+عند تشغيل هذا الأمر، ستشاهد Flow يعمل:
+1. سيطلب منك موضوعًا ومستوى الجمهور
+2. سينشئ مخططًا منظمًا لدليلك
+3. سيعالج كل قسم مع تعاون الكاتب والمراجع
+4. أخيرًا سيجمع كل شيء في دليل شامل
+
+## الخطوة 9: تصوير Flow
+
+```bash
+crewai flow plot
+```
+
+سينشئ ملف HTML يوضح هيكل Flow بما في ذلك العلاقات بين الخطوات المختلفة.
+
+## الخطوة 10: مراجعة المخرجات
+
+بمجرد اكتمال Flow، ستجد ملفين في مجلد `output`:
+
+1. `guide_outline.json`: يحتوي على المخطط المنظم للدليل
+2. `complete_guide.md`: الدليل الشامل بجميع الأقسام
+
+## الميزات الرئيسية الموضّحة
+
+يوضح Flow منشئ الدليل عدة ميزات قوية لـ CrewAI:
+
+1. **تفاعل المستخدم**: يجمع Flow مدخلات مباشرة من المستخدم
+2. **استدعاءات LLM المباشرة**: يستخدم فئة LLM لتفاعلات AI فعّالة وأحادية الغرض
+3. **بيانات منظمة مع Pydantic**: يستخدم نماذج Pydantic لضمان سلامة الأنواع
+4. **معالجة تسلسلية مع سياق**: يكتب الأقسام بالترتيب ويوفر الأقسام السابقة كسياق
+5. **Crews متعددة الـ Agents**: يستفيد من Agents متخصصة (كاتب ومراجع) لإنشاء المحتوى
+6. **إدارة الحالة**: يحافظ على الحالة عبر خطوات العملية المختلفة
+7. **بنية قائمة على الأحداث**: يستخدم مزخرف `@listen` للاستجابة للأحداث
+
+## الخطوات التالية
+
+1. جرّب هياكل Flow أكثر تعقيدًا وأنماطًا
+2. جرّب استخدام `@router()` لإنشاء فروع شرطية
+3. استكشف دوال `and_` و`or_` لتنفيذ متوازٍ أكثر تعقيدًا
+4. اربط Flow بواجهات API خارجية وقواعد بيانات وواجهات مستخدم
+5. ادمج عدة Crews متخصصة في Flow واحد
+6. أنشئ تطبيقات دردشة متعددة الجولات مع [تدفقات المحادثة](/ar/guides/flows/conversational-flows) (`kickoff` لكل رسالة، `ChatSession`، تأجيل التتبع)
+
+
+تهانينا! لقد بنيت بنجاح أول CrewAI Flow يجمع بين الكود العادي واستدعاءات LLM المباشرة ومعالجة Crew لإنشاء دليل شامل. هذه المهارات الأساسية تمكّنك من إنشاء تطبيقات AI متطورة بشكل متزايد.
+
diff --git a/docs/v1.15.1/ar/guides/flows/inputs-id-deprecation.mdx b/docs/v1.15.1/ar/guides/flows/inputs-id-deprecation.mdx
new file mode 100644
index 000000000..3e29b2baf
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/flows/inputs-id-deprecation.mdx
@@ -0,0 +1,102 @@
+---
+title: "الانتقال من inputs.id إلى restore_from_state_id"
+description: "نقل تدفقات @persist من ترطيب inputs.id المهجور إلى حقل restore_from_state_id المدعوم"
+icon: "arrow-right-arrow-left"
+---
+
+
+ تمرير `id` داخل `inputs` لترطيب تدفق `@persist` هو **مهجور** ومقرر إزالته في إصدار مستقبلي. البديل، `restore_from_state_id`، متاح في CrewAI **v1.14.5 وما بعده** — الخطوات أدناه تنطبق بمجرد أن تقوم بالتحديث.
+
+
+## نظرة عامة
+
+الطريقة الموثقة لترطيب تدفق `@persist` من تنفيذ سابق هي تمرير UUID لذلك التنفيذ كـ `inputs.id`. الآن، تكشف CrewAI عن حقل مخصص، `restore_from_state_id`، الذي يقوم بنفس الترطيب دون تحميل حمولة `inputs` — ودون ربط مفتاح الترطيب بهوية التنفيذ الجديد.
+
+## الانتقال
+
+إذا كنت حالياً تبدأ تدفق `@persist` باستخدام `inputs={"id": ...}`:
+
+```python
+# مهجور
+flow = CounterFlow()
+flow.kickoff(inputs={"id": "abcd1234-5678-90ef-ghij-klmnopqrstuv"})
+```
+
+انتقل إلى `restore_from_state_id`:
+
+```python
+# مدعوم
+flow = CounterFlow()
+flow.kickoff(restore_from_state_id="abcd1234-5678-90ef-ghij-klmnopqrstuv")
+```
+
+تتمتع الوضعيتان بمعاني سلالة مختلفة:
+
+- `inputs={"id": }` (مهجور) — **استئناف**: تكتب الكتابات تحت المعرف المقدم، مما يمدد نفس تاريخ `flow_uuid`.
+- `restore_from_state_id=` — **تفرع**: يترطب الحالة من اللقطة، ثم يكتب تحت `state.id` جديدة. يتم الحفاظ على تاريخ التدفق المصدر.
+
+لأغلب سيناريوهات الإنتاج — إعادة تشغيل تدفق تم تهيئته من حالة سابقة — فإن التفرع هو ما تريده. راجع [إتقان حالة التدفق](/ar/guides/flows/mastering-flow-state) للحصول على النموذج الذهني الكامل.
+
+إذا كنت تبدأ تدفقك عبر واجهة برمجة تطبيقات CrewAI AMP REST، راجع [AMP](#amp) أدناه لهجرة الحمولة المعادلة.
+
+## لماذا نقوم بإهمال `inputs.id` لـ `@persist`
+
+`inputs.id` هو حالياً الطريقة الموثقة لاستئناف تدفق `@persist` من تنفيذ سابق. المشكلة هي أن نفس UUID يقوم بوظيفتين في وقت واحد:
+
+1. **يحدد أي لقطة يترطب منها `@persist`** — تحميل الحالة المحفوظة تحت ذلك UUID.
+2. **يصبح معرف تنفيذ التدفق الجديد** (`state.id` في SDK؛ يظهر كـ `flow_id` في بعض السياقات) — كل كتابة `@persist` من هذه البداية أيضاً تقع تحت نفس UUID.
+
+هذه الوظيفة المزدوجة هي السبب الجذري للمشاكل التي يصفها هذا الدليل. لأن UUID المقدم هو أيضاً معرف التنفيذ الجديد، فإن بدايتين تمرران نفس `inputs.id` ليست تنفيذين متميزين — إنهما تشتركان في معرف، وتشاركان في سجل الاستمرارية، و(على AMP) تشتركان في صف في قائمة التنفيذات. لا توجد طريقة للقول "ترطب من هذه اللقطة، ولكن سجل هذا التشغيل بشكل منفصل" دون تقسيم المسؤوليتين.
+
+`restore_from_state_id` هو هذا الانقسام. إنه يخبر `@persist` من أي لقطة يترطب، بينما يترك التنفيذ الجديد حراً لاستلام `state.id` جديدة. لم يعد مصدر الترطيب والتشغيل المسجل نفس UUID — وهو ما تريده معظم سيناريوهات الإنتاج فعلياً.
+
+## جدول إزالة
+
+من المقرر إزالة `inputs.id` لترطيب `@persist` في إصدار مستقبلي من CrewAI. لا يوجد قطع صارم فوري — تظل التدفقات الحالية تعمل — ولكن بمجرد أن تقوم بالتحديث إلى v1.14.5 أو ما بعده، يجب أن يستخدم الكود الجديد `restore_from_state_id`، ويجب أن تهاجر التدفقات الحالية في الفرصة المناسبة التالية.
+
+## AMP
+
+إذا كنت تنشر تدفقك إلى CrewAI AMP، فإن الهجرة تمتد إلى الحمولة التي تبدأ بها المرسلة إلى طاقمك المنشور، وتظهر الأعراض المرئية لإعادة استخدام `inputs.id` على لوحة معلومات النشر. تغطي القسمان الفرعيان أدناه كلاهما.
+
+### هجرة حمولة البداية
+
+إذا كنت حالياً تبدأ تدفقاً منشوراً عن طريق تضمين `id` في `inputs`:
+
+```bash
+# مهجور
+curl -X POST \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer YOUR_CREW_TOKEN" \
+ -d '{"inputs": {"id": "abcd1234-5678-90ef-ghij-klmnopqrstuv", "topic": "AI Agent Frameworks"}}' \
+ https://your-crew-url.crewai.com/kickoff
+```
+
+نقل UUID إلى حقل `restoreFromStateId` في المستوى الأعلى:
+
+```bash
+# مدعوم
+curl -X POST \
+ -H "Content-Type: application/json" \
+ -H "Authorization: Bearer YOUR_CREW_TOKEN" \
+ -d '{
+ "inputs": {"topic": "AI Agent Frameworks"},
+ "restoreFromStateId": "abcd1234-5678-90ef-ghij-klmnopqrstuv"
+ }' \
+ https://your-crew-url.crewai.com/kickoff
+```
+
+يجلس `restoreFromStateId` بجانب `inputs` في حمولة البداية، وليس داخلها. الآن، يحمل كائن `inputs` فقط القيم التي تستهلكها تدفقك فعلياً.
+
+### ماذا يحدث عند إعادة استخدام `inputs.id`
+
+عندما تتلقى AMP بداية لتدفق يتطابق `inputs.id` الخاص به مع تنفيذ موجود، فإنه يحل إلى السجل الموجود بدلاً من إنشاء سجل جديد. من لوحة معلومات النشر سترى:
+
+- **حالة التنفيذ** — حالة التشغيل الجديد تحل محل حالة التشغيل السابق. يمكن أن تعود تنفيذات مكتملة إلى `جارية`، أو يمكن أن تتحول تشغيلات `مكتملة` إلى `خطأ` إذا فشلت البداية الجديدة — في كلتا الحالتين، لم تعد لوحة المعلومات تعكس التشغيل الأصلي.
+- **التتبع** — تتراكم تتبعات OTel عبر البدايات لأنها تشترك في نفس معرف التنفيذ؛ تتبعات التشغيل السابق إما تُستبدل بـ، أو تُخلط مع، تشغيل الجديد. لم يعد إعادة التشغيل خطوة بخطوة يتوافق مع تنفيذ واحد.
+- **قائمة التنفيذات** — البدايات التي يجب أن تظهر كصفوف منفصلة تتقلص إلى إدخال واحد، مما يخفي التاريخ.
+
+تساعد الهجرة إلى `restoreFromStateId` في الحفاظ على كل بداية كتنفيذ خاص بها — مع حالتها الخاصة، وتتبعها، وصفها في القائمة — بينما لا تزال ترطب الحالة من تشغيل سابق.
+
+
+ اتصل بفريق الدعم لدينا إذا لم تكن متأكداً من أي وضع يحتاجه تدفقك أو واجهت مشاكل أثناء الهجرة.
+
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/guides/flows/mastering-flow-state.mdx b/docs/v1.15.1/ar/guides/flows/mastering-flow-state.mdx
new file mode 100644
index 000000000..2311a4462
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/flows/mastering-flow-state.mdx
@@ -0,0 +1,228 @@
+---
+title: إتقان إدارة حالة Flow
+description: دليل شامل لإدارة الحالة وحفظها والاستفادة منها في CrewAI Flows لبناء تطبيقات AI قوية.
+icon: diagram-project
+mode: "wide"
+---
+
+## فهم قوة الحالة في Flows
+
+إدارة الحالة هي العمود الفقري لأي سير عمل AI متطور. في CrewAI Flows، يتيح لك نظام الحالة الحفاظ على السياق ومشاركة البيانات بين الخطوات وبناء منطق تطبيق معقد. إتقان إدارة الحالة ضروري لإنشاء تطبيقات AI موثوقة وقابلة للصيانة وقوية.
+
+### لماذا تهم إدارة الحالة
+
+تمكّنك إدارة الحالة الفعّالة من:
+
+1. **الحفاظ على السياق عبر خطوات التنفيذ** - تمرير المعلومات بسلاسة بين مراحل سير العمل المختلفة
+2. **بناء منطق شرطي معقد** - اتخاذ قرارات بناءً على البيانات المتراكمة
+3. **إنشاء تطبيقات مستمرة** - حفظ واستعادة تقدم سير العمل
+4. **معالجة الأخطاء بلطف** - تنفيذ أنماط استرداد لتطبيقات أكثر قوة
+5. **توسيع تطبيقاتك** - دعم سير العمل المعقدة بتنظيم بيانات مناسب
+6. **تمكين التطبيقات الحوارية** - تخزين والوصول إلى سجل المحادثات للتفاعلات الواعية بالسياق
+
+للدردشة متعددة الجولات (`kickoff` لكل سطر مستخدم، `ChatState`، توجيه النية، تأجيل التتبع، و`ChatSession`)، راجع [تدفقات المحادثة](/ar/guides/flows/conversational-flows).
+
+## أساسيات إدارة الحالة
+
+### نهجان لإدارة الحالة
+
+يوفر CrewAI طريقتين لإدارة الحالة في Flows:
+
+1. **الحالة غير المنظمة** - استخدام كائنات شبيهة بالقاموس للمرونة
+2. **الحالة المنظمة** - استخدام نماذج Pydantic لسلامة الأنواع والتحقق
+
+### مثال الحالة غير المنظمة
+
+```python
+from crewai.flow.flow import Flow, listen, start
+
+class UnstructuredStateFlow(Flow):
+ @start()
+ def initialize_data(self):
+ self.state["user_name"] = "Alex"
+ self.state["preferences"] = {"theme": "dark", "language": "English"}
+ self.state["items"] = []
+ return "Initialized"
+
+ @listen(initialize_data)
+ def process_data(self, previous_result):
+ user = self.state["user_name"]
+ self.state["items"].append("item1")
+ self.state["processed"] = True
+ return "Processed"
+
+flow = UnstructuredStateFlow()
+result = flow.kickoff()
+```
+
+### مثال الحالة المنظمة
+
+```python
+from crewai.flow.flow import Flow, listen, start
+from pydantic import BaseModel, Field
+from typing import List, Dict, Optional
+
+class AppState(BaseModel):
+ user_name: str = ""
+ items: List[str] = []
+ processed: bool = False
+ completion_percentage: float = 0.0
+
+class StructuredStateFlow(Flow[AppState]):
+ @start()
+ def initialize_data(self):
+ self.state.user_name = "Taylor"
+ return "Initialized"
+
+ @listen(initialize_data)
+ def process_data(self, previous_result):
+ self.state.items.append("item1")
+ self.state.processed = True
+ self.state.completion_percentage = 50.0
+ return "Processed"
+
+flow = StructuredStateFlow()
+result = flow.kickoff()
+```
+
+### فوائد الحالة المنظمة
+
+1. **سلامة الأنواع** - اكتشاف أخطاء الأنواع في وقت التطوير
+2. **توثيق ذاتي** - نموذج الحالة يوثّق بوضوح البيانات المتاحة
+3. **التحقق** - التحقق التلقائي من أنواع البيانات والقيود
+4. **دعم IDE** - إكمال تلقائي وتوثيق مضمّن
+5. **قيم افتراضية** - تعريف بدائل سهلة للبيانات المفقودة
+
+## حفظ حالة Flow
+
+يوفر مزخرف `@persist()` حفظ حالة تلقائي عند نقاط رئيسية في التنفيذ.
+
+```python
+from crewai.flow.flow import Flow, listen, start
+from crewai.flow.persistence import persist
+from pydantic import BaseModel
+
+class CounterState(BaseModel):
+ value: int = 0
+
+@persist()
+class PersistentCounterFlow(Flow[CounterState]):
+ @start()
+ def increment(self):
+ self.state.value += 1
+ return self.state.value
+
+ @listen(increment)
+ def double(self, value):
+ self.state.value = value * 2
+ return self.state.value
+```
+
+#### تفرع الحالة المستمرة
+
+يدعم `@persist` نمطين متميزين للترطيب في `kickoff` / `kickoff_async`. استخدم **استئناف** (`inputs["id"]`) لمواصلة نفس النسب؛ استخدم **تفرع** (`restore_from_state_id`) لبدء نسبٍ جديد من لقطة:
+
+| | `state.id` بعد kickoff | كتابات `@persist` تذهب إلى |
+|---|---|---|
+| `inputs["id"]` (استئناف) | المعرّف المقدم | المعرّف المقدم (يمد التاريخ) |
+| `restore_from_state_id` (تفرع) | معرّف جديد، أو `inputs["id"]` إذا ثُبّت | المعرّف الجديد (المصدر محفوظ) |
+
+```python
+from crewai.flow.flow import Flow, start
+from crewai.flow.persistence import persist
+from pydantic import BaseModel
+
+class CounterState(BaseModel):
+ id: str = ""
+ counter: int = 0
+
+@persist
+class CounterFlow(Flow[CounterState]):
+ @start()
+ def step(self):
+ self.state.counter += 1
+
+# التشغيل 1: حالة جديدة، العداد 0 -> 1
+flow_1 = CounterFlow()
+flow_1.kickoff()
+
+# التفرع: الترطيب من أحدث لقطة لـ flow_1، لكن الكتابة تحت state.id جديد
+flow_2 = CounterFlow()
+flow_2.kickoff(restore_from_state_id=flow_1.state.id)
+# يبدأ flow_2 بـ counter=1 (مرطّب)، ثم تزيده step() إلى 2.
+# تاريخ flow_uuid لـ flow_1 لم يتغيّر.
+```
+
+ملاحظات السلوك:
+
+- `restore_from_state_id` غير موجود في الاستمرارية → يعود kickoff بصمت إلى السلوك الافتراضي (يعكس سلوك `inputs["id"]` عند عدم العثور عليه). لا يُطلق أي استثناء.
+- الجمع بين `restore_from_state_id` و `from_checkpoint` يطلق `ValueError` — يستهدفان نظامي حالة مختلفين (`@persist` مقابل Checkpointing) ولا يمكن الجمع بينهما.
+- `restore_from_state_id=None` (افتراضي) متطابق بايت ببايت مع kickoff بدون المعامل.
+- تثبيت `inputs["id"]` أثناء التفرع يعني أن التشغيل الجديد يشارك مفتاح الاستمرارية مع تدفق آخر — عادةً ما تريد فقط `restore_from_state_id`.
+
+## أنماط حالة متقدمة
+
+### المنطق الشرطي المبني على الحالة
+
+```python
+from crewai.flow.flow import Flow, listen, router, start
+from pydantic import BaseModel
+
+class PaymentState(BaseModel):
+ amount: float = 0.0
+ is_approved: bool = False
+ retry_count: int = 0
+
+class PaymentFlow(Flow[PaymentState]):
+ @start()
+ def process_payment(self):
+ self.state.amount = 100.0
+ self.state.is_approved = self.state.amount < 1000
+ return "Payment processed"
+
+ @router(process_payment)
+ def check_approval(self, previous_result):
+ if self.state.is_approved:
+ return "approved"
+ elif self.state.retry_count < 3:
+ return "retry"
+ else:
+ return "rejected"
+
+ @listen("approved")
+ def handle_approval(self):
+ return f"Payment of ${self.state.amount} approved!"
+
+ @listen("retry")
+ def handle_retry(self):
+ self.state.retry_count += 1
+ return "Retry initiated"
+
+ @listen("rejected")
+ def handle_rejection(self):
+ return f"Payment of ${self.state.amount} rejected after {self.state.retry_count} retries."
+```
+
+## أفضل الممارسات لإدارة الحالة
+
+1. **اجعل الحالة مركّزة** - صمم الحالة لتحتوي فقط على ما هو ضروري
+2. **استخدم الحالة المنظمة للـ Flows المعقدة** - مع نمو التعقيد تصبح الحالة المنظمة أكثر قيمة
+3. **وثّق انتقالات الحالة** - للـ Flows المعقدة، وثّق كيف تتغير الحالة عبر التنفيذ
+4. **عالج أخطاء الحالة بلطف** - طبّق معالجة أخطاء للوصول إلى الحالة
+5. **استخدم الحالة لتتبع التقدم** - استفد من الحالة لتتبع التقدم في Flows طويلة التشغيل
+6. **استخدم العمليات غير المتغيرة عند الإمكان** - خاصة مع الحالة المنظمة
+
+## الخلاصة
+
+إتقان إدارة الحالة في CrewAI Flows يمنحك القدرة على بناء تطبيقات AI متطورة وقوية تحافظ على السياق وتتخذ قرارات معقدة وتقدم نتائج متسقة.
+
+
+لقد أتقنت الآن مفاهيم وممارسات إدارة الحالة في CrewAI Flows! بهذه المعرفة، يمكنك إنشاء سير عمل AI قوية تحافظ على السياق بفعالية وتشارك البيانات بين الخطوات وتبني منطق تطبيق متطور.
+
+
+## الخطوات التالية
+
+- جرّب الحالة المنظمة وغير المنظمة في Flows
+- جرّب تطبيق حفظ الحالة لسير العمل طويلة التشغيل
+- استكشف [بناء أول Crew](/ar/guides/crews/first-crew) لمعرفة كيف تعمل Crews وFlows معًا
+- اطلع على [توثيق مرجع Flow](/ar/concepts/flows) لمزيد من الميزات المتقدمة
diff --git a/docs/v1.15.1/ar/guides/migration/migrating-from-langgraph.mdx b/docs/v1.15.1/ar/guides/migration/migrating-from-langgraph.mdx
new file mode 100644
index 000000000..913854ae8
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/migration/migrating-from-langgraph.mdx
@@ -0,0 +1,103 @@
+---
+title: "الانتقال من LangGraph إلى CrewAI: دليل عملي للمهندسين"
+description: إذا كنت قد بنيت بالفعل مع LangGraph، تعلم كيفية نقل مشاريعك بسرعة إلى CrewAI
+icon: switch
+mode: "wide"
+---
+
+لقد بنيت Agents مع LangGraph. لقد تعاملت مع `StateGraph`، وربطت الحواف الشرطية، وصححت أخطاء قواميس الحالة في الثانية صباحًا. إنه يعمل — لكن في مرحلة ما، بدأت تتساءل عما إذا كان هناك مسار أفضل نحو الإنتاج.
+
+هناك بالفعل. **CrewAI Flows** يمنحك نفس القوة — تنسيق قائم على الأحداث، توجيه شرطي، حالة مشتركة — مع نموذج كود أبسط بشكل كبير ونموذج ذهني يتماشى مع طريقة تفكيرك الفعلية في سير عمل AI متعدد الخطوات.
+
+تمشي هذه المقالة عبر المفاهيم الأساسية جنبًا إلى جنب، وتعرض مقارنات كود حقيقية، وتوضح لماذا CrewAI Flows هو إطار العمل الذي ستريد الوصول إليه بعد ذلك.
+
+---
+
+## تحول النموذج الذهني
+
+LangGraph يطلب منك التفكير في **رسوم بيانية**: عقد وحواف وقواميس حالة. كل سير عمل هو رسم بياني موجّه تربط فيه الانتقالات صراحةً بين خطوات الحساب.
+
+CrewAI Flows يطلب منك التفكير في **أحداث**: طرق تبدأ الأشياء، وطرق تستمع للنتائج، وطرق توجّه التنفيذ. طوبولوجيا سير العمل تنبثق من تعليقات المزخرفات بدلاً من بناء رسم بياني صريح.
+
+إليك الخريطة الأساسية:
+
+| مفهوم LangGraph | المكافئ في CrewAI Flows |
+| --- | --- |
+| `StateGraph` class | `Flow` class |
+| `add_node()` | طرق مزخرفة بـ `@start`، `@listen` |
+| `add_edge()` / `add_conditional_edges()` | مزخرفات `@listen()` / `@router()` |
+| `TypedDict` state | حالة Pydantic `BaseModel` |
+| `START` / `END` constants | مزخرف `@start()` / إرجاع طبيعي للطريقة |
+| `graph.compile()` | `flow.kickoff()` |
+| Checkpointer / persistence | ذاكرة مدمجة (مدعومة بـ LanceDB) |
+
+---
+
+## العرض 1: خط أنابيب تسلسلي بسيط
+
+تخيل أنك تبني خط أنابيب يأخذ موضوعًا، ويبحث فيه، ويكتب ملخصًا، وينسّق المخرجات. راجع الملف الإنجليزي الأصلي لأمثلة الكود الكاملة لكلا النهجين.
+
+الفرق الرئيسي: لا بناء رسم بياني، لا ربط حواف، لا خطوة ترجمة. ترتيب التنفيذ مُعلَن مباشرة حيث يوجد المنطق. `@start()` يحدد نقطة الدخول، و`@listen(method_name)` يربط الخطوات.
+
+---
+
+## العرض 2: التوجيه الشرطي
+
+مزخرف `@router()` يحوّل طريقة إلى نقطة قرار. يعيد سلسلة تطابق مستمعًا — بلا قواميس تعيين، بلا دوال توجيه منفصلة. منطق التفرع يُقرأ كتعبير `if` في Python لأنه كذلك فعلاً.
+
+---
+
+## العرض 3: دمج فرق Agents AI في Flows
+
+هنا تتجلى القوة الحقيقية لـ CrewAI. الـ Flows لا تقتصر على ربط استدعاءات LLM — بل تنسّق **Crews** كاملة من Agents مستقلة.
+
+الفكرة الرئيسية: **الـ Flows توفر طبقة التنسيق، والـ Crews توفر طبقة الذكاء.** كل خطوة في Flow يمكنها تشغيل فريق كامل من Agents متعاونة.
+
+---
+
+## العرض 4: التنفيذ المتوازي والمزامنة
+
+المشغّل `and_()` على مزخرف `@listen` يضمن أن الطريقة تُنفَّذ فقط بعد اكتمال *جميع* الطرق السابقة. هناك أيضًا `or_()` للمتابعة بمجرد اكتمال *أي* مهمة سابقة.
+
+---
+
+## لماذا CrewAI Flows للإنتاج
+
+- **حفظ حالة مدمج.** حالة Flow مدعومة بـ LanceDB.
+- **إدارة حالة آمنة الأنواع.** نماذج Pydantic توفر التحقق والتسلسل ودعم IDE.
+- **تنسيق Agents أصلي.** الـ Crews بنية أساسية أصلية.
+- **نموذج ذهني أبسط.** المزخرفات تعلن عن النية.
+- **تكامل CLI.** شغّل Flows بـ `crewai run`.
+
+---
+
+## ورقة الغش للترحيل
+
+1. **عيّن حالتك.** حوّل `TypedDict` إلى Pydantic `BaseModel`.
+2. **حوّل العقد إلى طرق.** كل دالة `add_node` تصبح طريقة على فئة `Flow` الفرعية.
+3. **استبدل الحواف بمزخرفات.** `add_edge(START, "first_node")` يصبح `@start()`. `add_edge("a", "b")` يصبح `@listen(a)`.
+4. **استبدل الحواف الشرطية بـ `@router`.** دالة التوجيه و`add_conditional_edges()` تصبح طريقة `@router()` واحدة.
+5. **استبدل compile + invoke بـ kickoff.** احذف `graph.compile()`. استدعِ `flow.kickoff()` بدلاً منه.
+6. **فكّر أين تناسب الـ Crews.** أي عقدة بها منطق Agent معقد متعدد الخطوات هي مرشحة لاستخراجها في Crew.
+
+---
+
+## البدء
+
+```bash
+pip install crewai
+crewai create flow my_first_flow
+cd my_first_flow
+```
+
+```bash
+crewai run
+```
+
+---
+
+## أفكار أخيرة
+
+LangGraph علّم المنظومة أن سير عمل AI تحتاج هيكلاً. كان ذلك درسًا مهمًا. لكن CrewAI Flows يأخذ ذلك الدرس ويقدمه في شكل أسرع في الكتابة وأسهل في القراءة وأقوى في الإنتاج — خاصة عندما تتضمن سير عملك عدة Agents متعاونة.
+
+ابدأ بـ `crewai create flow`. لن تنظر للخلف.
diff --git a/docs/v1.15.1/ar/guides/migration/upgrading-crewai.mdx b/docs/v1.15.1/ar/guides/migration/upgrading-crewai.mdx
new file mode 100644
index 000000000..372689335
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/migration/upgrading-crewai.mdx
@@ -0,0 +1,190 @@
+---
+title: "ترقية CrewAI"
+description: "كيفية ترقية CrewAI في مشروعك والتكيّف مع التغييرات الجذرية بين الإصدارات."
+icon: "arrow-up-circle"
+---
+
+## نظرة عامة
+
+تجلب إصدارات CrewAI قدرات جديدة بانتظام. يرشدك هذا الدليل خلال الخطوات العملية للحفاظ على تثبيتك محدّثًا — سواء أداة سطر الأوامر أو البيئة الافتراضية لمشروعك.
+
+إذا كنت تبدأ من الصفر، راجع [التثبيت](/ar/installation). إذا كنت قادمًا من إطار عمل آخر، راجع [الترحيل من LangGraph](/ar/guides/migration/migrating-from-langgraph).
+
+---
+
+## الشيئان اللذان قد ترغب في ترقيتهما
+
+يوجد CrewAI في مكانين على جهازك، ويتم ترقيتهما بشكل مستقل:
+
+| ماذا | كيف يُثبَّت | كيف تتم الترقية |
+|---|---|---|
+| **أداة سطر الأوامر العامة `crewai`** | `uv tool install crewai` | `uv tool install crewai --upgrade` |
+| **بيئة venv للمشروع** (حيث يعمل الكود) | `crewai install` / `uv sync` | `uv add "crewai[...]>=X.Y.Z"` ثم `crewai install` |
+
+يمكن لهما — وغالبًا ما يحدث — أن يخرجا عن التزامن. تشغيل `crewai --version` يُظهر إصدار سطر الأوامر. تشغيل `uv pip show crewai` داخل مشروعك يُظهر إصدار venv. إذا اختلفا، فهذا طبيعي؛ ما يهم بالنسبة للكود قيد التشغيل هو إصدار venv.
+
+## لماذا لا يقوم `crewai install` وحده بالترقية
+
+`crewai install` هو غلاف رفيع حول `uv sync`. يُثبّت بالضبط ما يقوله ملف `uv.lock` الحالي — وهو **لا** يرفع أي قيود إصدار.
+
+إذا كان `pyproject.toml` يقول `crewai>=1.11.1` وقد قام ملف القفل بحلّه إلى `1.11.1`، فإن تشغيل `crewai install` سيُبقيك على `1.11.1` للأبد، حتى وإن كان الإصدار `1.14.4` متاحًا.
+
+للترقية فعلًا، عليك:
+
+1. تحديث قيد الإصدار في `pyproject.toml`
+2. إعادة حلّ ملف القفل
+3. مزامنة venv
+
+`uv add` يقوم بالثلاثة في خطوة واحدة.
+
+## كيفية ترقية مشروعك
+
+```bash
+# يرفع القيد ويعيد القفل في أمر واحد
+uv add "crewai[tools]>=1.14.4"
+
+# يزامن venv (crewai install يستدعي uv sync تحت الغطاء)
+crewai install
+
+# تحقّق
+uv pip show crewai
+# → Version: 1.14.4
+```
+
+استبدل `[tools]` بأي إضافات يستخدمها مشروعك (مثلًا `[tools,anthropic]`). تحقّق من قائمة `dependencies` في `pyproject.toml` إن لم تكن متأكدًا.
+
+
+ يحدّث `uv add` كلا من `pyproject.toml` **و** `uv.lock` بشكل ذرّي. إذا قمت بتحرير `pyproject.toml` يدويًا، فإنك لا تزال بحاجة إلى تشغيل `uv lock --upgrade-package crewai` لإعادة حلّ ملف القفل قبل أن يلتقط `crewai install` الإصدار الجديد.
+
+
+## ترقية أداة سطر الأوامر العامة
+
+أداة سطر الأوامر العامة منفصلة عن مشروعك. قم بترقيتها عبر:
+
+```bash
+uv tool install crewai --upgrade
+```
+
+إذا حذّرك الـ shell بشأن `PATH` بعد الترقية، قم بتحديثه:
+
+```bash
+uv tool update-shell
+```
+
+هذا **لا** يمسّ بيئة venv الخاصة بمشروعك — لا تزال بحاجة إلى `uv add` + `crewai install` داخل المشروع.
+
+## التحقق من تزامن الاثنين
+
+```bash
+# إصدار سطر الأوامر العام
+crewai --version
+
+# إصدار venv للمشروع
+uv pip show crewai | grep Version
+```
+
+ليس من الضروري أن يتطابقا — لكن إصدار venv للمشروع هو ما يهم لسلوك التشغيل.
+
+
+ يتطلب CrewAI `Python >=3.10, <3.14`. إذا كان `uv` مثبَّتًا مقابل مفسّر أقدم، فأعد إنشاء venv للمشروع باستخدام إصدار Python مدعوم قبل تشغيل `crewai install`.
+
+
+---
+
+## التغييرات الجذرية وملاحظات الترحيل
+
+تتطلب معظم الترقيات تعديلات صغيرة فقط. المناطق أدناه هي تلك التي تنكسر بصمت أو بتتبعات مكدّس مربكة.
+
+### مسارات الاستيراد: tools و`BaseTool`
+
+الموقع الرسمي لاستيراد الـ tools هو `crewai.tools`. لا تزال المسارات القديمة تظهر في الدروس لكن يجب تحديثها.
+
+```python
+# قبل
+from crewai_tools import BaseTool
+from crewai.agents.tools import tool
+
+# بعد
+from crewai.tools import BaseTool, tool
+```
+
+كلٌ من المُزخرف `@tool` والفئة الفرعية `BaseTool` يقعان في `crewai.tools`. `AgentFinish` والرموز الأخرى الداخلية للوكيل لم تعد جزءًا من السطح العام — إذا كنت تستوردها، فانتقل إلى event listeners أو callbacks الـ `Task` بدلًا منها.
+
+### تغييرات معاملات `Agent`
+
+```python
+from crewai import Agent
+
+agent = Agent(
+ role="Researcher",
+ goal="Find authoritative sources on {topic}",
+ backstory="You are a careful, source-driven researcher.",
+ llm="gpt-4o-mini", # اسم نموذج كسلسلة نصية أو كائن LLM
+ verbose=True, # bool وليس مستوى عددي صحيح
+ max_iter=15, # تغيّر الافتراضي بين الإصدارات — حدّده بشكل صريح
+ allow_delegation=False,
+)
+```
+
+- يقبل `llm` إما اسم نموذج كسلسلة نصية (يُحلَّ عبر المزوّد المهيّأ) أو كائن `LLM` للتحكم الدقيق.
+- `verbose` هو `bool` بسيط. تمرير عدد صحيح لم يعد يبدّل مستويات السجل.
+- تغيّرت افتراضات `max_iter` بين الإصدارات. إذا توقف وكيلك بصمت عن التكرار بعد أول استدعاء tool، فحدّد `max_iter` صراحةً.
+
+### معاملات `Crew`
+
+```python
+from crewai import Crew, Process
+
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ process=Process.sequential, # أو Process.hierarchical
+ memory=True,
+ cache=True,
+ embedder={"provider": "openai", "config": {"model": "text-embedding-3-small"}},
+)
+```
+
+- يتطلب `process=Process.hierarchical` إما `manager_llm=` أو `manager_agent=`. بدون أحدهما، يرفع kickoff خطأً عند التحقّق.
+- `memory=True` مع مزوّد embedding غير افتراضي يحتاج إلى قاموس `embedder` — راجع [إعداد الذاكرة وembedder](#memory-embedder-config) أدناه.
+
+### الإخراج المُهيكل لـ `Task`
+
+استخدم `output_pydantic` أو `output_json` أو `output_file` لإلزام نتيجة المهمة بشكل مكتوب الأنواع:
+
+```python
+from pydantic import BaseModel
+from crewai import Task
+
+class Article(BaseModel):
+ title: str
+ body: str
+
+write = Task(
+ description="Write an article about {topic}",
+ expected_output="A short article with a title and body",
+ agent=writer,
+ output_pydantic=Article, # الفئة، وليس مثيلًا منها
+ output_file="output/article.md",
+)
+```
+
+`output_pydantic` يأخذ **الفئة** نفسها. تمرير `Article(title="", body="")` خطأ شائع ويفشل بخطأ تحقّق مربك.
+
+### إعداد الذاكرة وembedder {#memory-embedder-config}
+
+إذا كان `memory=True` وأنت لا تستخدم embeddings الافتراضية الخاصة بـ OpenAI، فيجب أن تمرّر `embedder`:
+
+```python
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ memory=True,
+ embedder={
+ "provider": "ollama",
+ "config": {"model": "nomic-embed-text"},
+ },
+)
+```
+
+ضع بيانات اعتماد المزوّد المعنيّة (`OPENAI_API_KEY`, `OLLAMA_HOST`, إلخ) في ملف `.env`. مسارات تخزين الذاكرة محلية بالنسبة للمشروع افتراضيًا — احذف مجلد ذاكرة المشروع إذا غيّرت embedders، لأن الأبعاد لا تختلط.
diff --git a/docs/v1.15.1/ar/guides/tools/publish-custom-tools.mdx b/docs/v1.15.1/ar/guides/tools/publish-custom-tools.mdx
new file mode 100644
index 000000000..f181e0e25
--- /dev/null
+++ b/docs/v1.15.1/ar/guides/tools/publish-custom-tools.mdx
@@ -0,0 +1,96 @@
+---
+title: نشر أدوات مخصصة
+description: كيفية بناء وتعبئة ونشر أدواتك الخاصة المتوافقة مع CrewAI على PyPI ليتمكن أي مستخدم CrewAI من تثبيتها واستخدامها.
+icon: box-open
+mode: "wide"
+---
+
+## نظرة عامة
+
+نظام الأدوات في CrewAI مصمم للتوسيع. إذا بنيت أداة يمكن أن تفيد الآخرين، يمكنك تعبئتها كمكتبة Python مستقلة ونشرها على PyPI وإتاحتها لأي مستخدم CrewAI — دون الحاجة لطلب سحب إلى مستودع CrewAI.
+
+يمشي هذا الدليل عبر العملية الكاملة: تنفيذ عقد الأدوات، وهيكلة حزمتك، والنشر على PyPI.
+
+
+إذا كنت تحتاج فقط أداة مخصصة لمشروعك، راجع دليل [إنشاء أدوات مخصصة](/ar/learn/create-custom-tools) بدلاً من ذلك.
+
+
+## عقد الأدوات
+
+كل أداة CrewAI يجب أن تستوفي إحدى الواجهتين:
+
+### الخيار 1: وراثة `BaseTool`
+
+ورث من `crewai.tools.BaseTool` وطبّق طريقة `_run`. عرّف `name` و`description` واختياريًا `args_schema` للتحقق من المدخلات.
+
+```python
+from crewai.tools import BaseTool
+from pydantic import BaseModel, Field
+
+
+class GeolocateInput(BaseModel):
+ """Input schema for GeolocateTool."""
+ address: str = Field(..., description="The street address to geolocate.")
+
+
+class GeolocateTool(BaseTool):
+ name: str = "Geolocate"
+ description: str = "Converts a street address into latitude/longitude coordinates."
+ args_schema: type[BaseModel] = GeolocateInput
+
+ def _run(self, address: str) -> str:
+ return f"40.7128, -74.0060"
+```
+
+### الخيار 2: استخدام مزخرف `@tool`
+
+للأدوات الأبسط، يحوّل مزخرف `@tool` دالة إلى أداة CrewAI. يجب أن تحتوي الدالة على سلسلة توثيق (تُستخدم كوصف الأداة) وتعليقات أنواع.
+
+```python
+from crewai.tools import tool
+
+
+@tool("Geolocate")
+def geolocate(address: str) -> str:
+ """Converts a street address into latitude/longitude coordinates."""
+ return "40.7128, -74.0060"
+```
+
+### المتطلبات الأساسية
+
+بغض النظر عن النهج الذي تستخدمه، يجب أن تحتوي أداتك على:
+
+- **`name`** — معرّف قصير ووصفي.
+- **`description`** — يخبر الـ Agent متى وكيف يستخدم الأداة.
+- **`_run`** (BaseTool) أو **جسم الدالة** (@tool) — منطق التنفيذ المتزامن.
+- **تعليقات أنواع** على جميع المعاملات وقيم الإرجاع.
+- إرجاع نتيجة **نصية** (أو شيء يمكن تحويله لنص).
+
+## هيكل الحزمة
+
+```
+crewai-geolocate/
+├── pyproject.toml
+├── LICENSE
+├── README.md
+└── src/
+ └── crewai_geolocate/
+ ├── __init__.py
+ └── tools.py
+```
+
+## النشر على PyPI
+
+```bash
+# Build the package
+uv build
+
+# Publish to PyPI
+uv publish
+```
+
+بعد النشر، يمكن للمستخدمين تثبيت أداتك بـ:
+
+```bash
+uv add crewai-geolocate
+```
diff --git a/docs/v1.15.1/ar/index.mdx b/docs/v1.15.1/ar/index.mdx
new file mode 100644
index 000000000..d74de8278
--- /dev/null
+++ b/docs/v1.15.1/ar/index.mdx
@@ -0,0 +1,105 @@
+---
+title: "توثيق CrewAI"
+description: "ابنِ Agents ذكاء اصطناعي تعاونية وCrews وFlows — جاهزة للإنتاج من اليوم الأول."
+icon: "house"
+mode: "wide"
+---
+
+
+
+
+
أطلق أنظمة متعددة الـ Agents بثقة
+
+ صمم Agents، ونسّق Crews، وأتمت Flows مع حواجز حماية وذاكرة ومعرفة ومراقبة مدمجة.
+
+
+
+
+## ابدأ
+
+
+
+ نظرة عامة على مفاهيم CrewAI وبنيته المعمارية وما يمكنك بناؤه باستخدام Agents وCrews وFlows.
+
+
+ التثبيت عبر `uv`، وإعداد مفاتيح API، وتهيئة CLI للتطوير المحلي.
+
+
+ أنشئ أول Crew لك في دقائق. تعلم بيئة التشغيل الأساسية وهيكل المشروع ودورة التطوير.
+
+
+
+## ابنِ الأساسيات
+
+
+
+ أنشئ Agents بأدوات وذاكرة ومعرفة ومخرجات منظمة باستخدام Pydantic. يتضمن قوالب وأفضل الممارسات.
+
+
+ نسّق خطوات start/listen/router، وأدر الحالة، واحفظ التنفيذ، واستأنف سير العمل الطويل.
+
+
+ حدد عمليات متسلسلة أو هرمية أو مختلطة مع حواجز حماية واستدعاءات راجعة ومحفزات تدخل بشري.
+
+
+
+## رحلة المؤسسات
+
+
+
+ إدارة البيئات وإعادة النشر بأمان ومراقبة التشغيل المباشر من لوحة تحكم المؤسسات.
+
+
+ ربط Gmail وSlack وSalesforce والمزيد. تمرير بيانات المحفزات إلى Crews وFlows تلقائيًا.
+
+
+ دعوة أعضاء الفريق وتهيئة التحكم في الوصول المبني على الأدوار وإدارة الوصول إلى أتمتة الإنتاج.
+
+
+
+## ما الجديد
+
+
+
+ نظرة شاملة موحدة على Gmail وDrive وOutlook وTeams وOneDrive وHubSpot والمزيد — الآن مع نماذج بيانات وCrews.
+
+
+ استدعاء أتمتة CrewAI الحالية أو Amazon Bedrock Agents مباشرة من Crews باستخدام مجموعة أدوات التكامل المحدّثة.
+
+
+
+
+ تصفح الأمثلة وكتب الوصفات للحصول على تطبيقات مرجعية شاملة عبر Agents وFlows وأتمتة المؤسسات.
+
+
+## ابقَ على تواصل
+
+
+
+ إذا ساعدك CrewAI في الإطلاق بشكل أسرع، امنحنا نجمة وشارك مشاريعك مع المجتمع.
+
+
+ اطرح أسئلة واعرض سير العمل واطلب ميزات جديدة جنبًا إلى جنب مع المطورين الآخرين.
+
+
diff --git a/docs/v1.15.1/ar/installation.mdx b/docs/v1.15.1/ar/installation.mdx
new file mode 100644
index 000000000..1b6df571c
--- /dev/null
+++ b/docs/v1.15.1/ar/installation.mdx
@@ -0,0 +1,216 @@
+---
+title: التثبيت
+description: ابدأ مع CrewAI - التثبيت والتهيئة وبناء أول فريق AI
+icon: wrench
+mode: "wide"
+---
+
+### شاهد: بناء Agents و Flows في CrewAI باستخدام Coding Agent Skills
+
+قم بتثبيت مهارات وكيل البرمجة الخاصة بنا (Claude Code، Codex، ...) لتشغيل وكلاء البرمجة بسرعة مع CrewAI.
+
+يمكنك تثبيتها باستخدام `npx skills add crewaiinc/skills`
+
+
+
+## فيديو تعليمي
+
+شاهد هذا الفيديو التعليمي لعرض تفصيلي لعملية التثبيت:
+
+
+
+## دليل نصي
+
+
+ **متطلبات إصدار Python**
+
+يتطلب CrewAI إصدار `Python >=3.10 and <3.14`. إليك كيفية التحقق من إصدارك:
+
+```bash
+python3 --version
+```
+
+إذا كنت بحاجة لتحديث Python، قم بزيارة [python.org/downloads](https://python.org/downloads)
+
+
+
+
+ **متطلبات OpenAI SDK**
+
+يتطلب CrewAI 0.175.0 إصدار `openai >= 1.13.3`. إذا كنت تدير التبعيات بنفسك، تأكد من أن بيئتك تستوفي هذا الشرط لتجنب مشاكل الاستيراد/التشغيل.
+
+
+
+يستخدم CrewAI أداة `uv` لإدارة التبعيات والحزم. وهي تبسّط إعداد المشروع وتنفيذه وتوفر تجربة سلسة.
+
+إذا لم تكن قد ثبّتت `uv` بعد، اتبع **الخطوة 1** لإعدادها بسرعة على نظامك، وإلا يمكنك الانتقال إلى **الخطوة 2**.
+
+
+
+ - **على macOS/Linux:**
+
+ استخدم `curl` لتحميل السكريبت وتنفيذه عبر `sh`:
+
+ ```shell
+ curl -LsSf https://astral.sh/uv/install.sh | sh
+ ```
+ إذا لم يكن `curl` متاحًا على نظامك، يمكنك استخدام `wget`:
+
+ ```shell
+ wget -qO- https://astral.sh/uv/install.sh | sh
+ ```
+
+ - **على Windows:**
+
+ استخدم `irm` لتحميل السكريبت و`iex` لتنفيذه:
+
+ ```shell
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
+ ```
+ إذا واجهت أي مشاكل، راجع [دليل تثبيت UV](https://docs.astral.sh/uv/getting-started/installation/) لمزيد من المعلومات.
+
+
+
+ - شغّل الأمر التالي لتثبيت واجهة سطر أوامر `crewai`:
+ ```shell
+ uv tool install crewai
+ ```
+
+ إذا ظهر تحذير بشأن `PATH`، شغّل هذا الأمر لتحديث الصدفة:
+ ```shell
+ uv tool update-shell
+ ```
+
+
+
+ إذا واجهت خطأ بناء `chroma-hnswlib==0.7.6` (`fatal error C1083: Cannot open include file: 'float.h'`) على Windows، ثبّت [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/) مع خيار *Desktop development with C++*.
+
+
+ - للتحقق من تثبيت `crewai`، شغّل:
+ ```shell
+ uv tool list
+ ```
+ - يجب أن ترى شيئًا مثل:
+ ```shell
+ crewai v0.102.0
+ - crewai
+ ```
+ - إذا كنت بحاجة لتحديث `crewai`، شغّل:
+ ```shell
+ uv tool install crewai --upgrade
+ ```
+ تم التثبيت بنجاح! أنت جاهز لإنشاء أول Crew!
+
+
+
+
+# إنشاء مشروع CrewAI
+
+يقوم `crewai create crew` الآن بإنشاء مشروع crew بأسلوب JSON-first. توضع الـ Agents في `agents/*.jsonc`، وتوضع المهام وإعدادات الـ crew في `crew.jsonc`، ويحمّل `crewai run` هذا التعريف مباشرة.
+
+
+
+ - شغّل أمر `crewai` عبر CLI:
+ ```shell
+ crewai create crew
+ ```
+
+ - سينشئ هذا مشروعًا جديدًا بالهيكل التالي:
+ ```
+ my_project/
+ ├── .gitignore
+ ├── .env
+ ├── agents/
+ │ └── researcher.jsonc
+ ├── crew.jsonc
+ ├── knowledge/
+ ├── pyproject.toml
+ ├── README.md
+ ├── skills/
+ └── tools/
+ ```
+
+ - إذا احتجت إلى البنية القديمة Python/YAML التي تحتوي على `crew.py` و `config/agents.yaml` و `config/tasks.yaml`، شغّل:
+ ```shell
+ crewai create crew --classic
+ ```
+
+
+
+
+ - سيحتوي مشروعك على هذه الملفات الأساسية:
+ | الملف | الغرض |
+ | --- | --- |
+ | `crew.jsonc` | إعداد الـ crew وترتيب المهام والعملية وقيم الإدخال الافتراضية |
+ | `agents/*.jsonc` | تعريف دور كل Agent وهدفه و backstory والـ LLM والأدوات والسلوك |
+ | `.env` | تخزين مفاتيح API ومتغيرات البيئة |
+ | `tools/` | ملفات Python اختيارية لأدوات `custom:` |
+ | `knowledge/` | ملفات معرفة اختيارية للـ Agents |
+ | `skills/` | ملفات skills اختيارية تطبق على الـ crew |
+
+ - ابدأ بتحرير `crew.jsonc` والملفات داخل `agents/` لتعريف سلوك الـ crew.
+ - استخدم قيم `{placeholder}` في نصوص الـ Agents والمهام، ثم ضع القيم الافتراضية في `inputs` داخل `crew.jsonc`. عند تشغيل `crewai run` ستطلب CLI أي قيم ناقصة.
+ - احتفظ بالمعلومات الحساسة مثل مفاتيح API في `.env`.
+
+
+
+
+ - قبل تشغيل الـ Crew، تأكد من تنفيذ:
+ ```bash
+ crewai install
+ ```
+ - إذا كنت بحاجة لتثبيت حزم إضافية، استخدم:
+ ```shell
+ uv add
+ ```
+ - لتشغيل الـ Crew، نفّذ الأمر التالي في جذر مشروعك:
+ ```bash
+ crewai run
+ ```
+
+
+
+## خيارات التثبيت للمؤسسات
+
+
+للفرق والمؤسسات، يوفر CrewAI خيارات نشر مؤسسية تزيل تعقيد الإعداد:
+
+### CrewAI AMP (SaaS)
+
+- لا يتطلب أي تثبيت - فقط سجّل مجانًا على [app.crewai.com](https://app.crewai.com)
+- تحديثات وصيانة تلقائية
+- بنية تحتية مُدارة وقابلة للتوسع
+- بناء Crews بدون كتابة كود
+
+### CrewAI Factory (استضافة ذاتية)
+
+- نشر بالحاويات على بنيتك التحتية
+- يدعم أي مزود سحابي بما في ذلك النشر المحلي
+- تكامل مع أنظمة الأمان الحالية
+
+
+ تعرّف على عروض CrewAI للمؤسسات وجدول عرضًا توضيحيًا
+
+
+
+## الخطوات التالية
+
+
+
+ اتبع البداية السريعة لإنشاء Flow وتشغيل طاقم بوكيل واحد وإنتاج تقرير.
+
+
+ تواصل مع مطورين آخرين واحصل على المساعدة وشارك تجاربك مع CrewAI.
+
+
diff --git a/docs/v1.15.1/ar/introduction.mdx b/docs/v1.15.1/ar/introduction.mdx
new file mode 100644
index 000000000..58d441c6e
--- /dev/null
+++ b/docs/v1.15.1/ar/introduction.mdx
@@ -0,0 +1,152 @@
+---
+title: مقدمة
+description: ابنِ فرق Agents ذكاء اصطناعي تعمل معًا لمعالجة المهام المعقدة
+icon: handshake
+mode: "wide"
+---
+
+# ما هو CrewAI؟
+
+**CrewAI هو إطار العمل مفتوح المصدر الرائد لتنسيق Agents الذكاء الاصطناعي المستقلة وبناء سير العمل المعقدة.**
+
+يمكّن المطورين من بناء أنظمة متعددة الـ Agents جاهزة للإنتاج من خلال الجمع بين الذكاء التعاوني لـ **Crews** والتحكم الدقيق لـ **Flows**.
+
+- **[CrewAI Flows](/ar/guides/flows/first-flow)**: العمود الفقري لتطبيق الذكاء الاصطناعي. تتيح لك Flows إنشاء سير عمل منظمة قائمة على الأحداث تدير الحالة وتتحكم في التنفيذ. وهي توفر البنية الأساسية التي تعمل ضمنها Agents الذكاء الاصطناعي.
+- **[CrewAI Crews](/ar/guides/crews/first-crew)**: وحدات العمل ضمن Flow. الـ Crews هي فرق من Agents مستقلة تتعاون لحل مهام محددة يفوضها إليها Flow.
+
+مع أكثر من 100,000 مطور معتمد عبر دوراتنا المجتمعية، يُعد CrewAI المعيار لأتمتة الذكاء الاصطناعي الجاهزة للمؤسسات.
+
+### شاهد: بناء Agents و Flows في CrewAI باستخدام Coding Agent Skills
+
+قم بتثبيت مهارات وكيل البرمجة الخاصة بنا (Claude Code، Codex، ...) لتشغيل وكلاء البرمجة بسرعة مع CrewAI.
+
+يمكنك تثبيتها باستخدام `npx skills add crewaiinc/skills`
+
+
+
+## بنية CrewAI المعمارية
+
+صُممت بنية CrewAI لتحقيق التوازن بين الاستقلالية والتحكم.
+
+### 1. Flows: العمود الفقري
+
+
+ فكّر في Flow كـ "المدير" أو "تعريف العملية" لتطبيقك. يحدد الخطوات والمنطق وكيفية تدفق البيانات عبر نظامك.
+
+
+
+
+
+
+توفر Flows:
+- **إدارة الحالة**: حفظ البيانات عبر الخطوات والتنفيذات.
+- **تنفيذ قائم على الأحداث**: تشغيل إجراءات بناءً على أحداث أو مدخلات خارجية.
+- **التحكم في التدفق**: استخدام المنطق الشرطي والحلقات والتفرع.
+
+### 2. Crews: الذكاء
+
+
+ الـ Crews هي "الفرق" التي تقوم بالعمل الثقيل. ضمن Flow، يمكنك تشغيل Crew لمعالجة مشكلة معقدة تتطلب إبداعًا وتعاونًا.
+
+
+
+
+
+
+توفر Crews:
+- **Agents بأدوار محددة**: Agents متخصصة بأهداف وأدوات محددة.
+- **تعاون مستقل**: تعمل الـ Agents معًا لحل المهام.
+- **تفويض المهام**: يتم تعيين المهام وتنفيذها بناءً على قدرات الـ Agent.
+
+## كيف يعمل الكل معًا
+
+1. يبدأ **Flow** حدثًا أو يشغّل عملية.
+2. يدير **Flow** الحالة ويقرر ما يجب فعله بعد ذلك.
+3. يفوّض **Flow** مهمة معقدة إلى **Crew**.
+4. تتعاون Agents الـ **Crew** لإكمال المهمة.
+5. يعيد **Crew** النتيجة إلى **Flow**.
+6. يستمر **Flow** في التنفيذ بناءً على النتيجة.
+
+## الميزات الرئيسية
+
+
+
+ ابنِ سير عمل موثوقة وذات حالة يمكنها التعامل مع العمليات طويلة التشغيل والمنطق المعقد.
+
+
+ انشر فرقًا من الـ Agents يمكنها التخطيط والتنفيذ والتعاون لتحقيق أهداف عالية المستوى.
+
+
+ اربط Agents بأي API أو قاعدة بيانات أو أداة محلية.
+
+
+ مصمم مع مراعاة الأمان والامتثال لعمليات نشر المؤسسات.
+
+
+
+## متى تستخدم Crews مقابل Flows
+
+**الإجابة المختصرة: استخدم كليهما.**
+
+لأي تطبيق جاهز للإنتاج، **ابدأ بـ Flow**.
+
+- **استخدم Flow** لتعريف الهيكل العام والحالة والمنطق لتطبيقك.
+- **استخدم Crew** ضمن خطوة Flow عندما تحتاج فريقًا من الـ Agents لأداء مهمة معقدة محددة تتطلب استقلالية.
+
+| حالة الاستخدام | البنية المعمارية |
+| :--- | :--- |
+| **أتمتة بسيطة** | Flow واحد مع مهام Python |
+| **بحث معقد** | Flow يدير الحالة -> Crew يجري البحث |
+| **واجهة تطبيق خلفية** | Flow يعالج طلبات API -> Crew ينشئ المحتوى -> Flow يحفظ في قاعدة البيانات |
+
+## لماذا تختار CrewAI؟
+
+- **تشغيل مستقل**: تتخذ الـ Agents قرارات ذكية بناءً على أدوارها وأدواتها المتاحة
+- **تفاعل طبيعي**: تتواصل الـ Agents وتتعاون كأعضاء فريق بشري
+- **تصميم قابل للتوسيع**: سهولة إضافة أدوات وأدوار وقدرات جديدة
+- **جاهز للإنتاج**: مبني للموثوقية والتوسع في التطبيقات الواقعية
+- **موجّه نحو الأمان**: مصمم مع مراعاة متطلبات أمان المؤسسات
+- **كفاءة التكلفة**: محسّن لتقليل استخدام الرموز المميزة واستدعاءات API
+
+## هل أنت مستعد للبدء في البناء؟
+
+
+
+ تعلم كيفية إنشاء سير عمل منظمة قائمة على الأحداث مع تحكم دقيق في التنفيذ.
+
+
+ دليل تفصيلي لإنشاء فريق AI تعاوني يعمل معًا لحل المشكلات المعقدة.
+
+
+
+
+
+ ابدأ مع CrewAI في بيئة التطوير الخاصة بك.
+
+
+ أنشئ Flow وشغّل طاقمًا بوكيل واحد وأنشئ تقريرًا من البداية للنهاية.
+
+
+ تواصل مع مطورين آخرين واحصل على المساعدة وشارك تجاربك مع CrewAI.
+
+
diff --git a/docs/v1.15.1/ar/learn/a2a-agent-delegation.mdx b/docs/v1.15.1/ar/learn/a2a-agent-delegation.mdx
new file mode 100644
index 000000000..d743d98fb
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/a2a-agent-delegation.mdx
@@ -0,0 +1,87 @@
+---
+title: بروتوكول Agent-to-Agent (A2A)
+description: الـ Agents تفوّض المهام إلى Agents A2A بعيدة و/أو تعمل كـ Agents خادم متوافقة مع A2A.
+icon: network-wired
+mode: "wide"
+---
+
+## تفويض Agent A2A
+
+يعامل CrewAI [بروتوكول A2A](https://a2a-protocol.org/latest/) كبنية تفويض أساسية، مما يمكّن الـ Agents من تفويض المهام وطلب المعلومات والتعاون مع Agents بعيدة، وكذلك العمل كـ Agents خادم متوافقة مع A2A. في وضع العميل، تختار الـ Agents تلقائيًا بين التنفيذ المحلي والتفويض البعيد بناءً على متطلبات المهمة.
+
+## كيف يعمل
+
+عندما يُهيَّأ Agent بقدرات A2A:
+
+1. يحلل الـ Agent كل مهمة
+2. يقرر إما:
+ - معالجة المهمة مباشرة باستخدام قدراته الخاصة
+ - التفويض إلى Agent A2A بعيد للمعالجة المتخصصة
+3. إذا فوّض، يتواصل الـ Agent مع Agent A2A البعيد عبر البروتوكول
+4. تُعاد النتائج إلى سير عمل CrewAI
+
+
+ تفويض A2A يتطلب حزمة `a2a-sdk`. ثبّتها بـ: `uv add 'crewai[a2a]'` أو `pip install 'crewai[a2a]'`
+
+
+## التهيئة الأساسية
+
+
+ `crewai.a2a.config.A2AConfig` مهمل وسيُزال في v2.0.0. استخدم `A2AClientConfig` للاتصال بـ Agents بعيدة و/أو `A2AServerConfig` لعرض الـ Agents كخوادم.
+
+
+```python Code
+from crewai import Agent, Crew, Task
+from crewai.a2a import A2AClientConfig
+
+agent = Agent(
+ role="Research Coordinator",
+ goal="Coordinate research tasks efficiently",
+ backstory="Expert at delegating to specialized research agents",
+ llm="gpt-4o",
+ a2a=A2AClientConfig(
+ endpoint="https://example.com/.well-known/agent-card.json",
+ timeout=120,
+ max_turns=10
+ )
+)
+
+task = Task(
+ description="Research the latest developments in quantum computing",
+ expected_output="A comprehensive research report",
+ agent=agent
+)
+
+crew = Crew(agents=[agent], tasks=[task], verbose=True)
+result = crew.kickoff()
+```
+
+## خيارات تهيئة العميل
+
+راجع الملف الإنجليزي الأصلي للحصول على القائمة الكاملة لمعاملات `A2AClientConfig` وخيارات المصادقة وآليات التحديث وتهيئة الخادم.
+
+## أفضل الممارسات
+
+
+
+ هيّئ المهلات بناءً على أوقات استجابة Agent A2A المتوقعة.
+
+
+
+ استخدم `max_turns` لمنع التبادل المفرط.
+
+
+
+ عيّن `fail_fast=False` لبيئات الإنتاج مع عدة Agents.
+
+
+
+ خزّن رموز المصادقة وبيانات الاعتماد كمتغيرات بيئة، ليس في الكود.
+
+
+
+## تعلم المزيد
+
+- [توثيق بروتوكول A2A](https://a2a-protocol.org)
+- [تطبيقات A2A النموذجية](https://github.com/a2aproject/a2a-samples)
+- [A2A Python SDK](https://github.com/a2aproject/a2a-python)
diff --git a/docs/v1.15.1/ar/learn/before-and-after-kickoff-hooks.mdx b/docs/v1.15.1/ar/learn/before-and-after-kickoff-hooks.mdx
new file mode 100644
index 000000000..0766a0f0d
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/before-and-after-kickoff-hooks.mdx
@@ -0,0 +1,47 @@
+---
+title: خطافات قبل وبعد الانطلاق
+description: تعلم كيفية استخدام خطافات قبل وبعد الانطلاق في CrewAI
+mode: "wide"
+---
+
+يوفر CrewAI خطافات تتيح لك تنفيذ كود قبل وبعد انطلاق Crew. هذه الخطافات مفيدة لمعالجة المدخلات مسبقًا أو معالجة النتائج لاحقًا.
+
+## خطاف قبل الانطلاق
+
+يُنفَّذ خطاف قبل الانطلاق قبل أن يبدأ Crew مهامه. يتلقى قاموس المدخلات ويمكنه تعديله قبل تمريره إلى Crew. يمكنك استخدام هذا الخطاف لإعداد بيئتك أو تحميل البيانات اللازمة أو معالجة المدخلات مسبقًا.
+
+```python
+from crewai import CrewBase
+from crewai.project import before_kickoff
+
+@CrewBase
+class MyCrew:
+ @before_kickoff
+ def prepare_data(self, inputs):
+ inputs['processed'] = True
+ return inputs
+```
+
+## خطاف بعد الانطلاق
+
+يُنفَّذ خطاف بعد الانطلاق بعد إتمام Crew مهامه. يتلقى كائن النتيجة الذي يحتوي على مخرجات تنفيذ Crew. هذا الخطاف مثالي لمعالجة النتائج لاحقًا مثل التسجيل أو تحويل البيانات أو التحليل الإضافي.
+
+```python
+from crewai import CrewBase
+from crewai.project import after_kickoff
+
+@CrewBase
+class MyCrew:
+ @after_kickoff
+ def log_results(self, result):
+ print("Crew execution completed with result:", result)
+ return result
+```
+
+## استخدام كلا الخطافين
+
+يمكن استخدام كلا الخطافين معًا لتوفير عملية إعداد وتفكيك شاملة لتنفيذ Crew. وهما مفيدان بشكل خاص في الحفاظ على بنية كود نظيفة من خلال فصل المسؤوليات وتعزيز نمطية تنفيذات CrewAI.
+
+## الخلاصة
+
+توفر خطافات قبل وبعد الانطلاق في CrewAI طرقًا قوية للتفاعل مع دورة حياة تنفيذ Crew. من خلال فهم واستخدام هذه الخطافات، يمكنك تعزيز متانة ومرونة Agents الذكاء الاصطناعي بشكل كبير.
diff --git a/docs/v1.15.1/ar/learn/bring-your-own-agent.mdx b/docs/v1.15.1/ar/learn/bring-your-own-agent.mdx
new file mode 100644
index 000000000..d3b76446d
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/bring-your-own-agent.mdx
@@ -0,0 +1,41 @@
+---
+title: أحضر Agent الخاص بك
+description: تعلم كيفية إحضار Agents خاصة بك تعمل ضمن Crew.
+icon: robots
+mode: "wide"
+---
+
+قابلية التشغيل البيني مفهوم أساسي في CrewAI. يوضح هذا الدليل كيفية إحضار Agents خاصة بك تعمل ضمن Crew.
+
+## دليل المحوّلات لإحضار Agents الخاصة (Agents من LangGraph وOpenAI وغيرها...)
+
+نتطلب 3 محوّلات لتحويل أي Agent من أطر عمل مختلفة للعمل ضمن Crew.
+
+1. BaseAgentAdapter
+2. BaseToolAdapter
+3. BaseConverter
+
+## BaseAgentAdapter
+
+تعرّف هذه الفئة المجردة الواجهة المشتركة والوظائف التي يجب أن تنفذها جميع محوّلات الـ Agent. تمتد BaseAgent للحفاظ على التوافق مع إطار عمل CrewAI مع إضافة متطلبات خاصة بالمحوّل.
+
+الطرق المطلوبة:
+
+1. `def configure_tools`
+2. `def configure_structured_output`
+
+## إنشاء محوّل خاص بك
+
+لدمج Agent من إطار عمل مختلف في CrewAI، تحتاج لإنشاء محوّل مخصص بوراثة `BaseAgentAdapter`. يعمل هذا المحوّل كطبقة توافق تترجم بين واجهات CrewAI والمتطلبات المحددة للـ Agent الخارجي.
+
+راجع الملف الإنجليزي الأصلي لأمثلة الكود التفصيلية لتنفيذ BaseAgentAdapter وBaseToolAdapter وBaseConverter.
+
+## محوّلات جاهزة للاستخدام
+
+نوفر محوّلات جاهزة للأطر التالية:
+1. LangGraph
+2. OpenAI Agents
+
+## تشغيل Crew مع Agents محوّلة:
+
+راجع الملف الإنجليزي الأصلي للحصول على مثال الكود الكامل الذي يوضح استخدام CrewAI Agent وOpenAI Agent Adapter وLangGraph Agent Adapter معًا في Crew واحد.
diff --git a/docs/v1.15.1/ar/learn/coding-agents.mdx b/docs/v1.15.1/ar/learn/coding-agents.mdx
new file mode 100644
index 000000000..f5f2f18d9
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/coding-agents.mdx
@@ -0,0 +1,80 @@
+---
+title: Agents البرمجة
+description: تعلم كيفية تمكين Agents CrewAI من كتابة وتنفيذ الكود، واستكشف الميزات المتقدمة لوظائف محسّنة.
+icon: rectangle-code
+mode: "wide"
+---
+
+## مقدمة
+
+أصبح لدى CrewAI Agents القدرة القوية على كتابة وتنفيذ الكود، مما يعزز قدراتها في حل المشكلات بشكل كبير. هذه الميزة مفيدة بشكل خاص للمهام التي تتطلب حلولاً حسابية أو برمجية.
+
+## تمكين تنفيذ الكود
+
+لتمكين تنفيذ الكود لـ Agent، عيّن معامل `allow_code_execution` إلى `True` عند إنشاء الـ Agent.
+
+```python Code
+from crewai import Agent
+
+coding_agent = Agent(
+ role="Senior Python Developer",
+ goal="Craft well-designed and thought-out code",
+ backstory="You are a senior Python developer with extensive experience in software architecture and best practices.",
+ allow_code_execution=True
+)
+```
+
+
+لاحظ أن معامل `allow_code_execution` يكون `False` افتراضيًا.
+
+
+## اعتبارات مهمة
+
+1. **اختيار النموذج**: يُوصى بشدة باستخدام نماذج أكثر قدرة مثل Claude 3.5 Sonnet وGPT-4 عند تمكين تنفيذ الكود.
+
+2. **معالجة الأخطاء**: تتضمن ميزة تنفيذ الكود معالجة أخطاء. إذا أثار الكود المُنفَّذ استثناءً، سيتلقى الـ Agent رسالة الخطأ ويمكنه محاولة تصحيح الكود. يتحكم معامل `max_retry_limit` (الافتراضي 2) في الحد الأقصى لعدد المحاولات.
+
+3. **التبعيات**: لاستخدام ميزة تنفيذ الكود، تحتاج لتثبيت حزمة `crewai_tools`.
+
+## عملية تنفيذ الكود
+
+
+
+ يحلل الـ Agent المهمة ويحدد أن تنفيذ الكود ضروري.
+
+
+ يصيغ كود Python اللازم لحل المشكلة.
+
+
+ يُرسَل الكود إلى أداة تنفيذ الكود الداخلية (`CodeInterpreterTool`).
+
+
+ يفسر الـ Agent النتيجة ويدمجها في استجابته أو يستخدمها لمزيد من حل المشكلات.
+
+
+
+## مثال استخدام
+
+```python Code
+from crewai import Agent, Task, Crew
+
+coding_agent = Agent(
+ role="Python Data Analyst",
+ goal="Analyze data and provide insights using Python",
+ backstory="You are an experienced data analyst with strong Python skills.",
+ allow_code_execution=True
+)
+
+data_analysis_task = Task(
+ description="Analyze the given dataset and calculate the average age of participants.",
+ agent=coding_agent
+)
+
+analysis_crew = Crew(
+ agents=[coding_agent],
+ tasks=[data_analysis_task]
+)
+
+result = analysis_crew.kickoff()
+print(result)
+```
diff --git a/docs/v1.15.1/ar/learn/conditional-tasks.mdx b/docs/v1.15.1/ar/learn/conditional-tasks.mdx
new file mode 100644
index 000000000..818d72aac
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/conditional-tasks.mdx
@@ -0,0 +1,14 @@
+---
+title: المهام الشرطية
+description: تعلم كيفية استخدام المهام الشرطية في انطلاق crewAI
+icon: diagram-subtask
+mode: "wide"
+---
+
+## مقدمة
+
+تتيح المهام الشرطية في crewAI التكيف الديناميكي لسير العمل بناءً على نتائج المهام السابقة. تمكّن هذه الميزة القوية الـ Crews من اتخاذ قرارات وتنفيذ المهام بشكل انتقائي، مما يعزز مرونة وكفاءة عملياتك المدفوعة بالذكاء الاصطناعي.
+
+## مثال استخدام
+
+راجع الملف الإنجليزي الأصلي للحصول على مثال الكود الكامل الذي يوضح استخدام `ConditionalTask` مع دالة شرط `is_data_missing` للتحكم في تنفيذ المهام بناءً على مخرجات المهام السابقة.
diff --git a/docs/v1.15.1/ar/learn/create-custom-tools.mdx b/docs/v1.15.1/ar/learn/create-custom-tools.mdx
new file mode 100644
index 000000000..da82f5b45
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/create-custom-tools.mdx
@@ -0,0 +1,77 @@
+---
+title: إنشاء أدوات مخصصة
+description: دليل شامل لصياغة واستخدام وإدارة الأدوات المخصصة ضمن إطار عمل CrewAI، بما في ذلك الوظائف الجديدة ومعالجة الأخطاء.
+icon: hammer
+mode: "wide"
+---
+
+## إنشاء واستخدام الأدوات في CrewAI
+
+يقدم هذا الدليل تعليمات مفصلة لإنشاء أدوات مخصصة لإطار عمل CrewAI وكيفية إدارة واستخدام هذه الأدوات بكفاءة، مع دمج أحدث الوظائف مثل تفويض الأدوات ومعالجة الأخطاء واستدعاء الأدوات الديناميكي.
+
+
+ **هل تريد نشر أداتك للمجتمع؟** إذا كنت تبني أداة يمكن أن تفيد الآخرين، اطلع على دليل [نشر أدوات مخصصة](/ar/guides/tools/publish-custom-tools) لتعلم كيفية تعبئة وتوزيع أداتك على PyPI.
+
+
+### وراثة `BaseTool`
+
+لإنشاء أداة مخصصة، ورث من `BaseTool` وعرّف السمات الضرورية بما في ذلك `args_schema` للتحقق من المدخلات وطريقة `_run`.
+
+```python Code
+from typing import Type
+from crewai.tools import BaseTool
+from pydantic import BaseModel, Field
+
+class MyToolInput(BaseModel):
+ """Input schema for MyCustomTool."""
+ argument: str = Field(..., description="Description of the argument.")
+
+class MyCustomTool(BaseTool):
+ name: str = "Name of my tool"
+ description: str = "What this tool does. It's vital for effective utilization."
+ args_schema: Type[BaseModel] = MyToolInput
+
+ def _run(self, argument: str) -> str:
+ return "Tool's result"
+```
+
+### استخدام مزخرف `tool`
+
+```python Code
+from crewai.tools import tool
+
+@tool("Tool Name")
+def my_simple_tool(question: str) -> str:
+ """Tool description for clarity."""
+ return "Tool output"
+```
+
+### تعريف دالة تخزين مؤقت للأداة
+
+```python Code
+@tool("Tool with Caching")
+def cached_tool(argument: str) -> str:
+ """Tool functionality description."""
+ return "Cacheable result"
+
+def my_cache_strategy(arguments: dict, result: str) -> bool:
+ return True if some_condition else False
+
+cached_tool.cache_function = my_cache_strategy
+```
+
+### إنشاء أدوات غير متزامنة
+
+يدعم CrewAI الأدوات غير المتزامنة لعمليات I/O غير المحجوبة.
+
+```python Code
+import aiohttp
+from crewai.tools import tool
+
+@tool("Async Web Fetcher")
+async def fetch_webpage(url: str) -> str:
+ """Fetch content from a webpage asynchronously."""
+ async with aiohttp.ClientSession() as session:
+ async with session.get(url) as response:
+ return await response.text()
+```
diff --git a/docs/v1.15.1/ar/learn/custom-llm.mdx b/docs/v1.15.1/ar/learn/custom-llm.mdx
new file mode 100644
index 000000000..a02222356
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/custom-llm.mdx
@@ -0,0 +1,55 @@
+---
+title: تنفيذ LLM مخصص
+description: تعلم كيفية إنشاء تنفيذات LLM مخصصة في CrewAI.
+icon: code
+mode: "wide"
+---
+
+## نظرة عامة
+
+يدعم CrewAI تنفيذات LLM المخصصة من خلال فئة `BaseLLM` المجردة. يتيح لك ذلك دمج أي مزود LLM لا يحظى بدعم مدمج في LiteLLM، أو تنفيذ آليات مصادقة مخصصة.
+
+## بداية سريعة
+
+راجع الملف الإنجليزي الأصلي للحصول على تنفيذ LLM مخصص كامل يوضح طريقة `call()` المطلوبة والطرق الاختيارية مثل `supports_function_calling()` و`get_context_window_size()`.
+
+## استخدام LLM المخصص
+
+```python
+from crewai import Agent, Task, Crew
+
+custom_llm = CustomLLM(
+ model="my-custom-model",
+ api_key="your-api-key",
+ endpoint="https://api.example.com/v1/chat/completions",
+ temperature=0.7
+)
+
+agent = Agent(
+ role="Research Assistant",
+ goal="Find and analyze information",
+ backstory="You are a research assistant.",
+ llm=custom_llm
+)
+
+task = Task(
+ description="Research the latest developments in AI",
+ expected_output="A comprehensive summary",
+ agent=agent
+)
+
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff()
+```
+
+## الطرق المطلوبة
+
+### البنّاء: `__init__()`
+
+**مهم**: يجب استدعاء `super().__init__(model, temperature)` مع المعاملات المطلوبة.
+
+### الطريقة المجردة: `call()`
+
+طريقة `call()` هي قلب تنفيذ LLM. يجب أن تقبل الرسائل وتعيد استجابة نصية وتعالج الأدوات واستدعاء الدوال إذا كانت مدعومة.
+
+يغطي هذا الدليل أساسيات تنفيذ LLM مخصصة في CrewAI.
diff --git a/docs/v1.15.1/ar/learn/custom-manager-agent.mdx b/docs/v1.15.1/ar/learn/custom-manager-agent.mdx
new file mode 100644
index 000000000..c20f8a272
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/custom-manager-agent.mdx
@@ -0,0 +1,81 @@
+---
+title: Agent مدير مخصص
+description: تعلم كيفية تعيين Agent مخصص كمدير في CrewAI، مما يوفر مزيدًا من التحكم في إدارة المهام والتنسيق.
+icon: user-shield
+mode: "wide"
+---
+
+# تعيين Agent محدد كمدير في CrewAI
+
+يتيح CrewAI للمستخدمين تعيين Agent محدد كمدير للـ Crew، مما يوفر مزيدًا من التحكم في إدارة المهام وتنسيقها.
+
+## استخدام سمة `manager_agent`
+
+تتيح لك سمة `manager_agent` تعريف Agent مخصص لإدارة الـ Crew. سيشرف هذا الـ Agent على العملية بأكملها لضمان إتمام المهام بكفاءة وبأعلى المعايير.
+
+```python Code
+import os
+from crewai import Agent, Task, Crew, Process
+
+researcher = Agent(
+ role="Researcher",
+ goal="Conduct thorough research and analysis on AI and AI agents",
+ backstory="You're an expert researcher...",
+ allow_delegation=False,
+)
+
+writer = Agent(
+ role="Senior Writer",
+ goal="Create compelling content about AI and AI agents",
+ backstory="You're a senior writer...",
+ allow_delegation=False,
+)
+
+task = Task(
+ description="Generate a list of 5 interesting ideas for an article...",
+ expected_output="5 bullet points, each with a paragraph and accompanying notes.",
+)
+
+manager = Agent(
+ role="Project Manager",
+ goal="Efficiently manage the crew and ensure high-quality task completion",
+ backstory="You're an experienced project manager...",
+ allow_delegation=True,
+)
+
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[task],
+ manager_agent=manager,
+ process=Process.hierarchical,
+)
+
+result = crew.kickoff()
+```
+
+## فوائد Agent المدير المخصص
+
+- **تحكم محسّن**: تخصيص نهج الإدارة ليناسب الاحتياجات المحددة لمشروعك.
+- **تنسيق محسّن**: ضمان تنسيق المهام وإدارتها بكفاءة من قبل Agent ذي خبرة.
+- **إدارة قابلة للتخصيص**: تعريف أدوار ومسؤوليات إدارية تتماشى مع أهداف مشروعك.
+
+## تعيين LLM للمدير
+
+إذا كنت تستخدم العملية الهرمية ولا تريد تعيين Agent مدير مخصص، يمكنك تحديد نموذج اللغة للمدير:
+
+```python Code
+from crewai import LLM
+
+manager_llm = LLM(model="gpt-4o")
+
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[task],
+ process=Process.hierarchical,
+ manager_llm=manager_llm
+)
+```
+
+
+يجب تعيين إما `manager_agent` أو `manager_llm` عند استخدام العملية الهرمية.
+
diff --git a/docs/v1.15.1/ar/learn/customizing-agents.mdx b/docs/v1.15.1/ar/learn/customizing-agents.mdx
new file mode 100644
index 000000000..54ce5977c
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/customizing-agents.mdx
@@ -0,0 +1,67 @@
+---
+title: تخصيص الـ Agents
+description: دليل شامل لتخصيص الـ Agents لأدوار ومهام محددة وتخصيصات متقدمة ضمن إطار عمل CrewAI.
+icon: user-pen
+mode: "wide"
+---
+
+## السمات القابلة للتخصيص
+
+يعتمد بناء فريق CrewAI فعّال على القدرة على تخصيص Agents الذكاء الاصطناعي ديناميكيًا لتلبية المتطلبات الفريدة لأي مشروع. يغطي هذا القسم السمات الأساسية التي يمكنك تخصيصها.
+
+### السمات الرئيسية للتخصيص
+
+| السمة | الوصف |
+|:-----------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------|
+| **Role** | يحدد وظيفة الـ Agent ضمن Crew، مثل 'محلل' أو 'ممثل خدمة عملاء'. |
+| **Goal** | يعرّف أهداف الـ Agent، متوافقة مع دوره ومهمة Crew الشاملة. |
+| **Backstory** | يوفر عمقًا لشخصية الـ Agent، معززًا الدوافع والتفاعلات ضمن Crew. |
+| **Tools** *(اختياري)* | يمثل القدرات أو الطرق التي يستخدمها الـ Agent للمهام. |
+| **Cache** *(اختياري)* | يحدد ما إذا كان الـ Agent يجب أن يستخدم ذاكرة مؤقتة لاستخدام الأدوات. |
+| **Max RPM** | يعيّن الحد الأقصى للطلبات في الدقيقة (`max_rpm`). |
+| **Verbose** *(اختياري)* | يمكّن التسجيل التفصيلي للتصحيح والتحسين. |
+| **Allow Delegation** *(اختياري)* | يتحكم في تفويض المهام لـ Agents أخرى، الافتراضي `False`. |
+| **Max Iter** *(اختياري)* | يحد الحد الأقصى لعدد التكرارات (`max_iter`) لمهمة، الافتراضي 25. |
+
+## خيارات تخصيص متقدمة
+
+### تخصيص نموذج اللغة
+
+يمكن تخصيص الـ Agents بنماذج لغة محددة (`llm`) ونماذج لغة لاستدعاء الدوال (`function_calling_llm`)، مما يوفر تحكمًا متقدمًا في قدرات المعالجة وصنع القرار.
+
+## إعدادات الأداء والتصحيح
+
+- **وضع التفصيل**: يمكّن التسجيل التفصيلي لإجراءات الـ Agent.
+- **حد RPM**: يعيّن الحد الأقصى للطلبات في الدقيقة.
+
+### مثال: تعيين أدوات لـ Agent
+
+```python Code
+import os
+from crewai import Agent
+from crewai_tools import SerperDevTool
+
+os.environ["OPENAI_API_KEY"] = "Your Key"
+os.environ["SERPER_API_KEY"] = "Your Key"
+
+search_tool = SerperDevTool()
+
+agent = Agent(
+ role='Research Analyst',
+ goal='Provide up-to-date market analysis',
+ backstory='An expert analyst with a keen eye for market trends.',
+ tools=[search_tool],
+ memory=True,
+ verbose=True,
+ max_rpm=None,
+ max_iter=25,
+)
+```
+
+## التفويض والاستقلالية
+
+التحكم في قدرة الـ Agent على تفويض المهام أو طرح الأسئلة أمر حيوي لتخصيص استقلاليته وديناميكيات التعاون. افتراضيًا، سمة `allow_delegation` معيّنة على `False`.
+
+## الخلاصة
+
+تخصيص الـ Agents في CrewAI من خلال تعيين أدوارهم وأهدافهم وخلفياتهم وأدواتهم، إلى جانب خيارات متقدمة مثل تخصيص نموذج اللغة والذاكرة وإعدادات الأداء وتفضيلات التفويض، يجهّز فريق AI دقيق وقادر جاهز للتحديات المعقدة.
diff --git a/docs/v1.15.1/ar/learn/dalle-image-generation.mdx b/docs/v1.15.1/ar/learn/dalle-image-generation.mdx
new file mode 100644
index 000000000..0ab1c3754
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/dalle-image-generation.mdx
@@ -0,0 +1,52 @@
+---
+title: "إنشاء الصور باستخدام DALL-E"
+description: "تعلم كيفية استخدام DALL-E لإنشاء صور مدعومة بالذكاء الاصطناعي في مشاريع CrewAI"
+icon: "image"
+mode: "wide"
+---
+
+يدعم CrewAI التكامل مع DALL-E من OpenAI، مما يتيح لـ Agents الذكاء الاصطناعي إنشاء صور كجزء من مهامهم. سيرشدك هذا الدليل عبر كيفية إعداد واستخدام أداة DALL-E في مشاريع CrewAI.
+
+## المتطلبات المسبقة
+
+- crewAI مثبّت (أحدث إصدار)
+- مفتاح OpenAI API مع وصول إلى DALL-E
+
+## إعداد أداة DALL-E
+
+
+
+ ```python
+ from crewai_tools import DallETool
+ ```
+
+
+
+ ```python
+ @agent
+ def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config['researcher'],
+ tools=[SerperDevTool(), DallETool()],
+ allow_delegation=False,
+ verbose=True
+ )
+ ```
+
+
+
+## استخدام أداة DALL-E
+
+بمجرد إضافة أداة DALL-E إلى Agent، يمكنه إنشاء صور بناءً على مطالبات نصية. ستعيد الأداة رابط URL للصورة المُنشأة.
+
+## أفضل الممارسات
+
+1. **كن محددًا في مطالبات إنشاء الصور** للحصول على أفضل النتائج.
+2. **ضع في اعتبارك وقت الإنشاء** - قد يستغرق إنشاء الصور بعض الوقت.
+3. **اتبع سياسات الاستخدام** - التزم دائمًا بسياسات استخدام OpenAI عند إنشاء الصور.
+
+## استكشاف الأخطاء
+
+1. **تحقق من وصول API** - تأكد من أن مفتاح OpenAI API لديه وصول إلى DALL-E.
+2. **توافق الإصدارات** - تأكد من استخدام أحدث إصدار من crewAI وcrewai-tools.
+3. **تهيئة الأداة** - تحقق من إضافة أداة DALL-E بشكل صحيح لقائمة أدوات الـ Agent.
diff --git a/docs/v1.15.1/ar/learn/execution-hooks.mdx b/docs/v1.15.1/ar/learn/execution-hooks.mdx
new file mode 100644
index 000000000..1444eb58d
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/execution-hooks.mdx
@@ -0,0 +1,86 @@
+---
+title: نظرة عامة على خطافات التنفيذ
+description: فهم واستخدام خطافات التنفيذ في CrewAI للتحكم الدقيق في عمليات الـ Agent
+mode: "wide"
+---
+
+توفر خطافات التنفيذ تحكمًا دقيقًا في سلوك وقت تشغيل Agents CrewAI. على عكس خطافات الانطلاق التي تعمل قبل وبعد تنفيذ Crew، تعترض خطافات التنفيذ عمليات محددة أثناء تنفيذ الـ Agent، مما يتيح لك تعديل السلوك وتنفيذ فحوصات أمان وإضافة مراقبة شاملة.
+
+## أنواع خطافات التنفيذ
+
+### 1. [خطافات استدعاء LLM](/learn/llm-hooks)
+
+التحكم ومراقبة تفاعلات نموذج اللغة:
+- **قبل استدعاء LLM**: تعديل المطالبات، التحقق من المدخلات، بوابات الموافقة
+- **بعد استدعاء LLM**: تحويل الاستجابات، تنقية المخرجات، تحديث سجل المحادثة
+
+### 2. [خطافات استدعاء الأدوات](/learn/tool-hooks)
+
+التحكم ومراقبة تنفيذ الأدوات:
+- **قبل استدعاء الأداة**: تعديل المدخلات، التحقق من المعاملات، حظر العمليات الخطرة
+- **بعد استدعاء الأداة**: تحويل النتائج، تنقية المخرجات، تسجيل تفاصيل التنفيذ
+
+## طرق تسجيل الخطافات
+
+### 1. خطافات بالمزخرفات (مُوصى بها)
+
+```python
+from crewai.hooks import before_llm_call, after_llm_call, before_tool_call, after_tool_call
+
+@before_llm_call
+def limit_iterations(context):
+ if context.iterations > 10:
+ return False
+ return None
+
+@after_llm_call
+def sanitize_response(context):
+ if "API_KEY" in context.response:
+ return context.response.replace("API_KEY", "[REDACTED]")
+ return None
+
+@before_tool_call
+def block_dangerous_tools(context):
+ if context.tool_name == "delete_database":
+ return False
+ return None
+```
+
+### 2. خطافات نطاق Crew
+
+```python
+from crewai import CrewBase
+from crewai.project import crew
+from crewai.hooks import before_llm_call_crew, after_tool_call_crew
+
+@CrewBase
+class MyProjCrew:
+ @before_llm_call_crew
+ def validate_inputs(self, context):
+ print(f"LLM call in {self.__class__.__name__}")
+ return None
+
+ @after_tool_call_crew
+ def log_results(self, context):
+ print(f"Tool result: {context.tool_result[:50]}...")
+ return None
+```
+
+## أفضل الممارسات
+
+1. **اجعل الخطافات مركّزة** - كل خطاف يجب أن يكون له مسؤولية واحدة واضحة
+2. **عالج الأخطاء بلطف**
+3. **عدّل السياق في مكانه**
+4. **استخدم تلميحات الأنواع**
+5. **نظّف في الاختبارات**
+
+## التوثيق ذو الصلة
+
+- [خطافات استدعاء LLM](/learn/llm-hooks)
+- [خطافات استدعاء الأدوات](/learn/tool-hooks)
+- [خطافات قبل وبعد الانطلاق](/learn/before-and-after-kickoff-hooks)
+- [التدخل البشري](/learn/human-in-the-loop)
+
+## الخلاصة
+
+توفر خطافات التنفيذ تحكمًا قويًا في سلوك وقت تشغيل الـ Agent. استخدمها لتنفيذ حواجز أمان وسير عمل موافقة ومراقبة شاملة ومنطق أعمال مخصص.
diff --git a/docs/v1.15.1/ar/learn/force-tool-output-as-result.mdx b/docs/v1.15.1/ar/learn/force-tool-output-as-result.mdx
new file mode 100644
index 000000000..8551e7680
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/force-tool-output-as-result.mdx
@@ -0,0 +1,45 @@
+---
+title: فرض مخرجات الأداة كنتيجة
+description: تعلم كيفية فرض مخرجات الأداة كنتيجة لمهمة Agent في CrewAI.
+icon: wrench-simple
+mode: "wide"
+---
+
+## مقدمة
+
+في CrewAI، يمكنك فرض مخرجات أداة كنتيجة لمهمة Agent. هذه الميزة مفيدة عندما تريد التأكد من التقاط مخرجات الأداة وإعادتها كنتيجة للمهمة، متجنبًا أي تعديل من قبل الـ Agent أثناء تنفيذ المهمة.
+
+## فرض مخرجات الأداة كنتيجة
+
+لفرض مخرجات الأداة كنتيجة لمهمة Agent، تحتاج لتعيين معامل `result_as_answer` إلى `True` عند إضافة أداة إلى الـ Agent.
+
+```python Code
+from crewai.agent import Agent
+from my_tool import MyCustomTool
+
+coding_agent = Agent(
+ role="Data Scientist",
+ goal="Produce amazing reports on AI",
+ backstory="You work with data and AI",
+ tools=[MyCustomTool(result_as_answer=True)],
+ )
+
+task_result = coding_agent.execute_task(task)
+```
+
+## سير العمل أثناء التنفيذ
+
+
+
+ ينفذ الـ Agent المهمة باستخدام الأداة المقدمة.
+
+
+ تولّد الأداة المخرجات التي تُلتقط كنتيجة للمهمة.
+
+
+ قد يتأمل الـ Agent ويستخلص دروسًا من الأداة لكن لا يعدّل المخرجات.
+
+
+ تُعاد مخرجات الأداة كنتيجة للمهمة دون أي تعديلات.
+
+
diff --git a/docs/v1.15.1/ar/learn/hierarchical-process.mdx b/docs/v1.15.1/ar/learn/hierarchical-process.mdx
new file mode 100644
index 000000000..af783bdcd
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/hierarchical-process.mdx
@@ -0,0 +1,76 @@
+---
+title: العملية الهرمية
+description: دليل شامل لفهم وتطبيق العملية الهرمية ضمن مشاريع CrewAI.
+icon: sitemap
+mode: "wide"
+---
+
+## مقدمة
+
+تقدم العملية الهرمية في CrewAI نهجًا منظمًا لإدارة المهام، محاكاةً للتسلسلات الهرمية التنظيمية التقليدية للتفويض والتنفيذ الفعّال للمهام.
+
+
+ صُممت العملية الهرمية للاستفادة من نماذج متقدمة مثل GPT-4، مما يحسّن استخدام الرموز المميزة مع التعامل مع المهام المعقدة بكفاءة أكبر.
+
+
+## نظرة عامة على العملية الهرمية
+
+افتراضيًا، تُدار المهام في CrewAI من خلال عملية متسلسلة. لكن اعتماد نهج هرمي يتيح تسلسلاً واضحًا في إدارة المهام، حيث يقوم Agent 'مدير' بتنسيق سير العمل وتفويض المهام والتحقق من النتائج.
+
+### الميزات الرئيسية
+
+- **تفويض المهام**: Agent مدير يوزّع المهام بين أعضاء Crew بناءً على أدوارهم وقدراتهم.
+- **التحقق من النتائج**: يقيّم المدير النتائج لضمان استيفائها للمعايير المطلوبة.
+- **سير عمل فعّال**: يحاكي الهياكل المؤسسية مقدمًا نهجًا منظمًا لإدارة المهام.
+
+## تنفيذ العملية الهرمية
+
+```python Code
+from crewai import Crew, Process, Agent
+
+researcher = Agent(
+ role='Researcher',
+ goal='Conduct in-depth analysis',
+ backstory='Experienced data analyst with a knack for uncovering hidden trends.',
+)
+writer = Agent(
+ role='Writer',
+ goal='Create engaging content',
+ backstory='Creative writer passionate about storytelling in technical domains.',
+)
+
+project_crew = Crew(
+ tasks=[...],
+ agents=[researcher, writer],
+ manager_llm="gpt-4o",
+ process=Process.hierarchical,
+ planning=True,
+)
+```
+
+### استخدام Agent مدير مخصص
+
+```python
+manager = Agent(
+ role="Project Manager",
+ goal="Efficiently manage the crew and ensure high-quality task completion",
+ backstory="You're an experienced project manager...",
+ allow_delegation=True,
+)
+
+project_crew = Crew(
+ tasks=[...],
+ agents=[researcher, writer],
+ manager_agent=manager,
+ process=Process.hierarchical,
+ planning=True,
+)
+```
+
+
+ لمزيد من التفاصيل حول إنشاء وتخصيص Agent مدير، اطلع على [توثيق Agent المدير المخصص](/ar/learn/custom-manager-agent).
+
+
+## الخلاصة
+
+اعتماد العملية الهرمية في CrewAI مع التهيئات الصحيحة وفهم قدرات النظام يسهّل نهجًا منظمًا وفعّالاً لإدارة المشاريع. استفد من الميزات المتقدمة والتخصيصات لتكييف سير العمل لاحتياجاتك المحددة.
diff --git a/docs/v1.15.1/ar/learn/human-feedback-in-flows.mdx b/docs/v1.15.1/ar/learn/human-feedback-in-flows.mdx
new file mode 100644
index 000000000..11aeffcf6
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/human-feedback-in-flows.mdx
@@ -0,0 +1,98 @@
+---
+title: التغذية الراجعة البشرية في Flows
+description: تعلم كيفية دمج التغذية الراجعة البشرية مباشرة في CrewAI Flows باستخدام مزخرف @human_feedback
+icon: user-check
+mode: "wide"
+---
+
+## نظرة عامة
+
+
+يتطلب مزخرف `@human_feedback` إصدار **CrewAI 1.8.0 أو أحدث**. تأكد من تحديث تثبيتك قبل استخدام هذه الميزة.
+
+
+يمكّن مزخرف `@human_feedback` سير العمل البشري في الحلقة (HITL) مباشرة ضمن CrewAI Flows. يتيح لك إيقاف تنفيذ Flow مؤقتًا وعرض المخرجات لإنسان للمراجعة وجمع تعليقاته واختياريًا التوجيه إلى مستمعين مختلفين بناءً على نتيجة التعليقات.
+
+هذا مفيد بشكل خاص لـ:
+
+- **ضمان الجودة**: مراجعة المحتوى المُنشأ بالذكاء الاصطناعي قبل استخدامه
+- **بوابات القرار**: السماح للبشر باتخاذ قرارات حرجة في سير العمل الآلي
+- **سير عمل الموافقة**: تنفيذ أنماط الموافقة/الرفض/المراجعة
+- **التحسين التفاعلي**: جمع التعليقات لتحسين المخرجات تكراريًا
+
+## بداية سريعة
+
+```python Code
+from crewai.flow.flow import Flow, start, listen
+from crewai.flow.human_feedback import human_feedback
+
+class SimpleReviewFlow(Flow):
+ @start()
+ @human_feedback(message="Please review this content:")
+ def generate_content(self):
+ return "This is AI-generated content that needs review."
+
+ @listen(generate_content)
+ def process_feedback(self, result):
+ print(f"Content: {result.output}")
+ print(f"Human said: {result.feedback}")
+
+flow = SimpleReviewFlow()
+flow.kickoff()
+```
+
+## التوجيه مع emit
+
+عند تحديد `emit`، يصبح المزخرف موجّهًا. يُفسَّر التعليق البشري الحر بواسطة LLM ويُختزل إلى إحدى النتائج المحددة:
+
+```python Code
+from crewai.flow.flow import Flow, start, listen, or_
+from crewai.flow.human_feedback import human_feedback
+
+class ReviewFlow(Flow):
+ @start()
+ def generate_content(self):
+ return "Draft blog post content here..."
+
+ @human_feedback(
+ message="Do you approve this content for publication?",
+ emit=["approved", "rejected", "needs_revision"],
+ llm="gpt-4o-mini",
+ default_outcome="needs_revision",
+ )
+ @listen(or_("generate_content", "needs_revision"))
+ def review_content(self):
+ return "Draft blog post content here..."
+
+ @listen("approved")
+ def publish(self, result):
+ print(f"Publishing! User said: {result.feedback}")
+
+ @listen("rejected")
+ def discard(self, result):
+ print(f"Discarding. Reason: {result.feedback}")
+```
+
+## التعلم من التغذية الراجعة
+
+معامل `learn=True` يمكّن حلقة تغذية راجعة بين المراجعين البشريين ونظام الذاكرة. عند تمكينه، يحسّن النظام مخرجاته تدريجيًا بالتعلم من التصحيحات البشرية السابقة.
+
+## أفضل الممارسات
+
+1. **اكتب رسائل طلب واضحة**
+2. **اختر نتائج ذات معنى**
+3. **وفّر دائمًا نتيجة افتراضية**
+4. **استخدم سجل التعليقات لمسارات التدقيق**
+
+## التغذية الراجعة البشرية غير المتزامنة (غير محجوبة)
+
+استخدم معامل `provider` لتحديد استراتيجية جمع تعليقات مخصصة تتكامل مع أنظمة خارجية مثل Slack والبريد الإلكتروني وWebhooks وواجهات API.
+
+## التوثيق ذو الصلة
+
+- [نظرة عامة على Flows](/ar/concepts/flows)
+- [إدارة حالة Flow](/ar/guides/flows/mastering-flow-state)
+- [حفظ Flow](/ar/concepts/flows#persistence)
+- [التوجيه مع @router](/ar/concepts/flows#router)
+- [إدخال بشري عند التنفيذ](/ar/learn/human-input-on-execution)
+- [الذاكرة](/ar/concepts/memory)
diff --git a/docs/v1.15.1/ar/learn/human-in-the-loop.mdx b/docs/v1.15.1/ar/learn/human-in-the-loop.mdx
new file mode 100644
index 000000000..69c5ea8a7
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/human-in-the-loop.mdx
@@ -0,0 +1,80 @@
+---
+title: "سير عمل التدخل البشري (HITL)"
+description: "تعلم كيفية تنفيذ سير عمل التدخل البشري في CrewAI لتعزيز صنع القرار"
+icon: "user-check"
+mode: "wide"
+---
+
+التدخل البشري (HITL) هو نهج قوي يجمع بين الذكاء الاصطناعي والخبرة البشرية لتعزيز صنع القرار وتحسين نتائج المهام. يوفر CrewAI طرقًا متعددة لتنفيذ HITL حسب احتياجاتك.
+
+## اختيار نهج HITL
+
+يوفر CrewAI نهجين رئيسيين لتنفيذ سير عمل التدخل البشري:
+
+| النهج | الأنسب لـ | التكامل | الإصدار |
+|----------|----------|-------------|---------|
+| **قائم على Flow** (مزخرف `@human_feedback`) | التطوير المحلي، المراجعة عبر وحدة التحكم، سير العمل المتزامن | [التغذية الراجعة البشرية في Flows](/ar/learn/human-feedback-in-flows) | **1.8.0+** |
+| **قائم على Webhook** (المؤسسات) | نشر الإنتاج، سير العمل غير المتزامن، التكاملات الخارجية (Slack، Teams، إلخ) | هذا الدليل | - |
+
+
+إذا كنت تبني Flows وتريد إضافة خطوات مراجعة بشرية مع توجيه بناءً على التعليقات، اطلع على دليل [التغذية الراجعة البشرية في Flows](/ar/learn/human-feedback-in-flows) لمزخرف `@human_feedback`.
+
+
+## إعداد سير عمل HITL القائم على Webhook
+
+
+
+ أعدّ مهمتك مع تمكين إدخال بشري.
+
+
+
+ عند تشغيل Crew، أدرج عنوان Webhook URL لإدخال بشري.
+
+
+
+ بمجرد إتمام Crew المهمة التي تتطلب إدخالاً بشريًا، ستتلقى إشعار Webhook.
+
+
+
+ سيتوقف النظام في حالة `Pending Human Input`. راجع مخرجات المهمة بعناية.
+
+
+
+ استدعِ نقطة نهاية الاستئناف لـ Crew.
+
+
+ **مهم: يجب توفير عناوين Webhook URL مرة أخرى**:
+ يجب توفير نفس عناوين Webhook URL في استدعاء الاستئناف التي استخدمتها في استدعاء الانطلاق.
+
+
+
+
+ إذا قدمت تعليقات سلبية، سيعيد Crew محاولة المهمة مع سياق إضافي من تعليقاتك.
+
+
+
+ عند إرسال تعليقات إيجابية، سيستمر التنفيذ إلى الخطوات التالية.
+
+
+
+## أفضل الممارسات
+
+- **كن محددًا**: قدم تعليقات واضحة وقابلة للتنفيذ
+- **ابقَ ذا صلة**: أدرج فقط معلومات تساعد في تحسين تنفيذ المهمة
+- **كن في الوقت المناسب**: استجب لمطالبات HITL بسرعة لتجنب تأخير سير العمل
+- **راجع بعناية**: تحقق من تعليقاتك قبل الإرسال لضمان الدقة
+
+## حالات الاستخدام الشائعة
+
+سير عمل HITL مفيدة بشكل خاص لـ:
+- ضمان الجودة والتحقق
+- سيناريوهات صنع القرار المعقدة
+- العمليات الحساسة أو عالية المخاطر
+- المهام الإبداعية التي تتطلب حكمًا بشريًا
+- مراجعات الامتثال والتنظيم
+
+## ميزات المؤسسات
+
+
+ يوفر CrewAI Enterprise نظام إدارة HITL شامل لـ Flows مع مراجعة داخل المنصة وتعيين المستجيبين والأذونات وسياسات التصعيد وإدارة SLA والتوجيه الديناميكي والتحليلات الكاملة. [تعلم المزيد](/ar/enterprise/features/flow-hitl-management)
+
diff --git a/docs/v1.15.1/ar/learn/human-input-on-execution.mdx b/docs/v1.15.1/ar/learn/human-input-on-execution.mdx
new file mode 100644
index 000000000..756f170a0
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/human-input-on-execution.mdx
@@ -0,0 +1,99 @@
+---
+title: الإدخال البشري أثناء التنفيذ
+description: دمج CrewAI مع الإدخال البشري أثناء التنفيذ في عمليات اتخاذ القرارات المعقدة والاستفادة الكاملة من إمكانيات خصائص وأدوات الوكيل.
+icon: user-plus
+mode: "wide"
+---
+
+## الإدخال البشري في تنفيذ الوكيل
+
+يُعد الإدخال البشري أمراً بالغ الأهمية في العديد من سيناريوهات تنفيذ الوكلاء، حيث يسمح للوكلاء بطلب معلومات إضافية أو توضيحات عند الضرورة.
+هذه الميزة مفيدة بشكل خاص في عمليات اتخاذ القرارات المعقدة أو عندما يحتاج الوكلاء إلى مزيد من التفاصيل لإكمال مهمة بفعالية.
+
+## استخدام الإدخال البشري مع CrewAI
+
+لدمج الإدخال البشري في تنفيذ الوكيل، قم بتعيين علامة `human_input` في تعريف المهمة. عند تفعيلها، يطلب الوكيل من المستخدم إدخالاً قبل تقديم إجابته النهائية.
+يمكن أن يوفر هذا الإدخال سياقاً إضافياً، أو يوضح الغموض، أو يتحقق من مخرجات الوكيل.
+
+### مثال:
+
+```shell
+pip install crewai
+```
+
+```python Code
+import os
+from crewai import Agent, Task, Crew
+from crewai_tools import SerperDevTool
+
+os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
+os.environ["OPENAI_API_KEY"] = "Your Key"
+
+# Loading Tools
+search_tool = SerperDevTool()
+
+# Define your agents with roles, goals, tools, and additional attributes
+researcher = Agent(
+ role='Senior Research Analyst',
+ goal='Uncover cutting-edge developments in AI and data science',
+ backstory=(
+ "You are a Senior Research Analyst at a leading tech think tank. "
+ "Your expertise lies in identifying emerging trends and technologies in AI and data science. "
+ "You have a knack for dissecting complex data and presenting actionable insights."
+ ),
+ verbose=True,
+ allow_delegation=False,
+ tools=[search_tool]
+)
+writer = Agent(
+ role='Tech Content Strategist',
+ goal='Craft compelling content on tech advancements',
+ backstory=(
+ "You are a renowned Tech Content Strategist, known for your insightful and engaging articles on technology and innovation. "
+ "With a deep understanding of the tech industry, you transform complex concepts into compelling narratives."
+ ),
+ verbose=True,
+ allow_delegation=True,
+ tools=[search_tool],
+ cache=False, # Disable cache for this agent
+)
+
+# Create tasks for your agents
+task1 = Task(
+ description=(
+ "Conduct a comprehensive analysis of the latest advancements in AI in 2025. "
+ "Identify key trends, breakthrough technologies, and potential industry impacts. "
+ "Compile your findings in a detailed report. "
+ "Make sure to check with a human if the draft is good before finalizing your answer."
+ ),
+ expected_output='A comprehensive full report on the latest AI advancements in 2025, leave nothing out',
+ agent=researcher,
+ human_input=True
+)
+
+task2 = Task(
+ description=(
+ "Using the insights from the researcher\'s report, develop an engaging blog post that highlights the most significant AI advancements. "
+ "Your post should be informative yet accessible, catering to a tech-savvy audience. "
+ "Aim for a narrative that captures the essence of these breakthroughs and their implications for the future."
+ ),
+ expected_output='A compelling 3 paragraphs blog post formatted as markdown about the latest AI advancements in 2025',
+ agent=writer,
+ human_input=True
+)
+
+# Instantiate your crew with a sequential process
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[task1, task2],
+ verbose=True,
+ memory=True,
+ planning=True # Enable planning feature for the crew
+)
+
+# Get your crew to work!
+result = crew.kickoff()
+
+print("######################")
+print(result)
+```
diff --git a/docs/v1.15.1/ar/learn/kickoff-async.mdx b/docs/v1.15.1/ar/learn/kickoff-async.mdx
new file mode 100644
index 000000000..dfe446ba0
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/kickoff-async.mdx
@@ -0,0 +1,306 @@
+---
+title: تشغيل الطاقم بشكل غير متزامن
+description: تشغيل الطاقم بشكل غير متزامن
+icon: rocket-launch
+mode: "wide"
+---
+
+## مقدمة
+
+يوفر CrewAI القدرة على تشغيل طاقم بشكل غير متزامن، مما يتيح لك بدء تنفيذ الطاقم بطريقة غير حاجبة.
+هذه الميزة مفيدة بشكل خاص عندما تريد تشغيل عدة أطقم بشكل متزامن أو عندما تحتاج إلى أداء مهام أخرى أثناء تنفيذ الطاقم.
+
+يقدم CrewAI نهجين للتنفيذ غير المتزامن:
+
+| الطريقة | النوع | الوصف |
+|--------|------|-------------|
+| `akickoff()` | غير متزامن أصلي | async/await أصلي عبر سلسلة التنفيذ بالكامل |
+| `kickoff_async()` | قائم على الخيوط | يغلف التنفيذ المتزامن في `asyncio.to_thread` |
+
+
+لأحمال العمل عالية التزامن، يُوصى باستخدام `akickoff()` لأنه يستخدم async أصلي لتنفيذ المهام وعمليات الذاكرة واسترجاع المعرفة.
+
+
+## التنفيذ غير المتزامن الأصلي مع `akickoff()`
+
+توفر طريقة `akickoff()` تنفيذاً غير متزامن أصلياً حقيقياً، باستخدام async/await عبر سلسلة التنفيذ بالكامل بما في ذلك تنفيذ المهام وعمليات الذاكرة واستعلامات المعرفة.
+
+### توقيع الطريقة
+
+```python Code
+async def akickoff(self, inputs: dict) -> CrewOutput:
+```
+
+### المعاملات
+
+- `inputs` (dict): قاموس يحتوي على بيانات الإدخال المطلوبة للمهام.
+
+### القيمة المُرجعة
+
+- `CrewOutput`: كائن يمثل نتيجة تنفيذ الطاقم.
+
+### مثال: تنفيذ طاقم غير متزامن أصلي
+
+```python Code
+import asyncio
+from crewai import Crew, Agent, Task
+
+# Create an agent
+coding_agent = Agent(
+ role="Python Data Analyst",
+ goal="Analyze data and provide insights using Python",
+ backstory="You are an experienced data analyst with strong Python skills.",
+ allow_code_execution=True
+)
+
+# Create a task
+data_analysis_task = Task(
+ description="Analyze the given dataset and calculate the average age of participants. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="The average age of the participants."
+)
+
+# Create a crew
+analysis_crew = Crew(
+ agents=[coding_agent],
+ tasks=[data_analysis_task]
+)
+
+# Native async execution
+async def main():
+ result = await analysis_crew.akickoff(inputs={"ages": [25, 30, 35, 40, 45]})
+ print("Crew Result:", result)
+
+asyncio.run(main())
+```
+
+### مثال: عدة أطقم غير متزامنة أصلية
+
+تشغيل عدة أطقم بشكل متزامن باستخدام `asyncio.gather()` مع async أصلي:
+
+```python Code
+import asyncio
+from crewai import Crew, Agent, Task
+
+coding_agent = Agent(
+ role="Python Data Analyst",
+ goal="Analyze data and provide insights using Python",
+ backstory="You are an experienced data analyst with strong Python skills.",
+ allow_code_execution=True
+)
+
+task_1 = Task(
+ description="Analyze the first dataset and calculate the average age. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="The average age of the participants."
+)
+
+task_2 = Task(
+ description="Analyze the second dataset and calculate the average age. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="The average age of the participants."
+)
+
+crew_1 = Crew(agents=[coding_agent], tasks=[task_1])
+crew_2 = Crew(agents=[coding_agent], tasks=[task_2])
+
+async def main():
+ results = await asyncio.gather(
+ crew_1.akickoff(inputs={"ages": [25, 30, 35, 40, 45]}),
+ crew_2.akickoff(inputs={"ages": [20, 22, 24, 28, 30]})
+ )
+
+ for i, result in enumerate(results, 1):
+ print(f"Crew {i} Result:", result)
+
+asyncio.run(main())
+```
+
+### مثال: async أصلي لمدخلات متعددة
+
+استخدم `akickoff_for_each()` لتنفيذ طاقمك على مدخلات متعددة بشكل متزامن مع async أصلي:
+
+```python Code
+import asyncio
+from crewai import Crew, Agent, Task
+
+coding_agent = Agent(
+ role="Python Data Analyst",
+ goal="Analyze data and provide insights using Python",
+ backstory="You are an experienced data analyst with strong Python skills.",
+ allow_code_execution=True
+)
+
+data_analysis_task = Task(
+ description="Analyze the dataset and calculate the average age. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="The average age of the participants."
+)
+
+analysis_crew = Crew(
+ agents=[coding_agent],
+ tasks=[data_analysis_task]
+)
+
+async def main():
+ datasets = [
+ {"ages": [25, 30, 35, 40, 45]},
+ {"ages": [20, 22, 24, 28, 30]},
+ {"ages": [30, 35, 40, 45, 50]}
+ ]
+
+ results = await analysis_crew.akickoff_for_each(datasets)
+
+ for i, result in enumerate(results, 1):
+ print(f"Dataset {i} Result:", result)
+
+asyncio.run(main())
+```
+
+## التنفيذ غير المتزامن القائم على الخيوط مع `kickoff_async()`
+
+توفر طريقة `kickoff_async()` تنفيذاً غير متزامن عن طريق تغليف `kickoff()` المتزامن في خيط. هذا مفيد للتكامل البسيط مع async أو للتوافق مع الإصدارات السابقة.
+
+### توقيع الطريقة
+
+```python Code
+async def kickoff_async(self, inputs: dict) -> CrewOutput:
+```
+
+### المعاملات
+
+- `inputs` (dict): قاموس يحتوي على بيانات الإدخال المطلوبة للمهام.
+
+### القيمة المُرجعة
+
+- `CrewOutput`: كائن يمثل نتيجة تنفيذ الطاقم.
+
+### مثال: تنفيذ غير متزامن قائم على الخيوط
+
+```python Code
+import asyncio
+from crewai import Crew, Agent, Task
+
+coding_agent = Agent(
+ role="Python Data Analyst",
+ goal="Analyze data and provide insights using Python",
+ backstory="You are an experienced data analyst with strong Python skills.",
+ allow_code_execution=True
+)
+
+data_analysis_task = Task(
+ description="Analyze the given dataset and calculate the average age of participants. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="The average age of the participants."
+)
+
+analysis_crew = Crew(
+ agents=[coding_agent],
+ tasks=[data_analysis_task]
+)
+
+async def async_crew_execution():
+ result = await analysis_crew.kickoff_async(inputs={"ages": [25, 30, 35, 40, 45]})
+ print("Crew Result:", result)
+
+asyncio.run(async_crew_execution())
+```
+
+### مثال: عدة أطقم غير متزامنة قائمة على الخيوط
+
+```python Code
+import asyncio
+from crewai import Crew, Agent, Task
+
+coding_agent = Agent(
+ role="Python Data Analyst",
+ goal="Analyze data and provide insights using Python",
+ backstory="You are an experienced data analyst with strong Python skills.",
+ allow_code_execution=True
+)
+
+task_1 = Task(
+ description="Analyze the first dataset and calculate the average age of participants. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="The average age of the participants."
+)
+
+task_2 = Task(
+ description="Analyze the second dataset and calculate the average age of participants. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="The average age of the participants."
+)
+
+crew_1 = Crew(agents=[coding_agent], tasks=[task_1])
+crew_2 = Crew(agents=[coding_agent], tasks=[task_2])
+
+async def async_multiple_crews():
+ result_1 = crew_1.kickoff_async(inputs={"ages": [25, 30, 35, 40, 45]})
+ result_2 = crew_2.kickoff_async(inputs={"ages": [20, 22, 24, 28, 30]})
+
+ results = await asyncio.gather(result_1, result_2)
+
+ for i, result in enumerate(results, 1):
+ print(f"Crew {i} Result:", result)
+
+asyncio.run(async_multiple_crews())
+```
+
+## البث غير المتزامن
+
+تدعم كلتا الطريقتين غير المتزامنتين البث عند تعيين `stream=True` على الطاقم:
+
+```python Code
+import asyncio
+from crewai import Crew, Agent, Task
+
+agent = Agent(
+ role="Researcher",
+ goal="Research and summarize topics",
+ backstory="You are an expert researcher."
+)
+
+task = Task(
+ description="Research the topic: {topic}",
+ agent=agent,
+ expected_output="A comprehensive summary of the topic."
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ stream=True # Enable streaming
+)
+
+async def main():
+ streaming_output = await crew.akickoff(inputs={"topic": "AI trends in 2024"})
+
+ # Async iteration over streaming chunks
+ async for chunk in streaming_output:
+ print(f"Chunk: {chunk.content}")
+
+ # Access final result after streaming completes
+ result = streaming_output.result
+ print(f"Final result: {result.raw}")
+
+asyncio.run(main())
+```
+
+## حالات الاستخدام المحتملة
+
+- **توليد المحتوى بالتوازي**: تشغيل عدة أطقم مستقلة بشكل غير متزامن، كل منها مسؤول عن توليد محتوى حول مواضيع مختلفة. على سبيل المثال، قد يبحث طاقم ويصوغ مقالاً عن اتجاهات الذكاء الاصطناعي، بينما يولد طاقم آخر منشورات وسائل التواصل الاجتماعي حول إطلاق منتج جديد.
+
+- **مهام أبحاث السوق المتزامنة**: إطلاق عدة أطقم بشكل غير متزامن لإجراء أبحاث السوق بالتوازي. قد يحلل طاقم اتجاهات الصناعة، بينما يفحص آخر استراتيجيات المنافسين، ويقيّم ثالث مشاعر المستهلكين.
+
+- **وحدات تخطيط السفر المستقلة**: تنفيذ أطقم منفصلة للتخطيط المستقل لجوانب مختلفة من رحلة. قد يتعامل طاقم مع خيارات الرحلات الجوية، وآخر مع الإقامة، وثالث يخطط للأنشطة.
+
+## الاختيار بين `akickoff()` و `kickoff_async()`
+
+| الميزة | `akickoff()` | `kickoff_async()` |
+|---------|--------------|-------------------|
+| نموذج التنفيذ | async/await أصلي | غلاف قائم على الخيوط |
+| تنفيذ المهام | غير متزامن مع `aexecute_sync()` | متزامن في مجمع الخيوط |
+| عمليات الذاكرة | غير متزامنة | متزامنة في مجمع الخيوط |
+| استرجاع المعرفة | غير متزامن | متزامن في مجمع الخيوط |
+| الأفضل لـ | أحمال العمل عالية التزامن والمرتبطة بالإدخال/الإخراج | التكامل البسيط مع async |
+| دعم البث | نعم | نعم |
diff --git a/docs/v1.15.1/ar/learn/kickoff-for-each.mdx b/docs/v1.15.1/ar/learn/kickoff-for-each.mdx
new file mode 100644
index 000000000..a827799b0
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/kickoff-for-each.mdx
@@ -0,0 +1,54 @@
+---
+title: تشغيل الطاقم لكل عنصر
+description: تشغيل الطاقم لكل عنصر في قائمة
+icon: at
+mode: "wide"
+---
+
+## مقدمة
+
+يوفر CrewAI القدرة على تشغيل طاقم لكل عنصر في قائمة، مما يتيح لك تنفيذ الطاقم لكل عنصر في القائمة.
+هذه الميزة مفيدة بشكل خاص عندما تحتاج إلى تنفيذ نفس مجموعة المهام لعناصر متعددة.
+
+## تشغيل طاقم لكل عنصر
+
+لتشغيل طاقم لكل عنصر في قائمة، استخدم طريقة `kickoff_for_each()`.
+تنفذ هذه الطريقة الطاقم لكل عنصر في القائمة، مما يتيح لك معالجة عناصر متعددة بكفاءة.
+
+إليك مثالاً على كيفية تشغيل طاقم لكل عنصر في قائمة:
+
+```python Code
+from crewai import Crew, Agent, Task
+
+# Create an agent with code execution enabled
+coding_agent = Agent(
+ role="Python Data Analyst",
+ goal="Analyze data and provide insights using Python",
+ backstory="You are an experienced data analyst with strong Python skills.",
+ allow_code_execution=True
+)
+
+# Create a task that requires code execution
+data_analysis_task = Task(
+ description="Analyze the given dataset and calculate the average age of participants. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="The average age calculated from the dataset"
+)
+
+# Create a crew and add the task
+analysis_crew = Crew(
+ agents=[coding_agent],
+ tasks=[data_analysis_task],
+ verbose=True,
+ memory=False
+)
+
+datasets = [
+ { "ages": [25, 30, 35, 40, 45] },
+ { "ages": [20, 25, 30, 35, 40] },
+ { "ages": [30, 35, 40, 45, 50] }
+]
+
+# Execute the crew
+result = analysis_crew.kickoff_for_each(inputs=datasets)
+```
diff --git a/docs/v1.15.1/ar/learn/litellm-removal-guide.mdx b/docs/v1.15.1/ar/learn/litellm-removal-guide.mdx
new file mode 100644
index 000000000..b0e81d919
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/litellm-removal-guide.mdx
@@ -0,0 +1,358 @@
+---
+title: استخدام CrewAI بدون LiteLLM
+description: كيفية استخدام CrewAI مع التكاملات الأصلية للمزودين وإزالة اعتمادية LiteLLM من مشروعك.
+icon: shield-check
+mode: "wide"
+---
+
+## نظرة عامة
+
+يدعم CrewAI مسارين للاتصال بمزودي LLM:
+
+1. **التكاملات الأصلية** — اتصالات SDK مباشرة مع OpenAI وAnthropic وGoogle Gemini وAzure OpenAI وAWS Bedrock
+2. **LiteLLM كاحتياط** — طبقة ترجمة تدعم أكثر من 100 مزود إضافي
+
+يشرح هذا الدليل كيفية استخدام CrewAI حصرياً مع التكاملات الأصلية للمزودين، مع إزالة أي اعتمادية على LiteLLM.
+
+
+ تم عزل حزمة `litellm` على PyPI بسبب حادث أمني/موثوقية. إذا كنت تعتمد على مزودين يحتاجون LiteLLM، يجب عليك الانتقال إلى التكاملات الأصلية. توفر لك تكاملات CrewAI الأصلية الوظائف الكاملة بدون LiteLLM.
+
+
+## لماذا إزالة LiteLLM؟
+
+- **تقليل سطح الاعتماديات** — حزم أقل تعني مخاطر أقل محتملة في سلسلة التوريد
+- **أداء أفضل** — تتواصل حزم SDK الأصلية مباشرة مع واجهات برمجة تطبيقات المزودين، مما يلغي طبقة الترجمة
+- **تصحيح أخطاء أبسط** — طبقة تجريد واحدة أقل بين كودك والمزود
+- **حجم تثبيت أصغر** — يجلب LiteLLM العديد من الاعتماديات العابرة
+
+## المزودون الأصليون (لا يحتاجون LiteLLM)
+
+هؤلاء المزودون يستخدمون حزم SDK الخاصة بهم ويعملون بدون تثبيت LiteLLM:
+
+
+
+ GPT-4o، GPT-4o-mini، o1، o3-mini، والمزيد.
+ ```bash
+ uv add "crewai[openai]"
+ ```
+
+
+ Claude Sonnet، Claude Haiku، والمزيد.
+ ```bash
+ uv add "crewai[anthropic]"
+ ```
+
+
+ Gemini 2.0 Flash، Gemini 2.0 Pro، والمزيد.
+ ```bash
+ uv add "crewai[gemini]"
+ ```
+
+
+ نماذج OpenAI المستضافة على Azure.
+ ```bash
+ uv add "crewai[azure]"
+ ```
+
+
+ Claude، Llama، Titan، والمزيد عبر AWS.
+ ```bash
+ uv add "crewai[bedrock]"
+ ```
+
+
+
+
+ إذا كنت تستخدم المزودين الأصليين فقط، فلن تحتاج **أبداً** لتثبيت `crewai[litellm]`. حزمة `crewai` الأساسية بالإضافة إلى الإضافة الخاصة بالمزود الذي اخترته هي كل ما تحتاجه.
+
+
+## كيفية التحقق مما إذا كنت تستخدم LiteLLM
+
+### تحقق من سلاسل النماذج الخاصة بك
+
+إذا كان كودك يستخدم بادئات النماذج هذه، فأنت تمرر عبر LiteLLM:
+
+| البادئة | المزود | يستخدم LiteLLM؟ |
+|--------|----------|---------------|
+| `ollama/` | Ollama | ✅ نعم |
+| `groq/` | Groq | ✅ نعم |
+| `together_ai/` | Together AI | ✅ نعم |
+| `mistral/` | Mistral | ✅ نعم |
+| `cohere/` | Cohere | ✅ نعم |
+| `huggingface/` | Hugging Face | ✅ نعم |
+| `openai/` | OpenAI | ❌ أصلي |
+| `anthropic/` | Anthropic | ❌ أصلي |
+| `gemini/` | Google Gemini | ❌ أصلي |
+| `azure/` | Azure OpenAI | ❌ أصلي |
+| `bedrock/` | AWS Bedrock | ❌ أصلي |
+
+### تحقق مما إذا كان LiteLLM مثبتاً
+
+```bash
+# Using pip
+pip show litellm
+
+# Using uv
+uv pip show litellm
+```
+
+إذا أرجع الأمر معلومات الحزمة، فإن LiteLLM مثبت في بيئتك.
+
+### تحقق من اعتمادياتك
+
+انظر إلى ملف `pyproject.toml` الخاص بك بحثاً عن `crewai[litellm]`:
+
+```toml
+# If you see this, you have LiteLLM as a dependency
+dependencies = [
+ "crewai[litellm]>=0.100.0", # ← Uses LiteLLM
+]
+
+# Change to a native provider extra instead
+dependencies = [
+ "crewai[openai]>=0.100.0", # ← Native, no LiteLLM
+]
+```
+
+## دليل الانتقال
+
+### الخطوة 1: حدد مزودك الحالي
+
+ابحث عن جميع استدعاءات `LLM()` وسلاسل النماذج في كودك:
+
+```bash
+# Search your codebase for LLM model strings
+grep -r "LLM(" --include="*.py" .
+grep -r "llm=" --include="*.yaml" .
+grep -r "llm:" --include="*.yaml" .
+```
+
+### الخطوة 2: انتقل إلى مزود أصلي
+
+
+
+ ```python
+ from crewai import LLM
+
+ # Before (LiteLLM):
+ # llm = LLM(model="groq/llama-3.1-70b")
+
+ # After (Native):
+ llm = LLM(model="openai/gpt-4o")
+ ```
+
+ ```bash
+ # Install
+ uv add "crewai[openai]"
+
+ # Set your API key
+ export OPENAI_API_KEY="sk-..."
+ ```
+
+
+ ```python
+ from crewai import LLM
+
+ # Before (LiteLLM):
+ # llm = LLM(model="together_ai/meta-llama/Meta-Llama-3.1-70B")
+
+ # After (Native):
+ llm = LLM(model="anthropic/claude-sonnet-4-20250514")
+ ```
+
+ ```bash
+ # Install
+ uv add "crewai[anthropic]"
+
+ # Set your API key
+ export ANTHROPIC_API_KEY="sk-ant-..."
+ ```
+
+
+ ```python
+ from crewai import LLM
+
+ # Before (LiteLLM):
+ # llm = LLM(model="mistral/mistral-large-latest")
+
+ # After (Native):
+ llm = LLM(model="gemini/gemini-2.0-flash")
+ ```
+
+ ```bash
+ # Install
+ uv add "crewai[gemini]"
+
+ # Set your API key
+ export GEMINI_API_KEY="..."
+ ```
+
+
+ ```python
+ from crewai import LLM
+
+ # After (Native):
+ llm = LLM(
+ model="azure/your-deployment-name",
+ api_key="your-azure-api-key",
+ base_url="https://your-resource.openai.azure.com",
+ api_version="2024-06-01"
+ )
+ ```
+
+ ```bash
+ # Install
+ uv add "crewai[azure]"
+ ```
+
+
+ ```python
+ from crewai import LLM
+
+ # After (Native):
+ llm = LLM(
+ model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
+ aws_region_name="us-east-1"
+ )
+ ```
+
+ ```bash
+ # Install
+ uv add "crewai[bedrock]"
+
+ # Configure AWS credentials
+ export AWS_ACCESS_KEY_ID="..."
+ export AWS_SECRET_ACCESS_KEY="..."
+ export AWS_DEFAULT_REGION="us-east-1"
+ ```
+
+
+
+### الخطوة 3: الاحتفاظ بـ Ollama بدون LiteLLM
+
+إذا كنت تستخدم Ollama وتريد الاستمرار في استخدامه، يمكنك الاتصال عبر واجهة برمجة تطبيقات Ollama المتوافقة مع OpenAI:
+
+```python
+from crewai import LLM
+
+# Before (LiteLLM):
+# llm = LLM(model="ollama/llama3")
+
+# After (OpenAI-compatible mode, no LiteLLM needed):
+llm = LLM(
+ model="openai/llama3",
+ base_url="http://localhost:11434/v1",
+ api_key="ollama" # Ollama doesn't require a real API key
+)
+```
+
+
+ العديد من خوادم الاستدلال المحلية (Ollama، vLLM، LM Studio، llama.cpp) توفر واجهة برمجة تطبيقات متوافقة مع OpenAI. يمكنك استخدام بادئة `openai/` مع `base_url` مخصص للاتصال بأي منها بشكل أصلي.
+
+
+### الخطوة 4: تحديث إعدادات YAML
+
+```yaml
+# Before (LiteLLM providers):
+researcher:
+ role: Research Specialist
+ goal: Conduct research
+ backstory: A dedicated researcher
+ llm: groq/llama-3.1-70b # ← LiteLLM
+
+# After (Native provider):
+researcher:
+ role: Research Specialist
+ goal: Conduct research
+ backstory: A dedicated researcher
+ llm: openai/gpt-4o # ← Native
+```
+
+### الخطوة 5: إزالة LiteLLM
+
+بمجرد انتقال جميع مراجع النماذج الخاصة بك:
+
+```bash
+# Remove litellm from your project
+uv remove litellm
+
+# Or if using pip
+pip uninstall litellm
+
+# Update your pyproject.toml: change crewai[litellm] to your provider extra
+# e.g., crewai[openai], crewai[anthropic], crewai[gemini]
+```
+
+### الخطوة 6: التحقق
+
+شغّل مشروعك وتأكد من أن كل شيء يعمل:
+
+```bash
+# Run your crew
+crewai run
+
+# Or run your tests
+uv run pytest
+```
+
+## مرجع سريع: خريطة سلاسل النماذج
+
+فيما يلي مسارات الانتقال الشائعة من المزودين المعتمدين على LiteLLM إلى المزودين الأصليين:
+
+```python
+from crewai import LLM
+
+# ─── LiteLLM providers → Native alternatives ────────────────────
+
+# Groq → OpenAI or Anthropic
+# llm = LLM(model="groq/llama-3.1-70b")
+llm = LLM(model="openai/gpt-4o-mini") # Fast & affordable
+llm = LLM(model="anthropic/claude-haiku-3-5") # Fast & affordable
+
+# Together AI → OpenAI or Gemini
+# llm = LLM(model="together_ai/meta-llama/Meta-Llama-3.1-70B")
+llm = LLM(model="openai/gpt-4o") # High quality
+llm = LLM(model="gemini/gemini-2.0-flash") # Fast & capable
+
+# Mistral → Anthropic or OpenAI
+# llm = LLM(model="mistral/mistral-large-latest")
+llm = LLM(model="anthropic/claude-sonnet-4-20250514") # High quality
+
+# Ollama → OpenAI-compatible (keep using local models)
+# llm = LLM(model="ollama/llama3")
+llm = LLM(
+ model="openai/llama3",
+ base_url="http://localhost:11434/v1",
+ api_key="ollama"
+)
+```
+
+## الأسئلة الشائعة
+
+
+
+ لا، إذا كنت تستخدم أحد المزودين الخمسة المدعومين أصلياً (OpenAI، Anthropic، Gemini، Azure، Bedrock). تدعم هذه التكاملات الأصلية جميع ميزات CrewAI بما في ذلك البث واستدعاء الأدوات والمخرجات المنظمة والمزيد. ستفقد فقط الوصول إلى المزودين المتاحين حصرياً عبر LiteLLM (مثل Groq وTogether AI وMistral كمزودين من الدرجة الأولى).
+
+
+ نعم. ثبّت إضافات متعددة واستخدم مزودين مختلفين لوكلاء مختلفين:
+ ```bash
+ uv add "crewai[openai,anthropic,gemini]"
+ ```
+ ```python
+ researcher = Agent(llm="openai/gpt-4o", ...)
+ writer = Agent(llm="anthropic/claude-sonnet-4-20250514", ...)
+ ```
+
+
+ بغض النظر عن حالة العزل، فإن تقليل سطح اعتمادياتك يُعد ممارسة أمنية جيدة. إذا كنت تحتاج فقط مزودين يدعمهم CrewAI أصلياً، فلا يوجد سبب لإبقاء LiteLLM مثبتاً.
+
+
+ يستخدم المزودون الأصليون نفس متغيرات البيئة التي اعتدت عليها. لا حاجة لتغييرات على `OPENAI_API_KEY` أو `ANTHROPIC_API_KEY` أو `GEMINI_API_KEY` وغيرها.
+
+
+
+## موارد ذات صلة
+
+- [اتصالات LLM](/ar/learn/llm-connections) — الدليل الكامل لربط CrewAI مع أي LLM
+- [مفاهيم LLM](/ar/concepts/llms) — فهم نماذج اللغة الكبيرة في CrewAI
+- [دليل اختيار LLM](/ar/learn/llm-selection-guide) — اختيار النموذج المناسب لحالة استخدامك
diff --git a/docs/v1.15.1/ar/learn/llm-connections.mdx b/docs/v1.15.1/ar/learn/llm-connections.mdx
new file mode 100644
index 000000000..d748d115e
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/llm-connections.mdx
@@ -0,0 +1,214 @@
+---
+title: الاتصال بأي LLM
+description: دليل شامل لدمج CrewAI مع نماذج اللغة الكبيرة المختلفة (LLMs) باستخدام LiteLLM، بما في ذلك المزودون المدعومون وخيارات الإعداد.
+icon: brain-circuit
+mode: "wide"
+---
+
+## ربط CrewAI بنماذج اللغة الكبيرة
+
+يتصل CrewAI بنماذج اللغة الكبيرة من خلال تكاملات SDK الأصلية لأكثر المزودين شيوعاً (OpenAI وAnthropic وGoogle Gemini وAzure وAWS Bedrock)، ويستخدم LiteLLM كاحتياط مرن لجميع المزودين الآخرين.
+
+
+ افتراضياً، يستخدم CrewAI نموذج `gpt-4o-mini`. يتم تحديد ذلك بواسطة متغير البيئة `OPENAI_MODEL_NAME`، الذي يكون قيمته الافتراضية "gpt-4o-mini" إذا لم يتم تعيينه.
+ يمكنك بسهولة إعداد وكلائك لاستخدام نموذج أو مزود مختلف كما هو موضح في هذا الدليل.
+
+
+## المزودون المدعومون
+
+يدعم LiteLLM مجموعة واسعة من المزودين، بما في ذلك على سبيل المثال لا الحصر:
+
+- OpenAI
+- Anthropic
+- Google (Vertex AI, Gemini)
+- Azure OpenAI
+- AWS (Bedrock, SageMaker)
+- Cohere
+- VoyageAI
+- Hugging Face
+- Ollama
+- Mistral AI
+- Replicate
+- Together AI
+- AI21
+- Cloudflare Workers AI
+- DeepInfra
+- Groq
+- SambaNova
+- Nebius AI Studio
+- [NVIDIA NIMs](https://docs.api.nvidia.com/nim/reference/models-1)
+- والمزيد!
+
+للحصول على قائمة كاملة ومحدثة بالمزودين المدعومين، يرجى الرجوع إلى [وثائق مزودي LiteLLM](https://docs.litellm.ai/docs/providers).
+
+
+ لاستخدام أي مزود غير مغطى بتكامل أصلي، أضف LiteLLM كاعتمادية لمشروعك:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+ يستخدم المزودون الأصليون (OpenAI، Anthropic، Google Gemini، Azure، AWS Bedrock) إضافات SDK الخاصة بهم — راجع [أمثلة إعداد المزودين](/ar/concepts/llms#provider-configuration-examples).
+
+
+## تغيير نموذج اللغة الكبير
+
+لاستخدام LLM مختلف مع وكلاء CrewAI، لديك عدة خيارات:
+
+
+
+ مرر اسم النموذج كسلسلة نصية عند تهيئة الوكيل:
+
+ ```python Code
+ from crewai import Agent
+
+ # Using OpenAI's GPT-4
+ openai_agent = Agent(
+ role='OpenAI Expert',
+ goal='Provide insights using GPT-4',
+ backstory="An AI assistant powered by OpenAI's latest model.",
+ llm='gpt-4'
+ )
+
+ # Using Anthropic's Claude
+ claude_agent = Agent(
+ role='Anthropic Expert',
+ goal='Analyze data using Claude',
+ backstory="An AI assistant leveraging Anthropic's language model.",
+ llm='claude-2'
+ )
+ ```
+
+
+
+ لمزيد من الإعداد التفصيلي، استخدم فئة LLM:
+
+ ```python Code
+ from crewai import Agent, LLM
+
+ llm = LLM(
+ model="gpt-4",
+ temperature=0.7,
+ base_url="https://api.openai.com/v1",
+ api_key="your-api-key-here"
+ )
+
+ agent = Agent(
+ role='Customized LLM Expert',
+ goal='Provide tailored responses',
+ backstory="An AI assistant with custom LLM settings.",
+ llm=llm
+ )
+ ```
+
+
+
+
+## خيارات الإعداد
+
+عند إعداد LLM لوكيلك، يمكنك الوصول إلى مجموعة واسعة من المعاملات:
+
+| المعامل | النوع | الوصف |
+|:----------|:-----:|:-------------|
+| **model** | `str` | اسم النموذج المراد استخدامه (مثل "gpt-4"، "claude-2") |
+| **temperature** | `float` | يتحكم في العشوائية في المخرجات (0.0 إلى 1.0) |
+| **max_tokens** | `int` | الحد الأقصى لعدد الرموز المولدة |
+| **top_p** | `float` | يتحكم في تنوع المخرجات (0.0 إلى 1.0) |
+| **frequency_penalty** | `float` | يعاقب الرموز الجديدة بناءً على تكرارها في النص حتى الآن |
+| **presence_penalty** | `float` | يعاقب الرموز الجديدة بناءً على وجودها في النص حتى الآن |
+| **stop** | `str`, `List[str]` | تسلسل(ات) لإيقاف التوليد |
+| **base_url** | `str` | عنوان URL الأساسي لنقطة نهاية API |
+| **api_key** | `str` | مفتاح API الخاص بك للمصادقة |
+
+للحصول على قائمة كاملة بالمعاملات وأوصافها، راجع وثائق فئة LLM.
+
+## الاتصال بنماذج LLM المتوافقة مع OpenAI
+
+يمكنك الاتصال بنماذج LLM المتوافقة مع OpenAI باستخدام متغيرات البيئة أو عن طريق تعيين خصائص محددة في فئة LLM:
+
+
+
+
+ ```python Generic
+ import os
+
+ os.environ["OPENAI_API_KEY"] = "your-api-key"
+ os.environ["OPENAI_API_BASE"] = "https://api.your-provider.com/v1"
+ os.environ["OPENAI_MODEL_NAME"] = "your-model-name"
+ ```
+
+ ```python Google
+ import os
+
+ # Example using Gemini's OpenAI-compatible API.
+ os.environ["OPENAI_API_KEY"] = "your-gemini-key" # Should start with AIza...
+ os.environ["OPENAI_API_BASE"] = "https://generativelanguage.googleapis.com/v1beta/openai/"
+ os.environ["OPENAI_MODEL_NAME"] = "openai/gemini-2.0-flash" # Add your Gemini model here, under openai/
+ ```
+
+
+
+
+ ```python Generic
+ llm = LLM(
+ model="custom-model-name",
+ api_key="your-api-key",
+ base_url="https://api.your-provider.com/v1"
+ )
+ agent = Agent(llm=llm, ...)
+ ```
+
+ ```python Google
+ # Example using Gemini's OpenAI-compatible API
+ llm = LLM(
+ model="openai/gemini-2.0-flash",
+ base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
+ api_key="your-gemini-key", # Should start with AIza...
+ )
+ agent = Agent(llm=llm, ...)
+ ```
+
+
+
+
+## استخدام النماذج المحلية مع Ollama
+
+للنماذج المحلية مثل تلك التي يوفرها Ollama:
+
+
+
+ [انقر هنا لتحميل وتثبيت Ollama](https://ollama.com/download)
+
+
+ على سبيل المثال، شغّل `ollama pull llama3.2` لتحميل النموذج.
+
+
+
+ ```python Code
+ agent = Agent(
+ role='Local AI Expert',
+ goal='Process information using a local model',
+ backstory="An AI assistant running on local hardware.",
+ llm=LLM(model="ollama/llama3.2", base_url="http://localhost:11434")
+ )
+ ```
+
+
+
+
+## تغيير عنوان URL الأساسي لـ API
+
+يمكنك تغيير عنوان URL الأساسي لـ API لأي مزود LLM عن طريق تعيين معامل `base_url`:
+
+```python Code
+llm = LLM(
+ model="custom-model-name",
+ base_url="https://api.your-provider.com/v1",
+ api_key="your-api-key"
+)
+agent = Agent(llm=llm, ...)
+```
+
+هذا مفيد بشكل خاص عند العمل مع واجهات برمجة تطبيقات متوافقة مع OpenAI أو عندما تحتاج إلى تحديد نقطة نهاية مختلفة للمزود الذي اخترته.
+
+## الخاتمة
+
+من خلال الاستفادة من LiteLLM، يوفر CrewAI تكاملاً سلساً مع مجموعة واسعة من نماذج اللغة الكبيرة. تتيح لك هذه المرونة اختيار النموذج الأنسب لاحتياجاتك المحددة، سواء كنت تعطي الأولوية للأداء أو كفاءة التكلفة أو النشر المحلي. تذكر الرجوع إلى [وثائق LiteLLM](https://docs.litellm.ai/docs/) للحصول على أحدث المعلومات حول النماذج المدعومة وخيارات الإعداد.
diff --git a/docs/v1.15.1/ar/learn/llm-hooks.mdx b/docs/v1.15.1/ar/learn/llm-hooks.mdx
new file mode 100644
index 000000000..445f99349
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/llm-hooks.mdx
@@ -0,0 +1,427 @@
+---
+title: خطافات استدعاء LLM
+description: تعلم كيفية استخدام خطافات استدعاء LLM لاعتراض وتعديل والتحكم في تفاعلات نماذج اللغة في CrewAI
+mode: "wide"
+---
+
+توفر خطافات استدعاء LLM تحكماً دقيقاً في تفاعلات نماذج اللغة أثناء تنفيذ الوكيل. تتيح لك هذه الخطافات اعتراض استدعاءات LLM وتعديل المطالبات وتحويل الاستجابات وتنفيذ بوابات الموافقة وإضافة تسجيل أو مراقبة مخصصة.
+
+## نظرة عامة
+
+تُنفذ خطافات LLM في نقطتين حرجتين:
+- **قبل استدعاء LLM**: تعديل الرسائل، التحقق من المدخلات، أو حظر التنفيذ
+- **بعد استدعاء LLM**: تحويل الاستجابات، تنقية المخرجات، أو تعديل سجل المحادثة
+
+## أنواع الخطافات
+
+### خطافات ما قبل استدعاء LLM
+
+تُنفذ قبل كل استدعاء LLM، ويمكن لهذه الخطافات:
+- فحص وتعديل الرسائل المرسلة إلى LLM
+- حظر تنفيذ LLM بناءً على شروط
+- تنفيذ تحديد معدل أو بوابات موافقة
+- إضافة سياق أو رسائل نظام
+- تسجيل تفاصيل الطلب
+
+**التوقيع:**
+```python
+def before_hook(context: LLMCallHookContext) -> bool | None:
+ # Return False to block execution
+ # Return True or None to allow execution
+ ...
+```
+
+### خطافات ما بعد استدعاء LLM
+
+تُنفذ بعد كل استدعاء LLM، ويمكن لهذه الخطافات:
+- تعديل أو تنقية استجابات LLM
+- إضافة بيانات وصفية أو تنسيق
+- تسجيل تفاصيل الاستجابة
+- تحديث سجل المحادثة
+- تنفيذ تصفية المحتوى
+
+**التوقيع:**
+```python
+def after_hook(context: LLMCallHookContext) -> str | None:
+ # Return modified response string
+ # Return None to keep original response
+ ...
+```
+
+## سياق خطاف LLM
+
+يوفر كائن `LLMCallHookContext` وصولاً شاملاً لحالة التنفيذ:
+
+```python
+class LLMCallHookContext:
+ executor: CrewAgentExecutor # Full executor reference
+ messages: list # Mutable message list
+ agent: Agent # Current agent
+ task: Task # Current task
+ crew: Crew # Crew instance
+ llm: BaseLLM # LLM instance
+ iterations: int # Current iteration count
+ response: str | None # LLM response (after hooks only)
+```
+
+### تعديل الرسائل
+
+**مهم:** قم دائماً بتعديل الرسائل في مكانها:
+
+```python
+# ✅ Correct - modify in-place
+def add_context(context: LLMCallHookContext) -> None:
+ context.messages.append({"role": "system", "content": "Be concise"})
+
+# ❌ Wrong - replaces list reference
+def wrong_approach(context: LLMCallHookContext) -> None:
+ context.messages = [{"role": "system", "content": "Be concise"}]
+```
+
+## طرق التسجيل
+
+### 1. تسجيل الخطافات العامة
+
+تسجيل خطافات تنطبق على جميع استدعاءات LLM عبر جميع الأطقم:
+
+```python
+from crewai.hooks import register_before_llm_call_hook, register_after_llm_call_hook
+
+def log_llm_call(context):
+ print(f"LLM call by {context.agent.role} at iteration {context.iterations}")
+ return None # Allow execution
+
+register_before_llm_call_hook(log_llm_call)
+```
+
+### 2. التسجيل باستخدام المزخرفات
+
+استخدم المزخرفات لصياغة أنظف:
+
+```python
+from crewai.hooks import before_llm_call, after_llm_call
+
+@before_llm_call
+def validate_iteration_count(context):
+ if context.iterations > 10:
+ print("⚠️ Exceeded maximum iterations")
+ return False # Block execution
+ return None
+
+@after_llm_call
+def sanitize_response(context):
+ if context.response and "API_KEY" in context.response:
+ return context.response.replace("API_KEY", "[REDACTED]")
+ return None
+```
+
+### 3. خطافات نطاق الطاقم
+
+تسجيل خطافات لمثيل طاقم محدد:
+
+```python
+@CrewBase
+class MyProjCrew:
+ @before_llm_call_crew
+ def validate_inputs(self, context):
+ # Only applies to this crew
+ if context.iterations == 0:
+ print(f"Starting task: {context.task.description}")
+ return None
+
+ @after_llm_call_crew
+ def log_responses(self, context):
+ # Crew-specific response logging
+ print(f"Response length: {len(context.response)}")
+ return None
+
+ @crew
+ def crew(self) -> Crew:
+ return Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ verbose=True
+ )
+```
+
+## حالات الاستخدام الشائعة
+
+### 1. تحديد التكرارات
+
+```python
+@before_llm_call
+def limit_iterations(context: LLMCallHookContext) -> bool | None:
+ max_iterations = 15
+ if context.iterations > max_iterations:
+ print(f"⛔ Blocked: Exceeded {max_iterations} iterations")
+ return False # Block execution
+ return None
+```
+
+### 2. بوابة الموافقة البشرية
+
+```python
+@before_llm_call
+def require_approval(context: LLMCallHookContext) -> bool | None:
+ if context.iterations > 5:
+ response = context.request_human_input(
+ prompt=f"Iteration {context.iterations}: Approve LLM call?",
+ default_message="Press Enter to approve, or type 'no' to block:"
+ )
+ if response.lower() == "no":
+ print("🚫 LLM call blocked by user")
+ return False
+ return None
+```
+
+### 3. إضافة سياق النظام
+
+```python
+@before_llm_call
+def add_guardrails(context: LLMCallHookContext) -> None:
+ # Add safety guidelines to every LLM call
+ context.messages.append({
+ "role": "system",
+ "content": "Ensure responses are factual and cite sources when possible."
+ })
+ return None
+```
+
+### 4. تنقية الاستجابات
+
+```python
+@after_llm_call
+def sanitize_sensitive_data(context: LLMCallHookContext) -> str | None:
+ if not context.response:
+ return None
+
+ # Remove sensitive patterns
+ import re
+ sanitized = context.response
+ sanitized = re.sub(r'\b\d{3}-\d{2}-\d{4}\b', '[SSN-REDACTED]', sanitized)
+ sanitized = re.sub(r'\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b', '[CARD-REDACTED]', sanitized)
+
+ return sanitized
+```
+
+### 5. تتبع التكاليف
+
+```python
+import tiktoken
+
+@before_llm_call
+def track_token_usage(context: LLMCallHookContext) -> None:
+ encoding = tiktoken.get_encoding("cl100k_base")
+ total_tokens = sum(
+ len(encoding.encode(msg.get("content", "")))
+ for msg in context.messages
+ )
+ print(f"📊 Input tokens: ~{total_tokens}")
+ return None
+
+@after_llm_call
+def track_response_tokens(context: LLMCallHookContext) -> None:
+ if context.response:
+ encoding = tiktoken.get_encoding("cl100k_base")
+ tokens = len(encoding.encode(context.response))
+ print(f"📊 Response tokens: ~{tokens}")
+ return None
+```
+
+### 6. تسجيل التصحيح
+
+```python
+@before_llm_call
+def debug_request(context: LLMCallHookContext) -> None:
+ print(f"""
+ 🔍 LLM Call Debug:
+ - Agent: {context.agent.role}
+ - Task: {context.task.description[:50]}...
+ - Iteration: {context.iterations}
+ - Message Count: {len(context.messages)}
+ - Last Message: {context.messages[-1] if context.messages else 'None'}
+ """)
+ return None
+
+@after_llm_call
+def debug_response(context: LLMCallHookContext) -> None:
+ if context.response:
+ print(f"✅ Response Preview: {context.response[:100]}...")
+ return None
+```
+
+## إدارة الخطافات
+
+### إلغاء تسجيل الخطافات
+
+```python
+from crewai.hooks import (
+ unregister_before_llm_call_hook,
+ unregister_after_llm_call_hook
+)
+
+# Unregister specific hook
+def my_hook(context):
+ ...
+
+register_before_llm_call_hook(my_hook)
+# Later...
+unregister_before_llm_call_hook(my_hook) # Returns True if found
+```
+
+### مسح الخطافات
+
+```python
+from crewai.hooks import (
+ clear_before_llm_call_hooks,
+ clear_after_llm_call_hooks,
+ clear_all_llm_call_hooks
+)
+
+# Clear specific hook type
+count = clear_before_llm_call_hooks()
+print(f"Cleared {count} before hooks")
+
+# Clear all LLM hooks
+before_count, after_count = clear_all_llm_call_hooks()
+print(f"Cleared {before_count} before and {after_count} after hooks")
+```
+
+### عرض الخطافات المسجلة
+
+```python
+from crewai.hooks import (
+ get_before_llm_call_hooks,
+ get_after_llm_call_hooks
+)
+
+# Get current hooks
+before_hooks = get_before_llm_call_hooks()
+after_hooks = get_after_llm_call_hooks()
+
+print(f"Registered: {len(before_hooks)} before, {len(after_hooks)} after")
+```
+
+## أنماط متقدمة
+
+### تنفيذ خطاف مشروط
+
+```python
+@before_llm_call
+def conditional_blocking(context: LLMCallHookContext) -> bool | None:
+ # Only block for specific agents
+ if context.agent.role == "researcher" and context.iterations > 10:
+ return False
+
+ # Only block for specific tasks
+ if "sensitive" in context.task.description.lower() and context.iterations > 5:
+ return False
+
+ return None
+```
+
+### تعديلات واعية بالسياق
+
+```python
+@before_llm_call
+def adaptive_prompting(context: LLMCallHookContext) -> None:
+ # Add different context based on iteration
+ if context.iterations == 0:
+ context.messages.append({
+ "role": "system",
+ "content": "Start with a high-level overview."
+ })
+ elif context.iterations > 3:
+ context.messages.append({
+ "role": "system",
+ "content": "Focus on specific details and provide examples."
+ })
+ return None
+```
+
+### ربط الخطافات
+
+```python
+# Multiple hooks execute in registration order
+
+@before_llm_call
+def first_hook(context):
+ print("1. First hook executed")
+ return None
+
+@before_llm_call
+def second_hook(context):
+ print("2. Second hook executed")
+ return None
+
+@before_llm_call
+def blocking_hook(context):
+ if context.iterations > 10:
+ print("3. Blocking hook - execution stopped")
+ return False # Subsequent hooks won't execute
+ print("3. Blocking hook - execution allowed")
+ return None
+```
+
+## أفضل الممارسات
+
+1. **اجعل الخطافات مركزة**: يجب أن يكون لكل خطاف مسؤولية واحدة
+2. **تجنب الحسابات الثقيلة**: تُنفذ الخطافات في كل استدعاء LLM
+3. **تعامل مع الأخطاء بأناقة**: استخدم try-except لمنع فشل الخطافات من كسر التنفيذ
+4. **استخدم تلميحات الأنواع**: استفد من `LLMCallHookContext` لدعم أفضل في بيئة التطوير
+5. **وثّق سلوك الخطاف**: خاصة لشروط الحظر
+6. **اختبر الخطافات بشكل مستقل**: اختبر الخطافات وحدوياً قبل الاستخدام في الإنتاج
+7. **امسح الخطافات في الاختبارات**: استخدم `clear_all_llm_call_hooks()` بين تشغيلات الاختبار
+8. **عدّل في المكان**: قم دائماً بتعديل `context.messages` في مكانها، ولا تستبدلها
+
+## معالجة الأخطاء
+
+```python
+@before_llm_call
+def safe_hook(context: LLMCallHookContext) -> bool | None:
+ try:
+ # Your hook logic
+ if some_condition:
+ return False
+ except Exception as e:
+ print(f"⚠️ Hook error: {e}")
+ # Decide: allow or block on error
+ return None # Allow execution despite error
+```
+
+## أمان الأنواع
+
+```python
+from crewai.hooks import LLMCallHookContext, BeforeLLMCallHookType, AfterLLMCallHookType
+
+# Explicit type annotations
+def my_before_hook(context: LLMCallHookContext) -> bool | None:
+ return None
+
+def my_after_hook(context: LLMCallHookContext) -> str | None:
+ return None
+
+# Type-safe registration
+register_before_llm_call_hook(my_before_hook)
+register_after_llm_call_hook(my_after_hook)
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### الخطاف لا يُنفذ
+- تحقق من أن الخطاف مسجل قبل تنفيذ الطاقم
+- تحقق مما إذا كان خطاف سابق أرجع `False` (يحظر الخطافات اللاحقة)
+- تأكد من أن توقيع الخطاف يطابق النوع المتوقع
+
+### تعديلات الرسائل لا تستمر
+- استخدم التعديلات في المكان: `context.messages.append()`
+- لا تستبدل القائمة: `context.messages = []`
+
+### تعديلات الاستجابة لا تعمل
+- أرجع السلسلة النصية المعدلة من خطافات ما بعد
+- إرجاع `None` يحتفظ بالاستجابة الأصلية
+
+## الخاتمة
+
+توفر خطافات استدعاء LLM إمكانيات قوية للتحكم في تفاعلات نماذج اللغة ومراقبتها في CrewAI. استخدمها لتنفيذ حواجز الأمان وبوابات الموافقة والتسجيل وتتبع التكاليف وتنقية الاستجابات. مع معالجة الأخطاء المناسبة وأمان الأنواع، تُمكّن الخطافات أنظمة وكلاء قوية وجاهزة للإنتاج.
diff --git a/docs/v1.15.1/ar/learn/llm-selection-guide.mdx b/docs/v1.15.1/ar/learn/llm-selection-guide.mdx
new file mode 100644
index 000000000..f71865192
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/llm-selection-guide.mdx
@@ -0,0 +1,821 @@
+---
+title: "دليل اختيار LLM الاستراتيجي"
+description: "إطار عمل استراتيجي لاختيار نموذج اللغة الكبير المناسب لوكلاء الذكاء الاصطناعي في CrewAI وكتابة تعريفات فعالة للمهام والوكلاء"
+icon: "brain-circuit"
+mode: "wide"
+---
+
+## نهج CrewAI في اختيار LLM
+
+بدلاً من توصيات نماذج محددة، ندعو إلى **إطار تفكير** يساعدك على اتخاذ قرارات مستنيرة بناءً على حالة استخدامك المحددة وقيودك ومتطلباتك. يتطور مشهد LLM بسرعة، مع ظهور نماذج جديدة بانتظام وتحديث النماذج الحالية بشكل متكرر. الأهم هو تطوير نهج منظم للتقييم يبقى ذا صلة بغض النظر عن النماذج المتاحة تحديداً.
+
+
+ يركز هذا الدليل على التفكير الاستراتيجي بدلاً من توصيات نماذج محددة،
+ حيث يتطور مشهد LLM بسرعة.
+
+
+## إطار القرار السريع
+
+
+
+ ابدأ بفهم عميق لما تتطلبه مهامك فعلاً. ضع في الاعتبار التعقيد المعرفي
+ المطلوب وعمق الاستدلال اللازم وتنسيق المخرجات المتوقعة وحجم السياق الذي
+ سيحتاج النموذج لمعالجته. سيوجه هذا التحليل الأساسي كل قرار لاحق.
+
+
+ بمجرد فهم متطلباتك، اربطها بنقاط قوة النماذج. تتفوق عائلات النماذج
+ المختلفة في أنواع مختلفة من العمل؛ بعضها محسّن للاستدلال والتحليل وبعضها
+ للإبداع وتوليد المحتوى وبعضها للسرعة والكفاءة.
+
+
+ ضع في حسبانك قيودك التشغيلية الواقعية بما في ذلك قيود الميزانية ومتطلبات
+ زمن الاستجابة واحتياجات خصوصية البيانات وقدرات البنية التحتية. قد لا يكون
+ النموذج الأفضل نظرياً هو الخيار الأفضل عملياً لوضعك.
+
+
+ ابدأ بنماذج موثوقة ومفهومة جيداً وحسّن بناءً على الأداء الفعلي في حالة
+ استخدامك المحددة. غالباً ما تختلف النتائج الواقعية عن المعايير النظرية، لذا
+ فإن الاختبار التجريبي ضروري.
+
+
+
+## Core Selection Framework
+
+### a. Task-First Thinking
+
+The most critical step in LLM selection is understanding what your task actually demands. Too often, teams select models based on general reputation or benchmark scores without carefully analyzing their specific requirements. This approach leads to either over-engineering simple tasks with expensive, complex models, or under-powering sophisticated work with models that lack the necessary capabilities.
+
+
+
+ - **Simple Tasks** represent the majority of everyday AI work and include basic instruction following, straightforward data processing, and simple formatting operations. These tasks typically have clear inputs and outputs with minimal ambiguity. The cognitive load is low, and the model primarily needs to follow explicit instructions rather than engage in complex reasoning.
+
+ - **Complex Tasks** require multi-step reasoning, strategic thinking, and the ability to handle ambiguous or incomplete information. These might involve analyzing multiple data sources, developing comprehensive strategies, or solving problems that require breaking down into smaller components. The model needs to maintain context across multiple reasoning steps and often must make inferences that aren't explicitly stated.
+
+ - **Creative Tasks** demand a different type of cognitive capability focused on generating novel, engaging, and contextually appropriate content. This includes storytelling, marketing copy creation, and creative problem-solving. The model needs to understand nuance, tone, and audience while producing content that feels authentic and engaging rather than formulaic.
+
+
+
+
+ - **Structured Data** tasks require precision and consistency in format adherence. When working with JSON, XML, or database formats, the model must reliably produce syntactically correct output that can be programmatically processed. These tasks often have strict validation requirements and little tolerance for format errors, making reliability more important than creativity.
+
+ - **Creative Content** outputs demand a balance of technical competence and creative flair. The model needs to understand audience, tone, and brand voice while producing content that engages readers and achieves specific communication goals. Quality here is often subjective and requires models that can adapt their writing style to different contexts and purposes.
+
+ - **Technical Content** sits between structured data and creative content, requiring both precision and clarity. Documentation, code generation, and technical analysis need to be accurate and comprehensive while remaining accessible to the intended audience. The model must understand complex technical concepts and communicate them effectively.
+
+
+
+
+ - **Short Context** scenarios involve focused, immediate tasks where the model needs to process limited information quickly. These are often transactional interactions where speed and efficiency matter more than deep understanding. The model doesn't need to maintain extensive conversation history or process large documents.
+
+ - **Long Context** requirements emerge when working with substantial documents, extended conversations, or complex multi-part tasks. The model needs to maintain coherence across thousands of tokens while referencing earlier information accurately. This capability becomes crucial for document analysis, comprehensive research, and sophisticated dialogue systems.
+
+ - **Very Long Context** scenarios push the boundaries of what's currently possible, involving massive document processing, extensive research synthesis, or complex multi-session interactions. These use cases require models specifically designed for extended context handling and often involve trade-offs between context length and processing speed.
+
+
+
+
+### b. Model Capability Mapping
+
+Understanding model capabilities requires looking beyond marketing claims and benchmark scores to understand the fundamental strengths and limitations of different model architectures and training approaches.
+
+
+
+ Reasoning models represent a specialized category designed specifically for complex, multi-step thinking tasks. These models excel when problems require careful analysis, strategic planning, or systematic problem decomposition. They typically employ techniques like chain-of-thought reasoning or tree-of-thought processing to work through complex problems step by step.
+
+ The strength of reasoning models lies in their ability to maintain logical consistency across extended reasoning chains and to break down complex problems into manageable components. They're particularly valuable for strategic planning, complex analysis, and situations where the quality of reasoning matters more than speed of response.
+
+ However, reasoning models often come with trade-offs in terms of speed and cost. They may also be less suitable for creative tasks or simple operations where their sophisticated reasoning capabilities aren't needed. Consider these models when your tasks involve genuine complexity that benefits from systematic, step-by-step analysis.
+
+
+
+
+ General purpose models offer the most balanced approach to LLM selection, providing solid performance across a wide range of tasks without extreme specialization in any particular area. These models are trained on diverse datasets and optimized for versatility rather than peak performance in specific domains.
+
+ The primary advantage of general purpose models is their reliability and predictability across different types of work. They handle most standard business tasks competently, from research and analysis to content creation and data processing. This makes them excellent choices for teams that need consistent performance across varied workflows.
+
+ While general purpose models may not achieve the peak performance of specialized alternatives in specific domains, they offer operational simplicity and reduced complexity in model management. They're often the best starting point for new projects, allowing teams to understand their specific needs before potentially optimizing with more specialized models.
+
+
+
+
+ Fast and efficient models prioritize speed, cost-effectiveness, and resource efficiency over sophisticated reasoning capabilities. These models are optimized for high-throughput scenarios where quick responses and low operational costs are more important than nuanced understanding or complex reasoning.
+
+ These models excel in scenarios involving routine operations, simple data processing, function calling, and high-volume tasks where the cognitive requirements are relatively straightforward. They're particularly valuable for applications that need to process many requests quickly or operate within tight budget constraints.
+
+ The key consideration with efficient models is ensuring that their capabilities align with your task requirements. While they can handle many routine operations effectively, they may struggle with tasks requiring nuanced understanding, complex reasoning, or sophisticated content generation. They're best used for well-defined, routine operations where speed and cost matter more than sophistication.
+
+
+
+
+ Creative models are specifically optimized for content generation, writing quality, and creative thinking tasks. These models typically excel at understanding nuance, tone, and style while producing engaging, contextually appropriate content that feels natural and authentic.
+
+ The strength of creative models lies in their ability to adapt writing style to different audiences, maintain consistent voice and tone, and generate content that engages readers effectively. They often perform better on tasks involving storytelling, marketing copy, brand communications, and other content where creativity and engagement are primary goals.
+
+ When selecting creative models, consider not just their ability to generate text, but their understanding of audience, context, and purpose. The best creative models can adapt their output to match specific brand voices, target different audience segments, and maintain consistency across extended content pieces.
+
+
+
+
+ Open source models offer unique advantages in terms of cost control, customization potential, data privacy, and deployment flexibility. These models can be run locally or on private infrastructure, providing complete control over data handling and model behavior.
+
+ The primary benefits of open source models include elimination of per-token costs, ability to fine-tune for specific use cases, complete data privacy, and independence from external API providers. They're particularly valuable for organizations with strict data privacy requirements, budget constraints, or specific customization needs.
+
+ However, open source models require more technical expertise to deploy and maintain effectively. Teams need to consider infrastructure costs, model management complexity, and the ongoing effort required to keep models updated and optimized. The total cost of ownership may be higher than cloud-based alternatives when factoring in technical overhead.
+
+
+
+
+## Strategic Configuration Patterns
+
+### a. Multi-Model Approach
+
+
+ Use different models for different purposes within the same crew to optimize
+ both performance and cost.
+
+
+The most sophisticated CrewAI implementations often employ multiple models strategically, assigning different models to different agents based on their specific roles and requirements. This approach allows teams to optimize for both performance and cost by using the most appropriate model for each type of work.
+
+Planning agents benefit from reasoning models that can handle complex strategic thinking and multi-step analysis. These agents often serve as the "brain" of the operation, developing strategies and coordinating other agents' work. Content agents, on the other hand, perform best with creative models that excel at writing quality and audience engagement. Processing agents handling routine operations can use efficient models that prioritize speed and cost-effectiveness.
+
+**Example: Research and Analysis Crew**
+
+```python
+from crewai import Agent, Task, Crew, LLM
+
+# High-capability reasoning model for strategic planning
+manager_llm = LLM(model="gemini-2.5-flash-preview-05-20", temperature=0.1)
+
+# Creative model for content generation
+content_llm = LLM(model="claude-3-5-sonnet-20241022", temperature=0.7)
+
+# Efficient model for data processing
+processing_llm = LLM(model="gpt-4o-mini", temperature=0)
+
+research_manager = Agent(
+ role="Research Strategy Manager",
+ goal="Develop comprehensive research strategies and coordinate team efforts",
+ backstory="Expert research strategist with deep analytical capabilities",
+ llm=manager_llm, # High-capability model for complex reasoning
+ verbose=True
+)
+
+content_writer = Agent(
+ role="Research Content Writer",
+ goal="Transform research findings into compelling, well-structured reports",
+ backstory="Skilled writer who excels at making complex topics accessible",
+ llm=content_llm, # Creative model for engaging content
+ verbose=True
+)
+
+data_processor = Agent(
+ role="Data Analysis Specialist",
+ goal="Extract and organize key data points from research sources",
+ backstory="Detail-oriented analyst focused on accuracy and efficiency",
+ llm=processing_llm, # Fast, cost-effective model for routine tasks
+ verbose=True
+)
+
+crew = Crew(
+ agents=[research_manager, content_writer, data_processor],
+ tasks=[...], # Your specific tasks
+ manager_llm=manager_llm, # Manager uses the reasoning model
+ verbose=True
+)
+```
+
+The key to successful multi-model implementation is understanding how different agents interact and ensuring that model capabilities align with agent responsibilities. This requires careful planning but can result in significant improvements in both output quality and operational efficiency.
+
+### b. Component-Specific Selection
+
+
+
+ The manager LLM plays a crucial role in hierarchical CrewAI processes, serving as the coordination point for multiple agents and tasks. This model needs to excel at delegation, task prioritization, and maintaining context across multiple concurrent operations.
+
+ Effective manager LLMs require strong reasoning capabilities to make good delegation decisions, consistent performance to ensure predictable coordination, and excellent context management to track the state of multiple agents simultaneously. The model needs to understand the capabilities and limitations of different agents while optimizing task allocation for efficiency and quality.
+
+ Cost considerations are particularly important for manager LLMs since they're involved in every operation. The model needs to provide sufficient capability for effective coordination while remaining cost-effective for frequent use. This often means finding models that offer good reasoning capabilities without the premium pricing of the most sophisticated options.
+
+
+
+
+ Function calling LLMs handle tool usage across all agents, making them critical for crews that rely heavily on external tools and APIs. These models need to excel at understanding tool capabilities, extracting parameters accurately, and handling tool responses effectively.
+
+ The most important characteristics for function calling LLMs are precision and reliability rather than creativity or sophisticated reasoning. The model needs to consistently extract the correct parameters from natural language requests and handle tool responses appropriately. Speed is also important since tool usage often involves multiple round trips that can impact overall performance.
+
+ Many teams find that specialized function calling models or general purpose models with strong tool support work better than creative or reasoning-focused models for this role. The key is ensuring that the model can reliably bridge the gap between natural language instructions and structured tool calls.
+
+
+
+
+ Individual agents can override crew-level LLM settings when their specific needs differ significantly from the general crew requirements. This capability allows for fine-tuned optimization while maintaining operational simplicity for most agents.
+
+ Consider agent-specific overrides when an agent's role requires capabilities that differ substantially from other crew members. For example, a creative writing agent might benefit from a model optimized for content generation, while a data analysis agent might perform better with a reasoning-focused model.
+
+ The challenge with agent-specific overrides is balancing optimization with operational complexity. Each additional model adds complexity to deployment, monitoring, and cost management. Teams should focus overrides on agents where the performance improvement justifies the additional complexity.
+
+
+
+
+## Task Definition Framework
+
+### a. Focus on Clarity Over Complexity
+
+Effective task definition is often more important than model selection in determining the quality of CrewAI outputs. Well-defined tasks provide clear direction and context that enable even modest models to perform well, while poorly defined tasks can cause even sophisticated models to produce unsatisfactory results.
+
+
+
+ The best task descriptions strike a balance between providing sufficient detail and maintaining clarity. They should define the specific objective clearly enough that there's no ambiguity about what success looks like, while explaining the approach or methodology in enough detail that the agent understands how to proceed.
+
+ Effective task descriptions include relevant context and constraints that help the agent understand the broader purpose and any limitations they need to work within. They break complex work into focused steps that can be executed systematically, rather than presenting overwhelming, multi-faceted objectives that are difficult to approach systematically.
+
+ Common mistakes include being too vague about objectives, failing to provide necessary context, setting unclear success criteria, or combining multiple unrelated tasks into a single description. The goal is to provide enough information for the agent to succeed while maintaining focus on a single, clear objective.
+
+
+
+
+ Expected output guidelines serve as a contract between the task definition and the agent, clearly specifying what the deliverable should look like and how it will be evaluated. These guidelines should describe both the format and structure needed, as well as the key elements that must be included for the output to be considered complete.
+
+ The best output guidelines provide concrete examples of quality indicators and define completion criteria clearly enough that both the agent and human reviewers can assess whether the task has been completed successfully. This reduces ambiguity and helps ensure consistent results across multiple task executions.
+
+ Avoid generic output descriptions that could apply to any task, missing format specifications that leave agents guessing about structure, unclear quality standards that make evaluation difficult, or failing to provide examples or templates that help agents understand expectations.
+
+
+
+
+### b. Task Sequencing Strategy
+
+
+
+ Sequential task dependencies are essential when tasks build upon previous outputs, information flows from one task to another, or quality depends on the completion of prerequisite work. This approach ensures that each task has access to the information and context it needs to succeed.
+
+ Implementing sequential dependencies effectively requires using the context parameter to chain related tasks, building complexity gradually through task progression, and ensuring that each task produces outputs that serve as meaningful inputs for subsequent tasks. The goal is to maintain logical flow between dependent tasks while avoiding unnecessary bottlenecks.
+
+ Sequential dependencies work best when there's a clear logical progression from one task to another and when the output of one task genuinely improves the quality or feasibility of subsequent tasks. However, they can create bottlenecks if not managed carefully, so it's important to identify which dependencies are truly necessary versus those that are merely convenient.
+
+
+
+
+ Parallel execution becomes valuable when tasks are independent of each other, time efficiency is important, or different expertise areas are involved that don't require coordination. This approach can significantly reduce overall execution time while allowing specialized agents to work on their areas of strength simultaneously.
+
+ Successful parallel execution requires identifying tasks that can truly run independently, grouping related but separate work streams effectively, and planning for result integration when parallel tasks need to be combined into a final deliverable. The key is ensuring that parallel tasks don't create conflicts or redundancies that reduce overall quality.
+
+ Consider parallel execution when you have multiple independent research streams, different types of analysis that don't depend on each other, or content creation tasks that can be developed simultaneously. However, be mindful of resource allocation and ensure that parallel execution doesn't overwhelm your available model capacity or budget.
+
+
+
+
+## Optimizing Agent Configuration for LLM Performance
+
+### a. Role-Driven LLM Selection
+
+
+ Generic agent roles make it impossible to select the right LLM. Specific roles
+ enable targeted model optimization.
+
+
+The specificity of your agent roles directly determines which LLM capabilities matter most for optimal performance. This creates a strategic opportunity to match precise model strengths with agent responsibilities.
+
+**Generic vs. Specific Role Impact on LLM Choice:**
+
+When defining roles, think about the specific domain knowledge, working style, and decision-making frameworks that would be most valuable for the tasks the agent will handle. The more specific and contextual the role definition, the better the model can embody that role effectively.
+
+```python
+# ✅ Specific role - clear LLM requirements
+specific_agent = Agent(
+ role="SaaS Revenue Operations Analyst", # Clear domain expertise needed
+ goal="Analyze recurring revenue metrics and identify growth opportunities",
+ backstory="Specialist in SaaS business models with deep understanding of ARR, churn, and expansion revenue",
+ llm=LLM(model="gpt-4o") # Reasoning model justified for complex analysis
+)
+```
+
+**Role-to-Model Mapping Strategy:**
+
+- **"Research Analyst"** → Reasoning model (GPT-4o, Claude Sonnet) for complex analysis
+- **"Content Editor"** → Creative model (Claude, GPT-4o) for writing quality
+- **"Data Processor"** → Efficient model (GPT-4o-mini, Gemini Flash) for structured tasks
+- **"API Coordinator"** → Function-calling optimized model (GPT-4o, Claude) for tool usage
+
+### b. Backstory as Model Context Amplifier
+
+
+ Strategic backstories multiply your chosen LLM's effectiveness by providing
+ domain-specific context that generic prompting cannot achieve.
+
+
+A well-crafted backstory transforms your LLM choice from generic capability to specialized expertise. This is especially crucial for cost optimization - a well-contextualized efficient model can outperform a premium model without proper context.
+
+**Context-Driven Performance Example:**
+
+```python
+# Context amplifies model effectiveness
+domain_expert = Agent(
+ role="B2B SaaS Marketing Strategist",
+ goal="Develop comprehensive go-to-market strategies for enterprise software",
+ backstory="""
+ You have 10+ years of experience scaling B2B SaaS companies from Series A to IPO.
+ You understand the nuances of enterprise sales cycles, the importance of product-market
+ fit in different verticals, and how to balance growth metrics with unit economics.
+ You've worked with companies like Salesforce, HubSpot, and emerging unicorns, giving
+ you perspective on both established and disruptive go-to-market strategies.
+ """,
+ llm=LLM(model="claude-3-5-sonnet", temperature=0.3) # Balanced creativity with domain knowledge
+)
+
+# This context enables Claude to perform like a domain expert
+# Without it, even it would produce generic marketing advice
+```
+
+**Backstory Elements That Enhance LLM Performance:**
+
+- **Domain Experience**: "10+ years in enterprise SaaS sales"
+- **Specific Expertise**: "Specializes in technical due diligence for Series B+ rounds"
+- **Working Style**: "Prefers data-driven decisions with clear documentation"
+- **Quality Standards**: "Insists on citing sources and showing analytical work"
+
+### c. Holistic Agent-LLM Optimization
+
+The most effective agent configurations create synergy between role specificity, backstory depth, and LLM selection. Each element reinforces the others to maximize model performance.
+
+**Optimization Framework:**
+
+```python
+# Example: Technical Documentation Agent
+tech_writer = Agent(
+ role="API Documentation Specialist", # Specific role for clear LLM requirements
+ goal="Create comprehensive, developer-friendly API documentation",
+ backstory="""
+ You're a technical writer with 8+ years documenting REST APIs, GraphQL endpoints,
+ and SDK integration guides. You've worked with developer tools companies and
+ understand what developers need: clear examples, comprehensive error handling,
+ and practical use cases. You prioritize accuracy and usability over marketing fluff.
+ """,
+ llm=LLM(
+ model="claude-3-5-sonnet", # Excellent for technical writing
+ temperature=0.1 # Low temperature for accuracy
+ ),
+ tools=[code_analyzer_tool, api_scanner_tool],
+ verbose=True
+)
+```
+
+**Alignment Checklist:**
+
+- ✅ **Role Specificity**: Clear domain and responsibilities
+- ✅ **LLM Match**: Model strengths align with role requirements
+- ✅ **Backstory Depth**: Provides domain context the LLM can leverage
+- ✅ **Tool Integration**: Tools support the agent's specialized function
+- ✅ **Parameter Tuning**: Temperature and settings optimize for role needs
+
+The key is creating agents where every configuration choice reinforces your LLM selection strategy, maximizing performance while optimizing costs.
+
+## Practical Implementation Checklist
+
+Rather than repeating the strategic framework, here's a tactical checklist for implementing your LLM selection decisions in CrewAI:
+
+
+
+ **What to Review:**
+ - Are all agents using the same LLM by default?
+ - Which agents handle the most complex reasoning tasks?
+ - Which agents primarily do data processing or formatting?
+ - Are any agents heavily tool-dependent?
+
+ **Action**: Document current agent roles and identify optimization opportunities.
+
+
+
+
+ **Set Your Baseline:**
+ ```python
+ # Start with a reliable default for the crew
+ default_crew_llm = LLM(model="gpt-4o-mini") # Cost-effective baseline
+
+ crew = Crew(
+ agents=[...],
+ tasks=[...],
+ memory=True
+ )
+ ```
+
+ **Action**: Establish your crew's default LLM before optimizing individual agents.
+
+
+
+
+ **Identify and Upgrade Key Agents:**
+ ```python
+ # Manager or coordination agents
+ manager_agent = Agent(
+ role="Project Manager",
+ llm=LLM(model="gemini-2.5-flash-preview-05-20"), # Premium for coordination
+ # ... rest of config
+ )
+
+ # Creative or customer-facing agents
+ content_agent = Agent(
+ role="Content Creator",
+ llm=LLM(model="claude-3-5-sonnet"), # Best for writing
+ # ... rest of config
+ )
+ ```
+
+ **Action**: Upgrade 20% of your agents that handle 80% of the complexity.
+
+
+
+
+ **Once you deploy your agents to production:**
+ - Use [CrewAI AMP platform](https://app.crewai.com) to A/B test your model selections
+ - Run multiple iterations with real inputs to measure consistency and performance
+ - Compare cost vs. performance across your optimized setup
+ - Share results with your team for collaborative decision-making
+
+ **Action**: Replace guesswork with data-driven validation using the testing platform.
+
+
+
+
+### When to Use Different Model Types
+
+
+
+ Reasoning models become essential when tasks require genuine multi-step logical thinking, strategic planning, or high-level decision making that benefits from systematic analysis. These models excel when problems need to be broken down into components and analyzed systematically rather than handled through pattern matching or simple instruction following.
+
+ Consider reasoning models for business strategy development, complex data analysis that requires drawing insights from multiple sources, multi-step problem solving where each step depends on previous analysis, and strategic planning tasks that require considering multiple variables and their interactions.
+
+ However, reasoning models often come with higher costs and slower response times, so they're best reserved for tasks where their sophisticated capabilities provide genuine value rather than being used for simple operations that don't require complex reasoning.
+
+
+
+
+ Creative models become valuable when content generation is the primary output and the quality, style, and engagement level of that content directly impact success. These models excel when writing quality and style matter significantly, creative ideation or brainstorming is needed, or brand voice and tone are important considerations.
+
+ Use creative models for blog post writing and article creation, marketing copy that needs to engage and persuade, creative storytelling and narrative development, and brand communications where voice and tone are crucial. These models often understand nuance and context better than general purpose alternatives.
+
+ Creative models may be less suitable for technical or analytical tasks where precision and factual accuracy are more important than engagement and style. They're best used when the creative and communicative aspects of the output are primary success factors.
+
+
+
+
+ Efficient models are ideal for high-frequency, routine operations where speed and cost optimization are priorities. These models work best when tasks have clear, well-defined parameters and don't require sophisticated reasoning or creative capabilities.
+
+ Consider efficient models for data processing and transformation tasks, simple formatting and organization operations, function calling and tool usage where precision matters more than sophistication, and high-volume operations where cost per operation is a significant factor.
+
+ The key with efficient models is ensuring that their capabilities align with task requirements. They can handle many routine operations effectively but may struggle with tasks requiring nuanced understanding, complex reasoning, or sophisticated content generation.
+
+
+
+
+ Open source models become attractive when budget constraints are significant, data privacy requirements exist, customization needs are important, or local deployment is required for operational or compliance reasons.
+
+ Consider open source models for internal company tools where data privacy is paramount, privacy-sensitive applications that can't use external APIs, cost-optimized deployments where per-token pricing is prohibitive, and situations requiring custom model modifications or fine-tuning.
+
+ However, open source models require more technical expertise to deploy and maintain effectively. Consider the total cost of ownership including infrastructure, technical overhead, and ongoing maintenance when evaluating open source options.
+
+
+
+
+## Common CrewAI Model Selection Pitfalls
+
+
+
+ **The Problem**: Using the same LLM for all agents in a crew, regardless of their specific roles and responsibilities. This is often the default approach but rarely optimal.
+
+ **Real Example**: Using GPT-4o for both a strategic planning manager and a data extraction agent. The manager needs reasoning capabilities worth the premium cost, but the data extractor could perform just as well with GPT-4o-mini at a fraction of the price.
+
+ **CrewAI Solution**: Leverage agent-specific LLM configuration to match model capabilities with agent roles:
+ ```python
+ # Strategic agent gets premium model
+ manager = Agent(role="Strategy Manager", llm=LLM(model="gpt-4o"))
+
+ # Processing agent gets efficient model
+ processor = Agent(role="Data Processor", llm=LLM(model="gpt-4o-mini"))
+ ```
+
+
+
+
+ **The Problem**: Not understanding how CrewAI's LLM hierarchy works - crew LLM, manager LLM, and agent LLM settings can conflict or be poorly coordinated.
+
+ **Real Example**: Setting a crew to use Claude, but having agents configured with GPT models, creating inconsistent behavior and unnecessary model switching overhead.
+
+ **CrewAI Solution**: Plan your LLM hierarchy strategically:
+ ```python
+ crew = Crew(
+ agents=[agent1, agent2],
+ tasks=[task1, task2],
+ manager_llm=LLM(model="gpt-4o"), # For crew coordination
+ process=Process.hierarchical # When using manager_llm
+ )
+
+ # Agents inherit crew LLM unless specifically overridden
+ agent1 = Agent(llm=LLM(model="claude-3-5-sonnet")) # Override for specific needs
+ ```
+
+
+
+
+ **The Problem**: Choosing models based on general capabilities while ignoring function calling performance for tool-heavy CrewAI workflows.
+
+ **Real Example**: Selecting a creative-focused model for an agent that primarily needs to call APIs, search tools, or process structured data. The agent struggles with tool parameter extraction and reliable function calls.
+
+ **CrewAI Solution**: Prioritize function calling capabilities for tool-heavy agents:
+ ```python
+ # For agents that use many tools
+ tool_agent = Agent(
+ role="API Integration Specialist",
+ tools=[search_tool, api_tool, data_tool],
+ llm=LLM(model="gpt-4o"), # Excellent function calling
+ # OR
+ llm=LLM(model="claude-3-5-sonnet") # Also strong with tools
+ )
+ ```
+
+
+
+
+ **The Problem**: Making complex model selection decisions based on theoretical performance without validating with actual CrewAI workflows and tasks.
+
+ **Real Example**: Implementing elaborate model switching logic based on task types without testing if the performance gains justify the operational complexity.
+
+ **CrewAI Solution**: Start simple, then optimize based on real performance data:
+ ```python
+ # Start with this
+ crew = Crew(agents=[...], tasks=[...], llm=LLM(model="gpt-4o-mini"))
+
+ # Test performance, then optimize specific agents as needed
+ # Use Enterprise platform testing to validate improvements
+ ```
+
+
+
+
+ **The Problem**: Not considering how model context windows interact with CrewAI's memory and context sharing between agents.
+
+ **Real Example**: Using a short-context model for agents that need to maintain conversation history across multiple task iterations, or in crews with extensive agent-to-agent communication.
+
+ **CrewAI Solution**: Match context capabilities to crew communication patterns.
+
+
+
+
+## Testing and Iteration Strategy
+
+
+
+ Begin with reliable, general-purpose models that are well-understood and
+ widely supported. This provides a stable foundation for understanding your
+ specific requirements and performance expectations before optimizing for
+ specialized needs.
+
+
+ Develop metrics that align with your specific use case and business
+ requirements rather than relying solely on general benchmarks. Focus on
+ measuring outcomes that directly impact your success rather than theoretical
+ performance indicators.
+
+
+ Make model changes based on observed performance in your specific context
+ rather than theoretical considerations or general recommendations.
+ Real-world performance often differs significantly from benchmark results or
+ general reputation.
+
+
+ Evaluate the complete cost of ownership including model costs, development
+ time, maintenance overhead, and operational complexity. The cheapest model
+ per token may not be the most cost-effective choice when considering all
+ factors.
+
+
+
+
+ Focus on understanding your requirements first, then select models that best
+ match those needs. The best LLM choice is the one that consistently delivers
+ the results you need within your operational constraints.
+
+
+### Enterprise-Grade Model Validation
+
+For teams serious about optimizing their LLM selection, the **CrewAI AMP platform** provides sophisticated testing capabilities that go far beyond basic CLI testing. The platform enables comprehensive model evaluation that helps you make data-driven decisions about your LLM strategy.
+
+
+ 
+
+
+**Advanced Testing Features:**
+
+- **Multi-Model Comparison**: Test multiple LLMs simultaneously across the same tasks and inputs. Compare performance between GPT-4o, Claude, Llama, Groq, Cerebras, and other leading models in parallel to identify the best fit for your specific use case.
+
+- **Statistical Rigor**: Configure multiple iterations with consistent inputs to measure reliability and performance variance. This helps identify models that not only perform well but do so consistently across runs.
+
+- **Real-World Validation**: Use your actual crew inputs and scenarios rather than synthetic benchmarks. The platform allows you to test with your specific industry context, company information, and real use cases for more accurate evaluation.
+
+- **Comprehensive Analytics**: Access detailed performance metrics, execution times, and cost analysis across all tested models. This enables data-driven decision making rather than relying on general model reputation or theoretical capabilities.
+
+- **Team Collaboration**: Share testing results and model performance data across your team, enabling collaborative decision-making and consistent model selection strategies across projects.
+
+Go to [app.crewai.com](https://app.crewai.com) to get started!
+
+
+ The Enterprise platform transforms model selection from guesswork into a
+ data-driven process, enabling you to validate the principles in this guide
+ with your actual use cases and requirements.
+
+
+## Key Principles Summary
+
+
+
+ Choose models based on what the task actually requires, not theoretical capabilities or general reputation.
+
+
+{" "}
+
+ Align model strengths with agent roles and responsibilities for optimal
+ performance.
+
+
+{" "}
+
+ Maintain coherent model selection strategy across related components and
+ workflows.
+
+
+{" "}
+
+ Validate choices through real-world usage rather than benchmarks alone.
+
+
+{" "}
+
+ Start simple and optimize based on actual performance and needs.
+
+
+
+ Balance performance requirements with cost and complexity constraints.
+
+
+
+
+ Remember: The best LLM choice is the one that consistently delivers the
+ results you need within your operational constraints. Focus on understanding
+ your requirements first, then select models that best match those needs.
+
+
+## Current Model Landscape (June 2025)
+
+
+ **Snapshot in Time**: The following model rankings represent current
+ leaderboard standings as of June 2025, compiled from [LMSys
+ Arena](https://arena.lmsys.org/), [Artificial
+ Analysis](https://artificialanalysis.ai/), and other leading benchmarks. LLM
+ performance, availability, and pricing change rapidly. Always conduct your own
+ evaluations with your specific use cases and data.
+
+
+### Leading Models by Category
+
+The tables below show a representative sample of current top-performing models across different categories, with guidance on their suitability for CrewAI agents:
+
+
+ These tables/metrics showcase selected leading models in each category and are
+ not exhaustive. Many excellent models exist beyond those listed here. The goal
+ is to illustrate the types of capabilities to look for rather than provide a
+ complete catalog.
+
+
+
+
+ **Best for Manager LLMs and Complex Analysis**
+
+ | Model | Intelligence Score | Cost ($/M tokens) | Speed | Best Use in CrewAI |
+ |:------|:------------------|:------------------|:------|:------------------|
+ | **o3** | 70 | $17.50 | Fast | Manager LLM for complex multi-agent coordination |
+ | **Gemini 2.5 Pro** | 69 | $3.44 | Fast | Strategic planning agents, research coordination |
+ | **DeepSeek R1** | 68 | $0.96 | Moderate | Cost-effective reasoning for budget-conscious crews |
+ | **Claude 4 Sonnet** | 53 | $6.00 | Fast | Analysis agents requiring nuanced understanding |
+ | **Qwen3 235B (Reasoning)** | 62 | $2.63 | Moderate | Open-source alternative for reasoning tasks |
+
+ These models excel at multi-step reasoning and are ideal for agents that need to develop strategies, coordinate other agents, or analyze complex information.
+
+
+
+
+ **Best for Development and Tool-Heavy Workflows**
+
+ | Model | Coding Performance | Tool Use Score | Cost ($/M tokens) | Best Use in CrewAI |
+ |:------|:------------------|:---------------|:------------------|:------------------|
+ | **Claude 4 Sonnet** | Excellent | 72.7% | $6.00 | Primary coding agent, technical documentation |
+ | **Claude 4 Opus** | Excellent | 72.5% | $30.00 | Complex software architecture, code review |
+ | **DeepSeek V3** | Very Good | High | $0.48 | Cost-effective coding for routine development |
+ | **Qwen2.5 Coder 32B** | Very Good | Medium | $0.15 | Budget-friendly coding agent |
+ | **Llama 3.1 405B** | Good | 81.1% | $3.50 | Function calling LLM for tool-heavy workflows |
+
+ These models are optimized for code generation, debugging, and technical problem-solving, making them ideal for development-focused crews.
+
+
+
+
+ **Best for High-Throughput and Real-Time Applications**
+
+ | Model | Speed (tokens/s) | Latency (TTFT) | Cost ($/M tokens) | Best Use in CrewAI |
+ |:------|:-----------------|:---------------|:------------------|:------------------|
+ | **Llama 4 Scout** | 2,600 | 0.33s | $0.27 | High-volume processing agents |
+ | **Gemini 2.5 Flash** | 376 | 0.30s | $0.26 | Real-time response agents |
+ | **DeepSeek R1 Distill** | 383 | Variable | $0.04 | Cost-optimized high-speed processing |
+ | **Llama 3.3 70B** | 2,500 | 0.52s | $0.60 | Balanced speed and capability |
+ | **Nova Micro** | High | 0.30s | $0.04 | Simple, fast task execution |
+
+ These models prioritize speed and efficiency, perfect for agents handling routine operations or requiring quick responses. **Pro tip**: Pairing these models with fast inference providers like Groq can achieve even better performance, especially for open-source models like Llama.
+
+
+
+
+ **Best All-Around Models for General Crews**
+
+ | Model | Overall Score | Versatility | Cost ($/M tokens) | Best Use in CrewAI |
+ |:------|:--------------|:------------|:------------------|:------------------|
+ | **GPT-4.1** | 53 | Excellent | $3.50 | General-purpose crew LLM |
+ | **Claude 3.7 Sonnet** | 48 | Very Good | $6.00 | Balanced reasoning and creativity |
+ | **Gemini 2.0 Flash** | 48 | Good | $0.17 | Cost-effective general use |
+ | **Llama 4 Maverick** | 51 | Good | $0.37 | Open-source general purpose |
+ | **Qwen3 32B** | 44 | Good | $1.23 | Budget-friendly versatility |
+
+ These models offer good performance across multiple dimensions, suitable for crews with diverse task requirements.
+
+
+
+
+### Selection Framework for Current Models
+
+
+
+ **When performance is the priority**: Use top-tier models like **o3**, **Gemini 2.5 Pro**, or **Claude 4 Sonnet** for manager LLMs and critical agents. These models excel at complex reasoning and coordination but come with higher costs.
+
+ **Strategy**: Implement a multi-model approach where premium models handle strategic thinking while efficient models handle routine operations.
+
+
+
+
+ **When budget is a primary constraint**: Focus on models like **DeepSeek R1**, **Llama 4 Scout**, or **Gemini 2.0 Flash**. These provide strong performance at significantly lower costs.
+
+ **Strategy**: Use cost-effective models for most agents, reserving premium models only for the most critical decision-making roles.
+
+
+
+
+ **For specific domain expertise**: Choose models optimized for your primary use case. **Claude 4** series for coding, **Gemini 2.5 Pro** for research, **Llama 405B** for function calling.
+
+ **Strategy**: Select models based on your crew's primary function, ensuring the core capability aligns with model strengths.
+
+
+
+
+ **For data-sensitive operations**: Consider open-source models like **Llama 4** series, **DeepSeek V3**, or **Qwen3** that can be deployed locally while maintaining competitive performance.
+
+ **Strategy**: Deploy open-source models on private infrastructure, accepting potential performance trade-offs for data control.
+
+
+
+
+### Key Considerations for Model Selection
+
+- **Performance Trends**: The current landscape shows strong competition between reasoning-focused models (o3, Gemini 2.5 Pro) and balanced models (Claude 4, GPT-4.1). Specialized models like DeepSeek R1 offer excellent cost-performance ratios.
+
+- **Speed vs. Intelligence Trade-offs**: Models like Llama 4 Scout prioritize speed (2,600 tokens/s) while maintaining reasonable intelligence, whereas models like o3 maximize reasoning capability at the cost of speed and price.
+
+- **Open Source Viability**: The gap between open-source and proprietary models continues to narrow, with models like Llama 4 Maverick and DeepSeek V3 offering competitive performance at attractive price points. Fast inference providers particularly shine with open-source models, often delivering better speed-to-cost ratios than proprietary alternatives.
+
+
+ **Testing is Essential**: Leaderboard rankings provide general guidance, but
+ your specific use case, prompting style, and evaluation criteria may produce
+ different results. Always test candidate models with your actual tasks and
+ data before making final decisions.
+
+
+### Practical Implementation Strategy
+
+
+
+ Begin with well-established models like **GPT-4.1**, **Claude 3.7 Sonnet**, or **Gemini 2.0 Flash** that offer good performance across multiple dimensions and have extensive real-world validation.
+
+
+
+ Determine if your crew has specific requirements (coding, reasoning, speed)
+ that would benefit from specialized models like **Claude 4 Sonnet** for
+ development or **o3** for complex analysis. For speed-critical applications,
+ consider fast inference providers like **Groq** alongside model selection.
+
+
+
+ Use different models for different agents based on their roles.
+ High-capability models for managers and complex tasks, efficient models for
+ routine operations.
+
+
+
+ Track performance metrics relevant to your use case and be prepared to adjust model selections as new models are released or pricing changes.
+
+
diff --git a/docs/v1.15.1/ar/learn/multimodal-agents.mdx b/docs/v1.15.1/ar/learn/multimodal-agents.mdx
new file mode 100644
index 000000000..9c80f969c
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/multimodal-agents.mdx
@@ -0,0 +1,141 @@
+---
+title: استخدام الوكلاء متعددي الوسائط
+description: تعلم كيفية تفعيل واستخدام القدرات متعددة الوسائط في وكلائك لمعالجة الصور والمحتوى غير النصي ضمن إطار عمل CrewAI.
+icon: video
+mode: "wide"
+---
+
+## استخدام الوكلاء متعددي الوسائط
+
+يدعم CrewAI الوكلاء متعددي الوسائط القادرين على معالجة المحتوى النصي وغير النصي مثل الصور. سيوضح لك هذا الدليل كيفية تفعيل واستخدام القدرات متعددة الوسائط في وكلائك.
+
+### تفعيل القدرات متعددة الوسائط
+
+لإنشاء وكيل متعدد الوسائط، ما عليك سوى تعيين معامل `multimodal` إلى `True` عند تهيئة وكيلك:
+
+```python
+from crewai import Agent
+
+agent = Agent(
+ role="Image Analyst",
+ goal="Analyze and extract insights from images",
+ backstory="An expert in visual content interpretation with years of experience in image analysis",
+ multimodal=True # This enables multimodal capabilities
+)
+```
+
+عند تعيين `multimodal=True`، يتم إعداد الوكيل تلقائياً بالأدوات اللازمة للتعامل مع المحتوى غير النصي، بما في ذلك `AddImageTool`.
+
+### العمل مع الصور
+
+يأتي الوكيل متعدد الوسائط مُعداً مسبقاً بأداة `AddImageTool`، التي تتيح له معالجة الصور. لا تحتاج إلى إضافة هذه الأداة يدوياً — فهي مضمنة تلقائياً عند تفعيل القدرات متعددة الوسائط.
+
+إليك مثالاً كاملاً يوضح كيفية استخدام وكيل متعدد الوسائط لتحليل صورة:
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create a multimodal agent
+image_analyst = Agent(
+ role="Product Analyst",
+ goal="Analyze product images and provide detailed descriptions",
+ backstory="Expert in visual product analysis with deep knowledge of design and features",
+ multimodal=True
+)
+
+# Create a task for image analysis
+task = Task(
+ description="Analyze the product image at https://example.com/product.jpg and provide a detailed description",
+ expected_output="A detailed description of the product image",
+ agent=image_analyst
+)
+
+# Create and run the crew
+crew = Crew(
+ agents=[image_analyst],
+ tasks=[task]
+)
+
+result = crew.kickoff()
+```
+
+### الاستخدام المتقدم مع السياق
+
+يمكنك تقديم سياق إضافي أو أسئلة محددة حول الصورة عند إنشاء مهام للوكلاء متعددي الوسائط. يمكن أن يتضمن وصف المهمة جوانب محددة تريد أن يركز عليها الوكيل:
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create a multimodal agent for detailed analysis
+expert_analyst = Agent(
+ role="Visual Quality Inspector",
+ goal="Perform detailed quality analysis of product images",
+ backstory="Senior quality control expert with expertise in visual inspection",
+ multimodal=True # AddImageTool is automatically included
+)
+
+# Create a task with specific analysis requirements
+inspection_task = Task(
+ description="""
+ Analyze the product image at https://example.com/product.jpg with focus on:
+ 1. Quality of materials
+ 2. Manufacturing defects
+ 3. Compliance with standards
+ Provide a detailed report highlighting any issues found.
+ """,
+ expected_output="A detailed report highlighting any issues found",
+ agent=expert_analyst
+)
+
+# Create and run the crew
+crew = Crew(
+ agents=[expert_analyst],
+ tasks=[inspection_task]
+)
+
+result = crew.kickoff()
+```
+
+### تفاصيل الأداة
+
+عند العمل مع الوكلاء متعددي الوسائط، يتم إعداد `AddImageTool` تلقائياً بالمخطط التالي:
+
+```python
+class AddImageToolSchema:
+ image_url: str # Required: The URL or path of the image to process
+ action: Optional[str] = None # Optional: Additional context or specific questions about the image
+```
+
+سيتعامل الوكيل متعدد الوسائط تلقائياً مع معالجة الصور من خلال أدواته المدمجة، مما يتيح له:
+- الوصول إلى الصور عبر عناوين URL أو مسارات الملفات المحلية
+- معالجة محتوى الصورة مع سياق اختياري أو أسئلة محددة
+- تقديم تحليلات ورؤى بناءً على المعلومات البصرية ومتطلبات المهمة
+
+### أفضل الممارسات
+
+عند العمل مع الوكلاء متعددي الوسائط، ضع هذه الممارسات في الاعتبار:
+
+1. **الوصول إلى الصور**
+ - تأكد من أن صورك قابلة للوصول عبر عناوين URL التي يمكن للوكيل الوصول إليها
+ - للصور المحلية، فكر في استضافتها مؤقتاً أو استخدام مسارات ملفات مطلقة
+ - تحقق من أن عناوين URL للصور صالحة وقابلة للوصول قبل تشغيل المهام
+
+2. **وصف المهمة**
+ - كن محدداً حول الجوانب التي تريد من الوكيل تحليلها في الصورة
+ - قم بتضمين أسئلة أو متطلبات واضحة في وصف المهمة
+ - فكر في استخدام معامل `action` الاختياري للتحليل المركز
+
+3. **إدارة الموارد**
+ - قد تتطلب معالجة الصور موارد حسابية أكثر من المهام النصية فقط
+ - قد تتطلب بعض نماذج اللغة ترميز base64 لبيانات الصورة
+ - فكر في المعالجة الدفعية لصور متعددة لتحسين الأداء
+
+4. **إعداد البيئة**
+ - تحقق من أن بيئتك تحتوي على الاعتماديات اللازمة لمعالجة الصور
+ - تأكد من أن نموذج اللغة الخاص بك يدعم القدرات متعددة الوسائط
+ - اختبر بصور صغيرة أولاً للتحقق من إعدادك
+
+5. **معالجة الأخطاء**
+ - نفّذ معالجة أخطاء مناسبة لحالات فشل تحميل الصور
+ - ضع استراتيجيات احتياطية لحالات فشل معالجة الصور
+ - راقب وسجل عمليات معالجة الصور لأغراض التصحيح
diff --git a/docs/v1.15.1/ar/learn/overview.mdx b/docs/v1.15.1/ar/learn/overview.mdx
new file mode 100644
index 000000000..b09a944fd
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/overview.mdx
@@ -0,0 +1,159 @@
+---
+title: "نظرة عامة"
+description: "تعلم كيفية بناء وتخصيص وتحسين تطبيقات CrewAI الخاصة بك مع أدلة وبرامج تعليمية شاملة"
+icon: "face-smile"
+mode: "wide"
+---
+
+## تعلم CrewAI
+
+يوفر هذا القسم أدلة وبرامج تعليمية شاملة لمساعدتك في إتقان CrewAI، من المفاهيم الأساسية إلى التقنيات المتقدمة. سواء كنت قد بدأت للتو أو تبحث عن تحسين تطبيقاتك الحالية، ستوجهك هذه الموارد عبر كل جانب من جوانب بناء سير عمل وكلاء الذكاء الاصطناعي القوية.
+
+## أدلة البدء
+
+### المفاهيم الأساسية
+
+
+ تعلم كيفية تنفيذ المهام بترتيب تسلسلي لسير عمل منظم.
+
+
+
+ تنفيذ تنفيذ المهام الهرمي مع وكلاء مديرين يشرفون على سير العمل.
+
+
+
+ إنشاء سير عمل ديناميكي مع تنفيذ مهام شرطي بناءً على النتائج.
+
+
+
+ تنفيذ الأطقم بشكل غير متزامن لأداء وتزامن محسّن.
+
+
+
+### تطوير الوكلاء
+
+
+ تعلم كيفية تخصيص سلوك الوكلاء وأدوارهم وقدراتهم.
+
+
+
+ بناء وكلاء يمكنهم كتابة وتنفيذ وتصحيح الكود تلقائياً.
+
+
+
+ إنشاء وكلاء يمكنهم معالجة النصوص والصور وأنواع الوسائط الأخرى.
+
+
+
+ تنفيذ وكلاء مديرين مخصصين لسير العمل الهرمي المعقد.
+
+
+
+## الميزات المتقدمة
+
+### التحكم في سير العمل
+
+
+ دمج الإشراف البشري والتدخل في سير عمل الوكلاء.
+
+
+
+ السماح بالإدخال البشري أثناء تنفيذ المهام لاتخاذ قرارات ديناميكية.
+
+
+
+ إعادة تشغيل واستئناف المهام من عمليات تنفيذ الطاقم السابقة.
+
+
+
+ تنفيذ الأطقم عدة مرات بمدخلات مختلفة بكفاءة.
+
+
+
+### التخصيص والتكامل
+
+
+ دمج نماذج لغة ومزودين مخصصين مع CrewAI.
+
+
+
+ إعداد وإدارة الاتصالات بمزودي LLM المختلفين.
+
+
+
+ بناء أدوات مخصصة لتوسيع قدرات الوكلاء.
+
+
+
+ استخدام تعليقات Python التوضيحية لكود أنظف وأسهل في الصيانة.
+
+
+
+## التطبيقات المتخصصة
+
+### المحتوى والوسائط
+
+
+ توليد الصور باستخدام تكامل DALL-E مع وكلائك.
+
+
+
+ دمج الوكلاء والنماذج الموجودة في سير عمل CrewAI.
+
+
+
+### إدارة الأدوات
+
+
+ إعداد الأدوات لإرجاع مخرجاتها مباشرة كنتائج للمهام.
+
+
+
+## توصيات مسار التعلم
+
+### للمبتدئين
+1. ابدأ بـ **العملية التسلسلية** لفهم تنفيذ سير العمل الأساسي
+2. تعلم **تخصيص الوكلاء** لإنشاء إعدادات وكلاء فعالة
+3. استكشف **إنشاء أدوات مخصصة** لتوسيع الوظائف
+4. جرب **الإنسان في الحلقة** لسير العمل التفاعلي
+
+### للمستخدمين المتوسطين
+1. أتقن **العملية الهرمية** لأنظمة الوكلاء المتعددة المعقدة
+2. نفّذ **المهام الشرطية** لسير العمل الديناميكي
+3. استخدم **التشغيل غير المتزامن** لتحسين الأداء
+4. ادمج **LLM مخصص** للنماذج المتخصصة
+
+### للمستخدمين المتقدمين
+1. ابنِ **وكلاء متعددي الوسائط** لمعالجة الوسائط المعقدة
+2. أنشئ **وكلاء مديرين مخصصين** للتنسيق المتطور
+3. نفّذ **أحضر وكيلك الخاص** للأنظمة الهجينة
+4. استخدم **إعادة تشغيل المهام** لاسترداد الأخطاء بشكل متين
+
+## أفضل الممارسات
+
+### التطوير
+- **ابدأ بالبساطة**: ابدأ بسير العمل التسلسلي الأساسي قبل إضافة التعقيد
+- **اختبر تدريجياً**: اختبر كل مكون قبل دمجه في أنظمة أكبر
+- **استخدم التعليقات التوضيحية**: استفد من تعليقات Python التوضيحية لكود أنظف وأسهل في الصيانة
+- **أدوات مخصصة**: ابنِ أدوات قابلة لإعادة الاستخدام يمكن مشاركتها عبر وكلاء مختلفين
+
+### الإنتاج
+- **معالجة الأخطاء**: نفّذ معالجة أخطاء وآليات استرداد قوية
+- **الأداء**: استخدم التنفيذ غير المتزامن وحسّن استدعاءات LLM لأداء أفضل
+- **المراقبة**: ادمج أدوات المراقبة لتتبع أداء الوكلاء
+- **الإشراف البشري**: ضمّن نقاط تفتيش بشرية للقرارات الحرجة
+
+### التحسين
+- **إدارة الموارد**: راقب وحسّن استخدام الرموز وتكاليف API
+- **تصميم سير العمل**: صمم سير عمل يقلل من استدعاءات LLM غير الضرورية
+- **كفاءة الأدوات**: أنشئ أدوات فعالة توفر أقصى قيمة بأقل حمل
+- **التحسين التكراري**: استخدم التغذية الراجعة والمقاييس لتحسين أداء الوكلاء باستمرار
+
+## الحصول على المساعدة
+
+- **التوثيق**: يتضمن كل دليل أمثلة وشروحات مفصلة
+- **المجتمع**: انضم إلى [منتدى CrewAI](https://community.crewai.com) للمناقشات والدعم
+- **الأمثلة**: تحقق من قسم الأمثلة للتطبيقات العاملة الكاملة
+- **الدعم**: تواصل مع [support@crewai.com](mailto:support@crewai.com) للمساعدة التقنية
+
+ابدأ بالأدلة التي تتوافق مع احتياجاتك الحالية واستكشف تدريجياً المواضيع الأكثر تقدماً مع إتقانك للأساسيات.
diff --git a/docs/v1.15.1/ar/learn/replay-tasks-from-latest-crew-kickoff.mdx b/docs/v1.15.1/ar/learn/replay-tasks-from-latest-crew-kickoff.mdx
new file mode 100644
index 000000000..069e25c31
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/replay-tasks-from-latest-crew-kickoff.mdx
@@ -0,0 +1,79 @@
+---
+title: إعادة تشغيل المهام من آخر تنفيذ للطاقم
+description: إعادة تشغيل المهام من آخر crew.kickoff(...)
+icon: arrow-right
+mode: "wide"
+---
+
+## مقدمة
+
+يوفر CrewAI القدرة على إعادة التشغيل من مهمة محددة من آخر تشغيل للطاقم. هذه الميزة مفيدة بشكل خاص عندما تكون قد أنهيت تشغيلاً وقد ترغب في إعادة محاولة مهام معينة أو لا تحتاج إلى إعادة جلب البيانات ووكلاؤك لديهم بالفعل السياق المحفوظ من تنفيذ التشغيل، لذا تحتاج فقط إلى إعادة تشغيل المهام التي تريدها.
+
+
+ يجب عليك تشغيل `crew.kickoff()` قبل أن تتمكن من إعادة تشغيل مهمة.
+ حالياً، يُدعم فقط آخر تشغيل، لذا إذا استخدمت `kickoff_for_each`، فسيسمح لك فقط بإعادة التشغيل من أحدث تشغيل للطاقم.
+
+
+إليك مثالاً على كيفية إعادة التشغيل من مهمة:
+
+### إعادة التشغيل من مهمة محددة باستخدام CLI
+
+لاستخدام ميزة إعادة التشغيل، اتبع هذه الخطوات:
+
+
+
+
+
+ لعرض معرفات المهام من آخر تشغيل، استخدم:
+
+ ```shell
+ crewai log-tasks-outputs
+ ```
+
+ بمجرد حصولك على `task_id` لإعادة التشغيل، استخدم:
+
+ ```shell
+ crewai replay -t
+ ```
+
+
+
+
+ تأكد من أن `crewai` مثبت ومُعد بشكل صحيح في بيئة التطوير الخاصة بك.
+
+
+### إعادة التشغيل من مهمة برمجياً
+
+لإعادة التشغيل من مهمة برمجياً، استخدم الخطوات التالية:
+
+
+
+ حدد `task_id` ومعاملات الإدخال لعملية إعادة التشغيل.
+
+
+ نفّذ أمر إعادة التشغيل ضمن كتلة try-except للتعامل مع الأخطاء المحتملة.
+
+ ```python Code
+ def replay():
+ """
+ Replay the crew execution from a specific task.
+ """
+ task_id = ''
+ inputs = {"topic": "CrewAI Training"} # This is optional; you can pass in the inputs you want to replay; otherwise, it uses the previous kickoff's inputs.
+ try:
+ YourCrewName_Crew().crew().replay(task_id=task_id, inputs=inputs)
+
+ except subprocess.CalledProcessError as e:
+ raise Exception(f"An error occurred while replaying the crew: {e}")
+
+ except Exception as e:
+ raise Exception(f"An unexpected error occurred: {e}")
+ ```
+
+
+
+
+## الخاتمة
+
+مع التحسينات المذكورة أعلاه والوظائف المفصلة، أصبحت إعادة تشغيل مهام محددة في CrewAI أكثر كفاءة ومتانة.
+تأكد من اتباع الأوامر والخطوات بدقة لتحقيق أقصى استفادة من هذه الميزات.
diff --git a/docs/v1.15.1/ar/learn/sequential-process.mdx b/docs/v1.15.1/ar/learn/sequential-process.mdx
new file mode 100644
index 000000000..7ef2d66bf
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/sequential-process.mdx
@@ -0,0 +1,128 @@
+---
+title: العمليات التسلسلية
+description: دليل شامل لاستخدام العمليات التسلسلية لتنفيذ المهام في مشاريع CrewAI.
+icon: forward
+mode: "wide"
+---
+
+## مقدمة
+
+يقدم CrewAI إطار عمل مرن لتنفيذ المهام بطريقة منظمة، يدعم كلاً من العمليات التسلسلية والهرمية.
+يوضح هذا الدليل كيفية تنفيذ هذه العمليات بفعالية لضمان تنفيذ المهام بكفاءة وإكمال المشروع.
+
+## نظرة عامة على العملية التسلسلية
+
+تضمن العملية التسلسلية تنفيذ المهام واحدة تلو الأخرى، باتباع تقدم خطي.
+هذا النهج مثالي للمشاريع التي تتطلب إكمال المهام بترتيب محدد.
+
+### الميزات الرئيسية
+
+- **تدفق مهام خطي**: يضمن تقدماً منظماً من خلال التعامل مع المهام بتسلسل محدد مسبقاً.
+- **البساطة**: الأنسب للمشاريع ذات المهام الواضحة خطوة بخطوة.
+- **سهولة المراقبة**: يسهل التتبع السهل لإكمال المهام وتقدم المشروع.
+
+## تنفيذ العملية التسلسلية
+
+لاستخدام العملية التسلسلية، قم بتجميع طاقمك وتعريف المهام بالترتيب الذي تحتاج إلى تنفيذها به.
+
+```python Code
+from crewai import Crew, Process, Agent, Task, TaskOutput, CrewOutput
+
+# Define your agents
+researcher = Agent(
+ role='Researcher',
+ goal='Conduct foundational research',
+ backstory='An experienced researcher with a passion for uncovering insights'
+)
+analyst = Agent(
+ role='Data Analyst',
+ goal='Analyze research findings',
+ backstory='A meticulous analyst with a knack for uncovering patterns'
+)
+writer = Agent(
+ role='Writer',
+ goal='Draft the final report',
+ backstory='A skilled writer with a talent for crafting compelling narratives'
+)
+
+# Define your tasks
+research_task = Task(
+ description='Gather relevant data...',
+ agent=researcher,
+ expected_output='Raw Data'
+)
+analysis_task = Task(
+ description='Analyze the data...',
+ agent=analyst,
+ expected_output='Data Insights'
+)
+writing_task = Task(
+ description='Compose the report...',
+ agent=writer,
+ expected_output='Final Report'
+)
+
+# Form the crew with a sequential process
+report_crew = Crew(
+ agents=[researcher, analyst, writer],
+ tasks=[research_task, analysis_task, writing_task],
+ process=Process.sequential
+)
+
+# Execute the crew
+result = report_crew.kickoff()
+
+# Accessing the type-safe output
+task_output: TaskOutput = result.tasks[0].output
+crew_output: CrewOutput = result.output
+```
+
+### ملاحظة:
+
+يجب أن يكون لكل مهمة في عملية تسلسلية وكيل مُعيّن. تأكد من أن كل `Task` تتضمن معامل `agent`.
+
+### سير العمل أثناء التنفيذ
+
+1. **المهمة الأولى**: في العملية التسلسلية، يكمل الوكيل الأول مهمته ويشير إلى الإكمال.
+2. **المهام اللاحقة**: يلتقط الوكلاء مهامهم بناءً على نوع العملية، مع نتائج المهام السابقة أو التوجيهات التي تقود تنفيذهم.
+3. **الإكمال**: تنتهي العملية بمجرد تنفيذ المهمة النهائية، مما يؤدي إلى إكمال المشروع.
+
+## الميزات المتقدمة
+
+### تفويض المهام
+
+في العمليات التسلسلية، إذا كان الوكيل لديه `allow_delegation` مُعيّن إلى `True`، يمكنه تفويض المهام إلى وكلاء آخرين في الطاقم.
+يتم إعداد هذه الميزة تلقائياً عندما يكون هناك عدة وكلاء في الطاقم.
+
+### التنفيذ غير المتزامن
+
+يمكن تنفيذ المهام بشكل غير متزامن، مما يسمح بالمعالجة المتوازية عند الاقتضاء.
+لإنشاء مهمة غير متزامنة، عيّن `async_execution=True` عند تعريف المهمة.
+
+### الذاكرة والتخزين المؤقت
+
+يدعم CrewAI كلاً من ميزتي الذاكرة والتخزين المؤقت:
+
+- **الذاكرة**: فعّلها بتعيين `memory=True` عند إنشاء الطاقم. يتيح هذا للوكلاء الاحتفاظ بالمعلومات عبر المهام.
+- **التخزين المؤقت**: افتراضياً، التخزين المؤقت مفعّل. عيّن `cache=False` لتعطيله.
+
+### دوال الاستدعاء الراجع
+
+يمكنك تعيين دوال استدعاء راجع على مستوى المهمة والخطوة:
+
+- `task_callback`: يُنفذ بعد إكمال كل مهمة.
+- `step_callback`: يُنفذ بعد كل خطوة في تنفيذ الوكيل.
+
+### مقاييس الاستخدام
+
+يتتبع CrewAI استخدام الرموز عبر جميع المهام والوكلاء. يمكنك الوصول إلى هذه المقاييس بعد التنفيذ.
+
+## أفضل الممارسات للعمليات التسلسلية
+
+1. **الترتيب مهم**: رتّب المهام بتسلسل منطقي حيث تبني كل مهمة على سابقتها.
+2. **أوصاف مهام واضحة**: قدم أوصافاً مفصلة لكل مهمة لتوجيه الوكلاء بفعالية.
+3. **اختيار الوكيل المناسب**: طابق مهارات وأدوار الوكلاء مع متطلبات كل مهمة.
+4. **استخدم السياق**: استفد من سياق المهام السابقة لإبلاغ المهام اللاحقة.
+
+يضمن هذا التوثيق المحدث أن التفاصيل تعكس بدقة أحدث التغييرات في قاعدة الكود وتصف بوضوح كيفية الاستفادة من الميزات والإعدادات الجديدة.
+تم الحفاظ على بساطة المحتوى ومباشرته لضمان سهولة الفهم.
diff --git a/docs/v1.15.1/ar/learn/streaming-crew-execution.mdx b/docs/v1.15.1/ar/learn/streaming-crew-execution.mdx
new file mode 100644
index 000000000..4dfe1859f
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/streaming-crew-execution.mdx
@@ -0,0 +1,384 @@
+---
+title: بث تنفيذ الطاقم
+description: بث المخرجات في الوقت الفعلي من تنفيذ طاقم CrewAI الخاص بك
+icon: wave-pulse
+mode: "wide"
+---
+
+## مقدمة
+
+يوفر CrewAI القدرة على بث المخرجات في الوقت الفعلي أثناء تنفيذ الطاقم، مما يتيح لك عرض النتائج فور توليدها بدلاً من انتظار اكتمال العملية بالكامل. هذه الميزة مفيدة بشكل خاص لبناء التطبيقات التفاعلية وتقديم تغذية راجعة للمستخدم ومراقبة العمليات طويلة التشغيل.
+
+## كيف يعمل البث
+
+عند تفعيل البث، يلتقط CrewAI استجابات LLM واستدعاءات الأدوات فور حدوثها، ويحزمها في أجزاء منظمة تتضمن سياقاً حول المهمة والوكيل المنفذ. يمكنك التكرار على هذه الأجزاء في الوقت الفعلي والوصول إلى النتيجة النهائية بمجرد اكتمال التنفيذ.
+
+## تفعيل البث
+
+لتفعيل البث، عيّن معامل `stream` إلى `True` عند إنشاء طاقمك:
+
+```python Code
+from crewai import Agent, Crew, Task
+
+# Create your agents and tasks
+researcher = Agent(
+ role="Research Analyst",
+ goal="Gather comprehensive information on topics",
+ backstory="You are an experienced researcher with excellent analytical skills.",
+)
+
+task = Task(
+ description="Research the latest developments in AI",
+ expected_output="A detailed report on recent AI advancements",
+ agent=researcher,
+)
+
+# Enable streaming
+crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ stream=True # Enable streaming output
+)
+```
+
+## البث المتزامن
+
+عند استدعاء `kickoff()` على طاقم مع تفعيل البث، يُرجع كائن `CrewStreamingOutput` يمكنك التكرار عليه لاستلام الأجزاء فور وصولها:
+
+```python Code
+# Start streaming execution
+streaming = crew.kickoff(inputs={"topic": "artificial intelligence"})
+
+# Iterate over chunks as they arrive
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+# Access the final result after streaming completes
+result = streaming.result
+print(f"\n\nFinal output: {result.raw}")
+```
+
+### معلومات جزء البث
+
+يوفر كل جزء سياقاً غنياً حول التنفيذ:
+
+```python Code
+streaming = crew.kickoff(inputs={"topic": "AI"})
+
+for chunk in streaming:
+ print(f"Task: {chunk.task_name} (index {chunk.task_index})")
+ print(f"Agent: {chunk.agent_role}")
+ print(f"Content: {chunk.content}")
+ print(f"Type: {chunk.chunk_type}") # TEXT or TOOL_CALL
+ if chunk.tool_call:
+ print(f"Tool: {chunk.tool_call.tool_name}")
+ print(f"Arguments: {chunk.tool_call.arguments}")
+```
+
+### الوصول إلى نتائج البث
+
+يوفر كائن `CrewStreamingOutput` عدة خصائص مفيدة:
+
+```python Code
+streaming = crew.kickoff(inputs={"topic": "AI"})
+
+# Iterate and collect chunks
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+# After iteration completes
+print(f"\nCompleted: {streaming.is_completed}")
+print(f"Full text: {streaming.get_full_text()}")
+print(f"All chunks: {len(streaming.chunks)}")
+print(f"Final result: {streaming.result.raw}")
+```
+
+## البث غير المتزامن
+
+للتطبيقات غير المتزامنة، يمكنك استخدام إما `akickoff()` (async أصلي) أو `kickoff_async()` (قائم على الخيوط) مع التكرار غير المتزامن:
+
+### async أصلي مع `akickoff()`
+
+توفر طريقة `akickoff()` تنفيذاً غير متزامن أصلياً حقيقياً عبر السلسلة بالكامل:
+
+```python Code
+import asyncio
+
+async def stream_crew():
+ crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ stream=True
+ )
+
+ # Start native async streaming
+ streaming = await crew.akickoff(inputs={"topic": "AI"})
+
+ # Async iteration over chunks
+ async for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+ # Access final result
+ result = streaming.result
+ print(f"\n\nFinal output: {result.raw}")
+
+asyncio.run(stream_crew())
+```
+
+### async قائم على الخيوط مع `kickoff_async()`
+
+للتكامل البسيط مع async أو التوافق مع الإصدارات السابقة:
+
+```python Code
+import asyncio
+
+async def stream_crew():
+ crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ stream=True
+ )
+
+ # Start thread-based async streaming
+ streaming = await crew.kickoff_async(inputs={"topic": "AI"})
+
+ # Async iteration over chunks
+ async for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+ # Access final result
+ result = streaming.result
+ print(f"\n\nFinal output: {result.raw}")
+
+asyncio.run(stream_crew())
+```
+
+
+لأحمال العمل عالية التزامن، يُوصى باستخدام `akickoff()` لأنه يستخدم async أصلي لتنفيذ المهام وعمليات الذاكرة واسترجاع المعرفة. راجع دليل [تشغيل الطاقم بشكل غير متزامن](/ar/learn/kickoff-async) لمزيد من التفاصيل.
+
+
+## البث مع kickoff_for_each
+
+عند تنفيذ طاقم لمدخلات متعددة مع `kickoff_for_each()`، يعمل البث بشكل مختلف حسب ما إذا كنت تستخدم المتزامن أو غير المتزامن:
+
+### kickoff_for_each المتزامن
+
+مع `kickoff_for_each()` المتزامن، تحصل على قائمة كائنات `CrewStreamingOutput`، واحد لكل مدخل:
+
+```python Code
+crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ stream=True
+)
+
+inputs_list = [
+ {"topic": "AI in healthcare"},
+ {"topic": "AI in finance"}
+]
+
+# Returns list of streaming outputs
+streaming_outputs = crew.kickoff_for_each(inputs=inputs_list)
+
+# Iterate over each streaming output
+for i, streaming in enumerate(streaming_outputs):
+ print(f"\n=== Input {i + 1} ===")
+ for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+ result = streaming.result
+ print(f"\n\nResult {i + 1}: {result.raw}")
+```
+
+### kickoff_for_each_async غير المتزامن
+
+مع `kickoff_for_each_async()` غير المتزامن، تحصل على `CrewStreamingOutput` واحد يُخرج أجزاء من جميع الأطقم فور وصولها بشكل متزامن:
+
+```python Code
+import asyncio
+
+async def stream_multiple_crews():
+ crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ stream=True
+ )
+
+ inputs_list = [
+ {"topic": "AI in healthcare"},
+ {"topic": "AI in finance"}
+ ]
+
+ # Returns single streaming output for all crews
+ streaming = await crew.kickoff_for_each_async(inputs=inputs_list)
+
+ # Chunks from all crews arrive as they're generated
+ async for chunk in streaming:
+ print(f"[{chunk.task_name}] {chunk.content}", end="", flush=True)
+
+ # Access all results
+ results = streaming.results # List of CrewOutput objects
+ for i, result in enumerate(results):
+ print(f"\n\nResult {i + 1}: {result.raw}")
+
+asyncio.run(stream_multiple_crews())
+```
+
+## أنواع أجزاء البث
+
+يمكن أن تكون الأجزاء من أنواع مختلفة، يُشار إليها بحقل `chunk_type`:
+
+### أجزاء TEXT
+
+محتوى نصي قياسي من استجابات LLM:
+
+```python Code
+for chunk in streaming:
+ if chunk.chunk_type == StreamChunkType.TEXT:
+ print(chunk.content, end="", flush=True)
+```
+
+### أجزاء TOOL_CALL
+
+معلومات حول استدعاءات الأدوات الجارية:
+
+```python Code
+for chunk in streaming:
+ if chunk.chunk_type == StreamChunkType.TOOL_CALL:
+ print(f"\nCalling tool: {chunk.tool_call.tool_name}")
+ print(f"Arguments: {chunk.tool_call.arguments}")
+```
+
+## مثال عملي: بناء واجهة مستخدم مع البث
+
+إليك مثالاً كاملاً يوضح كيفية بناء تطبيق تفاعلي مع البث:
+
+```python Code
+import asyncio
+from crewai import Agent, Crew, Task
+from crewai.types.streaming import StreamChunkType
+
+async def interactive_research():
+ # Create crew with streaming enabled
+ researcher = Agent(
+ role="Research Analyst",
+ goal="Provide detailed analysis on any topic",
+ backstory="You are an expert researcher with broad knowledge.",
+ )
+
+ task = Task(
+ description="Research and analyze: {topic}",
+ expected_output="A comprehensive analysis with key insights",
+ agent=researcher,
+ )
+
+ crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ stream=True,
+ verbose=False
+ )
+
+ # Get user input
+ topic = input("Enter a topic to research: ")
+
+ print(f"\n{'='*60}")
+ print(f"Researching: {topic}")
+ print(f"{'='*60}\n")
+
+ # Start streaming execution
+ streaming = await crew.kickoff_async(inputs={"topic": topic})
+
+ current_task = ""
+ async for chunk in streaming:
+ # Show task transitions
+ if chunk.task_name != current_task:
+ current_task = chunk.task_name
+ print(f"\n[{chunk.agent_role}] Working on: {chunk.task_name}")
+ print("-" * 60)
+
+ # Display text chunks
+ if chunk.chunk_type == StreamChunkType.TEXT:
+ print(chunk.content, end="", flush=True)
+
+ # Display tool calls
+ elif chunk.chunk_type == StreamChunkType.TOOL_CALL and chunk.tool_call:
+ print(f"\n🔧 Using tool: {chunk.tool_call.tool_name}")
+
+ # Show final result
+ result = streaming.result
+ print(f"\n\n{'='*60}")
+ print("Analysis Complete!")
+ print(f"{'='*60}")
+ print(f"\nToken Usage: {result.token_usage}")
+
+asyncio.run(interactive_research())
+```
+
+## حالات الاستخدام
+
+البث ذو قيمة خاصة لـ:
+
+- **التطبيقات التفاعلية**: تقديم تغذية راجعة فورية للمستخدمين أثناء عمل الوكلاء
+- **المهام طويلة التشغيل**: عرض التقدم للبحث والتحليل أو توليد المحتوى
+- **التصحيح والمراقبة**: مراقبة سلوك الوكلاء واتخاذ القرارات في الوقت الفعلي
+- **تجربة المستخدم**: تقليل زمن الاستجابة المتصور بعرض نتائج تدريجية
+- **لوحات المعلومات الحية**: بناء واجهات مراقبة تعرض حالة تنفيذ الطاقم
+
+## الإلغاء وتنظيف الموارد
+
+يدعم `CrewStreamingOutput` الإلغاء السلس بحيث يتوقف العمل الجاري فوراً عند انقطاع اتصال المستهلك.
+
+### مدير السياق غير المتزامن
+
+```python Code
+streaming = await crew.akickoff(inputs={"topic": "AI"})
+
+async with streaming:
+ async for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+```
+
+### الإلغاء الصريح
+
+```python Code
+streaming = await crew.akickoff(inputs={"topic": "AI"})
+try:
+ async for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+finally:
+ await streaming.aclose() # غير متزامن
+ # streaming.close() # المكافئ المتزامن
+```
+
+بعد الإلغاء، يكون كل من `streaming.is_cancelled` و `streaming.is_completed` بقيمة `True`. كل من `aclose()` و `close()` متساويان القوة.
+
+## ملاحظات مهمة
+
+- يفعّل البث تلقائياً بث LLM لجميع الوكلاء في الطاقم
+- يجب التكرار عبر جميع الأجزاء قبل الوصول إلى خاصية `.result`
+- لـ `kickoff_for_each_async()` مع البث، استخدم `.results` (بصيغة الجمع) للحصول على جميع المخرجات
+- يضيف البث حملاً ضئيلاً ويمكن أن يحسن الأداء المتصور فعلياً
+- يتضمن كل جزء سياقاً كاملاً (المهمة، الوكيل، نوع الجزء) لواجهات مستخدم غنية
+
+## معالجة الأخطاء
+
+التعامل مع الأخطاء أثناء تنفيذ البث:
+
+```python Code
+streaming = crew.kickoff(inputs={"topic": "AI"})
+
+try:
+ for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+ result = streaming.result
+ print(f"\nSuccess: {result.raw}")
+
+except Exception as e:
+ print(f"\nError during streaming: {e}")
+ if streaming.is_completed:
+ print("Streaming completed but an error occurred")
+```
+
+من خلال الاستفادة من البث، يمكنك بناء تطبيقات أكثر استجابة وتفاعلية مع CrewAI، مما يوفر للمستخدمين رؤية فورية لتنفيذ الوكلاء والنتائج.
diff --git a/docs/v1.15.1/ar/learn/streaming-flow-execution.mdx b/docs/v1.15.1/ar/learn/streaming-flow-execution.mdx
new file mode 100644
index 000000000..de4575b1c
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/streaming-flow-execution.mdx
@@ -0,0 +1,478 @@
+---
+title: بث تنفيذ التدفق
+description: بث المخرجات في الوقت الفعلي من تنفيذ تدفق CrewAI الخاص بك
+icon: wave-pulse
+mode: "wide"
+---
+
+## مقدمة
+
+تدعم تدفقات CrewAI بث المخرجات، مما يتيح لك استلام تحديثات فورية أثناء تنفيذ تدفقك. تمكّنك هذه الميزة من بناء تطبيقات متجاوبة تعرض النتائج تدريجياً وتوفر تحديثات تقدم حية وتخلق تجربة مستخدم أفضل لسير العمل طويلة التشغيل.
+
+## كيف يعمل بث التدفق
+
+عند تفعيل البث في تدفق، يلتقط CrewAI ويبث المخرجات من أي أطقم أو استدعاءات LLM داخل التدفق. يقدم البث أجزاء منظمة تحتوي على المحتوى وسياق المهمة ومعلومات الوكيل مع تقدم التنفيذ.
+
+## تفعيل البث
+
+لتفعيل البث، عيّن خاصية `stream` إلى `True` في فئة التدفق الخاصة بك:
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+from crewai import Agent, Crew, Task
+
+class ResearchFlow(Flow):
+ stream = True # Enable streaming for the entire flow
+
+ @start()
+ def initialize(self):
+ return {"topic": "AI trends"}
+
+ @listen(initialize)
+ def research_topic(self, data):
+ researcher = Agent(
+ role="Research Analyst",
+ goal="Research topics thoroughly",
+ backstory="Expert researcher with analytical skills",
+ )
+
+ task = Task(
+ description="Research {topic} and provide insights",
+ expected_output="Detailed research findings",
+ agent=researcher,
+ )
+
+ crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ )
+
+ return crew.kickoff(inputs=data)
+```
+
+## البث المتزامن
+
+عند استدعاء `kickoff()` على تدفق مع تفعيل البث، يُرجع كائن `FlowStreamingOutput` يمكنك التكرار عليه:
+
+```python Code
+flow = ResearchFlow()
+
+# Start streaming execution
+streaming = flow.kickoff()
+
+# Iterate over chunks as they arrive
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+# Access the final result after streaming completes
+result = streaming.result
+print(f"\n\nFinal output: {result}")
+```
+
+### معلومات جزء البث
+
+يوفر كل جزء سياقاً حول مصدره في التدفق:
+
+```python Code
+streaming = flow.kickoff()
+
+for chunk in streaming:
+ print(f"Agent: {chunk.agent_role}")
+ print(f"Task: {chunk.task_name}")
+ print(f"Content: {chunk.content}")
+ print(f"Type: {chunk.chunk_type}") # TEXT or TOOL_CALL
+```
+
+### الوصول إلى خصائص البث
+
+يوفر كائن `FlowStreamingOutput` خصائص وطرق مفيدة:
+
+```python Code
+streaming = flow.kickoff()
+
+# Iterate and collect chunks
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+# After iteration completes
+print(f"\nCompleted: {streaming.is_completed}")
+print(f"Full text: {streaming.get_full_text()}")
+print(f"Total chunks: {len(streaming.chunks)}")
+print(f"Final result: {streaming.result}")
+```
+
+## البث غير المتزامن
+
+للتطبيقات غير المتزامنة، استخدم `kickoff_async()` مع التكرار غير المتزامن:
+
+```python Code
+import asyncio
+
+async def stream_flow():
+ flow = ResearchFlow()
+
+ # Start async streaming
+ streaming = await flow.kickoff_async()
+
+ # Async iteration over chunks
+ async for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+ # Access final result
+ result = streaming.result
+ print(f"\n\nFinal output: {result}")
+
+asyncio.run(stream_flow())
+```
+
+## البث مع التدفقات متعددة الخطوات
+
+يعمل البث بسلاسة عبر خطوات تدفق متعددة، بما في ذلك التدفقات التي تنفذ أطقم متعددة:
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+from crewai import Agent, Crew, Task
+
+class MultiStepFlow(Flow):
+ stream = True
+
+ @start()
+ def research_phase(self):
+ """First crew: Research the topic."""
+ researcher = Agent(
+ role="Research Analyst",
+ goal="Gather comprehensive information",
+ backstory="Expert at finding relevant information",
+ )
+
+ task = Task(
+ description="Research AI developments in healthcare",
+ expected_output="Research findings on AI in healthcare",
+ agent=researcher,
+ )
+
+ crew = Crew(agents=[researcher], tasks=[task])
+ result = crew.kickoff()
+
+ self.state["research"] = result.raw
+ return result.raw
+
+ @listen(research_phase)
+ def analysis_phase(self, research_data):
+ """Second crew: Analyze the research."""
+ analyst = Agent(
+ role="Data Analyst",
+ goal="Analyze information and extract insights",
+ backstory="Expert at identifying patterns and trends",
+ )
+
+ task = Task(
+ description="Analyze this research: {research}",
+ expected_output="Key insights and trends",
+ agent=analyst,
+ )
+
+ crew = Crew(agents=[analyst], tasks=[task])
+ return crew.kickoff(inputs={"research": research_data})
+
+
+# Stream across both phases
+flow = MultiStepFlow()
+streaming = flow.kickoff()
+
+current_step = ""
+for chunk in streaming:
+ # Track which flow step is executing
+ if chunk.task_name != current_step:
+ current_step = chunk.task_name
+ print(f"\n\n=== {chunk.task_name} ===\n")
+
+ print(chunk.content, end="", flush=True)
+
+result = streaming.result
+print(f"\n\nFinal analysis: {result}")
+```
+
+## مثال عملي: لوحة معلومات التقدم
+
+إليك مثالاً كاملاً يوضح كيفية بناء لوحة معلومات تقدم مع البث:
+
+```python Code
+import asyncio
+from crewai.flow.flow import Flow, listen, start
+from crewai import Agent, Crew, Task
+from crewai.types.streaming import StreamChunkType
+
+class ResearchPipeline(Flow):
+ stream = True
+
+ @start()
+ def gather_data(self):
+ researcher = Agent(
+ role="Data Gatherer",
+ goal="Collect relevant information",
+ backstory="Skilled at finding quality sources",
+ )
+
+ task = Task(
+ description="Gather data on renewable energy trends",
+ expected_output="Collection of relevant data points",
+ agent=researcher,
+ )
+
+ crew = Crew(agents=[researcher], tasks=[task])
+ result = crew.kickoff()
+ self.state["data"] = result.raw
+ return result.raw
+
+ @listen(gather_data)
+ def analyze_data(self, data):
+ analyst = Agent(
+ role="Data Analyst",
+ goal="Extract meaningful insights",
+ backstory="Expert at data analysis",
+ )
+
+ task = Task(
+ description="Analyze: {data}",
+ expected_output="Key insights and trends",
+ agent=analyst,
+ )
+
+ crew = Crew(agents=[analyst], tasks=[task])
+ return crew.kickoff(inputs={"data": data})
+
+
+async def run_with_dashboard():
+ flow = ResearchPipeline()
+
+ print("="*60)
+ print("RESEARCH PIPELINE DASHBOARD")
+ print("="*60)
+
+ streaming = await flow.kickoff_async()
+
+ current_agent = ""
+ current_task = ""
+ chunk_count = 0
+
+ async for chunk in streaming:
+ chunk_count += 1
+
+ # Display phase transitions
+ if chunk.task_name != current_task:
+ current_task = chunk.task_name
+ current_agent = chunk.agent_role
+ print(f"\n\n📋 Phase: {current_task}")
+ print(f"👤 Agent: {current_agent}")
+ print("-" * 60)
+
+ # Display text output
+ if chunk.chunk_type == StreamChunkType.TEXT:
+ print(chunk.content, end="", flush=True)
+
+ # Display tool usage
+ elif chunk.chunk_type == StreamChunkType.TOOL_CALL and chunk.tool_call:
+ print(f"\n🔧 Tool: {chunk.tool_call.tool_name}")
+
+ # Show completion summary
+ result = streaming.result
+ print(f"\n\n{'='*60}")
+ print("PIPELINE COMPLETE")
+ print(f"{'='*60}")
+ print(f"Total chunks: {chunk_count}")
+ print(f"Final output length: {len(str(result))} characters")
+
+asyncio.run(run_with_dashboard())
+```
+
+## البث مع إدارة الحالة
+
+يعمل البث بشكل طبيعي مع إدارة حالة التدفق:
+
+```python Code
+from pydantic import BaseModel
+
+class AnalysisState(BaseModel):
+ topic: str = ""
+ research: str = ""
+ insights: str = ""
+
+class StatefulStreamingFlow(Flow[AnalysisState]):
+ stream = True
+
+ @start()
+ def research(self):
+ # State is available during streaming
+ topic = self.state.topic
+ print(f"Researching: {topic}")
+
+ researcher = Agent(
+ role="Researcher",
+ goal="Research topics thoroughly",
+ backstory="Expert researcher",
+ )
+
+ task = Task(
+ description=f"Research {topic}",
+ expected_output="Research findings",
+ agent=researcher,
+ )
+
+ crew = Crew(agents=[researcher], tasks=[task])
+ result = crew.kickoff()
+
+ self.state.research = result.raw
+ return result.raw
+
+ @listen(research)
+ def analyze(self, research):
+ # Access updated state
+ print(f"Analyzing {len(self.state.research)} chars of research")
+
+ analyst = Agent(
+ role="Analyst",
+ goal="Extract insights",
+ backstory="Expert analyst",
+ )
+
+ task = Task(
+ description="Analyze: {research}",
+ expected_output="Key insights",
+ agent=analyst,
+ )
+
+ crew = Crew(agents=[analyst], tasks=[task])
+ result = crew.kickoff(inputs={"research": research})
+
+ self.state.insights = result.raw
+ return result.raw
+
+
+# Run with streaming
+flow = StatefulStreamingFlow()
+streaming = flow.kickoff(inputs={"topic": "quantum computing"})
+
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+result = streaming.result
+print(f"\n\nFinal state:")
+print(f"Topic: {flow.state.topic}")
+print(f"Research length: {len(flow.state.research)}")
+print(f"Insights length: {len(flow.state.insights)}")
+```
+
+## حالات الاستخدام
+
+بث التدفق ذو قيمة خاصة لـ:
+
+- **سير العمل متعددة المراحل**: عرض التقدم عبر مراحل البحث والتحليل والتوليف
+- **خطوط الأنابيب المعقدة**: توفير رؤية لتدفقات معالجة البيانات طويلة التشغيل
+- **التطبيقات التفاعلية**: بناء واجهات مستخدم متجاوبة تعرض النتائج الوسيطة
+- **المراقبة والتصحيح**: مراقبة تنفيذ التدفق وتفاعلات الأطقم في الوقت الفعلي
+- **تتبع التقدم**: إظهار المرحلة الحالية من سير العمل للمستخدمين
+- **لوحات المعلومات الحية**: إنشاء واجهات مراقبة لتدفقات الإنتاج
+
+## أنواع أجزاء البث
+
+مثل بث الطاقم، يمكن أن تكون أجزاء التدفق من أنواع مختلفة:
+
+### أجزاء TEXT
+
+محتوى نصي قياسي من استجابات LLM:
+
+```python Code
+for chunk in streaming:
+ if chunk.chunk_type == StreamChunkType.TEXT:
+ print(chunk.content, end="", flush=True)
+```
+
+### أجزاء TOOL_CALL
+
+معلومات حول استدعاءات الأدوات داخل التدفق:
+
+```python Code
+for chunk in streaming:
+ if chunk.chunk_type == StreamChunkType.TOOL_CALL and chunk.tool_call:
+ print(f"\nTool: {chunk.tool_call.tool_name}")
+ print(f"Args: {chunk.tool_call.arguments}")
+```
+
+## معالجة الأخطاء
+
+التعامل مع الأخطاء بأناقة أثناء البث:
+
+```python Code
+flow = ResearchFlow()
+streaming = flow.kickoff()
+
+try:
+ for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+ result = streaming.result
+ print(f"\nSuccess! Result: {result}")
+
+except Exception as e:
+ print(f"\nError during flow execution: {e}")
+ if streaming.is_completed:
+ print("Streaming completed but flow encountered an error")
+```
+
+## الإلغاء وتنظيف الموارد
+
+يدعم `FlowStreamingOutput` الإلغاء السلس بحيث يتوقف العمل الجاري فوراً عند انقطاع اتصال المستهلك.
+
+### مدير السياق غير المتزامن
+
+```python Code
+streaming = await flow.kickoff_async()
+
+async with streaming:
+ async for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+```
+
+### الإلغاء الصريح
+
+```python Code
+streaming = await flow.kickoff_async()
+try:
+ async for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+finally:
+ await streaming.aclose() # غير متزامن
+ # streaming.close() # المكافئ المتزامن
+```
+
+بعد الإلغاء، يكون كل من `streaming.is_cancelled` و `streaming.is_completed` بقيمة `True`. كل من `aclose()` و `close()` متساويان القوة.
+
+## ملاحظات مهمة
+
+- يفعّل البث تلقائياً بث LLM لأي أطقم مستخدمة داخل التدفق
+- يجب التكرار عبر جميع الأجزاء قبل الوصول إلى خاصية `.result`
+- يعمل البث مع كل من حالة التدفق المنظمة وغير المنظمة
+- يلتقط بث التدفق المخرجات من جميع الأطقم واستدعاءات LLM في التدفق
+- يتضمن كل جزء سياقاً حول الوكيل والمهمة التي ولدته
+- يضيف البث حملاً ضئيلاً لتنفيذ التدفق
+
+## الدمج مع تصور التدفق
+
+يمكنك دمج البث مع تصور التدفق لتوفير صورة كاملة:
+
+```python Code
+# Generate flow visualization
+flow = ResearchFlow()
+flow.plot("research_flow") # Creates HTML visualization
+
+# Run with streaming
+streaming = flow.kickoff()
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+result = streaming.result
+print(f"\nFlow complete! View structure at: research_flow.html")
+```
+
+من خلال الاستفادة من بث التدفق، يمكنك بناء تطبيقات متطورة ومتجاوبة توفر للمستخدمين رؤية فورية لسير العمل المعقدة متعددة المراحل، مما يجعل أتمتة الذكاء الاصطناعي الخاصة بك أكثر شفافية وجاذبية.
diff --git a/docs/v1.15.1/ar/learn/tool-hooks.mdx b/docs/v1.15.1/ar/learn/tool-hooks.mdx
new file mode 100644
index 000000000..372db5924
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/tool-hooks.mdx
@@ -0,0 +1,480 @@
+---
+title: خطافات استدعاء الأدوات
+description: تعلم كيفية استخدام خطافات استدعاء الأدوات لاعتراض وتعديل والتحكم في تنفيذ الأدوات في CrewAI
+mode: "wide"
+---
+
+توفر خطافات استدعاء الأدوات تحكماً دقيقاً في تنفيذ الأدوات أثناء عمليات الوكيل. تتيح لك هذه الخطافات اعتراض استدعاءات الأدوات وتعديل المدخلات وتحويل المخرجات وتنفيذ فحوصات السلامة وإضافة تسجيل أو مراقبة شاملة.
+
+## نظرة عامة
+
+تُنفذ خطافات الأدوات في نقطتين حرجتين:
+- **قبل استدعاء الأداة**: تعديل المدخلات، التحقق من المعاملات، أو حظر التنفيذ
+- **بعد استدعاء الأداة**: تحويل النتائج، تنقية المخرجات، أو تسجيل تفاصيل التنفيذ
+
+## أنواع الخطافات
+
+### خطافات ما قبل استدعاء الأداة
+
+تُنفذ قبل كل تنفيذ أداة، ويمكن لهذه الخطافات:
+- فحص وتعديل مدخلات الأداة
+- حظر تنفيذ الأداة بناءً على شروط
+- تنفيذ بوابات موافقة للعمليات الخطرة
+- التحقق من المعاملات
+- تسجيل استدعاءات الأدوات
+
+**التوقيع:**
+```python
+def before_hook(context: ToolCallHookContext) -> bool | None:
+ # Return False to block execution
+ # Return True or None to allow execution
+ ...
+```
+
+### خطافات ما بعد استدعاء الأداة
+
+تُنفذ بعد كل تنفيذ أداة، ويمكن لهذه الخطافات:
+- تعديل أو تنقية نتائج الأداة
+- إضافة بيانات وصفية أو تنسيق
+- تسجيل نتائج التنفيذ
+- تنفيذ التحقق من النتائج
+- تحويل تنسيقات المخرجات
+
+**التوقيع:**
+```python
+def after_hook(context: ToolCallHookContext) -> str | None:
+ # Return modified result string
+ # Return None to keep original result
+ ...
+```
+
+## سياق خطاف الأداة
+
+يوفر كائن `ToolCallHookContext` وصولاً شاملاً لحالة تنفيذ الأداة:
+
+```python
+class ToolCallHookContext:
+ tool_name: str # Name of the tool being called
+ tool_input: dict[str, Any] # Mutable tool input parameters
+ tool: CrewStructuredTool # Tool instance reference
+ agent: Agent | BaseAgent | None # Agent executing the tool
+ task: Task | None # Current task
+ crew: Crew | None # Crew instance
+ tool_result: str | None # Tool result (after hooks only)
+```
+
+### تعديل مدخلات الأداة
+
+**مهم:** قم دائماً بتعديل مدخلات الأداة في مكانها:
+
+```python
+# ✅ Correct - modify in-place
+def sanitize_input(context: ToolCallHookContext) -> None:
+ context.tool_input['query'] = context.tool_input['query'].lower()
+
+# ❌ Wrong - replaces dict reference
+def wrong_approach(context: ToolCallHookContext) -> None:
+ context.tool_input = {'query': 'new query'}
+```
+
+## طرق التسجيل
+
+### 1. تسجيل الخطافات العامة
+
+تسجيل خطافات تنطبق على جميع استدعاءات الأدوات عبر جميع الأطقم:
+
+```python
+from crewai.hooks import register_before_tool_call_hook, register_after_tool_call_hook
+
+def log_tool_call(context):
+ print(f"Tool: {context.tool_name}")
+ print(f"Input: {context.tool_input}")
+ return None # Allow execution
+
+register_before_tool_call_hook(log_tool_call)
+```
+
+### 2. التسجيل باستخدام المزخرفات
+
+استخدم المزخرفات لصياغة أنظف:
+
+```python
+from crewai.hooks import before_tool_call, after_tool_call
+
+@before_tool_call
+def block_dangerous_tools(context):
+ dangerous_tools = ['delete_database', 'drop_table', 'rm_rf']
+ if context.tool_name in dangerous_tools:
+ print(f"⛔ Blocked dangerous tool: {context.tool_name}")
+ return False # Block execution
+ return None
+
+@after_tool_call
+def sanitize_results(context):
+ if context.tool_result and "password" in context.tool_result.lower():
+ return context.tool_result.replace("password", "[REDACTED]")
+ return None
+```
+
+### 3. خطافات نطاق الطاقم
+
+تسجيل خطافات لمثيل طاقم محدد:
+
+```python
+@CrewBase
+class MyProjCrew:
+ @before_tool_call_crew
+ def validate_tool_inputs(self, context):
+ # Only applies to this crew
+ if context.tool_name == "web_search":
+ if not context.tool_input.get('query'):
+ print("❌ Invalid search query")
+ return False
+ return None
+
+ @after_tool_call_crew
+ def log_tool_results(self, context):
+ # Crew-specific tool logging
+ print(f"✅ {context.tool_name} completed")
+ return None
+
+ @crew
+ def crew(self) -> Crew:
+ return Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ verbose=True
+ )
+```
+
+## حالات الاستخدام الشائعة
+
+### 1. حواجز السلامة
+
+```python
+@before_tool_call
+def safety_check(context: ToolCallHookContext) -> bool | None:
+ destructive_tools = [
+ 'delete_file',
+ 'drop_table',
+ 'remove_user',
+ 'system_shutdown'
+ ]
+
+ if context.tool_name in destructive_tools:
+ print(f"🛑 Blocked destructive tool: {context.tool_name}")
+ return False
+
+ sensitive_tools = ['send_email', 'post_to_social_media', 'charge_payment']
+ if context.tool_name in sensitive_tools:
+ print(f"⚠️ Executing sensitive tool: {context.tool_name}")
+
+ return None
+```
+
+### 2. بوابة الموافقة البشرية
+
+```python
+@before_tool_call
+def require_approval_for_actions(context: ToolCallHookContext) -> bool | None:
+ approval_required = [
+ 'send_email',
+ 'make_purchase',
+ 'delete_file',
+ 'post_message'
+ ]
+
+ if context.tool_name in approval_required:
+ response = context.request_human_input(
+ prompt=f"Approve {context.tool_name}?",
+ default_message=f"Input: {context.tool_input}\nType 'yes' to approve:"
+ )
+
+ if response.lower() != 'yes':
+ print(f"❌ Tool execution denied: {context.tool_name}")
+ return False
+
+ return None
+```
+
+### 3. التحقق من المدخلات وتنقيتها
+
+```python
+@before_tool_call
+def validate_and_sanitize_inputs(context: ToolCallHookContext) -> bool | None:
+ if context.tool_name == 'web_search':
+ query = context.tool_input.get('query', '')
+ if len(query) < 3:
+ print("❌ Search query too short")
+ return False
+ context.tool_input['query'] = query.strip().lower()
+
+ if context.tool_name == 'read_file':
+ path = context.tool_input.get('path', '')
+ if '..' in path or path.startswith('/'):
+ print("❌ Invalid file path")
+ return False
+
+ return None
+```
+
+### 4. تنقية النتائج
+
+```python
+@after_tool_call
+def sanitize_sensitive_data(context: ToolCallHookContext) -> str | None:
+ if not context.tool_result:
+ return None
+
+ import re
+ result = context.tool_result
+
+ result = re.sub(
+ r'(api[_-]?key|token)["\']?\s*[:=]\s*["\']?[\w-]+',
+ r'\1: [REDACTED]',
+ result,
+ flags=re.IGNORECASE
+ )
+
+ result = re.sub(
+ r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',
+ '[EMAIL-REDACTED]',
+ result
+ )
+
+ result = re.sub(
+ r'\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b',
+ '[CARD-REDACTED]',
+ result
+ )
+
+ return result
+```
+
+### 5. تحليلات استخدام الأدوات
+
+```python
+import time
+from collections import defaultdict
+
+tool_stats = defaultdict(lambda: {'count': 0, 'total_time': 0, 'failures': 0})
+
+@before_tool_call
+def start_timer(context: ToolCallHookContext) -> None:
+ context.tool_input['_start_time'] = time.time()
+ return None
+
+@after_tool_call
+def track_tool_usage(context: ToolCallHookContext) -> None:
+ start_time = context.tool_input.get('_start_time', time.time())
+ duration = time.time() - start_time
+
+ tool_stats[context.tool_name]['count'] += 1
+ tool_stats[context.tool_name]['total_time'] += duration
+
+ if not context.tool_result or 'error' in context.tool_result.lower():
+ tool_stats[context.tool_name]['failures'] += 1
+
+ print(f"""
+ 📊 Tool Stats for {context.tool_name}:
+ - Executions: {tool_stats[context.tool_name]['count']}
+ - Avg Time: {tool_stats[context.tool_name]['total_time'] / tool_stats[context.tool_name]['count']:.2f}s
+ - Failures: {tool_stats[context.tool_name]['failures']}
+ """)
+
+ return None
+```
+
+### 6. تحديد المعدل
+
+```python
+from collections import defaultdict
+from datetime import datetime, timedelta
+
+tool_call_history = defaultdict(list)
+
+@before_tool_call
+def rate_limit_tools(context: ToolCallHookContext) -> bool | None:
+ tool_name = context.tool_name
+ now = datetime.now()
+
+ tool_call_history[tool_name] = [
+ call_time for call_time in tool_call_history[tool_name]
+ if now - call_time < timedelta(minutes=1)
+ ]
+
+ if len(tool_call_history[tool_name]) >= 10:
+ print(f"🚫 Rate limit exceeded for {tool_name}")
+ return False
+
+ tool_call_history[tool_name].append(now)
+ return None
+```
+
+### 7. تخزين نتائج الأدوات مؤقتاً
+
+```python
+import hashlib
+import json
+
+tool_cache = {}
+
+def cache_key(tool_name: str, tool_input: dict) -> str:
+ """Generate cache key from tool name and input."""
+ input_str = json.dumps(tool_input, sort_keys=True)
+ return hashlib.md5(f"{tool_name}:{input_str}".encode()).hexdigest()
+
+@before_tool_call
+def check_cache(context: ToolCallHookContext) -> bool | None:
+ key = cache_key(context.tool_name, context.tool_input)
+ if key in tool_cache:
+ print(f"💾 Cache hit for {context.tool_name}")
+ return None
+
+@after_tool_call
+def cache_result(context: ToolCallHookContext) -> None:
+ if context.tool_result:
+ key = cache_key(context.tool_name, context.tool_input)
+ tool_cache[key] = context.tool_result
+ print(f"💾 Cached result for {context.tool_name}")
+ return None
+```
+
+### 8. تسجيل التصحيح
+
+```python
+@before_tool_call
+def debug_tool_call(context: ToolCallHookContext) -> None:
+ print(f"""
+ 🔍 Tool Call Debug:
+ - Tool: {context.tool_name}
+ - Agent: {context.agent.role if context.agent else 'Unknown'}
+ - Task: {context.task.description[:50] if context.task else 'Unknown'}...
+ - Input: {context.tool_input}
+ """)
+ return None
+
+@after_tool_call
+def debug_tool_result(context: ToolCallHookContext) -> None:
+ if context.tool_result:
+ result_preview = context.tool_result[:200]
+ print(f"✅ Result Preview: {result_preview}...")
+ else:
+ print("⚠️ No result returned")
+ return None
+```
+
+## إدارة الخطافات
+
+### إلغاء تسجيل الخطافات
+
+```python
+from crewai.hooks import (
+ unregister_before_tool_call_hook,
+ unregister_after_tool_call_hook
+)
+
+def my_hook(context):
+ ...
+
+register_before_tool_call_hook(my_hook)
+success = unregister_before_tool_call_hook(my_hook)
+print(f"Unregistered: {success}")
+```
+
+### مسح الخطافات
+
+```python
+from crewai.hooks import (
+ clear_before_tool_call_hooks,
+ clear_after_tool_call_hooks,
+ clear_all_tool_call_hooks
+)
+
+count = clear_before_tool_call_hooks()
+print(f"Cleared {count} before hooks")
+
+before_count, after_count = clear_all_tool_call_hooks()
+print(f"Cleared {before_count} before and {after_count} after hooks")
+```
+
+### عرض الخطافات المسجلة
+
+```python
+from crewai.hooks import (
+ get_before_tool_call_hooks,
+ get_after_tool_call_hooks
+)
+
+before_hooks = get_before_tool_call_hooks()
+after_hooks = get_after_tool_call_hooks()
+
+print(f"Registered: {len(before_hooks)} before, {len(after_hooks)} after")
+```
+
+## أفضل الممارسات
+
+1. **اجعل الخطافات مركزة**: يجب أن يكون لكل خطاف مسؤولية واحدة
+2. **تجنب الحسابات الثقيلة**: تُنفذ الخطافات في كل استدعاء أداة
+3. **تعامل مع الأخطاء بأناقة**: استخدم try-except لمنع فشل الخطافات
+4. **استخدم تلميحات الأنواع**: استفد من `ToolCallHookContext` لدعم أفضل في بيئة التطوير
+5. **وثّق شروط الحظر**: وضّح متى ولماذا تُحظر الأدوات
+6. **اختبر الخطافات بشكل مستقل**: اختبر الخطافات وحدوياً قبل الاستخدام في الإنتاج
+7. **امسح الخطافات في الاختبارات**: استخدم `clear_all_tool_call_hooks()` بين تشغيلات الاختبار
+8. **عدّل في المكان**: قم دائماً بتعديل `context.tool_input` في مكانه، ولا تستبدله
+9. **سجّل القرارات المهمة**: خاصة عند حظر تنفيذ الأدوات
+10. **راعِ الأداء**: خزّن عمليات التحقق المكلفة مؤقتاً عند الإمكان
+
+## معالجة الأخطاء
+
+```python
+@before_tool_call
+def safe_validation(context: ToolCallHookContext) -> bool | None:
+ try:
+ if not validate_input(context.tool_input):
+ return False
+ except Exception as e:
+ print(f"⚠️ Hook error: {e}")
+ return None # Allow execution despite error
+```
+
+## أمان الأنواع
+
+```python
+from crewai.hooks import ToolCallHookContext, BeforeToolCallHookType, AfterToolCallHookType
+
+def my_before_hook(context: ToolCallHookContext) -> bool | None:
+ return None
+
+def my_after_hook(context: ToolCallHookContext) -> str | None:
+ return None
+
+register_before_tool_call_hook(my_before_hook)
+register_after_tool_call_hook(my_after_hook)
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### الخطاف لا يُنفذ
+- تحقق من أن الخطاف مسجل قبل تنفيذ الطاقم
+- تحقق مما إذا كان خطاف سابق أرجع `False` (يحظر التنفيذ والخطافات اللاحقة)
+- تأكد من أن توقيع الخطاف يطابق النوع المتوقع
+
+### تعديلات المدخلات لا تعمل
+- استخدم التعديلات في المكان: `context.tool_input['key'] = value`
+- لا تستبدل القاموس: `context.tool_input = {}`
+
+### تعديلات النتائج لا تعمل
+- أرجع السلسلة النصية المعدلة من خطافات ما بعد
+- إرجاع `None` يحتفظ بالنتيجة الأصلية
+- تأكد من أن الأداة أرجعت نتيجة فعلاً
+
+### أداة محظورة بشكل غير متوقع
+- تحقق من جميع خطافات ما قبل بحثاً عن شروط حظر
+- تحقق من ترتيب تنفيذ الخطافات
+- أضف تسجيل تصحيح لتحديد الخطاف الذي يحظر
+
+## الخاتمة
+
+توفر خطافات استدعاء الأدوات إمكانيات قوية للتحكم في تنفيذ الأدوات ومراقبتها في CrewAI. استخدمها لتنفيذ حواجز السلامة وبوابات الموافقة والتحقق من المدخلات وتنقية النتائج والتسجيل والتحليلات. مع معالجة الأخطاء المناسبة وأمان الأنواع، تُمكّن الخطافات أنظمة وكلاء آمنة وجاهزة للإنتاج مع مراقبة شاملة.
diff --git a/docs/v1.15.1/ar/learn/using-annotations.mdx b/docs/v1.15.1/ar/learn/using-annotations.mdx
new file mode 100644
index 000000000..4bea3eb9f
--- /dev/null
+++ b/docs/v1.15.1/ar/learn/using-annotations.mdx
@@ -0,0 +1,155 @@
+---
+title: "استخدام التعليقات التوضيحية في crew.py"
+description: "تعلم كيفية استخدام التعليقات التوضيحية لتنظيم الوكلاء والمهام والمكونات بشكل صحيح في CrewAI"
+icon: "at"
+mode: "wide"
+---
+
+يشرح هذا الدليل كيفية استخدام التعليقات التوضيحية للإشارة بشكل صحيح إلى **الوكلاء** و**المهام** والمكونات الأخرى في ملف `crew.py` كلاسيكي.
+
+
+المشاريع الجديدة التي تُنشأ عبر `crewai create crew ` هي JSON-first وتستخدم `crew.jsonc` مع `agents/*.jsonc`. استخدم هذا الدليل عند العمل في مشروع كلاسيكي أُنشئ عبر `crewai create crew --classic`، أو عند ترحيل مشروع Python/YAML موجود، أو عندما تحتاج تحكمًا عبر decorators في Python.
+
+
+## مقدمة
+
+تُستخدم التعليقات التوضيحية في إطار عمل CrewAI لتزيين الفئات والطرق، مما يوفر بيانات وصفية ووظائف للمكونات المختلفة في طاقمك. في مشاريع Python/YAML الكلاسيكية، تنظم الكود الذي يحمّل `config/agents.yaml` و `config/tasks.yaml` ويعيد كائن `Crew`.
+
+## التعليقات التوضيحية المتاحة
+
+يوفر إطار عمل CrewAI التعليقات التوضيحية التالية:
+
+- `@CrewBase`: تُستخدم لتزيين فئة الطاقم الرئيسية.
+- `@agent`: تزين الطرق التي تعرّف وتُرجع كائنات Agent.
+- `@task`: تزين الطرق التي تعرّف وتُرجع كائنات Task.
+- `@crew`: تزين الطريقة التي تنشئ وتُرجع كائن Crew.
+- `@llm`: تزين الطرق التي تهيئ وتُرجع كائنات نماذج اللغة.
+- `@tool`: تزين الطرق التي تهيئ وتُرجع كائنات الأدوات.
+- `@callback`: تُستخدم لتعريف طرق الاستدعاء الراجع.
+- `@output_json`: تُستخدم للطرق التي تُخرج بيانات JSON.
+- `@output_pydantic`: تُستخدم للطرق التي تُخرج نماذج Pydantic.
+- `@cache_handler`: تُستخدم لتعريف طرق معالجة التخزين المؤقت.
+
+## أمثلة الاستخدام
+
+لنمر عبر أمثلة لكيفية استخدام هذه التعليقات التوضيحية:
+
+### 1. فئة الطاقم الأساسية
+
+```python
+@CrewBase
+class LinkedinProfileCrew():
+ """LinkedinProfile crew"""
+ agents_config = 'config/agents.yaml'
+ tasks_config = 'config/tasks.yaml'
+```
+
+تُستخدم التعليقة التوضيحية `@CrewBase` لتزيين فئة الطاقم الرئيسية. تحتوي هذه الفئة عادةً على الإعدادات والطرق لإنشاء الوكلاء والمهام والطاقم نفسه.
+
+
+`@CrewBase` تفعل أكثر من مجرد تسجيل الفئة:
+
+- **تمهيد الإعدادات:** تبحث عن `agents_config` و `tasks_config` (القيمة الافتراضية `config/agents.yaml` و `config/tasks.yaml`) بجانب ملف الفئة، وتحملها عند الإنشاء، وتتراجع بأمان إلى قواميس فارغة إذا كانت الملفات مفقودة.
+- **تنسيق المزخرفات:** تحتفظ بمراجع محفوظة لكل طريقة مُعلّمة بـ `@agent` أو `@task` أو `@before_kickoff` أو `@after_kickoff` بحيث يتم إنشاؤها مرة واحدة لكل طاقم وتُنفذ بترتيب الإعلان.
+- **ربط الخطافات:** تربط تلقائياً خطافات التشغيل المحفوظة بكائن `Crew` المُرجع من طريقة `@crew`، مما يجعلها تعمل قبل وبعد `.kickoff()`.
+- **تكامل MCP:** عندما تعرّف الفئة `mcp_server_params`، ينشئ `get_mcp_tools()` بكسل محول MCP server، ويملأ الأدوات المُعلنة، ويوقف خطاف ما بعد التشغيل الداخلي المحول. راجع [نظرة عامة على MCP](/ar/mcp/overview) لتفاصيل إعداد المحول.
+
+
+### 2. تعريف الأداة
+
+```python
+@tool
+def myLinkedInProfileTool(self):
+ return LinkedInProfileTool()
+```
+
+تُستخدم التعليقة التوضيحية `@tool` لتزيين الطرق التي تُرجع كائنات أدوات. يمكن للوكلاء استخدام هذه الأدوات لأداء مهام محددة.
+
+### 3. تعريف LLM
+
+```python
+@llm
+def groq_llm(self):
+ api_key = os.getenv('api_key')
+ return ChatGroq(api_key=api_key, temperature=0, model_name="mixtral-8x7b-32768")
+```
+
+تُستخدم التعليقة التوضيحية `@llm` لتزيين الطرق التي تهيئ وتُرجع كائنات نماذج اللغة. تستخدم هذه النماذج من قبل الوكلاء لمهام معالجة اللغة الطبيعية.
+
+### 4. تعريف الوكيل
+
+```python
+@agent
+def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config['researcher']
+ )
+```
+
+تُستخدم التعليقة التوضيحية `@agent` لتزيين الطرق التي تعرّف وتُرجع كائنات Agent.
+
+### 5. تعريف المهمة
+
+```python
+@task
+def research_task(self) -> Task:
+ return Task(
+ config=self.tasks_config['research_linkedin_task'],
+ agent=self.researcher()
+ )
+```
+
+تُستخدم التعليقة التوضيحية `@task` لتزيين الطرق التي تعرّف وتُرجع كائنات Task. تحدد هذه الطرق إعداد المهمة والوكيل المسؤول عنها.
+
+### 6. إنشاء الطاقم
+
+```python
+@crew
+def crew(self) -> Crew:
+ """Creates the LinkedinProfile crew"""
+ return Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ verbose=True
+ )
+```
+
+تُستخدم التعليقة التوضيحية `@crew` لتزيين الطريقة التي تنشئ وتُرجع كائن `Crew`. تجمع هذه الطريقة جميع المكونات (الوكلاء والمهام) في طاقم وظيفي.
+
+## إعداد YAML الكلاسيكي
+
+في المشاريع الكلاسيكية، تُخزن إعدادات الوكلاء عادةً في ملف YAML. إليك مثالاً على كيفية ظهور ملف `agents.yaml` لوكيل الباحث:
+
+```yaml
+researcher:
+ role: >
+ LinkedIn Profile Senior Data Researcher
+ goal: >
+ Uncover detailed LinkedIn profiles based on provided name {name} and domain {domain}
+ Generate a Dall-E image based on domain {domain}
+ backstory: >
+ You're a seasoned researcher with a knack for uncovering the most relevant LinkedIn profiles.
+ Known for your ability to navigate LinkedIn efficiently, you excel at gathering and presenting
+ professional information clearly and concisely.
+ allow_delegation: False
+ verbose: True
+ llm: groq_llm
+ tools:
+ - myLinkedInProfileTool
+ - mySerperDevTool
+ - myDallETool
+```
+
+يتوافق إعداد YAML هذا مع وكيل الباحث المُعرّف في فئة `LinkedinProfileCrew`. يحدد الإعداد دور الوكيل وهدفه وخلفيته وخصائص أخرى مثل LLM والأدوات التي يستخدمها.
+
+لاحظ كيف يتوافق `llm` و `tools` في ملف YAML مع الطرق المزينة بـ `@llm` و `@tool` في فئة Python.
+
+## أفضل الممارسات
+
+- **تسمية متسقة**: استخدم اصطلاحات تسمية واضحة ومتسقة لطرقك. على سبيل المثال، يمكن تسمية طرق الوكلاء بأسماء أدوارهم (مثل researcher، reporting_analyst).
+- **متغيرات البيئة**: استخدم متغيرات البيئة للمعلومات الحساسة مثل مفاتيح API.
+- **المرونة**: صمم طاقمك ليكون مرناً بالسماح بإضافة أو إزالة الوكلاء والمهام بسهولة.
+- **توافق YAML-الكود**: في المشاريع الكلاسيكية، تأكد من أن الأسماء والهياكل في ملفات YAML تتوافق بشكل صحيح مع الطرق المزينة في كود Python الخاص بك.
+
+باتباع هذه الإرشادات واستخدام التعليقات التوضيحية بشكل صحيح، يمكنك الحفاظ على أطقم كلاسيكية منظمة وسهلة الصيانة. للـ crews الجديدة، استخدم بنية JSON-first في [Crews](/ar/concepts/crews).
diff --git a/docs/v1.15.1/ar/mcp/dsl-integration.mdx b/docs/v1.15.1/ar/mcp/dsl-integration.mdx
new file mode 100644
index 000000000..392570e1f
--- /dev/null
+++ b/docs/v1.15.1/ar/mcp/dsl-integration.mdx
@@ -0,0 +1,349 @@
+---
+title: تكامل MCP DSL
+description: تعلم كيفية استخدام صياغة DSL البسيطة في CrewAI لدمج خوادم MCP مباشرة مع وكلائك باستخدام حقل mcps.
+icon: code
+mode: "wide"
+---
+
+## نظرة عامة
+
+يوفر تكامل MCP DSL (لغة المجال المحددة) في CrewAI **الطريقة الأبسط** لربط وكلائك بخوادم MCP (بروتوكول سياق النموذج). ما عليك سوى إضافة حقل `mcps` إلى وكيلك وسيتعامل CrewAI مع كل التعقيدات تلقائياً.
+
+
+ هذا هو **النهج الموصى به** لمعظم حالات استخدام MCP. للسيناريوهات المتقدمة
+ التي تتطلب إدارة اتصال يدوية، راجع
+ [MCPServerAdapter](/ar/mcp/overview#advanced-mcpserveradapter).
+
+
+## الاستخدام الأساسي
+
+أضف خوادم MCP إلى وكيلك باستخدام حقل `mcps`:
+
+```python
+from crewai import Agent
+
+agent = Agent(
+ role="Research Assistant",
+ goal="Help with research and analysis tasks",
+ backstory="Expert assistant with access to advanced research tools",
+ mcps=[
+ "https://mcp.exa.ai/mcp?api_key=your_key&profile=research"
+ ]
+)
+
+# MCP tools are now automatically available!
+# No need for manual connection management or tool configuration
+```
+
+## تنسيقات المراجع المدعومة
+
+### خوادم MCP البعيدة الخارجية
+
+```python
+# Basic HTTPS server
+"https://api.example.com/mcp"
+
+# Server with authentication
+"https://mcp.exa.ai/mcp?api_key=your_key&profile=your_profile"
+
+# Server with custom path
+"https://services.company.com/api/v1/mcp"
+```
+
+### اختيار أدوات محددة
+
+استخدم صياغة `#` لاختيار أدوات محددة من خادم:
+
+```python
+# Get only the forecast tool from weather server
+"https://weather.api.com/mcp#get_forecast"
+
+# Get only the search tool from Exa
+"https://mcp.exa.ai/mcp?api_key=your_key#web_search_exa"
+```
+
+### تكاملات MCP المتصلة
+
+اربط خوادم MCP من كتالوج CrewAI أو أحضر خوادمك الخاصة. بمجرد الاتصال في حسابك، أشر إليها بالمعرف المختصر:
+
+```python
+# Connected MCP with all tools
+"snowflake"
+
+# Specific tool from a connected MCP
+"stripe#list_invoices"
+
+# Multiple connected MCPs
+mcps=[
+ "snowflake",
+ "stripe",
+ "github"
+]
+```
+
+## مثال كامل
+
+إليك مثالاً كاملاً يستخدم خوادم MCP متعددة:
+
+```python
+from crewai import Agent, Task, Crew, Process
+
+# Create agent with multiple MCP sources
+multi_source_agent = Agent(
+ role="Multi-Source Research Analyst",
+ goal="Conduct comprehensive research using multiple data sources",
+ backstory="""Expert researcher with access to web search, weather data,
+ financial information, and academic research tools""",
+ mcps=[
+ # External MCP servers
+ "https://mcp.exa.ai/mcp?api_key=your_exa_key&profile=research",
+ "https://weather.api.com/mcp#get_current_conditions",
+
+ # Connected MCPs from catalog
+ "snowflake",
+ "stripe#list_invoices",
+ "github#search_repositories"
+ ]
+)
+
+# Create comprehensive research task
+research_task = Task(
+ description="""Research the impact of AI agents on business productivity.
+ Include current weather impacts on remote work, financial market trends,
+ and recent academic publications on AI agent frameworks.""",
+ expected_output="""Comprehensive report covering:
+ 1. AI agent business impact analysis
+ 2. Weather considerations for remote work
+ 3. Financial market trends related to AI
+ 4. Academic research citations and insights
+ 5. Competitive landscape analysis""",
+ agent=multi_source_agent
+)
+
+# Create and execute crew
+research_crew = Crew(
+ agents=[multi_source_agent],
+ tasks=[research_task],
+ process=Process.sequential,
+ verbose=True
+)
+
+result = research_crew.kickoff()
+print(f"Research completed with {len(multi_source_agent.mcps)} MCP data sources")
+```
+
+## تسمية الأدوات والتنظيم
+
+يتعامل CrewAI تلقائياً مع تسمية الأدوات لمنع التعارضات:
+
+```python
+# Original MCP server has tools: "search", "analyze"
+# CrewAI creates tools: "mcp_exa_ai_search", "mcp_exa_ai_analyze"
+
+agent = Agent(
+ role="Tool Organization Demo",
+ goal="Show how tool naming works",
+ backstory="Demonstrates automatic tool organization",
+ mcps=[
+ "https://mcp.exa.ai/mcp?api_key=key", # Tools: mcp_exa_ai_*
+ "https://weather.service.com/mcp", # Tools: weather_service_com_*
+ "snowflake" # Tools: snowflake_*
+ ]
+)
+
+# Each server's tools get unique prefixes based on the server name
+# This prevents naming conflicts between different MCP servers
+```
+
+## معالجة الأخطاء والمرونة
+
+صُمم MCP DSL ليكون متيناً وسهل الاستخدام:
+
+### التعامل الأنيق مع فشل الخادم
+
+```python
+agent = Agent(
+ role="Resilient Researcher",
+ goal="Research despite server issues",
+ backstory="Experienced researcher who adapts to available tools",
+ mcps=[
+ "https://primary-server.com/mcp", # Primary data source
+ "https://backup-server.com/mcp", # Backup if primary fails
+ "https://unreachable-server.com/mcp", # Will be skipped with warning
+ "snowflake" # Connected MCP from catalog
+ ]
+)
+
+# Agent will:
+# 1. Successfully connect to working servers
+# 2. Log warnings for failing servers
+# 3. Continue with available tools
+# 4. Not crash or hang on server failures
+```
+
+### حماية المهلة الزمنية
+
+جميع عمليات MCP لها مهلات زمنية مدمجة:
+
+- **مهلة الاتصال**: 10 ثوانٍ
+- **مهلة تنفيذ الأداة**: 30 ثانية
+- **مهلة الاكتشاف**: 15 ثانية
+
+```python
+# These servers will timeout gracefully if unresponsive
+mcps=[
+ "https://slow-server.com/mcp", # Will timeout after 10s if unresponsive
+ "https://overloaded-api.com/mcp" # Will timeout if discovery takes > 15s
+]
+```
+
+## ميزات الأداء
+
+### التخزين المؤقت التلقائي
+
+تُخزن مخططات الأدوات مؤقتاً لمدة 5 دقائق لتحسين الأداء:
+
+```python
+# First agent creation - discovers tools from server
+agent1 = Agent(role="First", goal="Test", backstory="Test",
+ mcps=["https://api.example.com/mcp"])
+
+# Second agent creation (within 5 minutes) - uses cached tool schemas
+agent2 = Agent(role="Second", goal="Test", backstory="Test",
+ mcps=["https://api.example.com/mcp"]) # Much faster!
+```
+
+### الاتصالات حسب الطلب
+
+تُنشأ اتصالات الأدوات فقط عند استخدام الأدوات فعلياً:
+
+```python
+# Agent creation is fast - no MCP connections made yet
+agent = Agent(
+ role="On-Demand Agent",
+ goal="Use tools efficiently",
+ backstory="Efficient agent that connects only when needed",
+ mcps=["https://api.example.com/mcp"]
+)
+
+# MCP connection is made only when a tool is actually executed
+# This minimizes connection overhead and improves startup performance
+```
+
+## التكامل مع الميزات الموجودة
+
+تعمل أدوات MCP بسلاسة مع ميزات CrewAI الأخرى:
+
+```python
+from crewai.tools import BaseTool
+
+class CustomTool(BaseTool):
+ name: str = "custom_analysis"
+ description: str = "Custom analysis tool"
+
+ def _run(self, **kwargs):
+ return "Custom analysis result"
+
+agent = Agent(
+ role="Full-Featured Agent",
+ goal="Use all available tool types",
+ backstory="Agent with comprehensive tool access",
+
+ # All tool types work together
+ tools=[CustomTool()], # Custom tools
+ apps=["gmail", "slack"], # Platform integrations
+ mcps=[ # MCP servers
+ "https://mcp.exa.ai/mcp?api_key=key",
+ "snowflake"
+ ],
+
+ verbose=True,
+ max_iter=15
+)
+```
+
+## أفضل الممارسات
+
+### 1. استخدم أدوات محددة عند الإمكان
+
+```python
+# Good - only get the tools you need
+mcps=["https://weather.api.com/mcp#get_forecast"]
+
+# Less efficient - gets all tools from server
+mcps=["https://weather.api.com/mcp"]
+```
+
+### 2. تعامل مع المصادقة بأمان
+
+```python
+import os
+
+# Store API keys in environment variables
+exa_key = os.getenv("EXA_API_KEY")
+exa_profile = os.getenv("EXA_PROFILE")
+
+agent = Agent(
+ role="Secure Agent",
+ goal="Use MCP tools securely",
+ backstory="Security-conscious agent",
+ mcps=[f"https://mcp.exa.ai/mcp?api_key={exa_key}&profile={exa_profile}"]
+)
+```
+
+### 3. خطط لفشل الخادم
+
+```python
+# Always include backup options
+mcps=[
+ "https://primary-api.com/mcp", # Primary choice
+ "https://backup-api.com/mcp", # Backup option
+ "snowflake" # Connected MCP fallback
+]
+```
+
+### 4. استخدم أدواراً وصفية للوكلاء
+
+```python
+agent = Agent(
+ role="Weather-Enhanced Market Analyst",
+ goal="Analyze markets considering weather impacts",
+ backstory="Financial analyst with access to weather data for agricultural market insights",
+ mcps=[
+ "https://weather.service.com/mcp#get_forecast",
+ "stripe#list_invoices"
+ ]
+)
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+**لم يتم اكتشاف أدوات:**
+
+```python
+# Check your MCP server URL and authentication
+# Verify the server is running and accessible
+mcps=["https://mcp.example.com/mcp?api_key=valid_key"]
+```
+
+**انتهاء مهلة الاتصال:**
+
+```python
+# Server may be slow or overloaded
+# CrewAI will log warnings and continue with other servers
+# Check server status or try backup servers
+```
+
+**فشل المصادقة:**
+
+```python
+# Verify API keys and credentials
+# Check server documentation for required parameters
+# Ensure query parameters are properly URL encoded
+```
+
+## متقدم: MCPServerAdapter
+
+للسيناريوهات المعقدة التي تتطلب إدارة اتصال يدوية، استخدم فئة `MCPServerAdapter` من `crewai-tools`. استخدام مدير سياق Python (تعليمة `with`) هو النهج الموصى به لأنه يتعامل تلقائياً مع بدء وإيقاف الاتصال بخادم MCP.
diff --git a/docs/v1.15.1/ar/mcp/multiple-servers.mdx b/docs/v1.15.1/ar/mcp/multiple-servers.mdx
new file mode 100644
index 000000000..14e2d4681
--- /dev/null
+++ b/docs/v1.15.1/ar/mcp/multiple-servers.mdx
@@ -0,0 +1,65 @@
+---
+title: الاتصال بخوادم MCP متعددة
+description: تعلم كيفية استخدام MCPServerAdapter في CrewAI للاتصال بخوادم MCP متعددة بشكل متزامن وتجميع أدواتها.
+icon: layer-group
+mode: "wide"
+---
+
+## نظرة عامة
+
+يتيح لك `MCPServerAdapter` في `crewai-tools` الاتصال بخوادم MCP متعددة بشكل متزامن. هذا مفيد عندما يحتاج وكلاؤك للوصول إلى أدوات موزعة عبر خدمات أو بيئات مختلفة. يجمع المحول الأدوات من جميع الخوادم المحددة، مما يجعلها متاحة لوكلاء CrewAI.
+
+## الإعداد
+
+للاتصال بخوادم متعددة، توفر قائمة من قواميس معاملات الخادم لـ `MCPServerAdapter`. يجب أن يعرّف كل قاموس في القائمة معاملات خادم MCP واحد.
+
+تتضمن أنواع النقل المدعومة لكل خادم في القائمة `stdio` و `sse` و `streamable-http`.
+
+```python
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import MCPServerAdapter
+from mcp import StdioServerParameters # Needed for Stdio example
+
+# Define parameters for multiple MCP servers
+server_params_list = [
+ # Streamable HTTP Server
+ {
+ "url": "http://localhost:8001/mcp",
+ "transport": "streamable-http"
+ },
+ # SSE Server
+ {
+ "url": "http://localhost:8000/sse",
+ "transport": "sse"
+ },
+ # StdIO Server
+ StdioServerParameters(
+ command="python3",
+ args=["servers/your_stdio_server.py"],
+ env={"UV_PYTHON": "3.12", **os.environ},
+ )
+]
+
+try:
+ with MCPServerAdapter(server_params_list) as aggregated_tools:
+ print(f"Available aggregated tools: {[tool.name for tool in aggregated_tools]}")
+
+ multi_server_agent = Agent(
+ role="Versatile Assistant",
+ goal="Utilize tools from local Stdio, remote SSE, and remote HTTP MCP servers.",
+ backstory="An AI agent capable of leveraging a diverse set of tools from multiple sources.",
+ tools=aggregated_tools, # All tools are available here
+ verbose=True,
+ )
+
+ ... # Your other agent, tasks, and crew code here
+
+except Exception as e:
+ print(f"Error connecting to or using multiple MCP servers (Managed): {e}")
+ print("Ensure all MCP servers are running and accessible with correct configurations.")
+
+```
+
+## إدارة الاتصال
+
+عند استخدام مدير السياق (تعليمة `with`)، يتعامل `MCPServerAdapter` مع دورة حياة جميع الاتصالات بخوادم MCP المُعدة (البدء والإيقاف). هذا يبسط إدارة الموارد ويضمن إغلاق جميع الاتصالات بشكل صحيح عند الخروج من السياق.
diff --git a/docs/v1.15.1/ar/mcp/overview.mdx b/docs/v1.15.1/ar/mcp/overview.mdx
new file mode 100644
index 000000000..ecb1204ee
--- /dev/null
+++ b/docs/v1.15.1/ar/mcp/overview.mdx
@@ -0,0 +1,690 @@
+---
+title: "خوادم MCP كأدوات في CrewAI"
+description: "تعلم كيفية دمج خوادم MCP كأدوات في وكلاء CrewAI باستخدام مكتبة `crewai-tools`."
+icon: plug
+mode: "wide"
+---
+
+## نظرة عامة
+
+يوفر [بروتوكول سياق النموذج](https://modelcontextprotocol.io/introduction) (MCP) طريقة موحدة لوكلاء الذكاء الاصطناعي لتوفير سياق لنماذج اللغة الكبيرة من خلال التواصل مع خدمات خارجية تُعرف بخوادم MCP.
+
+يقدم CrewAI **نهجين** لتكامل MCP:
+
+### تكامل DSL البسيط (الموصى به)
+
+استخدم حقل `mcps` مباشرة على الوكلاء لتكامل سلس مع أدوات MCP. يدعم DSL كلاً من **المراجع النصية** (للإعداد السريع) و**الإعدادات المنظمة** (للتحكم الكامل).
+
+#### المراجع النصية (إعداد سريع)
+
+مثالية لخوادم HTTPS البعيدة وتكاملات MCP المتصلة من كتالوج CrewAI:
+
+```python
+from crewai import Agent
+
+agent = Agent(
+ role="Research Analyst",
+ goal="Research and analyze information",
+ backstory="Expert researcher with access to external tools",
+ mcps=[
+ "https://mcp.exa.ai/mcp?api_key=your_key", # External MCP server
+ "https://api.weather.com/mcp#get_forecast", # Specific tool from server
+ "snowflake", # Connected MCP from catalog
+ "stripe#list_invoices" # Specific tool from connected MCP
+ ]
+)
+# MCP tools are now automatically available to your agent!
+```
+
+#### الإعدادات المنظمة (تحكم كامل)
+
+للتحكم الكامل في إعدادات الاتصال وتصفية الأدوات وجميع أنواع النقل:
+
+```python
+from crewai import Agent
+from crewai.mcp import MCPServerStdio, MCPServerHTTP, MCPServerSSE
+from crewai.mcp.filters import create_static_tool_filter
+
+agent = Agent(
+ role="Advanced Research Analyst",
+ goal="Research with full control over MCP connections",
+ backstory="Expert researcher with advanced tool access",
+ mcps=[
+ # Stdio transport for local servers
+ MCPServerStdio(
+ command="npx",
+ args=["-y", "@modelcontextprotocol/server-filesystem"],
+ env={"API_KEY": "your_key"},
+ tool_filter=create_static_tool_filter(
+ allowed_tool_names=["read_file", "list_directory"]
+ ),
+ cache_tools_list=True,
+ ),
+ # HTTP/Streamable HTTP transport for remote servers
+ MCPServerHTTP(
+ url="https://api.example.com/mcp",
+ headers={"Authorization": "Bearer your_token"},
+ streamable=True,
+ cache_tools_list=True,
+ ),
+ # SSE transport for real-time streaming
+ MCPServerSSE(
+ url="https://stream.example.com/mcp/sse",
+ headers={"Authorization": "Bearer your_token"},
+ ),
+ ]
+)
+```
+
+### متقدم: MCPServerAdapter (للسيناريوهات المعقدة)
+
+لحالات الاستخدام المتقدمة التي تتطلب إدارة اتصال يدوية، توفر مكتبة `crewai-tools` فئة `MCPServerAdapter`.
+
+ندعم حالياً آليات النقل التالية:
+
+- **Stdio**: للخوادم المحلية (التواصل عبر الإدخال/الإخراج القياسي بين العمليات على نفس الجهاز)
+- **Server-Sent Events (SSE)**: للخوادم البعيدة (بث بيانات أحادي الاتجاه في الوقت الفعلي من الخادم إلى العميل عبر HTTP)
+- **Streamable HTTPS**: للخوادم البعيدة (اتصال مرن، ربما ثنائي الاتجاه عبر HTTPS، يستخدم غالباً SSE للتدفقات من الخادم إلى العميل)
+
+## فيديو تعليمي
+
+شاهد هذا الفيديو التعليمي للحصول على دليل شامل حول تكامل MCP مع CrewAI:
+
+
+
+## التثبيت
+
+يتطلب تكامل CrewAI MCP مكتبة `mcp`:
+
+```shell
+# For Simple DSL Integration (Recommended)
+uv add mcp
+
+# For Advanced MCPServerAdapter usage
+uv pip install 'crewai-tools[mcp]'
+```
+
+## البدء السريع: تكامل DSL البسيط
+
+أسهل طريقة لدمج خوادم MCP هي استخدام حقل `mcps` على وكلائك. يمكنك استخدام مراجع نصية أو إعدادات منظمة.
+
+### البدء السريع مع المراجع النصية
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create agent with MCP tools using string references
+research_agent = Agent(
+ role="Research Analyst",
+ goal="Find and analyze information using advanced search tools",
+ backstory="Expert researcher with access to multiple data sources",
+ mcps=[
+ "https://mcp.exa.ai/mcp?api_key=your_key&profile=your_profile",
+ "snowflake#run_query"
+ ]
+)
+
+# Create task
+research_task = Task(
+ description="Research the latest developments in AI agent frameworks",
+ expected_output="Comprehensive research report with citations",
+ agent=research_agent
+)
+
+# Create and run crew
+crew = Crew(agents=[research_agent], tasks=[research_task])
+result = crew.kickoff()
+```
+
+### البدء السريع مع الإعدادات المنظمة
+
+```python
+from crewai import Agent, Task, Crew
+from crewai.mcp import MCPServerStdio, MCPServerHTTP, MCPServerSSE
+
+# Create agent with structured MCP configurations
+research_agent = Agent(
+ role="Research Analyst",
+ goal="Find and analyze information using advanced search tools",
+ backstory="Expert researcher with access to multiple data sources",
+ mcps=[
+ # Local stdio server
+ MCPServerStdio(
+ command="python",
+ args=["local_server.py"],
+ env={"API_KEY": "your_key"},
+ ),
+ # Remote HTTP server
+ MCPServerHTTP(
+ url="https://api.research.com/mcp",
+ headers={"Authorization": "Bearer your_token"},
+ ),
+ ]
+)
+
+# Create task
+research_task = Task(
+ description="Research the latest developments in AI agent frameworks",
+ expected_output="Comprehensive research report with citations",
+ agent=research_agent
+)
+
+# Create and run crew
+crew = Crew(agents=[research_agent], tasks=[research_task])
+result = crew.kickoff()
+```
+
+هذا كل شيء! يتم اكتشاف أدوات MCP تلقائياً وإتاحتها لوكيلك.
+
+## تنسيقات مراجع MCP
+
+يدعم حقل `mcps` كلاً من **المراجع النصية** (للإعداد السريع) و**الإعدادات المنظمة** (للتحكم الكامل). يمكنك مزج كلا التنسيقين في نفس القائمة.
+
+### المراجع النصية
+
+#### خوادم MCP الخارجية
+
+```python
+mcps=[
+ # Full server - get all available tools
+ "https://mcp.example.com/api",
+
+ # Specific tool from server using # syntax
+ "https://api.weather.com/mcp#get_current_weather",
+
+ # Server with authentication parameters
+ "https://mcp.exa.ai/mcp?api_key=your_key&profile=your_profile"
+]
+```
+
+#### تكاملات MCP المتصلة
+
+اربط خوادم MCP من كتالوج CrewAI أو أحضر خوادمك الخاصة. بمجرد الاتصال في حسابك، أشر إليها بالمعرف المختصر:
+
+```python
+mcps=[
+ # Connected MCP - get all available tools
+ "snowflake",
+
+ # Specific tool from a connected MCP using # syntax
+ "stripe#list_invoices",
+
+ # Multiple connected MCPs
+ "snowflake",
+ "stripe",
+ "github"
+]
+```
+
+### الإعدادات المنظمة
+
+#### نقل Stdio (خوادم محلية)
+
+مثالي لخوادم MCP المحلية التي تعمل كعمليات:
+
+```python
+from crewai.mcp import MCPServerStdio
+from crewai.mcp.filters import create_static_tool_filter
+
+mcps=[
+ MCPServerStdio(
+ command="npx",
+ args=["-y", "@modelcontextprotocol/server-filesystem"],
+ env={"API_KEY": "your_key"},
+ tool_filter=create_static_tool_filter(
+ allowed_tool_names=["read_file", "write_file"]
+ ),
+ cache_tools_list=True,
+ ),
+ # Python-based server
+ MCPServerStdio(
+ command="python",
+ args=["path/to/server.py"],
+ env={"UV_PYTHON": "3.12", "API_KEY": "your_key"},
+ ),
+]
+```
+
+#### نقل HTTP/Streamable HTTP (خوادم بعيدة)
+
+لخوادم MCP البعيدة عبر HTTP/HTTPS:
+
+```python
+from crewai.mcp import MCPServerHTTP
+
+mcps=[
+ # Streamable HTTP (default)
+ MCPServerHTTP(
+ url="https://api.example.com/mcp",
+ headers={"Authorization": "Bearer your_token"},
+ streamable=True,
+ cache_tools_list=True,
+ ),
+ # Standard HTTP
+ MCPServerHTTP(
+ url="https://api.example.com/mcp",
+ headers={"Authorization": "Bearer your_token"},
+ streamable=False,
+ ),
+]
+```
+
+#### نقل SSE (البث في الوقت الفعلي)
+
+للخوادم البعيدة التي تستخدم Server-Sent Events:
+
+```python
+from crewai.mcp import MCPServerSSE
+
+mcps=[
+ MCPServerSSE(
+ url="https://stream.example.com/mcp/sse",
+ headers={"Authorization": "Bearer your_token"},
+ cache_tools_list=True,
+ ),
+]
+```
+
+### مراجع مختلطة
+
+يمكنك دمج المراجع النصية والإعدادات المنظمة:
+
+```python
+from crewai.mcp import MCPServerStdio, MCPServerHTTP
+
+mcps=[
+ # String references
+ "https://external-api.com/mcp", # External server
+ "snowflake", # Connected MCP from catalog
+
+ # Structured configurations
+ MCPServerStdio(
+ command="npx",
+ args=["-y", "@modelcontextprotocol/server-filesystem"],
+ ),
+ MCPServerHTTP(
+ url="https://api.example.com/mcp",
+ headers={"Authorization": "Bearer token"},
+ ),
+]
+```
+
+### تصفية الأدوات
+
+تدعم الإعدادات المنظمة تصفية أدوات متقدمة:
+
+```python
+from crewai.mcp import MCPServerStdio
+from crewai.mcp.filters import create_static_tool_filter, create_dynamic_tool_filter, ToolFilterContext
+
+# Static filtering (allow/block lists)
+static_filter = create_static_tool_filter(
+ allowed_tool_names=["read_file", "write_file"],
+ blocked_tool_names=["delete_file"],
+)
+
+# Dynamic filtering (context-aware)
+def dynamic_filter(context: ToolFilterContext, tool: dict) -> bool:
+ # Block dangerous tools for certain agent roles
+ if context.agent.role == "Code Reviewer":
+ if "delete" in tool.get("name", "").lower():
+ return False
+ return True
+
+mcps=[
+ MCPServerStdio(
+ command="npx",
+ args=["-y", "@modelcontextprotocol/server-filesystem"],
+ tool_filter=static_filter, # or dynamic_filter
+ ),
+]
+```
+
+## معاملات الإعداد
+
+يدعم كل نوع نقل خيارات إعداد محددة:
+
+### معاملات MCPServerStdio
+
+- **`command`** (مطلوب): الأمر المراد تنفيذه (مثل `"python"` أو `"node"` أو `"npx"` أو `"uvx"`)
+- **`args`** (اختياري): قائمة وسيطات الأمر (مثل `["server.py"]` أو `["-y", "@mcp/server"]`)
+- **`env`** (اختياري): قاموس متغيرات البيئة لتمريرها إلى العملية
+- **`tool_filter`** (اختياري): دالة تصفية الأدوات لتصفية الأدوات المتاحة
+- **`cache_tools_list`** (اختياري): ما إذا كان يجب تخزين قائمة الأدوات مؤقتاً لوصول أسرع لاحقاً (الافتراضي: `False`)
+
+### معاملات MCPServerHTTP
+
+- **`url`** (مطلوب): عنوان URL الخادم (مثل `"https://api.example.com/mcp"`)
+- **`headers`** (اختياري): قاموس رؤوس HTTP للمصادقة أو أغراض أخرى
+- **`streamable`** (اختياري): ما إذا كان يجب استخدام نقل HTTP القابل للبث (الافتراضي: `True`)
+- **`tool_filter`** (اختياري): دالة تصفية الأدوات لتصفية الأدوات المتاحة
+- **`cache_tools_list`** (اختياري): ما إذا كان يجب تخزين قائمة الأدوات مؤقتاً (الافتراضي: `False`)
+
+### معاملات MCPServerSSE
+
+- **`url`** (مطلوب): عنوان URL الخادم (مثل `"https://api.example.com/mcp/sse"`)
+- **`headers`** (اختياري): قاموس رؤوس HTTP للمصادقة أو أغراض أخرى
+- **`tool_filter`** (اختياري): دالة تصفية الأدوات لتصفية الأدوات المتاحة
+- **`cache_tools_list`** (اختياري): ما إذا كان يجب تخزين قائمة الأدوات مؤقتاً (الافتراضي: `False`)
+
+### المعاملات المشتركة
+
+تدعم جميع أنواع النقل:
+
+- **`tool_filter`**: دالة تصفية للتحكم في الأدوات المتاحة. يمكن أن تكون:
+ - `None` (الافتراضي): جميع الأدوات متاحة
+ - تصفية ثابتة: تُنشأ باستخدام `create_static_tool_filter()` لقوائم السماح/الحظر
+ - تصفية ديناميكية: تُنشأ باستخدام `create_dynamic_tool_filter()` للتصفية الواعية بالسياق
+- **`cache_tools_list`**: عند `True`، تخزن قائمة الأدوات مؤقتاً بعد أول اكتشاف لتحسين الأداء في الاتصالات اللاحقة
+
+## الميزات الرئيسية
+
+- **اكتشاف تلقائي للأدوات**: يتم اكتشاف الأدوات ودمجها تلقائياً
+- **منع تعارض الأسماء**: تُضاف بادئات أسماء الخوادم لأسماء الأدوات
+- **محسّن للأداء**: اتصالات حسب الطلب مع تخزين مؤقت للمخططات
+- **مرونة في الأخطاء**: تعامل أنيق مع الخوادم غير المتاحة
+- **حماية المهلة الزمنية**: مهلات زمنية مدمجة تمنع تعليق الاتصالات
+- **تكامل شفاف**: يعمل بسلاسة مع ميزات CrewAI الموجودة
+- **دعم نقل كامل**: أنواع نقل Stdio وHTTP/Streamable HTTP وSSE
+- **تصفية متقدمة**: قدرات تصفية أدوات ثابتة وديناميكية
+- **مصادقة مرنة**: دعم للرؤوس ومتغيرات البيئة ومعاملات الاستعلام
+
+## معالجة الأخطاء
+
+صُمم تكامل MCP DSL ليكون مرناً ويتعامل مع الفشل بأناقة:
+
+```python
+from crewai import Agent
+from crewai.mcp import MCPServerStdio, MCPServerHTTP
+
+agent = Agent(
+ role="Resilient Agent",
+ goal="Continue working despite server issues",
+ backstory="Agent that handles failures gracefully",
+ mcps=[
+ # String references
+ "https://reliable-server.com/mcp", # Will work
+ "https://unreachable-server.com/mcp", # Will be skipped gracefully
+ "snowflake", # Connected MCP from catalog
+
+ # Structured configs
+ MCPServerStdio(
+ command="python",
+ args=["reliable_server.py"], # Will work
+ ),
+ MCPServerHTTP(
+ url="https://slow-server.com/mcp", # Will timeout gracefully
+ ),
+ ]
+)
+# Agent will use tools from working servers and log warnings for failing ones
+```
+
+جميع أخطاء الاتصال تُعالج بأناقة:
+
+- **فشل الاتصال**: تُسجل كتحذيرات، ويستمر الوكيل مع الأدوات المتاحة
+- **أخطاء المهلة الزمنية**: تنتهي الاتصالات بعد 30 ثانية (قابلة للتعديل)
+- **أخطاء المصادقة**: تُسجل بوضوح للتصحيح
+- **إعدادات غير صالحة**: تُرفع أخطاء التحقق عند إنشاء الوكيل
+
+## متقدم: MCPServerAdapter
+
+للسيناريوهات المعقدة التي تتطلب إدارة اتصال يدوية، استخدم فئة `MCPServerAdapter` من `crewai-tools`. استخدام مدير سياق Python (تعليمة `with`) هو النهج الموصى به لأنه يتعامل تلقائياً مع بدء وإيقاف الاتصال بخادم MCP.
+
+## إعداد الاتصال
+
+يدعم `MCPServerAdapter` عدة خيارات إعداد لتخصيص سلوك الاتصال:
+
+- **`connect_timeout`** (اختياري): الحد الأقصى للوقت بالثواني لانتظار إنشاء اتصال بخادم MCP. القيمة الافتراضية 30 ثانية إذا لم تُحدد. هذا مفيد بشكل خاص للخوادم البعيدة التي قد يكون لها أوقات استجابة متغيرة.
+
+```python
+# Example with custom connection timeout
+with MCPServerAdapter(server_params, connect_timeout=60) as tools:
+ # Connection will timeout after 60 seconds if not established
+ pass
+```
+
+```python
+from crewai import Agent
+from crewai_tools import MCPServerAdapter
+from mcp import StdioServerParameters # For Stdio Server
+
+# Example server_params (choose one based on your server type):
+# 1. Stdio Server:
+server_params=StdioServerParameters(
+ command="python3",
+ args=["servers/your_server.py"],
+ env={"UV_PYTHON": "3.12", **os.environ},
+)
+
+# 2. SSE Server:
+server_params = {
+ "url": "http://localhost:8000/sse",
+ "transport": "sse"
+}
+
+# 3. Streamable HTTP Server:
+server_params = {
+ "url": "http://localhost:8001/mcp",
+ "transport": "streamable-http"
+}
+
+# Example usage (uncomment and adapt once server_params is set):
+with MCPServerAdapter(server_params, connect_timeout=60) as mcp_tools:
+ print(f"Available tools: {[tool.name for tool in mcp_tools]}")
+
+ my_agent = Agent(
+ role="MCP Tool User",
+ goal="Utilize tools from an MCP server.",
+ backstory="I can connect to MCP servers and use their tools.",
+ tools=mcp_tools, # Pass the loaded tools to your agent
+ reasoning=True,
+ verbose=True
+ )
+ # ... rest of your crew setup ...
+```
+
+يوضح هذا النمط العام كيفية دمج الأدوات. للحصول على أمثلة محددة مصممة لكل نوع نقل، راجع الأدلة التفصيلية أدناه.
+
+## تصفية الأدوات
+
+هناك طريقتان لتصفية الأدوات:
+
+1. الوصول إلى أداة محددة باستخدام فهرسة نمط القاموس.
+2. تمرير قائمة أسماء الأدوات إلى منشئ `MCPServerAdapter`.
+
+### الوصول إلى أداة محددة باستخدام فهرسة نمط القاموس.
+
+```python
+with MCPServerAdapter(server_params, connect_timeout=60) as mcp_tools:
+ print(f"Available tools: {[tool.name for tool in mcp_tools]}")
+
+ my_agent = Agent(
+ role="MCP Tool User",
+ goal="Utilize tools from an MCP server.",
+ backstory="I can connect to MCP servers and use their tools.",
+ tools=[mcp_tools["tool_name"]], # Pass the loaded tools to your agent
+ reasoning=True,
+ verbose=True
+ )
+ # ... rest of your crew setup ...
+```
+
+### تمرير قائمة أسماء الأدوات إلى منشئ `MCPServerAdapter`.
+
+```python
+with MCPServerAdapter(server_params, "tool_name", connect_timeout=60) as mcp_tools:
+ print(f"Available tools: {[tool.name for tool in mcp_tools]}")
+
+ my_agent = Agent(
+ role="MCP Tool User",
+ goal="Utilize tools from an MCP server.",
+ backstory="I can connect to MCP servers and use their tools.",
+ tools=mcp_tools, # Pass the loaded tools to your agent
+ reasoning=True,
+ verbose=True
+ )
+ # ... rest of your crew setup ...
+```
+
+## الاستخدام مع CrewBase
+
+لاستخدام أدوات MCPServer ضمن فئة CrewBase، استخدم طريقة `get_mcp_tools`. يجب توفير إعدادات الخادم عبر خاصية `mcp_server_params`. يمكنك تمرير إعداد واحد أو قائمة من إعدادات خوادم متعددة.
+
+```python
+@CrewBase
+class CrewWithMCP:
+ # ... define your agents and tasks config file ...
+
+ mcp_server_params = [
+ # Streamable HTTP Server
+ {
+ "url": "http://localhost:8001/mcp",
+ "transport": "streamable-http"
+ },
+ # SSE Server
+ {
+ "url": "http://localhost:8000/sse",
+ "transport": "sse"
+ },
+ # StdIO Server
+ StdioServerParameters(
+ command="python3",
+ args=["servers/your_stdio_server.py"],
+ env={"UV_PYTHON": "3.12", **os.environ},
+ )
+ ]
+
+ @agent
+ def your_agent(self):
+ return Agent(config=self.agents_config["your_agent"], tools=self.get_mcp_tools()) # get all available tools
+
+ # ... rest of your crew setup ...
+```
+
+
+عندما تكون فئة الطاقم مزينة بـ `@CrewBase`، تُدار دورة حياة المحول نيابة عنك:
+
+- أول استدعاء لـ `get_mcp_tools()` ينشئ بكسل `MCPServerAdapter` مشتركاً يُعاد استخدامه من قبل كل وكيل في الطاقم.
+- يُغلق المحول تلقائياً بعد اكتمال `.kickoff()` بفضل خطاف ما بعد التشغيل الضمني المحقون من `@CrewBase`، لذا لا حاجة للتنظيف اليدوي.
+- إذا لم يتم تعريف `mcp_server_params`، يُرجع `get_mcp_tools()` ببساطة قائمة فارغة، مما يسمح لنفس مسارات الكود بالعمل مع أو بدون إعداد MCP.
+
+هذا يجعل من الآمن استدعاء `get_mcp_tools()` من طرق وكلاء متعددة أو تفعيل MCP بشكل انتقائي لكل بيئة.
+
+
+### إعداد مهلة الاتصال
+
+يمكنك إعداد مهلة الاتصال لخوادم MCP عن طريق تعيين خاصية فئة `mcp_connect_timeout`. إذا لم تُحدد مهلة، تكون القيمة الافتراضية 30 ثانية.
+
+```python
+@CrewBase
+class CrewWithMCP:
+ mcp_server_params = [...]
+ mcp_connect_timeout = 60 # 60 seconds timeout for all MCP connections
+
+ @agent
+ def your_agent(self):
+ return Agent(config=self.agents_config["your_agent"], tools=self.get_mcp_tools())
+```
+
+### تصفية الأدوات
+
+يمكنك تصفية الأدوات المتاحة لوكيلك عن طريق تمرير قائمة أسماء الأدوات إلى طريقة `get_mcp_tools`.
+
+```python
+@agent
+def another_agent(self):
+ return Agent(
+ config=self.agents_config["your_agent"],
+ tools=self.get_mcp_tools("tool_1", "tool_2") # get specific tools
+ )
+```
+
+## استكشاف تكاملات MCP
+
+
+
+ **الموصى به**: استخدم صياغة حقل `mcps=[]` البسيطة لتكامل MCP بلا جهد.
+
+
+ الاتصال بخوادم MCP المحلية عبر الإدخال/الإخراج القياسي. مثالي للنصوص البرمجية والملفات التنفيذية المحلية.
+
+
+ التكامل مع خوادم MCP البعيدة باستخدام Server-Sent Events لبث البيانات في الوقت الفعلي.
+
+
+ استخدام Streamable HTTP المرن للاتصال القوي مع خوادم MCP البعيدة.
+
+
+ تجميع الأدوات من عدة خوادم MCP بشكل متزامن باستخدام محول واحد.
+
+
+ مراجعة أفضل ممارسات الأمان المهمة لتكامل MCP للحفاظ على سلامة وكلائك.
+
+
+
+تحقق من هذا المستودع للحصول على عروض وأمثلة كاملة لتكامل MCP مع CrewAI!
+
+
+ CrewAI MCP Demo
+
+
+## البقاء آمناً مع MCP
+
+تأكد دائماً من أنك تثق بخادم MCP قبل استخدامه.
+
+#### تحذير أمني: هجمات إعادة ربط DNS
+
+يمكن أن تكون عمليات نقل SSE عرضة لهجمات إعادة ربط DNS إذا لم تكن مؤمنة بشكل صحيح.
+لمنع ذلك:
+
+1. **تحقق دائماً من رؤوس Origin** على اتصالات SSE الواردة للتأكد من أنها تأتي من مصادر متوقعة
+2. **تجنب ربط الخوادم بجميع واجهات الشبكة** (0.0.0.0) عند التشغيل محلياً - اربط فقط بـ localhost (127.0.0.1) بدلاً من ذلك
+3. **نفّذ مصادقة مناسبة** لجميع اتصالات SSE
+
+بدون هذه الحمايات، يمكن للمهاجمين استخدام إعادة ربط DNS للتفاعل مع خوادم MCP المحلية من مواقع ويب بعيدة.
+
+لمزيد من التفاصيل، راجع [وثائق أمان نقل MCP من Anthropic](https://modelcontextprotocol.io/docs/concepts/transports#security-considerations).
+
+### القيود
+
+- **الأوليات المدعومة**: حالياً، يدعم `MCPServerAdapter` بشكل أساسي تكييف `أدوات` MCP.
+ لا يتم دمج أوليات MCP الأخرى مثل `prompts` أو `resources` مباشرة كمكونات CrewAI من خلال هذا المحول في هذا الوقت.
+- **معالجة المخرجات**: يعالج المحول عادةً المخرجات النصية الرئيسية من أداة MCP (مثل `.content[0].text`). قد تتطلب المخرجات المعقدة أو متعددة الوسائط معالجة مخصصة إذا لم تتناسب مع هذا النمط.
diff --git a/docs/v1.15.1/ar/mcp/security.mdx b/docs/v1.15.1/ar/mcp/security.mdx
new file mode 100644
index 000000000..e968ff9f5
--- /dev/null
+++ b/docs/v1.15.1/ar/mcp/security.mdx
@@ -0,0 +1,149 @@
+---
+title: اعتبارات أمان MCP
+description: تعرف على أفضل ممارسات الأمان المهمة عند دمج خوادم MCP مع وكلاء CrewAI.
+icon: lock
+mode: "wide"
+---
+
+## نظرة عامة
+
+
+الجانب الأكثر أهمية في أمان MCP هو **الثقة**. يجب أن تتصل فقط بخوادم MCP التي تثق بها **بالكامل**.
+
+
+عند دمج خدمات خارجية مثل خوادم MCP (بروتوكول سياق النموذج) في وكلاء CrewAI، يكون الأمان أمراً بالغ الأهمية.
+يمكن لخوادم MCP تنفيذ التعليمات البرمجية والوصول إلى البيانات أو التفاعل مع أنظمة أخرى بناءً على الأدوات التي تكشفها.
+من الضروري فهم الآثار واتباع أفضل الممارسات لحماية تطبيقاتك وبياناتك.
+
+### المخاطر
+
+- تنفيذ تعليمات برمجية عشوائية على الجهاز الذي يعمل عليه الوكيل (خاصة مع نقل `Stdio` إذا كان الخادم يمكنه التحكم في الأمر المُنفذ).
+- كشف بيانات حساسة من وكيلك أو بيئته.
+- التلاعب بسلوك وكيلك بطرق غير مقصودة، بما في ذلك إجراء استدعاءات API غير مصرح بها نيابة عنك.
+- اختطاف عملية استدلال وكيلك من خلال تقنيات حقن المطالبات المتطورة (انظر أدناه).
+
+### 1. الثقة بخوادم MCP
+
+
+**اتصل فقط بخوادم MCP التي تثق بها.**
+
+
+قبل إعداد `MCPServerAdapter` للاتصال بخادم MCP، تأكد من معرفة:
+- **من يشغل الخادم؟** هل هو خدمة معروفة وذات سمعة جيدة، أم خادم داخلي تحت سيطرتك؟
+- **ما الأدوات التي يكشفها؟** افهم قدرات الأدوات. هل يمكن إساءة استخدامها إذا سيطر مهاجم أو إذا كان الخادم نفسه خبيثاً؟
+- **ما البيانات التي يصل إليها أو يعالجها؟** كن على دراية بأي معلومات حساسة قد تُرسل إلى خادم MCP أو يتعامل معها.
+
+تجنب الاتصال بخوادم MCP غير معروفة أو غير موثقة، خاصة إذا كان وكلاؤك يتعاملون مع مهام أو بيانات حساسة.
+
+### 2. حقن المطالبات الآمن عبر بيانات الأداة الوصفية: خطر "بروتوكول التحكم بالنموذج"
+
+خطر كبير وخفي هو إمكانية حقن المطالبات عبر البيانات الوصفية للأداة. إليك كيف يعمل:
+
+1. عندما يتصل وكيل CrewAI بخادم MCP، يطلب عادةً قائمة الأدوات المتاحة.
+2. يستجيب خادم MCP ببيانات وصفية لكل أداة، بما في ذلك اسمها ووصفها وأوصاف معاملاتها.
+3. يستخدم نموذج اللغة (LLM) الأساسي لوكيلك هذه البيانات الوصفية لفهم كيف ومتى يستخدم الأدوات.
+4. يمكن لخادم MCP خبيث صياغة بياناته الوصفية للأدوات لتتضمن تعليمات مخفية أو صريحة تعمل كحقن مطالبات.
+
+**الأهم، يمكن أن يحدث هذا الهجوم بمجرد الاتصال بخادم خبيث وسرد أدواته، حتى لو لم يقرر وكيلك *استخدام* أي من تلك الأدوات.** مجرد التعرض للبيانات الوصفية الخبيثة يمكن أن يكون كافياً لاختراق سلوك الوكيل.
+
+**التخفيف:**
+
+* **الحذر الشديد مع الخوادم غير الموثوقة:** نكرر: *لا تتصل بخوادم MCP لا تثق بها بالكامل.* يجعل خطر حقن البيانات الوصفية هذا أمراً بالغ الأهمية.
+
+### أمان نقل Stdio
+
+عادةً ما يُستخدم نقل Stdio (الإدخال/الإخراج القياسي) لخوادم MCP المحلية التي تعمل على نفس الجهاز مثل تطبيق CrewAI.
+
+- **عزل العملية**: على الرغم من أنه أكثر أماناً بشكل عام لأنه لا يتضمن تعرض شبكي افتراضياً، تأكد من أن النص البرمجي أو الأمر الذي يُشغله `StdioServerParameters` من مصدر موثوق ولديه أذونات نظام ملفات مناسبة.
+- **تنقية المدخلات**: إذا كان نص Stdio البرمجي يأخذ مدخلات معقدة مشتقة من تفاعلات الوكيل، تأكد من أن النص ينقي هذه المدخلات لمنع حقن الأوامر أو الثغرات الأخرى.
+- **حدود الموارد**: كن على دراية بأن عملية خادم Stdio المحلية تستهلك موارد محلية (CPU، الذاكرة). تأكد من أنها تعمل بشكل جيد ولن تستنفد موارد النظام.
+
+### هجمات الوكيل المرتبك
+
+[مشكلة الوكيل المرتبك](https://en.wikipedia.org/wiki/Confused_deputy_problem) هي ثغرة أمنية كلاسيكية يمكن أن تظهر في تكاملات MCP، خاصة عندما يعمل خادم MCP كوسيط لخدمات طرف ثالث (مثل Google Calendar وGitHub) التي تستخدم OAuth 2.0 للترخيص.
+
+**السيناريو:**
+
+1. خادم MCP (نسميه `MCP-Proxy`) يسمح لوكيلك بالتفاعل مع `ThirdPartyAPI`.
+2. يستخدم `MCP-Proxy` `client_id` ثابتاً واحداً خاصاً به عند التحدث مع خادم ترخيص `ThirdPartyAPI`.
+3. أنت، كمستخدم، تصرح بشكل شرعي لـ `MCP-Proxy` بالوصول إلى `ThirdPartyAPI` نيابة عنك.
+4. يصنع مهاجم رابطاً خبيثاً يبدأ تدفق OAuth مع `MCP-Proxy`، لكنه مصمم لخداع خادم ترخيص `ThirdPartyAPI`.
+5. إذا نقرت على هذا الرابط، وشاهد خادم ترخيص `ThirdPartyAPI` ملف تعريف ارتباط الموافقة الموجود لـ `client_id` الخاص بـ `MCP-Proxy`، فقد *يتخطى* طلب موافقتك مرة أخرى.
+6. قد يُخدع `MCP-Proxy` بعد ذلك لتمرير رمز ترخيص إلى المهاجم.
+
+**التخفيف (بشكل أساسي لمطوري خوادم MCP):**
+
+* يجب على خوادم MCP الوسيطة التي تستخدم معرفات عميل ثابتة للخدمات النهائية الحصول على **موافقة صريحة من المستخدم** لكل تطبيق عميل أو وكيل يتصل بها قبل بدء تدفق OAuth.
+
+**تداعيات مستخدم CrewAI:**
+
+* كن حذراً إذا أعاد خادم MCP توجيهك لمصادقات OAuth متعددة، خاصة إذا بدت غير متوقعة أو كانت الأذونات المطلوبة واسعة جداً.
+
+### أمان النقل البعيد (SSE و Streamable HTTP)
+
+عند الاتصال بخوادم MCP البعيدة عبر SSE أو Streamable HTTP، فإن ممارسات أمان الويب القياسية ضرورية.
+
+### اعتبارات أمان SSE
+
+### أ. هجمات إعادة ربط DNS (خاصة لـ SSE)
+
+
+**احمِ ضد هجمات إعادة ربط DNS.**
+
+
+تسمح إعادة ربط DNS لموقع ويب يتحكم فيه مهاجم بتجاوز سياسة نفس الأصل وإجراء طلبات لخوادم على شبكة المستخدم المحلية.
+
+**استراتيجيات التخفيف لمنفذي خوادم MCP:**
+- **تحقق من رؤوس `Origin` و `Host`**: يجب على خوادم MCP (خاصة SSE) التحقق من رؤوس HTTP لضمان أن الطلبات تأتي من نطاقات/عملاء متوقعين.
+- **اربط بـ `localhost` (127.0.0.1)**: عند تشغيل خوادم MCP محلياً للتطوير، اربطها بـ `127.0.0.1` بدلاً من `0.0.0.0`.
+- **المصادقة**: اطلب مصادقة لجميع الاتصالات بخادم MCP.
+
+### ب. استخدم HTTPS
+
+- **تشفير البيانات أثناء النقل**: استخدم دائماً HTTPS لعناوين URL خوادم MCP البعيدة لتشفير الاتصال.
+
+### ج. تمرير الرمز (نمط مضاد)
+
+هذا يتعلق بشكل أساسي بمطوري خوادم MCP لكن فهمه يساعد في اختيار خوادم آمنة.
+
+"تمرير الرمز" هو عندما يقبل خادم MCP رمز وصول من وكيل CrewAI ويمرره ببساطة إلى API آخر بدون تحقق مناسب.
+
+**المخاطر:**
+* يتجاوز ضوابط الأمان على خادم MCP أو API النهائي.
+* يكسر مسارات التدقيق والمساءلة.
+* يسمح بإساءة استخدام الرموز المسروقة.
+
+### د. التحقق من المدخلات وتنقيتها
+
+- **التحقق من المدخلات أمر بالغ الأهمية**: يجب على خوادم MCP التحقق بصرامة من جميع المدخلات المستلمة من الوكلاء *قبل* معالجتها أو تمريرها إلى الأدوات. هذا دفاع أساسي ضد العديد من الثغرات الشائعة:
+ - **حقن الأوامر:** إذا كانت أداة تبني أوامر shell أو استعلامات SQL بناءً على المدخلات، يجب على الخادم تنقية هذه المدخلات بدقة.
+ - **اجتياز المسار:** إذا وصلت أداة إلى ملفات بناءً على معاملات المدخلات، يجب على الخادم التحقق من هذه المسارات وتنقيتها.
+ - **فحوصات نوع البيانات والنطاق:** يجب أن تضمن الخوادم توافق البيانات مع الأنواع والنطاقات المتوقعة.
+
+### هـ. تحديد المعدل وإدارة الموارد
+
+- **منع الإساءة**: يجب أن تنفذ خوادم MCP تحديد المعدل لمنع الإساءة.
+- **إعادة المحاولة من جانب العميل**: نفّذ منطق إعادة محاولة معقول في مهام CrewAI.
+
+## 4. نصائح لتنفيذ خادم MCP آمن (للمطورين)
+
+إذا كنت تطور خادم MCP قد تتصل به وكلاء CrewAI، ضع في الاعتبار أفضل الممارسات التالية:
+
+- **اتبع ممارسات البرمجة الآمنة**: التزم بمبادئ البرمجة الآمنة القياسية (مثل OWASP Top 10).
+- **مبدأ الحد الأدنى من الصلاحيات**: تأكد من أن العملية التي تشغل خادم MCP لديها فقط الأذونات اللازمة.
+- **إدارة الاعتماديات**: حافظ على تحديث جميع الاعتماديات لتصحيح الثغرات المعروفة.
+- **الإعدادات الافتراضية الآمنة**: صمم خادمك وأدواته لتكون آمنة افتراضياً.
+- **التحكم في الوصول للأدوات**: نفّذ آليات قوية للتحكم في الوكلاء أو المستخدمين المصرح لهم بالوصول إلى أدوات محددة.
+- **معالجة أخطاء آمنة**: يجب ألا تكشف الخوادم رسائل خطأ داخلية مفصلة أو تتبعات المكدس للعميل.
+- **التسجيل والمراقبة الشاملة**: نفّذ تسجيلاً مفصلاً للأحداث المتعلقة بالأمان.
+- **الالتزام بمواصفات ترخيص MCP**: إذا كنت تنفذ المصادقة والترخيص، اتبع بدقة [مواصفات ترخيص MCP](https://modelcontextprotocol.io/specification/draft/basic/authorization).
+- **تدقيقات أمنية منتظمة**: إذا كان خادم MCP يتعامل مع بيانات حساسة، فكر في إجراء تدقيقات أمنية دورية.
+
+## 5. قراءة إضافية
+
+لمزيد من المعلومات التفصيلية حول أمان MCP، راجع التوثيق الرسمي:
+- **[أمان نقل MCP](https://modelcontextprotocol.io/docs/concepts/transports#security-considerations)**
+
+من خلال فهم اعتبارات الأمان هذه وتنفيذ أفضل الممارسات، يمكنك الاستفادة بأمان من قوة خوادم MCP في مشاريع CrewAI.
+هذه ليست شاملة بأي حال، لكنها تغطي المخاوف الأمنية الأكثر شيوعاً وأهمية.
+ستستمر التهديدات في التطور، لذا من المهم البقاء على اطلاع وتكييف إجراءات الأمان وفقاً لذلك.
diff --git a/docs/v1.15.1/ar/mcp/sse.mdx b/docs/v1.15.1/ar/mcp/sse.mdx
new file mode 100644
index 000000000..3e5e35246
--- /dev/null
+++ b/docs/v1.15.1/ar/mcp/sse.mdx
@@ -0,0 +1,151 @@
+---
+title: نقل SSE
+description: تعلم كيفية ربط CrewAI بخوادم MCP البعيدة باستخدام Server-Sent Events (SSE) للاتصال في الوقت الفعلي.
+icon: wifi
+mode: "wide"
+---
+
+## نظرة عامة
+
+توفر Server-Sent Events (SSE) طريقة قياسية لخادم الويب لإرسال تحديثات إلى العميل عبر اتصال HTTP واحد طويل الأمد. في سياق MCP، تُستخدم SSE للخوادم البعيدة لبث البيانات (مثل استجابات الأدوات) إلى تطبيق CrewAI في الوقت الفعلي.
+
+## المفاهيم الرئيسية
+
+- **خوادم بعيدة**: SSE مناسب لخوادم MCP المستضافة عن بُعد.
+- **بث أحادي الاتجاه**: عادةً ما يكون SSE قناة اتصال أحادية الاتجاه من الخادم إلى العميل.
+- **إعداد `MCPServerAdapter`**: لـ SSE، ستوفر عنوان URL الخادم وتحدد نوع النقل.
+
+## الاتصال عبر SSE
+
+يمكنك الاتصال بخادم MCP المبني على SSE باستخدام نهجين رئيسيين لإدارة دورة حياة الاتصال:
+
+### 1. اتصال مُدار بالكامل (الموصى به)
+
+استخدام مدير سياق Python (تعليمة `with`) هو النهج الموصى به. يتعامل تلقائياً مع إنشاء وإغلاق الاتصال بخادم MCP SSE.
+
+```python
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import MCPServerAdapter
+
+server_params = {
+ "url": "http://localhost:8000/sse", # Replace with your actual SSE server URL
+ "transport": "sse"
+}
+
+# Using MCPServerAdapter with a context manager
+try:
+ with MCPServerAdapter(server_params) as tools:
+ print(f"Available tools from SSE MCP server: {[tool.name for tool in tools]}")
+
+ # Example: Using a tool from the SSE MCP server
+ sse_agent = Agent(
+ role="Remote Service User",
+ goal="Utilize a tool provided by a remote SSE MCP server.",
+ backstory="An AI agent that connects to external services via SSE.",
+ tools=tools,
+ reasoning=True,
+ verbose=True,
+ )
+
+ sse_task = Task(
+ description="Fetch real-time stock updates for 'AAPL' using an SSE tool.",
+ expected_output="The latest stock price for AAPL.",
+ agent=sse_agent,
+ markdown=True
+ )
+
+ sse_crew = Crew(
+ agents=[sse_agent],
+ tasks=[sse_task],
+ verbose=True,
+ process=Process.sequential
+ )
+
+ if tools: # Only kickoff if tools were loaded
+ result = sse_crew.kickoff() # Add inputs={'stock_symbol': 'AAPL'} if tool requires it
+ print("\nCrew Task Result (SSE - Managed):\n", result)
+ else:
+ print("Skipping crew kickoff as tools were not loaded (check server connection).")
+
+except Exception as e:
+ print(f"Error connecting to or using SSE MCP server (Managed): {e}")
+ print("Ensure the SSE MCP server is running and accessible at the specified URL.")
+
+```
+
+
+استبدل `"http://localhost:8000/sse"` بعنوان URL الفعلي لخادم MCP SSE الخاص بك.
+
+
+### 2. دورة حياة اتصال يدوية
+
+إذا كنت بحاجة إلى تحكم أدق، يمكنك إدارة دورة حياة اتصال `MCPServerAdapter` يدوياً.
+
+
+**يجب** عليك استدعاء `mcp_server_adapter.stop()` لضمان إغلاق الاتصال وتحرير الموارد. يُوصى بشدة باستخدام كتلة `try...finally`.
+
+
+```python
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import MCPServerAdapter
+
+server_params = {
+ "url": "http://localhost:8000/sse", # Replace with your actual SSE server URL
+ "transport": "sse"
+}
+
+mcp_server_adapter = None
+try:
+ mcp_server_adapter = MCPServerAdapter(server_params)
+ mcp_server_adapter.start()
+ tools = mcp_server_adapter.tools
+ print(f"Available tools (manual SSE): {[tool.name for tool in tools]}")
+
+ manual_sse_agent = Agent(
+ role="Remote Data Analyst",
+ goal="Analyze data fetched from a remote SSE MCP server using manual connection management.",
+ backstory="An AI skilled in handling SSE connections explicitly.",
+ tools=tools,
+ verbose=True
+ )
+
+ analysis_task = Task(
+ description="Fetch and analyze the latest user activity trends from the SSE server.",
+ expected_output="A summary report of user activity trends.",
+ agent=manual_sse_agent
+ )
+
+ analysis_crew = Crew(
+ agents=[manual_sse_agent],
+ tasks=[analysis_task],
+ verbose=True,
+ process=Process.sequential
+ )
+
+ result = analysis_crew.kickoff()
+ print("\nCrew Task Result (SSE - Manual):\n", result)
+
+except Exception as e:
+ print(f"An error occurred during manual SSE MCP integration: {e}")
+ print("Ensure the SSE MCP server is running and accessible.")
+finally:
+ if mcp_server_adapter and mcp_server_adapter.is_connected:
+ print("Stopping SSE MCP server connection (manual)...")
+ mcp_server_adapter.stop() # **Crucial: Ensure stop is called**
+ elif mcp_server_adapter:
+ print("SSE MCP server adapter was not connected. No stop needed or start failed.")
+
+```
+
+## اعتبارات أمان SSE
+
+
+**هجمات إعادة ربط DNS**: يمكن أن تكون عمليات نقل SSE عرضة لهجمات إعادة ربط DNS إذا لم يكن خادم MCP مؤمناً بشكل صحيح. قد يسمح هذا لمواقع ويب خبيثة بالتفاعل مع خوادم MCP المحلية أو على الشبكة الداخلية.
+
+
+للتخفيف من هذا الخطر:
+- يجب أن تتحقق تطبيقات خادم MCP من **رؤوس `Origin`** على اتصالات SSE الواردة.
+- عند تشغيل خوادم MCP SSE محلية للتطوير، **اربط فقط بـ `localhost` (`127.0.0.1`)** بدلاً من جميع واجهات الشبكة (`0.0.0.0`).
+- نفّذ **مصادقة مناسبة** لجميع اتصالات SSE إذا كشفت أدوات أو بيانات حساسة.
+
+للحصول على نظرة شاملة على أفضل ممارسات الأمان، يرجى الرجوع إلى صفحة [اعتبارات الأمان](./security.mdx) ووثائق [أمان نقل MCP](https://modelcontextprotocol.io/docs/concepts/transports#security-considerations) الرسمية.
diff --git a/docs/v1.15.1/ar/mcp/stdio.mdx b/docs/v1.15.1/ar/mcp/stdio.mdx
new file mode 100644
index 000000000..cf1b20e49
--- /dev/null
+++ b/docs/v1.15.1/ar/mcp/stdio.mdx
@@ -0,0 +1,134 @@
+---
+title: نقل Stdio
+description: تعلم كيفية ربط CrewAI بخوادم MCP المحلية باستخدام آلية نقل Stdio (الإدخال/الإخراج القياسي).
+icon: server
+mode: "wide"
+---
+
+## نظرة عامة
+
+صُمم نقل Stdio (الإدخال/الإخراج القياسي) لربط `MCPServerAdapter` بخوادم MCP المحلية التي تتواصل عبر تدفقات الإدخال والإخراج القياسية. يُستخدم هذا عادةً عندما يكون خادم MCP نصاً برمجياً أو ملفاً تنفيذياً يعمل على نفس الجهاز مثل تطبيق CrewAI.
+
+## المفاهيم الرئيسية
+
+- **التنفيذ المحلي**: يدير نقل Stdio عملية تعمل محلياً لخادم MCP.
+- **`StdioServerParameters`**: تُستخدم هذه الفئة من مكتبة `mcp` لإعداد الأمر والوسيطات ومتغيرات البيئة لتشغيل خادم Stdio.
+
+## الاتصال عبر Stdio
+
+يمكنك الاتصال بخادم MCP المبني على Stdio باستخدام نهجين رئيسيين لإدارة دورة حياة الاتصال:
+
+### 1. اتصال مُدار بالكامل (الموصى به)
+
+استخدام مدير سياق Python (تعليمة `with`) هو النهج الموصى به. يتعامل تلقائياً مع بدء عملية خادم MCP وإيقافها عند الخروج من السياق.
+
+```python
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import MCPServerAdapter
+from mcp import StdioServerParameters
+import os
+
+# Create a StdioServerParameters object
+server_params=StdioServerParameters(
+ command="python3",
+ args=["servers/your_stdio_server.py"],
+ env={"UV_PYTHON": "3.12", **os.environ},
+)
+
+with MCPServerAdapter(server_params) as tools:
+ print(f"Available tools from Stdio MCP server: {[tool.name for tool in tools]}")
+
+ # Example: Using the tools from the Stdio MCP server in a CrewAI Agent
+ research_agent = Agent(
+ role="Local Data Processor",
+ goal="Process data using a local Stdio-based tool.",
+ backstory="An AI that leverages local scripts via MCP for specialized tasks.",
+ tools=tools,
+ reasoning=True,
+ verbose=True,
+ )
+
+ processing_task = Task(
+ description="Process the input data file 'data.txt' and summarize its contents.",
+ expected_output="A summary of the processed data.",
+ agent=research_agent,
+ markdown=True
+ )
+
+ data_crew = Crew(
+ agents=[research_agent],
+ tasks=[processing_task],
+ verbose=True,
+ process=Process.sequential
+ )
+
+ result = data_crew.kickoff()
+ print("\nCrew Task Result (Stdio - Managed):\n", result)
+
+```
+
+### 2. دورة حياة اتصال يدوية
+
+إذا كنت بحاجة إلى تحكم أدق في وقت بدء وإيقاف عملية خادم MCP Stdio، يمكنك إدارة دورة حياة `MCPServerAdapter` يدوياً.
+
+
+**يجب** عليك استدعاء `mcp_server_adapter.stop()` لضمان إنهاء عملية الخادم وتحرير الموارد. يُوصى بشدة باستخدام كتلة `try...finally`.
+
+
+```python
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import MCPServerAdapter
+from mcp import StdioServerParameters
+import os
+
+# Create a StdioServerParameters object
+stdio_params=StdioServerParameters(
+ command="python3",
+ args=["servers/your_stdio_server.py"],
+ env={"UV_PYTHON": "3.12", **os.environ},
+)
+
+mcp_server_adapter = MCPServerAdapter(server_params=stdio_params)
+try:
+ mcp_server_adapter.start() # Manually start the connection and server process
+ tools = mcp_server_adapter.tools
+ print(f"Available tools (manual Stdio): {[tool.name for tool in tools]}")
+
+ # Example: Using the tools with your Agent, Task, Crew setup
+ manual_agent = Agent(
+ role="Local Task Executor",
+ goal="Execute a specific local task using a manually managed Stdio tool.",
+ backstory="An AI proficient in controlling local processes via MCP.",
+ tools=tools,
+ verbose=True
+ )
+
+ manual_task = Task(
+ description="Execute the 'perform_analysis' command via the Stdio tool.",
+ expected_output="Results of the analysis.",
+ agent=manual_agent
+ )
+
+ manual_crew = Crew(
+ agents=[manual_agent],
+ tasks=[manual_task],
+ verbose=True,
+ process=Process.sequential
+ )
+
+
+ result = manual_crew.kickoff() # Actual inputs depend on your tool
+ print("\nCrew Task Result (Stdio - Manual):\n", result)
+
+except Exception as e:
+ print(f"An error occurred during manual Stdio MCP integration: {e}")
+finally:
+ if mcp_server_adapter and mcp_server_adapter.is_connected: # Check if connected before stopping
+ print("Stopping Stdio MCP server connection (manual)...")
+ mcp_server_adapter.stop() # **Crucial: Ensure stop is called**
+ elif mcp_server_adapter: # If adapter exists but not connected (e.g. start failed)
+ print("Stdio MCP server adapter was not connected. No stop needed or start failed.")
+
+```
+
+تذكر استبدال المسارات والأوامر النائبة بتفاصيل خادم Stdio الفعلية. يمكن استخدام معامل `env` في `StdioServerParameters` لتعيين متغيرات البيئة لعملية الخادم، وهو مفيد لإعداد سلوكها أو توفير المسارات اللازمة (مثل `PYTHONPATH`).
diff --git a/docs/v1.15.1/ar/mcp/streamable-http.mdx b/docs/v1.15.1/ar/mcp/streamable-http.mdx
new file mode 100644
index 000000000..a4567ea74
--- /dev/null
+++ b/docs/v1.15.1/ar/mcp/streamable-http.mdx
@@ -0,0 +1,136 @@
+---
+title: نقل Streamable HTTP
+description: تعلم كيفية ربط CrewAI بخوادم MCP البعيدة باستخدام نقل Streamable HTTP المرن.
+icon: globe
+mode: "wide"
+---
+
+## نظرة عامة
+
+يوفر نقل Streamable HTTP طريقة مرنة للاتصال بخوادم MCP البعيدة. يُبنى عادةً على HTTP ويمكنه دعم أنماط اتصال متنوعة، بما في ذلك الطلب والاستجابة والبث، وأحياناً يستخدم Server-Sent Events (SSE) لتدفقات من الخادم إلى العميل ضمن تفاعل HTTP أوسع.
+
+## المفاهيم الرئيسية
+
+- **خوادم بعيدة**: مصمم لخوادم MCP المستضافة عن بُعد.
+- **المرونة**: يمكنه دعم أنماط تفاعل أكثر تعقيداً من SSE العادي، بما في ذلك الاتصال ثنائي الاتجاه المحتمل إذا نفذه الخادم.
+- **إعداد `MCPServerAdapter`**: ستحتاج إلى توفير عنوان URL الأساسي للخادم للاتصال MCP وتحديد `"streamable-http"` كنوع النقل.
+
+## الاتصال عبر Streamable HTTP
+
+لديك طريقتان رئيسيتان لإدارة دورة حياة الاتصال مع خادم MCP Streamable HTTP:
+
+### 1. اتصال مُدار بالكامل (الموصى به)
+
+النهج الموصى به هو استخدام مدير سياق Python (تعليمة `with`)، الذي يتعامل مع إعداد الاتصال وإنهائه تلقائياً.
+
+```python
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import MCPServerAdapter
+
+server_params = {
+ "url": "http://localhost:8001/mcp", # Replace with your actual Streamable HTTP server URL
+ "transport": "streamable-http"
+}
+
+try:
+ with MCPServerAdapter(server_params) as tools:
+ print(f"Available tools from Streamable HTTP MCP server: {[tool.name for tool in tools]}")
+
+ http_agent = Agent(
+ role="HTTP Service Integrator",
+ goal="Utilize tools from a remote MCP server via Streamable HTTP.",
+ backstory="An AI agent adept at interacting with complex web services.",
+ tools=tools,
+ verbose=True,
+ )
+
+ http_task = Task(
+ description="Perform a complex data query using a tool from the Streamable HTTP server.",
+ expected_output="The result of the complex data query.",
+ agent=http_agent,
+ )
+
+ http_crew = Crew(
+ agents=[http_agent],
+ tasks=[http_task],
+ verbose=True,
+ process=Process.sequential
+ )
+
+ result = http_crew.kickoff()
+ print("\nCrew Task Result (Streamable HTTP - Managed):\n", result)
+
+except Exception as e:
+ print(f"Error connecting to or using Streamable HTTP MCP server (Managed): {e}")
+ print("Ensure the Streamable HTTP MCP server is running and accessible at the specified URL.")
+
+```
+**ملاحظة:** استبدل `"http://localhost:8001/mcp"` بعنوان URL الفعلي لخادم MCP Streamable HTTP الخاص بك.
+
+### 2. دورة حياة اتصال يدوية
+
+للسيناريوهات التي تتطلب تحكماً أكثر صراحة، يمكنك إدارة اتصال `MCPServerAdapter` يدوياً.
+
+
+من **الضروري** استدعاء `mcp_server_adapter.stop()` عند الانتهاء لإغلاق الاتصال وتحرير الموارد. كتلة `try...finally` هي الطريقة الأكثر أماناً لضمان ذلك.
+
+
+```python
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import MCPServerAdapter
+
+server_params = {
+ "url": "http://localhost:8001/mcp", # Replace with your actual Streamable HTTP server URL
+ "transport": "streamable-http"
+}
+
+mcp_server_adapter = None
+try:
+ mcp_server_adapter = MCPServerAdapter(server_params)
+ mcp_server_adapter.start()
+ tools = mcp_server_adapter.tools
+ print(f"Available tools (manual Streamable HTTP): {[tool.name for tool in tools]}")
+
+ manual_http_agent = Agent(
+ role="Advanced Web Service User",
+ goal="Interact with an MCP server using manually managed Streamable HTTP connections.",
+ backstory="An AI specialist in fine-tuning HTTP-based service integrations.",
+ tools=tools,
+ verbose=True
+ )
+
+ data_processing_task = Task(
+ description="Submit data for processing and retrieve results via Streamable HTTP.",
+ expected_output="Processed data or confirmation.",
+ agent=manual_http_agent
+ )
+
+ data_crew = Crew(
+ agents=[manual_http_agent],
+ tasks=[data_processing_task],
+ verbose=True,
+ process=Process.sequential
+ )
+
+ result = data_crew.kickoff()
+ print("\nCrew Task Result (Streamable HTTP - Manual):\n", result)
+
+except Exception as e:
+ print(f"An error occurred during manual Streamable HTTP MCP integration: {e}")
+ print("Ensure the Streamable HTTP MCP server is running and accessible.")
+finally:
+ if mcp_server_adapter and mcp_server_adapter.is_connected:
+ print("Stopping Streamable HTTP MCP server connection (manual)...")
+ mcp_server_adapter.stop() # **Crucial: Ensure stop is called**
+ elif mcp_server_adapter:
+ print("Streamable HTTP MCP server adapter was not connected. No stop needed or start failed.")
+```
+
+## اعتبارات الأمان
+
+عند استخدام نقل Streamable HTTP، فإن أفضل ممارسات أمان الويب العامة ضرورية:
+- **استخدم HTTPS**: فضّل دائماً HTTPS لعناوين URL خوادم MCP لتشفير البيانات أثناء النقل.
+- **المصادقة**: نفّذ آليات مصادقة قوية إذا كان خادم MCP يكشف أدوات أو بيانات حساسة.
+- **التحقق من المدخلات**: تأكد من أن خادم MCP يتحقق من جميع الطلبات والمعاملات الواردة.
+
+للحصول على دليل شامل حول تأمين تكاملات MCP، يرجى الرجوع إلى صفحة [اعتبارات الأمان](./security.mdx) ووثائق [أمان نقل MCP](https://modelcontextprotocol.io/docs/concepts/transports#security-considerations) الرسمية.
diff --git a/docs/v1.15.1/ar/observability/arize-phoenix.mdx b/docs/v1.15.1/ar/observability/arize-phoenix.mdx
new file mode 100644
index 000000000..239cced3e
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/arize-phoenix.mdx
@@ -0,0 +1,150 @@
+---
+title: Arize Phoenix
+description: تكامل Arize Phoenix مع CrewAI باستخدام OpenTelemetry و OpenInference
+icon: magnifying-glass-chart
+mode: "wide"
+---
+
+# تكامل Arize Phoenix
+
+يوضح هذا الدليل كيفية دمج **Arize Phoenix** مع **CrewAI** باستخدام OpenTelemetry عبر حزمة [OpenInference](https://github.com/openinference/openinference) SDK. بنهاية هذا الدليل، ستتمكن من تتبع وكلاء CrewAI وتصحيح أخطاء وكلائك بسهولة.
+
+> **ما هو Arize Phoenix؟** [Arize Phoenix](https://phoenix.arize.com) هو منصة مراقبة LLM توفر التتبع والتقييم لتطبيقات الذكاء الاصطناعي.
+
+[](https://www.youtube.com/watch?v=Yc5q3l6F7Ww)
+
+## البدء
+
+سنمر عبر مثال بسيط لاستخدام CrewAI ودمجه مع Arize Phoenix عبر OpenTelemetry باستخدام OpenInference.
+
+يمكنك أيضاً الوصول إلى هذا الدليل على [Google Colab](https://colab.research.google.com/github/Arize-ai/phoenix/blob/main/tutorials/tracing/crewai_tracing_tutorial.ipynb).
+
+### الخطوة 1: تثبيت الاعتماديات
+
+```bash
+pip install openinference-instrumentation-crewai crewai crewai-tools arize-phoenix-otel
+```
+
+### الخطوة 2: إعداد متغيرات البيئة
+
+قم بإعداد مفاتيح API لـ Phoenix Cloud وإعداد OpenTelemetry لإرسال التتبعات إلى Phoenix. Phoenix Cloud هو إصدار مستضاف من Arize Phoenix، لكنه ليس مطلوباً لاستخدام هذا التكامل.
+
+يمكنك الحصول على مفتاح Serper API المجاني [هنا](https://serper.dev/).
+
+```python
+import os
+from getpass import getpass
+
+# Get your Phoenix Cloud credentials
+PHOENIX_API_KEY = getpass("🔑 Enter your Phoenix Cloud API Key: ")
+
+# Get API keys for services
+OPENAI_API_KEY = getpass("🔑 Enter your OpenAI API key: ")
+SERPER_API_KEY = getpass("🔑 Enter your Serper API key: ")
+
+# Set environment variables
+os.environ["PHOENIX_CLIENT_HEADERS"] = f"api_key={PHOENIX_API_KEY}"
+os.environ["PHOENIX_COLLECTOR_ENDPOINT"] = "https://app.phoenix.arize.com" # Phoenix Cloud, change this to your own endpoint if you are using a self-hosted instance
+os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
+os.environ["SERPER_API_KEY"] = SERPER_API_KEY
+```
+
+### الخطوة 3: تهيئة OpenTelemetry مع Phoenix
+
+قم بتهيئة OpenInference OpenTelemetry instrumentation SDK لبدء التقاط التتبعات وإرسالها إلى Phoenix.
+
+```python
+from phoenix.otel import register
+
+tracer_provider = register(
+ project_name="crewai-tracing-demo",
+ auto_instrument=True,
+)
+```
+
+### الخطوة 4: إنشاء تطبيق CrewAI
+
+سننشئ تطبيق CrewAI حيث يتعاون وكيلان للبحث وكتابة مقال مدونة حول تطورات الذكاء الاصطناعي.
+
+```python
+from crewai import Agent, Crew, Process, Task
+from crewai_tools import SerperDevTool
+from openinference.instrumentation.crewai import CrewAIInstrumentor
+from phoenix.otel import register
+
+# setup monitoring for your crew
+tracer_provider = register(
+ endpoint="http://localhost:6006/v1/traces")
+CrewAIInstrumentor().instrument(skip_dep_check=True, tracer_provider=tracer_provider)
+search_tool = SerperDevTool()
+
+# Define your agents with roles and goals
+researcher = Agent(
+ role="Senior Research Analyst",
+ goal="Uncover cutting-edge developments in AI and data science",
+ backstory="""You work at a leading tech think tank.
+ Your expertise lies in identifying emerging trends.
+ You have a knack for dissecting complex data and presenting actionable insights.""",
+ verbose=True,
+ allow_delegation=False,
+ tools=[search_tool],
+)
+writer = Agent(
+ role="Tech Content Strategist",
+ goal="Craft compelling content on tech advancements",
+ backstory="""You are a renowned Content Strategist, known for your insightful and engaging articles.
+ You transform complex concepts into compelling narratives.""",
+ verbose=True,
+ allow_delegation=True,
+)
+
+# Create tasks for your agents
+task1 = Task(
+ description="""Conduct a comprehensive analysis of the latest advancements in AI in 2024.
+ Identify key trends, breakthrough technologies, and potential industry impacts.""",
+ expected_output="Full analysis report in bullet points",
+ agent=researcher,
+)
+
+task2 = Task(
+ description="""Using the insights provided, develop an engaging blog
+ post that highlights the most significant AI advancements.
+ Your post should be informative yet accessible, catering to a tech-savvy audience.
+ Make it sound cool, avoid complex words so it doesn't sound like AI.""",
+ expected_output="Full blog post of at least 4 paragraphs",
+ agent=writer,
+)
+
+# Instantiate your crew with a sequential process
+crew = Crew(
+ agents=[researcher, writer], tasks=[task1, task2], verbose=1, process=Process.sequential
+)
+
+# Get your crew to work!
+result = crew.kickoff()
+
+print("######################")
+print(result)
+```
+
+### الخطوة 5: عرض التتبعات في Phoenix
+
+بعد تشغيل الوكيل، يمكنك عرض التتبعات المولدة من تطبيق CrewAI في Phoenix. سترى خطوات مفصلة لتفاعلات الوكلاء واستدعاءات LLM، مما يساعدك في التصحيح والتحسين.
+
+سجل الدخول إلى حساب Phoenix Cloud الخاص بك وانتقل إلى المشروع الذي حددته في معامل `project_name`. سترى عرض زمني للتتبع مع جميع تفاعلات الوكلاء واستخدامات الأدوات واستدعاءات LLM.
+
+
+
+
+### معلومات التوافق
+- Python 3.8+
+- CrewAI >= 0.86.0
+- Arize Phoenix >= 7.0.1
+- OpenTelemetry SDK >= 1.31.0
+
+
+### المراجع
+- [وثائق Phoenix](https://docs.arize.com/phoenix/) - نظرة عامة على منصة Phoenix.
+- [وثائق CrewAI](https://docs.crewai.com/) - نظرة عامة على إطار عمل CrewAI.
+- [وثائق OpenTelemetry](https://opentelemetry.io/docs/) - دليل OpenTelemetry
+- [OpenInference GitHub](https://github.com/openinference/openinference) - الكود المصدري لـ OpenInference SDK.
diff --git a/docs/v1.15.1/ar/observability/braintrust.mdx b/docs/v1.15.1/ar/observability/braintrust.mdx
new file mode 100644
index 000000000..7f52d9e92
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/braintrust.mdx
@@ -0,0 +1,232 @@
+---
+title: Braintrust
+description: تكامل Braintrust مع CrewAI باستخدام تتبع وتقييم OpenTelemetry
+icon: magnifying-glass-chart
+mode: "wide"
+---
+
+# تكامل Braintrust
+
+يوضح هذا الدليل كيفية دمج **Braintrust** مع **CrewAI** باستخدام OpenTelemetry للتتبع والتقييم الشامل. بنهاية هذا الدليل، ستتمكن من تتبع وكلاء CrewAI ومراقبة أدائهم وتقييم مخرجاتهم باستخدام منصة المراقبة القوية من Braintrust.
+
+> **ما هو Braintrust؟** [Braintrust](https://www.braintrust.dev) هو منصة تقييم ومراقبة للذكاء الاصطناعي توفر تتبعاً شاملاً وتقييماً ومراقبة لتطبيقات الذكاء الاصطناعي مع تتبع تجارب مدمج وتحليلات أداء.
+
+## البدء
+
+سنمر عبر مثال بسيط لاستخدام CrewAI ودمجه مع Braintrust عبر OpenTelemetry للمراقبة والتقييم الشامل.
+
+### الخطوة 1: تثبيت الاعتماديات
+
+```bash
+uv add braintrust[otel] crewai crewai-tools opentelemetry-instrumentation-openai opentelemetry-instrumentation-crewai python-dotenv
+```
+
+### الخطوة 2: إعداد متغيرات البيئة
+
+قم بإعداد مفاتيح API لـ Braintrust وإعداد OpenTelemetry لإرسال التتبعات إلى Braintrust. ستحتاج إلى مفتاح API من Braintrust ومفتاح API من OpenAI.
+
+```python
+import os
+from getpass import getpass
+
+# Get your Braintrust credentials
+BRAINTRUST_API_KEY = getpass("🔑 Enter your Braintrust API Key: ")
+
+# Get API keys for services
+OPENAI_API_KEY = getpass("🔑 Enter your OpenAI API key: ")
+
+# Set environment variables
+os.environ["BRAINTRUST_API_KEY"] = BRAINTRUST_API_KEY
+os.environ["BRAINTRUST_PARENT"] = "project_name:crewai-demo"
+os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
+```
+
+### الخطوة 3: تهيئة OpenTelemetry مع Braintrust
+
+قم بتهيئة أداة Braintrust OpenTelemetry لبدء التقاط التتبعات وإرسالها إلى Braintrust.
+
+```python
+import os
+from typing import Any, Dict
+
+from braintrust.otel import BraintrustSpanProcessor
+from crewai import Agent, Crew, Task
+from crewai.llm import LLM
+from opentelemetry import trace
+from opentelemetry.instrumentation.crewai import CrewAIInstrumentor
+from opentelemetry.instrumentation.openai import OpenAIInstrumentor
+from opentelemetry.sdk.trace import TracerProvider
+
+def setup_tracing() -> None:
+ """Setup OpenTelemetry tracing with Braintrust."""
+ current_provider = trace.get_tracer_provider()
+ if isinstance(current_provider, TracerProvider):
+ provider = current_provider
+ else:
+ provider = TracerProvider()
+ trace.set_tracer_provider(provider)
+
+ provider.add_span_processor(BraintrustSpanProcessor())
+ CrewAIInstrumentor().instrument(tracer_provider=provider)
+ OpenAIInstrumentor().instrument(tracer_provider=provider)
+
+
+setup_tracing()
+```
+
+### الخطوة 4: إنشاء تطبيق CrewAI
+
+سننشئ تطبيق CrewAI حيث يتعاون وكيلان للبحث وكتابة مقال مدونة حول تطورات الذكاء الاصطناعي، مع تفعيل التتبع الشامل.
+
+```python
+from crewai import Agent, Crew, Process, Task
+from crewai_tools import SerperDevTool
+
+def create_crew() -> Crew:
+ """Create a crew with multiple agents for comprehensive tracing."""
+ llm = LLM(model="gpt-4o-mini")
+ search_tool = SerperDevTool()
+
+ researcher = Agent(
+ role="Senior Research Analyst",
+ goal="Uncover cutting-edge developments in AI and data science",
+ backstory="""You work at a leading tech think tank.
+ Your expertise lies in identifying emerging trends.
+ You have a knack for dissecting complex data and presenting actionable insights.""",
+ verbose=True,
+ allow_delegation=False,
+ llm=llm,
+ tools=[search_tool],
+ )
+
+ writer = Agent(
+ role="Tech Content Strategist",
+ goal="Craft compelling content on tech advancements",
+ backstory="""You are a renowned Content Strategist, known for your insightful and engaging articles.
+ You transform complex concepts into compelling narratives.""",
+ verbose=True,
+ allow_delegation=True,
+ llm=llm,
+ )
+
+ research_task = Task(
+ description="""Conduct a comprehensive analysis of the latest advancements in {topic}.
+ Identify key trends, breakthrough technologies, and potential industry impacts.""",
+ expected_output="Full analysis report in bullet points",
+ agent=researcher,
+ )
+
+ writing_task = Task(
+ description="""Using the insights provided, develop an engaging blog
+ post that highlights the most significant {topic} advancements.
+ Your post should be informative yet accessible, catering to a tech-savvy audience.
+ Make it sound cool, avoid complex words so it doesn't sound like AI.""",
+ expected_output="Full blog post of at least 4 paragraphs",
+ agent=writer,
+ context=[research_task],
+ )
+
+ crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ verbose=True,
+ process=Process.sequential
+ )
+
+ return crew
+
+def run_crew():
+ """Run the crew and return results."""
+ crew = create_crew()
+ result = crew.kickoff(inputs={"topic": "AI developments"})
+ return result
+
+if __name__ == "__main__":
+ result = run_crew()
+ print(result)
+```
+
+### الخطوة 5: عرض التتبعات في Braintrust
+
+بعد تشغيل طاقمك، يمكنك عرض تتبعات شاملة في Braintrust من خلال وجهات نظر مختلفة:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### الخطوة 6: التقييم عبر SDK (التجارب)
+
+يمكنك أيضاً تشغيل التقييمات باستخدام Braintrust Eval SDK. هذا مفيد لمقارنة الإصدارات أو تسجيل المخرجات. فيما يلي مثال Python باستخدام فئة `Eval`:
+
+```python
+# eval_crew.py
+from braintrust import Eval
+from autoevals import Levenshtein
+
+def evaluate_crew_task(input_data):
+ """Task function that wraps our crew for evaluation."""
+ crew = create_crew()
+ result = crew.kickoff(inputs={"topic": input_data["topic"]})
+ return str(result)
+
+Eval(
+ "AI Research Crew",
+ {
+ "data": lambda: [
+ {"topic": "artificial intelligence trends 2024"},
+ {"topic": "machine learning breakthroughs"},
+ {"topic": "AI ethics and governance"},
+ ],
+ "task": evaluate_crew_task,
+ "scores": [Levenshtein],
+ },
+)
+```
+
+قم بإعداد مفتاح API الخاص بك وشغّل:
+
+```bash
+export BRAINTRUST_API_KEY="YOUR_API_KEY"
+braintrust eval eval_crew.py
+```
+
+راجع [دليل Braintrust Eval SDK](https://www.braintrust.dev/docs/start/eval-sdk) لمزيد من التفاصيل.
+
+### الميزات الرئيسية لتكامل Braintrust
+
+- **تتبع شامل**: تتبع جميع تفاعلات الوكلاء واستخدام الأدوات واستدعاءات LLM
+- **مراقبة الأداء**: مراقبة أوقات التنفيذ واستخدام الرموز ومعدلات النجاح
+- **تتبع التجارب**: مقارنة إعدادات الطاقم والنماذج المختلفة
+- **التقييم الآلي**: إعداد مقاييس تقييم مخصصة لمخرجات الطاقم
+- **تتبع الأخطاء**: مراقبة وتصحيح حالات الفشل عبر عمليات تنفيذ الطاقم
+- **تحليل التكاليف**: تتبع استخدام الرموز والتكاليف المرتبطة
+
+### معلومات التوافق
+- Python 3.8+
+- CrewAI >= 0.86.0
+- Braintrust >= 0.1.0
+- OpenTelemetry SDK >= 1.31.0
+
+### المراجع
+- [وثائق Braintrust](https://www.braintrust.dev/docs) - نظرة عامة على منصة Braintrust
+- [تكامل Braintrust CrewAI](https://www.braintrust.dev/docs/integrations/crew-ai) - دليل التكامل الرسمي مع CrewAI
+- [Braintrust Eval SDK](https://www.braintrust.dev/docs/start/eval-sdk) - تشغيل التجارب عبر SDK
+- [وثائق CrewAI](https://docs.crewai.com/) - نظرة عامة على إطار عمل CrewAI
+- [وثائق OpenTelemetry](https://opentelemetry.io/docs/) - دليل OpenTelemetry
+- [Braintrust GitHub](https://github.com/braintrustdata/braintrust) - الكود المصدري لـ Braintrust SDK
diff --git a/docs/v1.15.1/ar/observability/datadog.mdx b/docs/v1.15.1/ar/observability/datadog.mdx
new file mode 100644
index 000000000..0d6ebebe9
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/datadog.mdx
@@ -0,0 +1,109 @@
+---
+title: تكامل Datadog
+description: تعلم كيفية دمج Datadog مع CrewAI لإرسال تتبعات مراقبة LLM إلى Datadog.
+icon: dog
+mode: "wide"
+---
+
+# دمج Datadog مع CrewAI
+
+سيوضح هذا الدليل كيفية دمج **[Datadog LLM Observability](https://docs.datadoghq.com/llm_observability/)** مع **CrewAI** باستخدام [أداة Datadog للتجهيز التلقائي](https://docs.datadoghq.com/llm_observability/instrumentation/auto_instrumentation?tab=python). بنهاية هذا الدليل، ستتمكن من إرسال تتبعات مراقبة LLM إلى Datadog وعرض تشغيلات وكلاء CrewAI في [عرض التنفيذ الوكيلي](https://docs.datadoghq.com/llm_observability/monitoring/agent_monitoring) من Datadog LLM Observability.
+
+## ما هو Datadog LLM Observability؟
+
+[Datadog LLM Observability](https://www.datadoghq.com/product/llm-observability/) يساعد مهندسي الذكاء الاصطناعي وعلماء البيانات ومطوري التطبيقات على تطوير وتقييم ومراقبة تطبيقات LLM بسرعة. حسّن جودة المخرجات والأداء والتكاليف والمخاطر الإجمالية بثقة مع تجارب منظمة وتتبع شامل عبر وكلاء الذكاء الاصطناعي والتقييمات.
+
+## البدء
+
+### تثبيت الاعتماديات
+
+```shell
+pip install ddtrace crewai crewai-tools
+```
+
+### تعيين متغيرات البيئة
+
+إذا لم يكن لديك مفتاح API من Datadog، يمكنك [إنشاء حساب](https://www.datadoghq.com/) و[الحصول على مفتاح API](https://docs.datadoghq.com/account_management/api-app-keys/#api-keys).
+
+ستحتاج أيضاً إلى تحديد اسم تطبيق ML في متغيرات البيئة التالية. تطبيق ML هو تجميع لتتبعات LLM Observability المرتبطة بتطبيق محدد قائم على LLM.
+
+```shell
+export DD_API_KEY=
+export DD_SITE=
+export DD_LLMOBS_ENABLED=true
+export DD_LLMOBS_ML_APP=
+export DD_LLMOBS_AGENTLESS_ENABLED=true
+export DD_APM_TRACING_ENABLED=false
+```
+
+بالإضافة إلى ذلك، قم بإعداد مفاتيح API لمزودي LLM
+
+```shell
+export OPENAI_API_KEY=
+export ANTHROPIC_API_KEY=
+export GEMINI_API_KEY=
+...
+```
+
+### إنشاء تطبيق وكيل CrewAI
+
+```python
+# crewai_agent.py
+from crewai import Agent, Task, Crew
+
+from crewai_tools import (
+ WebsiteSearchTool
+)
+
+web_rag_tool = WebsiteSearchTool()
+
+writer = Agent(
+ role="Writer",
+ goal="You make math engaging and understandable for young children through poetry",
+ backstory="You're an expert in writing haikus but you know nothing of math.",
+ tools=[web_rag_tool],
+)
+
+task = Task(
+ description=("What is {multiplication}?"),
+ expected_output=("Compose a haiku that includes the answer."),
+ agent=writer
+)
+
+crew = Crew(
+ agents=[writer],
+ tasks=[task],
+ share_crew=False
+)
+
+output = crew.kickoff(dict(multiplication="2 * 2"))
+```
+
+### تشغيل التطبيق مع التجهيز التلقائي من Datadog
+
+مع تعيين [متغيرات البيئة](#تعيين-متغيرات-البيئة)، يمكنك الآن تشغيل التطبيق مع التجهيز التلقائي من Datadog.
+
+```shell
+ddtrace-run python crewai_agent.py
+```
+
+### عرض التتبعات في Datadog
+
+بعد تشغيل التطبيق، يمكنك عرض التتبعات في [عرض تتبعات Datadog LLM Observability](https://app.datadoghq.com/llm/traces)، باختيار اسم تطبيق ML الذي اخترته من القائمة المنسدلة أعلى اليسار.
+
+النقر على تتبع سيعرض لك تفاصيل التتبع، بما في ذلك إجمالي الرموز المستخدمة وعدد استدعاءات LLM والنماذج المستخدمة والتكلفة المقدرة.
+
+
+
+
+
+بالإضافة إلى ذلك، يمكنك عرض رسم بياني لتنفيذ التتبع، الذي يوضح تدفق التحكم والبيانات للتتبع.
+
+
+
+
+
+## المراجع
+
+- [Datadog LLM Observability](https://www.datadoghq.com/product/llm-observability/)
+- [التجهيز التلقائي لـ CrewAI من Datadog LLM Observability](https://docs.datadoghq.com/llm_observability/instrumentation/auto_instrumentation?tab=python#crew-ai)
diff --git a/docs/v1.15.1/ar/observability/galileo.mdx b/docs/v1.15.1/ar/observability/galileo.mdx
new file mode 100644
index 000000000..9c51f2306
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/galileo.mdx
@@ -0,0 +1,86 @@
+---
+title: Galileo
+description: تكامل Galileo مع CrewAI للتتبع والتقييم
+icon: telescope
+mode: "wide"
+---
+
+## نظرة عامة
+
+يوضح هذا الدليل كيفية دمج **Galileo** مع **CrewAI** للتتبع الشامل وهندسة التقييم. بنهاية هذا الدليل، ستتمكن من تتبع وكلاء CrewAI ومراقبة أدائهم وتقييم سلوكهم باستخدام منصة المراقبة القوية من Galileo.
+
+> **ما هو Galileo؟** [Galileo](https://galileo.ai) هو منصة تقييم ومراقبة للذكاء الاصطناعي توفر تتبعاً شاملاً وتقييماً ومراقبة لتطبيقات الذكاء الاصطناعي. تمكّن الفرق من التقاط البيانات الحقيقية وإنشاء حواجز قوية وتشغيل تجارب منهجية مع تتبع تجارب مدمج وتحليلات أداء.
+
+## البدء
+
+يتبع هذا البرنامج التعليمي [البدء السريع مع CrewAI](/ar/quickstart) ويوضح كيفية إضافة [CrewAIEventListener](https://v2docs.galileo.ai/sdk-api/python/reference/handlers/crewai/handler) من Galileo كمعالج أحداث.
+
+> **ملاحظة** يفترض هذا البرنامج التعليمي أنك أكملت [البدء السريع مع CrewAI](/ar/quickstart).
+
+### الخطوة 1: تثبيت الاعتماديات
+
+ثبّت الاعتماديات المطلوبة لتطبيقك:
+
+```bash
+uv add galileo
+```
+
+### الخطوة 2: أضف إلى ملف .env من [البدء السريع مع CrewAI](/ar/quickstart)
+
+```bash
+# Your Galileo API key
+GALILEO_API_KEY="your-galileo-api-key"
+
+# Your Galileo project name
+GALILEO_PROJECT="your-galileo-project-name"
+
+# The name of the Log stream you want to use for logging
+GALILEO_LOG_STREAM="your-galileo-log-stream "
+```
+
+### الخطوة 3: إضافة مستمع أحداث Galileo
+
+لتفعيل التسجيل مع Galileo، تحتاج إلى إنشاء مثيل من `CrewAIEventListener`. استورد حزمة معالج CrewAI من Galileo بإضافة الكود التالي في أعلى ملف main.py:
+
+```python
+from galileo.handlers.crewai.handler import CrewAIEventListener
+```
+
+في بداية دالة التشغيل، أنشئ مستمع الأحداث:
+
+```python
+def run():
+ # Create the event listener
+ CrewAIEventListener()
+ # The rest of your existing code goes here
+```
+
+عند إنشاء مثيل المستمع، يتم تسجيله تلقائياً مع CrewAI.
+
+### الخطوة 4: شغّل طاقمك
+
+شغّل طاقمك باستخدام CrewAI CLI:
+
+```bash
+crewai run
+```
+
+### الخطوة 5: عرض التتبعات في Galileo
+
+بمجرد انتهاء طاقمك، سيتم تفريغ التتبعات وستظهر في Galileo.
+
+
+
+## فهم تكامل Galileo
+
+يتكامل Galileo مع CrewAI عن طريق تسجيل مستمع أحداث يلتقط أحداث تنفيذ الطاقم (مثل إجراءات الوكلاء واستدعاءات الأدوات واستجابات النماذج) ويعيد توجيهها إلى Galileo للمراقبة والتقييم.
+
+### فهم مستمع الأحداث
+
+إنشاء مثيل `CrewAIEventListener()` هو كل ما يلزم لتفعيل Galileo لتشغيل CrewAI. عند الإنشاء، يقوم المستمع بـ:
+
+- التسجيل تلقائياً مع CrewAI
+- قراءة إعدادات Galileo من متغيرات البيئة
+- تسجيل جميع بيانات التشغيل في مشروع Galileo وتدفق السجل المحدد بواسطة `GALILEO_PROJECT` و `GALILEO_LOG_STREAM`
+
+لا يلزم أي إعداد إضافي أو تغييرات في الكود.
diff --git a/docs/v1.15.1/ar/observability/langdb.mdx b/docs/v1.15.1/ar/observability/langdb.mdx
new file mode 100644
index 000000000..42726faaa
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/langdb.mdx
@@ -0,0 +1,167 @@
+---
+title: تكامل LangDB
+description: إدارة وتأمين وتحسين سير عمل CrewAI مع بوابة LangDB AI — الوصول إلى أكثر من 350 نموذجاً وتوجيه تلقائي وتحسين التكاليف ومراقبة كاملة.
+icon: database
+mode: "wide"
+---
+
+# مقدمة
+
+توفر [بوابة LangDB AI](https://langdb.ai) واجهات API متوافقة مع OpenAI للاتصال بنماذج لغة كبيرة متعددة وتعمل كمنصة مراقبة تجعل تتبع سير عمل CrewAI شاملاً وسهلاً مع توفير الوصول إلى أكثر من 350 نموذج لغة. مع استدعاء `init()` واحد، يتم التقاط جميع تفاعلات الوكلاء وتنفيذ المهام واستدعاءات LLM، مما يوفر مراقبة شاملة وبنية تحتية جاهزة للإنتاج لتطبيقاتك.
+
+
+
+
+
+**تحقق من:** [عرض مثال التتبع المباشر](https://app.langdb.ai/sharing/threads/3becbfed-a1be-ae84-ea3c-4942867a3e22)
+
+## الميزات
+
+### قدرات بوابة AI
+- **الوصول إلى أكثر من 350 LLM**: الاتصال بجميع نماذج اللغة الرئيسية من خلال تكامل واحد
+- **النماذج الافتراضية**: إنشاء إعدادات نماذج مخصصة مع معاملات وقواعد توجيه محددة
+- **MCP الافتراضي**: تفعيل التوافق والتكامل مع أنظمة MCP لتعزيز اتصال الوكلاء
+- **حواجز الحماية**: تنفيذ تدابير السلامة وضوابط الامتثال لسلوك الوكلاء
+
+### المراقبة والتتبع
+- **تتبع تلقائي**: استدعاء `init()` واحد يلتقط جميع تفاعلات CrewAI
+- **رؤية شاملة**: مراقبة سير عمل الوكلاء من البداية إلى النهاية
+- **تتبع استخدام الأدوات**: تتبع الأدوات التي يستخدمها الوكلاء ونتائجها
+- **مراقبة استدعاءات النماذج**: رؤى مفصلة لتفاعلات LLM
+- **تحليلات الأداء**: مراقبة زمن الاستجابة واستخدام الرموز والتكاليف
+- **دعم التصحيح**: تنفيذ خطوة بخطوة لاستكشاف الأخطاء
+- **المراقبة في الوقت الفعلي**: لوحة معلومات التتبعات والمقاييس الحية
+
+## تعليمات الإعداد
+
+
+
+ ثبّت عميل LangDB مع علامة ميزة CrewAI:
+ ```bash
+ pip install 'pylangdb[crewai]'
+ ```
+
+
+ قم بإعداد بيانات اعتماد LangDB:
+ ```bash
+ export LANGDB_API_KEY=""
+ export LANGDB_PROJECT_ID=""
+ export LANGDB_API_BASE_URL='https://api.us-east-1.langdb.ai'
+ ```
+
+
+ استورد وهيّئ LangDB قبل إعداد كود CrewAI:
+ ```python
+ from pylangdb.crewai import init
+ # Initialize LangDB
+ init()
+ ```
+
+
+ قم بإعداد LLM مع رؤوس LangDB:
+ ```python
+ from crewai import Agent, Task, Crew, LLM
+ import os
+
+ # Configure LLM with LangDB headers
+ llm = LLM(
+ model="openai/gpt-4o",
+ api_key=os.getenv("LANGDB_API_KEY"),
+ base_url=os.getenv("LANGDB_API_BASE_URL"),
+ extra_headers={"x-project-id": os.getenv("LANGDB_PROJECT_ID")}
+ )
+ ```
+
+
+
+## مثال سريع للبدء
+
+```python
+import os
+from pylangdb.crewai import init
+from crewai import Agent, Task, Crew, LLM
+
+init()
+
+def create_llm(model):
+ return LLM(
+ model=model,
+ api_key=os.environ.get("LANGDB_API_KEY"),
+ base_url=os.environ.get("LANGDB_API_BASE_URL"),
+ extra_headers={"x-project-id": os.environ.get("LANGDB_PROJECT_ID")}
+ )
+
+researcher = Agent(
+ role="Research Specialist",
+ goal="Research topics thoroughly",
+ backstory="Expert researcher with skills in finding information",
+ llm=create_llm("openai/gpt-4o"),
+ verbose=True
+)
+
+task = Task(
+ description="Research the given topic and provide a comprehensive summary",
+ agent=researcher,
+ expected_output="Detailed research summary with key findings"
+)
+
+crew = Crew(agents=[researcher], tasks=[task])
+result = crew.kickoff()
+print(result)
+```
+
+## عرض التتبعات في LangDB
+
+بعد تشغيل تطبيق CrewAI، يمكنك عرض تتبعات مفصلة في لوحة معلومات LangDB:
+
+
+
+
+
+### ما ستراه
+
+- **تفاعلات الوكلاء**: التدفق الكامل لمحادثات الوكلاء وتسليم المهام
+- **استخدام الأدوات**: الأدوات التي تم استدعاؤها ومدخلاتها ومخرجاتها
+- **استدعاءات النماذج**: تفاعلات LLM المفصلة مع المطالبات والاستجابات
+- **مقاييس الأداء**: تتبع زمن الاستجابة واستخدام الرموز والتكاليف
+- **الجدول الزمني للتنفيذ**: عرض خطوة بخطوة لسير العمل بالكامل
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+- **عدم ظهور تتبعات**: تأكد من استدعاء `init()` قبل أي استيرادات CrewAI
+- **أخطاء المصادقة**: تحقق من مفتاح API ومعرف المشروع في LangDB
+
+## الموارد
+
+
+
+ الوثائق والأدلة الرسمية لـ LangDB
+
+
+ برامج تعليمية خطوة بخطوة لبناء وكلاء AI
+
+
+ أمثلة تكامل CrewAI الكاملة
+
+
+ الوصول إلى تتبعاتك وتحليلاتك
+
+
+ تصفح أكثر من 350 نموذج لغة متاح
+
+
+ خيارات الاستضافة الذاتية وقدرات المؤسسات
+
+
+
+## الخطوات التالية
+
+غطى هذا الدليل أساسيات دمج بوابة LangDB AI مع CrewAI. لتعزيز سير عمل الذكاء الاصطناعي بشكل أكبر، استكشف:
+
+- **النماذج الافتراضية**: إنشاء إعدادات نماذج مخصصة مع استراتيجيات توجيه
+- **حواجز الحماية والسلامة**: تنفيذ تصفية المحتوى وضوابط الامتثال
+- **النشر في الإنتاج**: إعداد خطط احتياطية وإعادة المحاولة وتوازن الأحمال
+
+لمزيد من الميزات المتقدمة وحالات الاستخدام، زُر [وثائق LangDB](https://docs.langdb.ai) أو استكشف [كتالوج النماذج](https://app.langdb.ai/models) لاكتشاف جميع النماذج المتاحة.
diff --git a/docs/v1.15.1/ar/observability/langfuse.mdx b/docs/v1.15.1/ar/observability/langfuse.mdx
new file mode 100644
index 000000000..e62d2e657
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/langfuse.mdx
@@ -0,0 +1,109 @@
+---
+title: تكامل Langfuse
+description: تعلم كيفية دمج Langfuse مع CrewAI عبر OpenTelemetry باستخدام OpenLit
+icon: vials
+mode: "wide"
+---
+
+# دمج Langfuse مع CrewAI
+
+يوضح هذا الدفتر كيفية دمج **Langfuse** مع **CrewAI** باستخدام OpenTelemetry عبر حزمة **OpenLit** SDK. بنهاية هذا الدفتر، ستتمكن من تتبع تطبيقات CrewAI مع Langfuse لتحسين المراقبة والتصحيح.
+
+> **ما هو Langfuse؟** [Langfuse](https://langfuse.com) هو منصة هندسة LLM مفتوحة المصدر. توفر قدرات التتبع والمراقبة لتطبيقات LLM، مما يساعد المطورين على التصحيح والتحليل والتحسين. يتكامل Langfuse مع أدوات وأطر عمل متنوعة عبر تكاملات أصلية وOpenTelemetry وواجهات API/SDKs.
+
+[](https://langfuse.com/watch-demo)
+
+## البدء
+
+سنمر عبر مثال بسيط لاستخدام CrewAI ودمجه مع Langfuse عبر OpenTelemetry باستخدام OpenLit.
+
+### الخطوة 1: تثبيت الاعتماديات
+
+```python
+%pip install langfuse openlit crewai crewai_tools
+```
+
+### الخطوة 2: إعداد متغيرات البيئة
+
+عيّن مفاتيح API لـ Langfuse وإعدادات تصدير OpenTelemetry لإرسال التتبعات إلى Langfuse. يرجى الرجوع إلى [وثائق Langfuse OpenTelemetry](https://langfuse.com/docs/opentelemetry/get-started) لمزيد من المعلومات.
+
+```python
+import os
+
+# Get keys for your project from the project settings page: https://cloud.langfuse.com
+os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-lf-..."
+os.environ["LANGFUSE_SECRET_KEY"] = "sk-lf-..."
+os.environ["LANGFUSE_HOST"] = "https://cloud.langfuse.com" # 🇪🇺 EU region
+# os.environ["LANGFUSE_HOST"] = "https://us.cloud.langfuse.com" # 🇺🇸 US region
+
+
+# Your OpenAI key
+os.environ["OPENAI_API_KEY"] = "sk-proj-..."
+```
+
+مع تعيين متغيرات البيئة، يمكننا الآن تهيئة عميل Langfuse. تهيئ `get_client()` عميل Langfuse باستخدام بيانات الاعتماد المقدمة في متغيرات البيئة.
+
+```python
+from langfuse import get_client
+
+langfuse = get_client()
+
+# Verify connection
+if langfuse.auth_check():
+ print("Langfuse client is authenticated and ready!")
+else:
+ print("Authentication failed. Please check your credentials and host.")
+```
+
+### الخطوة 3: تهيئة OpenLit
+
+قم بتهيئة OpenLit OpenTelemetry instrumentation SDK لبدء التقاط تتبعات OpenTelemetry.
+
+```python
+import openlit
+
+openlit.init()
+```
+
+### الخطوة 4: إنشاء تطبيق CrewAI بسيط
+
+سننشئ تطبيق CrewAI بسيط حيث يتعاون عدة وكلاء للإجابة على سؤال المستخدم.
+
+```python
+from crewai import Agent, Task, Crew
+
+from crewai_tools import (
+ WebsiteSearchTool
+)
+
+web_rag_tool = WebsiteSearchTool()
+
+writer = Agent(
+ role="Writer",
+ goal="You make math engaging and understandable for young children through poetry",
+ backstory="You're an expert in writing haikus but you know nothing of math.",
+ tools=[web_rag_tool],
+ )
+
+task = Task(description=("What is {multiplication}?"),
+ expected_output=("Compose a haiku that includes the answer."),
+ agent=writer)
+
+crew = Crew(
+ agents=[writer],
+ tasks=[task],
+ share_crew=False
+)
+```
+
+### الخطوة 5: عرض التتبعات في Langfuse
+
+بعد تشغيل الوكيل، يمكنك عرض التتبعات المولدة من تطبيق CrewAI في [Langfuse](https://cloud.langfuse.com). سترى خطوات مفصلة لتفاعلات LLM، مما يساعدك في التصحيح والتحسين.
+
+
+
+_[مثال تتبع عام في Langfuse](https://cloud.langfuse.com/project/cloramnkj0002jz088vzn1ja4/traces/e2cf380ffc8d47d28da98f136140642b?timestamp=2025-02-05T15%3A12%3A02.717Z&observation=3b32338ee6a5d9af)_
+
+## المراجع
+
+- [وثائق Langfuse OpenTelemetry](https://langfuse.com/docs/opentelemetry/get-started)
diff --git a/docs/v1.15.1/ar/observability/langtrace.mdx b/docs/v1.15.1/ar/observability/langtrace.mdx
new file mode 100644
index 000000000..d07f3f35e
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/langtrace.mdx
@@ -0,0 +1,73 @@
+---
+title: تكامل Langtrace
+description: كيفية مراقبة التكلفة وزمن الاستجابة وأداء وكلاء CrewAI باستخدام Langtrace، أداة مراقبة خارجية.
+icon: chart-line
+mode: "wide"
+---
+
+# نظرة عامة على Langtrace
+
+Langtrace هو أداة مفتوحة المصدر خارجية تساعدك في إعداد المراقبة والتقييمات لنماذج اللغة الكبيرة (LLMs) وأطر عمل LLM وقواعد بيانات المتجهات.
+على الرغم من أنها ليست مبنية مباشرة في CrewAI، يمكن استخدام Langtrace جنباً إلى جنب مع CrewAI للحصول على رؤية عميقة في التكلفة وزمن الاستجابة وأداء وكلاء CrewAI.
+يتيح لك هذا التكامل تسجيل المعاملات الفائقة ومراقبة تراجعات الأداء وإنشاء عملية للتحسين المستمر لوكلائك.
+
+
+
+
+
+## تعليمات الإعداد
+
+
+
+ سجّل بزيارة [https://langtrace.ai/signup](https://langtrace.ai/signup).
+
+
+ عيّن نوع المشروع إلى `CrewAI` وقم بتوليد مفتاح API.
+
+
+ استخدم الأمر التالي:
+
+ ```bash
+ pip install langtrace-python-sdk
+ ```
+
+
+ استورد وهيّئ Langtrace في بداية نصك البرمجي، قبل أي استيرادات CrewAI:
+
+ ```python
+ from langtrace_python_sdk import langtrace
+ langtrace.init(api_key='')
+
+ # Now import CrewAI modules
+ from crewai import Agent, Task, Crew
+ ```
+
+
+
+### الميزات وتطبيقاتها على CrewAI
+
+1. **تتبع رموز LLM والتكاليف**
+
+ - مراقبة استخدام الرموز والتكاليف المرتبطة لكل تفاعل وكيل CrewAI.
+
+2. **رسم بياني للتتبع لخطوات التنفيذ**
+
+ - تصور تدفق تنفيذ مهام CrewAI، بما في ذلك زمن الاستجابة والسجلات.
+ - مفيد لتحديد الاختناقات في سير عمل الوكلاء.
+
+3. **تنظيم مجموعات البيانات مع التعليق اليدوي**
+
+ - إنشاء مجموعات بيانات من مخرجات مهام CrewAI للتدريب أو التقييم المستقبلي.
+
+4. **إدارة إصدارات المطالبات**
+
+ - تتبع الإصدارات المختلفة من المطالبات المستخدمة في وكلاء CrewAI.
+ - مفيد لاختبار A/B وتحسين أداء الوكلاء.
+
+5. **ساحة المطالبات مع مقارنات النماذج**
+
+ - اختبار ومقارنة مطالبات ونماذج مختلفة لوكلاء CrewAI قبل النشر.
+
+6. **الاختبارات والتقييمات**
+
+ - إعداد اختبارات آلية لوكلاء ومهام CrewAI.
diff --git a/docs/v1.15.1/ar/observability/maxim.mdx b/docs/v1.15.1/ar/observability/maxim.mdx
new file mode 100644
index 000000000..dd311643b
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/maxim.mdx
@@ -0,0 +1,221 @@
+---
+title: "تكامل Maxim"
+description: "بدء مراقبة وتقييم ومراقبة الوكلاء"
+icon: "infinity"
+mode: "wide"
+---
+
+# نظرة عامة على Maxim
+
+يوفر Maxim AI مراقبة شاملة للوكلاء وتقييماً ومراقبة لتطبيقات CrewAI. مع تكامل Maxim بسطر واحد، يمكنك بسهولة تتبع وتحليل تفاعلات الوكلاء ومقاييس الأداء والمزيد.
+
+## الميزات
+
+### إدارة المطالبات
+
+تمكّنك قدرات إدارة المطالبات في Maxim من إنشاء وتنظيم وتحسين المطالبات لوكلاء CrewAI. بدلاً من ترميز التعليمات مباشرة، استفد من SDK الخاص بـ Maxim لاسترداد وتطبيق مطالبات مُدارة بالإصدارات ديناميكياً.
+
+
+
+ أنشئ وصقل وجرّب وانشر مطالباتك عبر الساحة. نظّم مطالباتك باستخدام المجلدات والإصدارات، وجرّب مع حالات العالم الحقيقي عن طريق ربط الأدوات والسياق، وانشر بناءً على منطق مخصص.
+
+
+
+
+ مع بناء الفرق لتطبيقات الذكاء الاصطناعي، يُعد جزء كبير من التجريب هو التكرار على هيكل المطالبات. للتعاون بفعالية وتنظيم التغييرات بوضوح، يسمح Maxim بإصدارات المطالبات ومقارنة التشغيلات عبر الإصدارات.
+
+
+
+
+ التكرار على المطالبات أثناء تطوير تطبيق الذكاء الاصطناعي يحتاج تجارب عبر النماذج وهياكل المطالبات وغيرها. لمقارنة الإصدارات واتخاذ قرارات مستنيرة، تسمح ساحة المقارنة بعرض جنب إلى جنب للنتائج.
+
+ ## **لماذا تستخدم مقارنة المطالبات؟**
+
+ تجمع مقارنة المطالبات عدة مطالبات فردية في عرض واحد، مما يمكّن من نهج مبسط لسير عمل متنوع:
+
+ 1. **مقارنة النماذج**: تقييم أداء نماذج مختلفة على نفس المطالبة.
+ 2. **تحسين المطالبات**: مقارنة إصدارات مختلفة لتحديد الصياغة الأكثر فعالية.
+ 3. **اتساق عبر النماذج**: ضمان مخرجات متسقة عبر نماذج مختلفة لنفس المطالبة.
+ 4. **قياس الأداء**: تحليل مقاييس مثل زمن الاستجابة والتكلفة وعدد الرموز عبر نماذج ومطالبات مختلفة.
+
+
+
+### المراقبة والتقييمات
+
+يوفر Maxim AI مراقبة وتقييماً شاملاً لوكلاء CrewAI، مما يساعدك في فهم ما يحدث بالضبط أثناء كل تنفيذ.
+
+
+
+ تتبع دورة حياة وكيلك الكاملة، بما في ذلك استدعاءات الأدوات ومسارات الوكلاء وتدفقات القرار بسهولة.
+
+
+
+
+ شغّل تقييمات مفصلة على التتبعات الكاملة أو العقد الفردية مع دعم لـ:
+
+ - التفاعلات متعددة الخطوات وتحليل التتبع الدقيق
+ - تقييمات على مستوى الجلسة
+ - محاكاة لاختبار العالم الحقيقي
+
+
+
+
+
+
+ تقييم السجلات الملتقطة تلقائياً من واجهة المستخدم بناءً على المرشحات والعينات
+
+
+
+
+ استخدام التقييم البشري أو التصنيف لتقييم جودة سجلاتك
+
+
+
+
+ تقييم أي مكون من تتبعك أو سجلك للحصول على رؤى حول سلوك وكيلك
+
+
+
+ ---
+
+
+ عيّن حدوداً على **الأخطاء والتكلفة واستخدام الرموز وتغذية المستخدم الراجعة وزمن الاستجابة** واحصل على تنبيهات فورية عبر Slack أو PagerDuty.
+
+
+
+
+ تصور التتبعات عبر الزمن ومقاييس الاستخدام وزمن الاستجابة ومعدلات الأخطاء بسهولة.
+
+
+
+
+
+## البدء
+
+### المتطلبات الأساسية
+
+- إصدار Python >= 3.10
+- حساب Maxim ([سجّل هنا](https://getmaxim.ai/))
+- توليد مفتاح API من Maxim
+- مشروع CrewAI
+
+### التثبيت
+
+ثبّت Maxim SDK عبر pip:
+
+```python
+pip install maxim-py
+```
+
+أو أضفه إلى ملف `requirements.txt`:
+
+```
+maxim-py
+```
+
+### الإعداد الأساسي
+
+### 1. إعداد متغيرات البيئة
+
+```python
+### Environment Variables Setup
+
+# Create a `.env` file in your project root:
+
+# Maxim API Configuration
+MAXIM_API_KEY=your_api_key_here
+MAXIM_LOG_REPO_ID=your_repo_id_here
+```
+
+### 2. استيراد الحزم المطلوبة
+
+```python
+from crewai import Agent, Task, Crew, Process
+from maxim import Maxim
+from maxim.logger.crewai import instrument_crewai
+```
+
+### 3. تهيئة Maxim بمفتاح API
+
+```python {8}
+# Instrument CrewAI with just one line
+instrument_crewai(Maxim().logger())
+```
+
+### 4. إنشاء وتشغيل تطبيق CrewAI كالمعتاد
+
+```python
+# Create your agent
+researcher = Agent(
+ role='Senior Research Analyst',
+ goal='Uncover cutting-edge developments in AI',
+ backstory="You are an expert researcher at a tech think tank...",
+ verbose=True,
+ llm=llm
+)
+
+# Define the task
+research_task = Task(
+ description="Research the latest AI advancements...",
+ expected_output="",
+ agent=researcher
+)
+
+# Configure and run the crew
+crew = Crew(
+ agents=[researcher],
+ tasks=[research_task],
+ verbose=True
+)
+
+try:
+ result = crew.kickoff()
+finally:
+ maxim.cleanup() # Ensure cleanup happens even if errors occur
+```
+
+هذا كل شيء! سيتم الآن تسجيل جميع تفاعلات وكلاء CrewAI وستكون متاحة في لوحة معلومات Maxim.
+
+تحقق من دفتر Google Colab هذا كمرجع سريع - [الدفتر](https://colab.research.google.com/drive/1ZKIZWsmgQQ46n8TH9zLsT1negKkJA6K8?usp=sharing)
+
+## عرض تتبعاتك
+
+بعد تشغيل تطبيق CrewAI:
+
+1. سجل الدخول إلى [لوحة معلومات Maxim](https://app.getmaxim.ai/login)
+2. انتقل إلى مستودعك
+3. اعرض تتبعات الوكلاء المفصلة، بما في ذلك:
+ - محادثات الوكلاء
+ - أنماط استخدام الأدوات
+ - مقاييس الأداء
+ - تحليلات التكاليف
+
+
+
+## استكشاف الأخطاء وإصلاحها
+
+### المشاكل الشائعة
+
+- **عدم ظهور تتبعات**: تأكد من صحة مفتاح API ومعرف المستودع
+- تأكد من استدعاء **`instrument_crewai()`** **_قبل_** تشغيل طاقمك
+- عيّن `debug=True` في استدعاء `instrument_crewai()` لإظهار أي أخطاء داخلية:
+
+ ```python
+ instrument_crewai(logger, debug=True)
+ ```
+- أعدّ وكلاءك مع `verbose=True` لالتقاط سجلات مفصلة
+- تحقق مرة أخرى من أن `instrument_crewai()` يُستدعى **قبل** إنشاء أو تنفيذ الوكلاء
+
+## الموارد
+
+
+
+ وثائق CrewAI الرسمية
+
+
+ وثائق Maxim الرسمية
+
+
+ Maxim Github
+
+
diff --git a/docs/v1.15.1/ar/observability/mlflow.mdx b/docs/v1.15.1/ar/observability/mlflow.mdx
new file mode 100644
index 000000000..d8945f14d
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/mlflow.mdx
@@ -0,0 +1,206 @@
+---
+title: تكامل MLflow
+description: ابدأ بسرعة في مراقبة وكلائك باستخدام MLflow.
+icon: bars-staggered
+mode: "wide"
+---
+
+# نظرة عامة على MLflow
+
+[MLflow](https://mlflow.org/) هو منصة مفتوحة المصدر لمساعدة ممارسي تعلم الآلة والفرق في التعامل مع تعقيدات عملية تعلم الآلة.
+
+يوفر ميزة التتبع التي تعزز قابلية مراقبة نماذج اللغة الكبيرة (LLM) في تطبيقات الذكاء الاصطناعي التوليدي الخاصة بك من خلال التقاط معلومات تفصيلية حول تنفيذ خدمات تطبيقك.
+يوفر التتبع طريقة لتسجيل المدخلات والمخرجات والبيانات الوصفية المرتبطة بكل خطوة وسيطة في الطلب، مما يتيح لك تحديد مصدر الأخطاء والسلوكيات غير المتوقعة بسهولة.
+
+
+
+### الميزات
+
+- **لوحة معلومات التتبع**: راقب أنشطة وكلاء crewAI الخاصين بك من خلال لوحات معلومات تفصيلية تتضمن المدخلات والمخرجات والبيانات الوصفية للنطاقات.
+- **التتبع الآلي**: تكامل مؤتمت بالكامل مع crewAI، يمكن تفعيله عبر تشغيل `mlflow.crewai.autolog()`.
+- **أدوات التتبع اليدوي بأقل مجهود**: خصّص أدوات التتبع من خلال واجهات برمجة التطبيقات عالية المستوى من MLflow مثل المزخرفات وأغلفة الدوال ومديري السياق.
+- **التوافق مع OpenTelemetry**: يدعم تتبع MLflow تصدير التتبعات إلى جامع OpenTelemetry، الذي يمكن استخدامه بعد ذلك لتصدير التتبعات إلى خلفيات متنوعة مثل Jaeger وZipkin وAWS X-Ray.
+- **تغليف ونشر الوكلاء**: قم بتغليف ونشر وكلاء crewAI الخاصين بك إلى خادم استدلال مع مجموعة متنوعة من أهداف النشر.
+- **استضافة آمنة لنماذج LLM**: استضف نماذج LLM متعددة من مزودين مختلفين في نقطة نهاية موحدة من خلال بوابة MLflow.
+- **التقييم**: قيّم وكلاء crewAI الخاصين بك باستخدام مجموعة واسعة من المقاييس عبر واجهة برمجة تطبيقات مريحة `mlflow.evaluate()`.
+
+## تعليمات الإعداد
+
+
+
+ ```shell
+ # The crewAI integration is available in mlflow>=2.19.0
+ pip install mlflow
+ ```
+
+
+ ```shell
+ # This process is optional, but it is recommended to use MLflow tracking server for better visualization and broader features.
+ mlflow server
+ ```
+
+
+ أضف السطرين التاليين إلى كود تطبيقك:
+
+ ```python
+ import mlflow
+
+ mlflow.crewai.autolog()
+
+ # Optional: Set a tracking URI and an experiment name if you have a tracking server
+ mlflow.set_tracking_uri("http://localhost:5000")
+ mlflow.set_experiment("CrewAI")
+ ```
+
+ مثال على الاستخدام لتتبع وكلاء CrewAI:
+
+ ```python
+ from crewai import Agent, Crew, Task
+ from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+ from crewai_tools import SerperDevTool, WebsiteSearchTool
+
+ from textwrap import dedent
+
+ content = "Users name is John. He is 30 years old and lives in San Francisco."
+ string_source = StringKnowledgeSource(
+ content=content, metadata={"preference": "personal"}
+ )
+
+ search_tool = WebsiteSearchTool()
+
+
+ class TripAgents:
+ def city_selection_agent(self):
+ return Agent(
+ role="City Selection Expert",
+ goal="Select the best city based on weather, season, and prices",
+ backstory="An expert in analyzing travel data to pick ideal destinations",
+ tools=[
+ search_tool,
+ ],
+ verbose=True,
+ )
+
+ def local_expert(self):
+ return Agent(
+ role="Local Expert at this city",
+ goal="Provide the BEST insights about the selected city",
+ backstory="""A knowledgeable local guide with extensive information
+ about the city, it's attractions and customs""",
+ tools=[search_tool],
+ verbose=True,
+ )
+
+
+ class TripTasks:
+ def identify_task(self, agent, origin, cities, interests, range):
+ return Task(
+ description=dedent(
+ f"""
+ Analyze and select the best city for the trip based
+ on specific criteria such as weather patterns, seasonal
+ events, and travel costs. This task involves comparing
+ multiple cities, considering factors like current weather
+ conditions, upcoming cultural or seasonal events, and
+ overall travel expenses.
+ Your final answer must be a detailed
+ report on the chosen city, and everything you found out
+ about it, including the actual flight costs, weather
+ forecast and attractions.
+
+ Traveling from: {origin}
+ City Options: {cities}
+ Trip Date: {range}
+ Traveler Interests: {interests}
+ """
+ ),
+ agent=agent,
+ expected_output="Detailed report on the chosen city including flight costs, weather forecast, and attractions",
+ )
+
+ def gather_task(self, agent, origin, interests, range):
+ return Task(
+ description=dedent(
+ f"""
+ As a local expert on this city you must compile an
+ in-depth guide for someone traveling there and wanting
+ to have THE BEST trip ever!
+ Gather information about key attractions, local customs,
+ special events, and daily activity recommendations.
+ Find the best spots to go to, the kind of place only a
+ local would know.
+ This guide should provide a thorough overview of what
+ the city has to offer, including hidden gems, cultural
+ hotspots, must-visit landmarks, weather forecasts, and
+ high level costs.
+ The final answer must be a comprehensive city guide,
+ rich in cultural insights and practical tips,
+ tailored to enhance the travel experience.
+
+ Trip Date: {range}
+ Traveling from: {origin}
+ Traveler Interests: {interests}
+ """
+ ),
+ agent=agent,
+ expected_output="Comprehensive city guide including hidden gems, cultural hotspots, and practical travel tips",
+ )
+
+
+ class TripCrew:
+ def __init__(self, origin, cities, date_range, interests):
+ self.cities = cities
+ self.origin = origin
+ self.interests = interests
+ self.date_range = date_range
+
+ def run(self):
+ agents = TripAgents()
+ tasks = TripTasks()
+
+ city_selector_agent = agents.city_selection_agent()
+ local_expert_agent = agents.local_expert()
+
+ identify_task = tasks.identify_task(
+ city_selector_agent,
+ self.origin,
+ self.cities,
+ self.interests,
+ self.date_range,
+ )
+ gather_task = tasks.gather_task(
+ local_expert_agent, self.origin, self.interests, self.date_range
+ )
+
+ crew = Crew(
+ agents=[city_selector_agent, local_expert_agent],
+ tasks=[identify_task, gather_task],
+ verbose=True,
+ memory=True,
+ knowledge={
+ "sources": [string_source],
+ "metadata": {"preference": "personal"},
+ },
+ )
+
+ result = crew.kickoff()
+ return result
+
+
+ trip_crew = TripCrew("California", "Tokyo", "Dec 12 - Dec 20", "sports")
+ result = trip_crew.run()
+
+ print(result)
+ ```
+ راجع [وثائق تتبع MLflow](https://mlflow.org/docs/latest/llms/tracing/index.html) لمزيد من الإعدادات وحالات الاستخدام.
+
+
+ الآن يتم التقاط تتبعات وكلاء crewAI الخاصين بك بواسطة MLflow.
+ لنقم بزيارة خادم تتبع MLflow لعرض التتبعات والحصول على رؤى حول وكلائك.
+
+ افتح `127.0.0.1:5000` في متصفحك لزيارة خادم تتبع MLflow.
+
+
+
+
+
diff --git a/docs/v1.15.1/ar/observability/neatlogs.mdx b/docs/v1.15.1/ar/observability/neatlogs.mdx
new file mode 100644
index 000000000..7fbc188ad
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/neatlogs.mdx
@@ -0,0 +1,134 @@
+---
+title: تكامل Neatlogs
+description: افهم وأصلح وشارك عمليات تشغيل وكلاء CrewAI الخاصة بك
+icon: magnifying-glass-chart
+mode: "wide"
+---
+
+# مقدمة
+
+يساعدك Neatlogs على **رؤية ما فعله وكيلك**، و**لماذا**، و**مشاركته**.
+
+يلتقط كل خطوة: الأفكار، واستدعاءات الأدوات، والاستجابات، والتقييمات. لا سجلات خام. فقط تتبعات واضحة ومنظمة. ممتاز لتصحيح الأخطاء والتعاون.
+
+## لماذا تستخدم Neatlogs؟
+
+يستخدم وكلاء CrewAI أدوات متعددة وخطوات تفكير. عندما يحدث خطأ ما، تحتاج إلى السياق - وليس فقط الأخطاء.
+
+يتيح لك Neatlogs:
+
+- تتبع مسار اتخاذ القرار بالكامل
+- إضافة ملاحظات مباشرة على الخطوات
+- الدردشة مع التتبع باستخدام مساعد الذكاء الاصطناعي
+- مشاركة عمليات التشغيل علنياً للحصول على ملاحظات
+- تحويل الرؤى إلى مهام
+
+كل ذلك في مكان واحد.
+
+إدارة تتبعاتك بسهولة
+
+
+
+
+أفضل تجربة مستخدم لعرض تتبع CrewAI. انشر التعليقات أينما تريد. استخدم الذكاء الاصطناعي لتصحيح الأخطاء.
+
+
+
+
+
+## الميزات الأساسية
+
+- **عارض التتبع**: تتبع الأفكار والأدوات والقرارات بالتسلسل
+- **التعليقات المضمنة**: أشر إلى زملاء الفريق على أي خطوة تتبع
+- **الملاحظات والتقييم**: حدد المخرجات كصحيحة أو غير صحيحة
+- **إبراز الأخطاء**: وسم تلقائي لأخطاء API/الأدوات
+- **تحويل المهام**: حوّل التعليقات إلى مهام موكلة
+- **اسأل التتبع (AI)**: تحدث مع تتبعك باستخدام روبوت Neatlogs الذكي
+- **المشاركة العامة**: انشر روابط التتبع لمجتمعك
+
+## إعداد سريع مع CrewAI
+
+
+
+ قم بزيارة [neatlogs.com](https://neatlogs.com/?utm_source=crewAI-docs)، وأنشئ مشروعاً، وانسخ مفتاح API.
+
+
+ ```bash
+ pip install neatlogs
+ ```
+ (أحدث إصدار 0.8.0، Python 3.8+؛ رخصة MIT)
+
+
+ قبل بدء وكلاء Crew، أضف:
+
+ ```python
+ import neatlogs
+ neatlogs.init("YOUR_PROJECT_API_KEY")
+ ```
+
+ يعمل الوكلاء كالمعتاد. يلتقط Neatlogs كل شيء تلقائياً.
+
+
+
+
+
+
+## تحت الغطاء
+
+وفقاً لـ GitHub، فإن Neatlogs:
+
+- يلتقط الأفكار واستدعاءات الأدوات والاستجابات والأخطاء وإحصائيات الرموز المميزة
+- يدعم توليد المهام بالذكاء الاصطناعي وسير عمل التقييم المتين
+
+كل ذلك بسطرين فقط من الكود.
+
+
+
+## شاهده وهو يعمل
+
+### عرض توضيحي كامل (4 دقائق)
+
+
+
+### تكامل CrewAI (30 ثانية)
+
+
+
+
+
+## الروابط والدعم
+
+- [وثائق Neatlogs](https://docs.neatlogs.com/)
+- [لوحة التحكم ومفتاح API](https://app.neatlogs.com/)
+- [تابعنا على Twitter](https://twitter.com/neatlogs)
+- البريد الإلكتروني: hello@neatlogs.com
+- [GitHub SDK](https://github.com/NeatLogs/neatlogs)
+
+
+
+## الخلاصة
+
+بمجرد:
+
+```bash
+pip install neatlogs
+
+import neatlogs
+neatlogs.init("YOUR_API_KEY")
+
+You can now capture, understand, share, and act on your CrewAI agent runs in seconds.
+No setup overhead. Full trace transparency. Full team collaboration.
+```
diff --git a/docs/v1.15.1/ar/observability/openlit.mdx b/docs/v1.15.1/ar/observability/openlit.mdx
new file mode 100644
index 000000000..a0aa5533d
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/openlit.mdx
@@ -0,0 +1,181 @@
+---
+title: تكامل OpenLIT
+description: ابدأ بسرعة في مراقبة وكلائك بسطر واحد فقط من الكود باستخدام OpenTelemetry.
+icon: magnifying-glass-chart
+mode: "wide"
+---
+
+# نظرة عامة على OpenLIT
+
+[OpenLIT](https://github.com/openlit/openlit?src=crewai-docs) هو أداة مفتوحة المصدر تجعل من السهل مراقبة أداء وكلاء الذكاء الاصطناعي ونماذج LLM وقواعد بيانات المتجهات ووحدات GPU بسطر **واحد** فقط من الكود.
+
+يوفر تتبعاً ومقاييس أصلية لـ OpenTelemetry لتتبع المعلمات المهمة مثل التكلفة وزمن الاستجابة والتفاعلات وتسلسل المهام.
+يمكّنك هذا الإعداد من تتبع المعلمات الفائقة ومراقبة مشكلات الأداء، مما يساعدك في إيجاد طرق لتحسين وضبط وكلائك بمرور الوقت.
+
+
+
+
+
+
+
+### الميزات
+
+- **لوحة معلومات التحليلات**: راقب صحة وأداء وكلائك من خلال لوحات معلومات تفصيلية تتتبع المقاييس والتكاليف وتفاعلات المستخدمين.
+- **SDK مراقبة أصلي لـ OpenTelemetry**: حزم SDK محايدة للمورد لإرسال التتبعات والمقاييس إلى أدوات المراقبة الحالية مثل Grafana وDataDog وغيرها.
+- **تتبع التكاليف للنماذج المخصصة والمعدّلة**: خصّص تقديرات التكلفة لنماذج محددة باستخدام ملفات تسعير مخصصة لوضع ميزانية دقيقة.
+- **لوحة مراقبة الاستثناءات**: اكتشف وحل المشكلات بسرعة من خلال تتبع الاستثناءات والأخطاء الشائعة بلوحة مراقبة.
+- **الامتثال والأمان**: اكتشف التهديدات المحتملة مثل الألفاظ البذيئة وتسريبات المعلومات الشخصية.
+- **كشف حقن الموجهات**: حدد حقن الكود المحتمل وتسريبات الأسرار.
+- **إدارة مفاتيح API والأسرار**: تعامل مع مفاتيح API لنماذج LLM وأسرارك مركزياً بأمان، مع تجنب الممارسات غير الآمنة.
+- **إدارة الموجهات**: أدر وأصدر موجهات الوكلاء باستخدام PromptHub للوصول المتسق والسهل عبر الوكلاء.
+- **ساحة تجربة النماذج**: اختبر وقارن نماذج مختلفة لوكلاء CrewAI قبل النشر.
+
+## تعليمات الإعداد
+
+
+
+
+
+ ```shell
+ git clone git@github.com:openlit/openlit.git
+ ```
+
+
+ من المجلد الجذري لـ [مستودع OpenLIT](https://github.com/openlit/openlit)، شغّل الأمر التالي:
+ ```shell
+ docker compose up -d
+ ```
+
+
+
+
+ ```shell
+ pip install openlit
+ ```
+
+
+ أضف السطرين التاليين إلى كود تطبيقك:
+
+
+ ```python
+ import openlit
+ openlit.init(otlp_endpoint="http://127.0.0.1:4318")
+ ```
+
+ مثال على الاستخدام لمراقبة وكيل CrewAI:
+
+ ```python
+ from crewai import Agent, Task, Crew, Process
+ import openlit
+
+ openlit.init(disable_metrics=True)
+ # Define your agents
+ researcher = Agent(
+ role="Researcher",
+ goal="Conduct thorough research and analysis on AI and AI agents",
+ backstory="You're an expert researcher, specialized in technology, software engineering, AI, and startups. You work as a freelancer and are currently researching for a new client.",
+ allow_delegation=False,
+ llm='command-r'
+ )
+
+
+ # Define your task
+ task = Task(
+ description="Generate a list of 5 interesting ideas for an article, then write one captivating paragraph for each idea that showcases the potential of a full article on this topic. Return the list of ideas with their paragraphs and your notes.",
+ expected_output="5 bullet points, each with a paragraph and accompanying notes.",
+ )
+
+ # Define the manager agent
+ manager = Agent(
+ role="Project Manager",
+ goal="Efficiently manage the crew and ensure high-quality task completion",
+ backstory="You're an experienced project manager, skilled in overseeing complex projects and guiding teams to success. Your role is to coordinate the efforts of the crew members, ensuring that each task is completed on time and to the highest standard.",
+ allow_delegation=True,
+ llm='command-r'
+ )
+
+ # Instantiate your crew with a custom manager
+ crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ manager_agent=manager,
+ process=Process.hierarchical,
+ )
+
+ # Start the crew's work
+ result = crew.kickoff()
+
+ print(result)
+ ```
+
+
+
+ أضف السطرين التاليين إلى كود تطبيقك:
+ ```python
+ import openlit
+
+ openlit.init()
+ ```
+
+ شغّل الأمر التالي لإعداد نقطة نهاية تصدير OTEL:
+ ```shell
+ export OTEL_EXPORTER_OTLP_ENDPOINT = "http://127.0.0.1:4318"
+ ```
+
+ مثال على الاستخدام لمراقبة وكيل CrewAI غير متزامن:
+
+ ```python
+ import asyncio
+ from crewai import Crew, Agent, Task
+ import openlit
+
+ openlit.init(otlp_endpoint="http://127.0.0.1:4318")
+
+ # Create an agent with code execution enabled
+ coding_agent = Agent(
+ role="Python Data Analyst",
+ goal="Analyze data and provide insights using Python",
+ backstory="You are an experienced data analyst with strong Python skills.",
+ allow_code_execution=True,
+ llm="command-r"
+ )
+
+ # Create a task that requires code execution
+ data_analysis_task = Task(
+ description="Analyze the given dataset and calculate the average age of participants. Ages: {ages}",
+ agent=coding_agent,
+ expected_output="5 bullet points, each with a paragraph and accompanying notes.",
+ )
+
+ # Create a crew and add the task
+ analysis_crew = Crew(
+ agents=[coding_agent],
+ tasks=[data_analysis_task]
+ )
+
+ # Async function to kickoff the crew asynchronously
+ async def async_crew_execution():
+ result = await analysis_crew.kickoff_async(inputs={"ages": [25, 30, 35, 40, 45]})
+ print("Crew Result:", result)
+
+ # Run the async function
+ asyncio.run(async_crew_execution())
+ ```
+
+
+ راجع [مستودع Python SDK الخاص بـ OpenLIT](https://github.com/openlit/openlit/tree/main/sdk/python) لمزيد من الإعدادات المتقدمة وحالات الاستخدام.
+
+
+ مع جمع بيانات مراقبة الوكلاء وإرسالها إلى OpenLIT، الخطوة التالية هي عرض وتحليل هذه البيانات للحصول على رؤى حول أداء وكيلك وسلوكه وتحديد مجالات التحسين.
+
+ ما عليك سوى التوجه إلى OpenLIT على `127.0.0.1:3000` في متصفحك لبدء الاستكشاف. يمكنك تسجيل الدخول باستخدام بيانات الاعتماد الافتراضية
+ - **البريد الإلكتروني**: `user@openlit.io`
+ - **كلمة المرور**: `openlituser`
+
+
+
+
+
+
+
+
diff --git a/docs/v1.15.1/ar/observability/opik.mdx b/docs/v1.15.1/ar/observability/opik.mdx
new file mode 100644
index 000000000..60442fe47
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/opik.mdx
@@ -0,0 +1,130 @@
+---
+title: تكامل Opik
+description: تعرّف على كيفية استخدام Comet Opik لتصحيح الأخطاء وتقييم ومراقبة تطبيقات CrewAI الخاصة بك مع تتبع شامل وتقييمات آلية ولوحات معلومات جاهزة للإنتاج.
+icon: meteor
+mode: "wide"
+---
+
+# نظرة عامة على Opik
+
+مع [Comet Opik](https://www.comet.com/docs/opik/)، يمكنك تصحيح الأخطاء وتقييم ومراقبة تطبيقات LLM وأنظمة RAG وسير العمل الوكيلي مع تتبع شامل وتقييمات آلية ولوحات معلومات جاهزة للإنتاج.
+
+
+
+
+
+يوفر Opik دعماً شاملاً لكل مرحلة من مراحل تطوير تطبيق CrewAI الخاص بك:
+
+- **تسجيل التتبعات والنطاقات**: تتبع تلقائي لاستدعاءات LLM ومنطق التطبيق لتصحيح الأخطاء وتحليل أنظمة التطوير والإنتاج. أضف التعليقات التوضيحية يدوياً أو برمجياً، واعرض وقارن الاستجابات عبر المشاريع.
+- **تقييم أداء تطبيق LLM**: قيّم وفقاً لمجموعة اختبار مخصصة وشغّل مقاييس تقييم مدمجة أو حدد مقاييسك الخاصة في SDK أو واجهة المستخدم.
+- **الاختبار ضمن خط أنابيب CI/CD**: أنشئ خطوط أساس أداء موثوقة مع اختبارات وحدة LLM من Opik، المبنية على PyTest. شغّل تقييمات عبر الإنترنت للمراقبة المستمرة في الإنتاج.
+- **مراقبة وتحليل بيانات الإنتاج**: افهم أداء نماذجك على بيانات غير مرئية في الإنتاج وأنشئ مجموعات بيانات لتكرارات التطوير الجديدة.
+
+## الإعداد
+يوفر Comet نسخة مستضافة من منصة Opik، أو يمكنك تشغيل المنصة محلياً.
+
+لاستخدام النسخة المستضافة، ما عليك سوى [إنشاء حساب Comet مجاني](https://www.comet.com/signup?utm_medium=github&utm_source=crewai_docs) والحصول على مفتاح API الخاص بك.
+
+لتشغيل منصة Opik محلياً، راجع [دليل التثبيت](https://www.comet.com/docs/opik/self-host/overview/) لمزيد من المعلومات.
+
+في هذا الدليل سنستخدم مثال البدء السريع الخاص بـ CrewAI.
+
+
+
+ ```shell
+ pip install crewai crewai-tools opik --upgrade
+ ```
+
+
+ ```python
+ import opik
+ opik.configure(use_local=False)
+ ```
+
+
+ أولاً، نقوم بإعداد مفاتيح API لمزود LLM كمتغيرات بيئة:
+
+ ```python
+ import os
+ import getpass
+
+ if "OPENAI_API_KEY" not in os.environ:
+ os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key: ")
+ ```
+
+
+ الخطوة الأولى هي إنشاء مشروعنا. سنستخدم مثالاً من وثائق CrewAI:
+
+ ```python
+ from crewai import Agent, Crew, Task, Process
+
+
+ class YourCrewName:
+ def agent_one(self) -> Agent:
+ return Agent(
+ role="Data Analyst",
+ goal="Analyze data trends in the market",
+ backstory="An experienced data analyst with a background in economics",
+ verbose=True,
+ )
+
+ def agent_two(self) -> Agent:
+ return Agent(
+ role="Market Researcher",
+ goal="Gather information on market dynamics",
+ backstory="A diligent researcher with a keen eye for detail",
+ verbose=True,
+ )
+
+ def task_one(self) -> Task:
+ return Task(
+ name="Collect Data Task",
+ description="Collect recent market data and identify trends.",
+ expected_output="A report summarizing key trends in the market.",
+ agent=self.agent_one(),
+ )
+
+ def task_two(self) -> Task:
+ return Task(
+ name="Market Research Task",
+ description="Research factors affecting market dynamics.",
+ expected_output="An analysis of factors influencing the market.",
+ agent=self.agent_two(),
+ )
+
+ def crew(self) -> Crew:
+ return Crew(
+ agents=[self.agent_one(), self.agent_two()],
+ tasks=[self.task_one(), self.task_two()],
+ process=Process.sequential,
+ verbose=True,
+ )
+
+ ```
+
+ الآن يمكننا استيراد متتبع Opik وتشغيل الطاقم:
+
+ ```python
+ from opik.integrations.crewai import track_crewai
+
+ track_crewai(project_name="crewai-integration-demo")
+
+ my_crew = YourCrewName().crew()
+ result = my_crew.kickoff()
+
+ print(result)
+ ```
+ بعد تشغيل تطبيق CrewAI، قم بزيارة تطبيق Opik لعرض:
+ - تتبعات LLM والنطاقات وبياناتها الوصفية
+ - تفاعلات الوكلاء وتدفق تنفيذ المهام
+ - مقاييس الأداء مثل زمن الاستجابة واستخدام الرموز المميزة
+ - مقاييس التقييم (مدمجة أو مخصصة)
+
+
+
+## الموارد
+
+- [وثائق Opik](https://www.comet.com/docs/opik/)
+- [Opik + CrewAI Colab](https://colab.research.google.com/github/comet-ml/opik/blob/main/apps/opik-documentation/documentation/docs/cookbook/crewai.ipynb)
+- [X](https://x.com/cometml)
+- [Slack](https://slack.comet.com/)
diff --git a/docs/v1.15.1/ar/observability/overview.mdx b/docs/v1.15.1/ar/observability/overview.mdx
new file mode 100644
index 000000000..9e6e239c7
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/overview.mdx
@@ -0,0 +1,120 @@
+---
+title: "نظرة عامة"
+description: "راقب وقيّم وحسّن وكلاء CrewAI الخاصين بك باستخدام أدوات مراقبة شاملة"
+icon: "face-smile"
+mode: "wide"
+---
+
+## المراقبة في CrewAI
+
+تعد المراقبة أمراً بالغ الأهمية لفهم كيفية أداء وكلاء CrewAI، وتحديد الاختناقات، وضمان التشغيل الموثوق في بيئات الإنتاج. يغطي هذا القسم مختلف الأدوات والمنصات التي توفر إمكانيات المراقبة والتقييم والتحسين لسير عمل وكلائك.
+
+## لماذا تعد المراقبة مهمة
+
+- **مراقبة الأداء**: تتبع أوقات تنفيذ الوكلاء واستخدام الرموز المميزة واستهلاك الموارد
+- **ضمان الجودة**: تقييم جودة المخرجات واتساقها عبر سيناريوهات مختلفة
+- **تصحيح الأخطاء**: تحديد وحل المشكلات في سلوك الوكلاء وتنفيذ المهام
+- **إدارة التكاليف**: مراقبة استخدام API لنماذج LLM والتكاليف المرتبطة بها
+- **التحسين المستمر**: جمع الرؤى لتحسين أداء الوكلاء بمرور الوقت
+
+## أدوات المراقبة المتاحة
+
+### منصات المراقبة والتتبع
+
+
+
+
+ تتبع شامل لسير عمل CrewAI مع التقاط تلقائي لتفاعلات الوكلاء.
+
+
+
+ مراقبة أصلية لـ OpenTelemetry مع تتبع التكاليف وتحليلات الأداء.
+
+
+
+ إدارة دورة حياة تعلم الآلة مع إمكانيات التتبع والتقييم.
+
+
+
+ منصة هندسة LLM مع تتبع وتحليلات تفصيلية.
+
+
+
+ مراقبة مفتوحة المصدر لنماذج LLM وأطر العمل الوكيلية.
+
+
+
+ منصة مراقبة الذكاء الاصطناعي للمراقبة واستكشاف الأخطاء وإصلاحها.
+
+
+
+ بوابة ذكاء اصطناعي مع مراقبة شاملة وميزات موثوقية.
+
+
+
+ تصحيح الأخطاء وتقييم ومراقبة تطبيقات LLM مع تتبع شامل.
+
+
+
+ منصة Weights & Biases لتتبع وتقييم تطبيقات الذكاء الاصطناعي.
+
+
+
+### التقييم وضمان الجودة
+
+
+
+ منصة تقييم شاملة لمخرجات LLM وسلوكيات الوكلاء.
+
+
+
+## مقاييس المراقبة الرئيسية
+
+### مقاييس الأداء
+- **وقت التنفيذ**: المدة التي يستغرقها الوكلاء لإكمال المهام
+- **استخدام الرموز المميزة**: الرموز المدخلة/المخرجة المستهلكة من استدعاءات LLM
+- **زمن استجابة API**: أوقات الاستجابة من الخدمات الخارجية
+- **معدل النجاح**: نسبة المهام المكتملة بنجاح
+
+### مقاييس الجودة
+- **دقة المخرجات**: صحة استجابات الوكلاء
+- **الاتساق**: الموثوقية عبر مدخلات متشابهة
+- **الصلة**: مدى تطابق المخرجات مع النتائج المتوقعة
+- **السلامة**: الامتثال لسياسات المحتوى والإرشادات
+
+### مقاييس التكلفة
+- **تكاليف API**: النفقات من استخدام مزودي LLM
+- **استخدام الموارد**: استهلاك الحوسبة والذاكرة
+- **التكلفة لكل مهمة**: الكفاءة الاقتصادية لعمليات الوكلاء
+- **تتبع الميزانية**: المراقبة مقابل حدود الإنفاق
+
+## البدء
+
+1. **اختر أدواتك**: حدد منصات المراقبة التي تتوافق مع احتياجاتك
+2. **أضف الأدوات لكودك**: أضف المراقبة لتطبيقات CrewAI الخاصة بك
+3. **أعدّ لوحات المعلومات**: هيئ العروض المرئية للمقاييس الرئيسية
+4. **حدد التنبيهات**: أنشئ إشعارات للأحداث المهمة
+5. **أنشئ خطوط الأساس**: قس الأداء الأولي للمقارنة
+6. **كرر وحسّن**: استخدم الرؤى لتحسين وكلائك
+
+## أفضل الممارسات
+
+### مرحلة التطوير
+- استخدم التتبع التفصيلي لفهم سلوك الوكلاء
+- طبّق مقاييس التقييم مبكراً في التطوير
+- راقب استخدام الموارد أثناء الاختبار
+- أعدّ فحوصات جودة آلية
+
+### مرحلة الإنتاج
+- طبّق مراقبة وتنبيهات شاملة
+- تتبع اتجاهات الأداء بمرور الوقت
+- راقب الشذوذ والتدهور
+- حافظ على رؤية التكاليف والتحكم بها
+
+### التحسين المستمر
+- مراجعات أداء وتحسين منتظمة
+- اختبار A/B لتكوينات وكلاء مختلفة
+- حلقات تغذية راجعة لتحسين الجودة
+- توثيق الدروس المستفادة
+
+اختر أدوات المراقبة التي تناسب حالة الاستخدام والبنية التحتية ومتطلبات المراقبة الخاصة بك لضمان أن وكلاء CrewAI يعملون بشكل موثوق وفعال.
diff --git a/docs/v1.15.1/ar/observability/patronus-evaluation.mdx b/docs/v1.15.1/ar/observability/patronus-evaluation.mdx
new file mode 100644
index 000000000..c6b522640
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/patronus-evaluation.mdx
@@ -0,0 +1,206 @@
+---
+title: تقييم Patronus AI
+description: راقب وقيّم أداء وكلاء CrewAI باستخدام منصة التقييم الشاملة من Patronus AI لمخرجات LLM وسلوكيات الوكلاء.
+icon: shield-check
+mode: "wide"
+---
+
+# تقييم Patronus AI
+
+## نظرة عامة
+
+يوفر [Patronus AI](https://patronus.ai) إمكانيات تقييم ومراقبة شاملة لوكلاء CrewAI، مما يمكّنك من تقييم مخرجات النماذج وسلوكيات الوكلاء والأداء العام للنظام. يتيح لك هذا التكامل تنفيذ سير عمل تقييم مستمر يساعد في الحفاظ على الجودة والموثوقية في بيئات الإنتاج.
+
+## الميزات الرئيسية
+
+- **التقييم الآلي**: تقييم فوري لمخرجات وسلوكيات الوكلاء
+- **معايير مخصصة**: حدد معايير تقييم محددة مصممة لحالات الاستخدام الخاصة بك
+- **مراقبة الأداء**: تتبع مقاييس أداء الوكلاء بمرور الوقت
+- **ضمان الجودة**: ضمان جودة مخرجات متسقة عبر سيناريوهات مختلفة
+- **السلامة والامتثال**: مراقبة المشكلات المحتملة وانتهاكات السياسات
+
+## أدوات التقييم
+
+يوفر Patronus ثلاث أدوات تقييم رئيسية لحالات استخدام مختلفة:
+
+1. **PatronusEvalTool**: يسمح للوكلاء باختيار المقيّم والمعايير الأنسب لمهمة التقييم.
+2. **PatronusPredefinedCriteriaEvalTool**: يستخدم مقيّماً ومعايير محددة مسبقاً من قبل المستخدم.
+3. **PatronusLocalEvaluatorTool**: يستخدم دوال تقييم مخصصة محددة من قبل المستخدم.
+
+## التثبيت
+
+لاستخدام هذه الأدوات، تحتاج إلى تثبيت حزمة Patronus:
+
+```shell
+uv add patronus
+```
+
+ستحتاج أيضاً إلى إعداد مفتاح API الخاص بـ Patronus كمتغير بيئة:
+
+```shell
+export PATRONUS_API_KEY="your_patronus_api_key"
+```
+
+## خطوات البدء
+
+لاستخدام أدوات تقييم Patronus بفعالية، اتبع الخطوات التالية:
+
+1. **تثبيت Patronus**: ثبّت حزمة Patronus باستخدام الأمر أعلاه.
+2. **إعداد مفتاح API**: عيّن مفتاح API الخاص بـ Patronus كمتغير بيئة.
+3. **اختيار الأداة المناسبة**: حدد أداة تقييم Patronus المناسبة بناءً على احتياجاتك.
+4. **إعداد الأداة**: هيئ الأداة بالمعاملات اللازمة.
+
+## أمثلة
+
+### استخدام PatronusEvalTool
+
+يوضح المثال التالي كيفية استخدام `PatronusEvalTool`، التي تسمح للوكلاء باختيار المقيّم والمعايير الأنسب:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import PatronusEvalTool
+
+# Initialize the tool
+patronus_eval_tool = PatronusEvalTool()
+
+# Define an agent that uses the tool
+coding_agent = Agent(
+ role="Coding Agent",
+ goal="Generate high quality code and verify that the output is code",
+ backstory="An experienced coder who can generate high quality python code.",
+ tools=[patronus_eval_tool],
+ verbose=True,
+)
+
+# Example task to generate and evaluate code
+generate_code_task = Task(
+ description="Create a simple program to generate the first N numbers in the Fibonacci sequence. Select the most appropriate evaluator and criteria for evaluating your output.",
+ expected_output="Program that generates the first N numbers in the Fibonacci sequence.",
+ agent=coding_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[coding_agent], tasks=[generate_code_task])
+result = crew.kickoff()
+```
+
+### استخدام PatronusPredefinedCriteriaEvalTool
+
+يوضح المثال التالي كيفية استخدام `PatronusPredefinedCriteriaEvalTool`، التي تستخدم مقيّماً ومعايير محددة مسبقاً:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import PatronusPredefinedCriteriaEvalTool
+
+# Initialize the tool with predefined criteria
+patronus_eval_tool = PatronusPredefinedCriteriaEvalTool(
+ evaluators=[{"evaluator": "judge", "criteria": "contains-code"}]
+)
+
+# Define an agent that uses the tool
+coding_agent = Agent(
+ role="Coding Agent",
+ goal="Generate high quality code",
+ backstory="An experienced coder who can generate high quality python code.",
+ tools=[patronus_eval_tool],
+ verbose=True,
+)
+
+# Example task to generate code
+generate_code_task = Task(
+ description="Create a simple program to generate the first N numbers in the Fibonacci sequence.",
+ expected_output="Program that generates the first N numbers in the Fibonacci sequence.",
+ agent=coding_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[coding_agent], tasks=[generate_code_task])
+result = crew.kickoff()
+```
+
+### استخدام PatronusLocalEvaluatorTool
+
+يوضح المثال التالي كيفية استخدام `PatronusLocalEvaluatorTool`، التي تستخدم دوال تقييم مخصصة:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import PatronusLocalEvaluatorTool
+from patronus import Client, EvaluationResult
+import random
+
+# Initialize the Patronus client
+client = Client()
+
+# Register a custom evaluator
+@client.register_local_evaluator("random_evaluator")
+def random_evaluator(**kwargs):
+ score = random.random()
+ return EvaluationResult(
+ score_raw=score,
+ pass_=score >= 0.5,
+ explanation="example explanation",
+ )
+
+# Initialize the tool with the custom evaluator
+patronus_eval_tool = PatronusLocalEvaluatorTool(
+ patronus_client=client,
+ evaluator="random_evaluator",
+ evaluated_model_gold_answer="example label",
+)
+
+# Define an agent that uses the tool
+coding_agent = Agent(
+ role="Coding Agent",
+ goal="Generate high quality code",
+ backstory="An experienced coder who can generate high quality python code.",
+ tools=[patronus_eval_tool],
+ verbose=True,
+)
+
+# Example task to generate code
+generate_code_task = Task(
+ description="Create a simple program to generate the first N numbers in the Fibonacci sequence.",
+ expected_output="Program that generates the first N numbers in the Fibonacci sequence.",
+ agent=coding_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[coding_agent], tasks=[generate_code_task])
+result = crew.kickoff()
+```
+
+## المعاملات
+
+### PatronusEvalTool
+
+لا تتطلب `PatronusEvalTool` أي معاملات أثناء التهيئة. تقوم تلقائياً بجلب المقيّمين والمعايير المتاحة من API الخاص بـ Patronus.
+
+### PatronusPredefinedCriteriaEvalTool
+
+تقبل `PatronusPredefinedCriteriaEvalTool` المعاملات التالية أثناء التهيئة:
+
+- **evaluators**: مطلوب. قائمة من القواميس تحتوي على المقيّم والمعايير المراد استخدامها. مثال: `[{"evaluator": "judge", "criteria": "contains-code"}]`.
+
+### PatronusLocalEvaluatorTool
+
+تقبل `PatronusLocalEvaluatorTool` المعاملات التالية أثناء التهيئة:
+
+- **patronus_client**: مطلوب. مثيل عميل Patronus.
+- **evaluator**: اختياري. اسم المقيّم المحلي المسجل للاستخدام. القيمة الافتراضية هي سلسلة نصية فارغة.
+- **evaluated_model_gold_answer**: اختياري. الإجابة المرجعية للاستخدام في التقييم. القيمة الافتراضية هي سلسلة نصية فارغة.
+
+## الاستخدام
+
+عند استخدام أدوات تقييم Patronus، تقدم مدخلات النموذج ومخرجاته وسياقه، وتعيد الأداة نتائج التقييم من API الخاص بـ Patronus.
+
+بالنسبة لـ `PatronusEvalTool` و`PatronusPredefinedCriteriaEvalTool`، المعاملات التالية مطلوبة عند استدعاء الأداة:
+
+- **evaluated_model_input**: وصف مهمة الوكيل بنص بسيط.
+- **evaluated_model_output**: مخرجات الوكيل للمهمة.
+- **evaluated_model_retrieved_context**: سياق الوكيل.
+
+بالنسبة لـ `PatronusLocalEvaluatorTool`، نفس المعاملات مطلوبة، لكن المقيّم والإجابة المرجعية يتم تحديدهما أثناء التهيئة.
+
+## الخلاصة
+
+توفر أدوات تقييم Patronus طريقة قوية لتقييم وتسجيل درجات مدخلات ومخرجات النماذج باستخدام منصة Patronus AI. من خلال تمكين الوكلاء من تقييم مخرجاتهم أو مخرجات وكلاء آخرين، يمكن لهذه الأدوات المساعدة في تحسين جودة وموثوقية سير عمل CrewAI.
diff --git a/docs/v1.15.1/ar/observability/portkey.mdx b/docs/v1.15.1/ar/observability/portkey.mdx
new file mode 100644
index 000000000..e676b7a35
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/portkey.mdx
@@ -0,0 +1,823 @@
+---
+title: تكامل Portkey
+description: كيفية استخدام Portkey مع CrewAI
+icon: key
+mode: "wide"
+---
+
+
+
+
+
+## مقدمة
+
+يعزز Portkey إمكانيات CrewAI بميزات جاهزة للإنتاج، محولاً طواقم الوكلاء التجريبية إلى أنظمة متينة من خلال توفير:
+
+- **مراقبة كاملة** لكل خطوة وكيل واستخدام أداة وتفاعل
+- **موثوقية مدمجة** مع آليات الاحتياط وإعادة المحاولة وموازنة الأحمال
+- **تتبع التكاليف وتحسينها** لإدارة إنفاقك على الذكاء الاصطناعي
+- **الوصول إلى أكثر من 200 نموذج LLM** من خلال تكامل واحد
+- **حواجز الحماية** للحفاظ على سلوك الوكلاء آمناً ومتوافقاً
+- **موجهات مُتحكم بإصداراتها** لأداء وكلاء متسق
+
+
+### التثبيت والإعداد
+
+
+
+```bash
+pip install -U crewai portkey-ai
+```
+
+
+
+أنشئ مفتاح API لـ Portkey مع حدود ميزانية/معدل اختيارية من [لوحة تحكم Portkey](https://app.portkey.ai/). يمكنك أيضاً إرفاق إعدادات للموثوقية والتخزين المؤقت والمزيد لهذا المفتاح. المزيد عن هذا لاحقاً.
+
+
+
+التكامل بسيط - ما عليك سوى تحديث إعداد LLM في تكوين CrewAI الخاص بك:
+
+```python
+from crewai import LLM
+from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL
+
+# Create an LLM instance with Portkey integration
+gpt_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy", # We are using a Virtual key, so this is a placeholder
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_LLM_VIRTUAL_KEY",
+ trace_id="unique-trace-id", # Optional, for request tracing
+ )
+)
+
+#Use them in your Crew Agents like this:
+
+ @agent
+ def lead_market_analyst(self) -> Agent:
+ return Agent(
+ config=self.agents_config['lead_market_analyst'],
+ verbose=True,
+ memory=False,
+ llm=gpt_llm
+ )
+
+```
+
+
+**ما هي المفاتيح الافتراضية؟** تخزّن المفاتيح الافتراضية في Portkey مفاتيح API لمزودي LLM (OpenAI وAnthropic وغيرها) بشكل آمن في خزنة مشفرة. تتيح تدوير المفاتيح وإدارة الميزانية بسهولة. [تعرّف على المزيد حول المفاتيح الافتراضية هنا](https://portkey.ai/docs/product/ai-gateway/virtual-keys).
+
+
+
+
+## ميزات الإنتاج
+
+### 1. مراقبة محسّنة
+
+يوفر Portkey مراقبة شاملة لوكلاء CrewAI، مما يساعدك على فهم ما يحدث بالضبط أثناء كل عملية تنفيذ.
+
+
+
+
+
+
+
+توفر التتبعات عرضاً هرمياً لتنفيذ طاقمك، يظهر تسلسل استدعاءات LLM واستدعاءات الأدوات وانتقالات الحالة.
+
+```python
+# Add trace_id to enable hierarchical tracing in Portkey
+portkey_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_OPENAI_VIRTUAL_KEY",
+ trace_id="unique-session-id" # Add unique trace ID
+ )
+)
+```
+
+
+
+
+
+
+
+يسجّل Portkey كل تفاعل مع نماذج LLM، بما في ذلك:
+
+- حمولات الطلب والاستجابة الكاملة
+- مقاييس زمن الاستجابة واستخدام الرموز المميزة
+- حسابات التكلفة
+- استدعاءات الأدوات وتنفيذ الدوال
+
+يمكن تصفية جميع السجلات حسب البيانات الوصفية ومعرّفات التتبع والنماذج والمزيد، مما يسهّل تصحيح أخطاء عمليات تشغيل طاقم محددة.
+
+
+
+
+
+
+
+يوفر Portkey لوحات معلومات مدمجة تساعدك على:
+
+- تتبع التكلفة واستخدام الرموز المميزة عبر جميع عمليات تشغيل الطاقم
+- تحليل مقاييس الأداء مثل زمن الاستجابة ومعدلات النجاح
+- تحديد الاختناقات في سير عمل الوكلاء
+- مقارنة تكوينات الطاقم ونماذج LLM المختلفة
+
+يمكنك تصفية وتقسيم جميع المقاييس حسب بيانات وصفية مخصصة لتحليل أنواع طواقم أو مجموعات مستخدمين أو حالات استخدام محددة.
+
+
+
+
+
+
+
+أضف بيانات وصفية مخصصة لتكوين LLM في CrewAI لتمكين تصفية وتقسيم قوية:
+
+```python
+portkey_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_OPENAI_VIRTUAL_KEY",
+ metadata={
+ "crew_type": "research_crew",
+ "environment": "production",
+ "_user": "user_123", # Special _user field for user analytics
+ "request_source": "mobile_app"
+ }
+ )
+)
+```
+
+يمكن استخدام هذه البيانات الوصفية لتصفية السجلات والتتبعات والمقاييس في لوحة تحكم Portkey، مما يتيح لك تحليل عمليات تشغيل طاقم أو مستخدمين أو بيئات محددة.
+
+
+
+### 2. الموثوقية - حافظ على تشغيل طواقمك بسلاسة
+
+عند تشغيل الطواقم في الإنتاج، قد تحدث مشكلات - حدود معدل API أو مشكلات الشبكة أو انقطاعات المزود. تضمن ميزات الموثوقية في Portkey استمرار عمل وكلائك بسلاسة حتى عند حدوث مشكلات.
+
+من السهل تفعيل الاحتياط في إعداد CrewAI الخاص بك باستخدام تكوين Portkey:
+
+```python
+from crewai import LLM
+from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL
+
+# Create LLM with fallback configuration
+portkey_llm = LLM(
+ model="gpt-4o",
+ max_tokens=1000,
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ config={
+ "strategy": {
+ "mode": "fallback"
+ },
+ "targets": [
+ {
+ "provider": "openai",
+ "api_key": "YOUR_OPENAI_API_KEY",
+ "override_params": {"model": "gpt-4o"}
+ },
+ {
+ "provider": "anthropic",
+ "api_key": "YOUR_ANTHROPIC_API_KEY",
+ "override_params": {"model": "claude-3-opus-20240229"}
+ }
+ ]
+ }
+ )
+)
+
+# Use this LLM configuration with your agents
+```
+
+سيحاول هذا التكوين تلقائياً استخدام Claude إذا فشل طلب GPT-4o، مما يضمن استمرار تشغيل طاقمك.
+
+
+
+ يتعامل مع حالات الفشل المؤقتة تلقائياً. إذا فشل استدعاء LLM، سيعيد Portkey محاولة نفس الطلب لعدد محدد من المرات - مثالي لحدود المعدل أو انقطاعات الشبكة.
+
+
+ امنع وكلاءك من التعليق. عيّن مهلات لضمان حصولك على استجابات (أو الفشل بأمان) ضمن الأطر الزمنية المطلوبة.
+
+
+ أرسل طلبات مختلفة إلى مزودين مختلفين. وجّه التفكير المعقد إلى GPT-4 والمهام الإبداعية إلى Claude والاستجابات السريعة إلى Gemini بناءً على احتياجاتك.
+
+
+ استمر في العمل حتى لو فشل مزودك الأساسي. انتقل تلقائياً إلى مزودين احتياطيين للحفاظ على التوفر.
+
+
+ وزّع الطلبات عبر مفاتيح API أو مزودين متعددين. ممتاز لعمليات الطاقم عالية الحجم والبقاء ضمن حدود المعدل.
+
+
+
+### 3. إدارة الموجهات في CrewAI
+
+يساعدك استوديو هندسة الموجهات من Portkey في إنشاء وإدارة وتحسين الموجهات المستخدمة في وكلاء CrewAI. بدلاً من ترميز الموجهات أو التعليمات بشكل ثابت، استخدم API عرض الموجهات من Portkey لجلب وتطبيق موجهاتك المُصدَرة ديناميكياً.
+
+
+
+
+
+
+
+ساحة تجربة الموجهات هي مكان لمقارنة واختبار ونشر الموجهات المثالية لتطبيق الذكاء الاصطناعي الخاص بك. هي المكان الذي تجرّب فيه نماذج مختلفة وتختبر المتغيرات وتقارن المخرجات وتحسّن استراتيجية هندسة الموجهات قبل النشر في الإنتاج. تتيح لك:
+
+1. تطوير الموجهات بشكل تكراري قبل استخدامها في وكلائك
+2. اختبار الموجهات مع متغيرات ونماذج مختلفة
+3. مقارنة المخرجات بين إصدارات موجهات مختلفة
+4. التعاون مع أعضاء الفريق في تطوير الموجهات
+
+تجعل هذه البيئة المرئية من الأسهل صياغة موجهات فعالة لكل خطوة في سير عمل وكلاء CrewAI.
+
+
+
+يسترجع API عرض الموجهات قوالب الموجهات الخاصة بك مع جميع المعاملات المُعدّة:
+
+```python
+from crewai import Agent, LLM
+from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL, Portkey
+
+# Initialize Portkey admin client
+portkey_admin = Portkey(api_key="YOUR_PORTKEY_API_KEY")
+
+# Retrieve prompt using the render API
+prompt_data = portkey_client.prompts.render(
+ prompt_id="YOUR_PROMPT_ID",
+ variables={
+ "agent_role": "Senior Research Scientist",
+ }
+)
+
+backstory_agent_prompt=prompt_data.data.messages[0]["content"]
+
+
+# Set up LLM with Portkey integration
+portkey_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_OPENAI_VIRTUAL_KEY"
+ )
+)
+
+# Create agent using the rendered prompt
+researcher = Agent(
+ role="Senior Research Scientist",
+ goal="Discover groundbreaking insights about the assigned topic",
+ backstory=backstory_agent, # Use the rendered prompt
+ verbose=True,
+ llm=portkey_llm
+)
+```
+
+
+
+يمكنك:
+- إنشاء إصدارات متعددة من نفس الموجه
+- مقارنة الأداء بين الإصدارات
+- الرجوع إلى إصدارات سابقة عند الحاجة
+- تحديد الإصدار المراد استخدامه في كودك:
+
+```python
+# Use a specific prompt version
+prompt_data = portkey_admin.prompts.render(
+ prompt_id="YOUR_PROMPT_ID@version_number",
+ variables={
+ "agent_role": "Senior Research Scientist",
+ "agent_goal": "Discover groundbreaking insights"
+ }
+)
+```
+
+
+
+تستخدم موجهات Portkey قوالب بنمط Mustache لاستبدال المتغيرات بسهولة:
+
+```
+You are a {{agent_role}} with expertise in {{domain}}.
+
+Your mission is to {{agent_goal}} by leveraging your knowledge
+and experience in the field.
+
+Always maintain a {{tone}} tone and focus on providing {{focus_area}}.
+```
+
+عند العرض، ما عليك سوى تمرير المتغيرات:
+
+```python
+prompt_data = portkey_admin.prompts.render(
+ prompt_id="YOUR_PROMPT_ID",
+ variables={
+ "agent_role": "Senior Research Scientist",
+ "domain": "artificial intelligence",
+ "agent_goal": "discover groundbreaking insights",
+ "tone": "professional",
+ "focus_area": "practical applications"
+ }
+)
+```
+
+
+
+
+ تعرّف على المزيد حول ميزات إدارة الموجهات في Portkey
+
+
+### 4. حواجز الحماية لطواقم آمنة
+
+تضمن حواجز الحماية أن وكلاء CrewAI يعملون بأمان ويستجيبون بشكل مناسب في جميع الحالات.
+
+**لماذا تستخدم حواجز الحماية؟**
+
+قد يواجه وكلاء CrewAI أوضاع فشل مختلفة:
+- توليد محتوى ضار أو غير مناسب
+- تسريب معلومات حساسة مثل المعلومات الشخصية
+- توهم معلومات غير صحيحة
+- توليد مخرجات بتنسيقات غير صحيحة
+
+تضيف حواجز حماية Portkey حماية لكل من المدخلات والمخرجات.
+
+**تطبيق حواجز الحماية**
+
+```python
+from crewai import Agent, LLM
+from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL
+
+# Create LLM with guardrails
+portkey_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_OPENAI_VIRTUAL_KEY",
+ config={
+ "input_guardrails": ["guardrails-id-xxx", "guardrails-id-yyy"],
+ "output_guardrails": ["guardrails-id-zzz"]
+ }
+ )
+)
+
+# Create agent with guardrailed LLM
+researcher = Agent(
+ role="Senior Research Scientist",
+ goal="Discover groundbreaking insights about the assigned topic",
+ backstory="You are an expert researcher with deep domain knowledge.",
+ verbose=True,
+ llm=portkey_llm
+)
+```
+
+يمكن لحواجز حماية Portkey:
+- كشف وحذف المعلومات الشخصية في المدخلات والمخرجات
+- تصفية المحتوى الضار أو غير المناسب
+- التحقق من تنسيقات الاستجابة وفقاً للمخططات
+- التحقق من التوهمات مقابل الحقائق المرجعية
+- تطبيق منطق الأعمال والقواعد المخصصة
+
+
+ استكشف ميزات حواجز الحماية في Portkey لتعزيز سلامة الوكلاء
+
+
+### 5. تتبع المستخدمين باستخدام البيانات الوصفية
+
+تتبع المستخدمين الفرديين عبر وكلاء CrewAI باستخدام نظام البيانات الوصفية في Portkey.
+
+**ما هي البيانات الوصفية في Portkey؟**
+
+تتيح لك البيانات الوصفية ربط بيانات مخصصة بكل طلب، مما يمكّن التصفية والتقسيم والتحليلات. الحقل الخاص `_user` مصمم خصيصاً لتتبع المستخدمين.
+
+```python
+from crewai import Agent, LLM
+from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL
+
+# Configure LLM with user tracking
+portkey_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_OPENAI_VIRTUAL_KEY",
+ metadata={
+ "_user": "user_123", # Special _user field for user analytics
+ "user_tier": "premium",
+ "user_company": "Acme Corp",
+ "session_id": "abc-123"
+ }
+ )
+)
+
+# Create agent with tracked LLM
+researcher = Agent(
+ role="Senior Research Scientist",
+ goal="Discover groundbreaking insights about the assigned topic",
+ backstory="You are an expert researcher with deep domain knowledge.",
+ verbose=True,
+ llm=portkey_llm
+)
+```
+
+**تصفية التحليلات حسب المستخدم**
+
+مع وجود البيانات الوصفية، يمكنك تصفية التحليلات حسب المستخدم وتحليل مقاييس الأداء على أساس كل مستخدم:
+
+
+
+
+
+يمكّن هذا:
+- تتبع التكاليف والميزانية لكل مستخدم
+- تحليلات مستخدم مخصصة
+- مقاييس على مستوى الفريق أو المؤسسة
+- مراقبة خاصة بالبيئة (التجريب مقابل الإنتاج)
+
+
+ استكشف كيفية استخدام البيانات الوصفية المخصصة لتعزيز تحليلاتك
+
+
+### 6. التخزين المؤقت لطواقم فعالة
+
+طبّق التخزين المؤقت لجعل وكلاء CrewAI أكثر كفاءة وفعالية من حيث التكلفة:
+
+
+
+```python
+from crewai import Agent, LLM
+from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL
+
+# Configure LLM with simple caching
+portkey_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_OPENAI_VIRTUAL_KEY",
+ config={
+ "cache": {
+ "mode": "simple"
+ }
+ }
+ )
+)
+
+# Create agent with cached LLM
+researcher = Agent(
+ role="Senior Research Scientist",
+ goal="Discover groundbreaking insights about the assigned topic",
+ backstory="You are an expert researcher with deep domain knowledge.",
+ verbose=True,
+ llm=portkey_llm
+)
+```
+
+يقوم التخزين المؤقت البسيط بمطابقة دقيقة لموجهات الإدخال، مع تخزين الطلبات المتطابقة لتجنب عمليات تنفيذ النموذج الزائدة.
+
+
+
+```python
+from crewai import Agent, LLM
+from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL
+
+# Configure LLM with semantic caching
+portkey_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_OPENAI_VIRTUAL_KEY",
+ config={
+ "cache": {
+ "mode": "semantic"
+ }
+ }
+ )
+)
+
+# Create agent with semantically cached LLM
+researcher = Agent(
+ role="Senior Research Scientist",
+ goal="Discover groundbreaking insights about the assigned topic",
+ backstory="You are an expert researcher with deep domain knowledge.",
+ verbose=True,
+ llm=portkey_llm
+)
+```
+
+يأخذ التخزين المؤقت الدلالي في الاعتبار التشابه السياقي بين طلبات الإدخال، مع تخزين الاستجابات للمدخلات المتشابهة دلالياً.
+
+
+
+### 7. التوافق بين النماذج
+
+يدعم CrewAI مزودي LLM متعددين، ويوسّع Portkey هذه القدرة من خلال توفير الوصول إلى أكثر من 200 نموذج LLM عبر واجهة موحدة. يمكنك التبديل بسهولة بين نماذج مختلفة دون تغيير منطق الوكيل الأساسي:
+
+```python
+from crewai import Agent, LLM
+from portkey_ai import createHeaders, PORTKEY_GATEWAY_URL
+
+# Set up LLMs with different providers
+openai_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_OPENAI_VIRTUAL_KEY"
+ )
+)
+
+anthropic_llm = LLM(
+ model="claude-3-5-sonnet-latest",
+ max_tokens=1000,
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="dummy",
+ extra_headers=createHeaders(
+ api_key="YOUR_PORTKEY_API_KEY",
+ virtual_key="YOUR_ANTHROPIC_VIRTUAL_KEY"
+ )
+)
+
+# Choose which LLM to use for each agent based on your needs
+researcher = Agent(
+ role="Senior Research Scientist",
+ goal="Discover groundbreaking insights about the assigned topic",
+ backstory="You are an expert researcher with deep domain knowledge.",
+ verbose=True,
+ llm=openai_llm # Use anthropic_llm for Anthropic
+)
+```
+
+يوفر Portkey الوصول إلى نماذج LLM من مزودين بما في ذلك:
+
+- OpenAI (GPT-4o، GPT-4 Turbo، إلخ)
+- Anthropic (Claude 3.5 Sonnet، Claude 3 Opus، إلخ)
+- Mistral AI (Mistral Large، Mistral Medium، إلخ)
+- Google Vertex AI (Gemini 1.5 Pro، إلخ)
+- Cohere (Command، Command-R، إلخ)
+- AWS Bedrock (Claude، Titan، إلخ)
+- النماذج المحلية/الخاصة
+
+
+ اطلع على القائمة الكاملة لمزودي LLM المدعومين من Portkey
+
+
+## إعداد حوكمة المؤسسة لـ CrewAI
+
+**لماذا حوكمة المؤسسة؟**
+إذا كنت تستخدم CrewAI داخل مؤسستك، فأنت بحاجة إلى مراعاة عدة جوانب حوكمة:
+- **إدارة التكاليف**: التحكم في إنفاق الذكاء الاصطناعي وتتبعه عبر الفرق
+- **التحكم في الوصول**: إدارة الفرق التي يمكنها استخدام نماذج محددة
+- **تحليلات الاستخدام**: فهم كيفية استخدام الذكاء الاصطناعي عبر المؤسسة
+- **الأمان والامتثال**: الحفاظ على معايير أمان المؤسسة
+- **الموثوقية**: ضمان خدمة متسقة لجميع المستخدمين
+
+يضيف Portkey طبقة حوكمة شاملة لتلبية احتياجات المؤسسة هذه. لننفّذ هذه الضوابط خطوة بخطوة.
+
+
+
+المفاتيح الافتراضية هي طريقة Portkey الآمنة لإدارة مفاتيح API لمزودي LLM. توفر ضوابط أساسية مثل:
+- حدود الميزانية لاستخدام API
+- إمكانيات تحديد المعدل
+- تخزين آمن لمفاتيح API
+
+لإنشاء مفتاح افتراضي:
+انتقل إلى [المفاتيح الافتراضية](https://app.portkey.ai/virtual-keys) في تطبيق Portkey. احفظ وانسخ معرّف المفتاح الافتراضي
+
+
+
+
+
+
+احفظ معرّف المفتاح الافتراضي - ستحتاجه في الخطوة التالية.
+
+
+
+
+تحدد التكوينات في Portkey كيفية توجيه طلباتك، مع ميزات مثل التوجيه المتقدم والاحتياط وإعادة المحاولة.
+
+لإنشاء تكوينك:
+1. انتقل إلى [التكوينات](https://app.portkey.ai/configs) في لوحة تحكم Portkey
+2. أنشئ تكويناً جديداً بـ:
+ ```json
+ {
+ "virtual_key": "YOUR_VIRTUAL_KEY_FROM_STEP1",
+ "override_params": {
+ "model": "gpt-4o" // Your preferred model name
+ }
+ }
+ ```
+3. احفظ ولاحظ اسم التكوين للخطوة التالية
+
+
+
+
+
+
+
+
+الآن أنشئ مفتاح API لـ Portkey وأرفق التكوين الذي أنشأته في الخطوة 2:
+
+1. انتقل إلى [مفاتيح API](https://app.portkey.ai/api-keys) في Portkey وأنشئ مفتاح API جديد
+2. حدد تكوينك من `الخطوة 2`
+3. أنشئ واحفظ مفتاح API الخاص بك
+
+
+
+
+
+
+
+
+بعد إعداد مفتاح API لـ Portkey مع التكوين المرفق، اربطه بوكلاء CrewAI:
+
+```python
+from crewai import Agent, LLM
+from portkey_ai import PORTKEY_GATEWAY_URL
+
+# Configure LLM with your API key
+portkey_llm = LLM(
+ model="gpt-4o",
+ base_url=PORTKEY_GATEWAY_URL,
+ api_key="YOUR_PORTKEY_API_KEY"
+)
+
+# Create agent with Portkey-enabled LLM
+researcher = Agent(
+ role="Senior Research Scientist",
+ goal="Discover groundbreaking insights about the assigned topic",
+ backstory="You are an expert researcher with deep domain knowledge.",
+ verbose=True,
+ llm=portkey_llm
+)
+```
+
+
+
+
+
+### الخطوة 1: تطبيق ضوابط الميزانية وحدود المعدل
+
+تمكّن المفاتيح الافتراضية التحكم الدقيق في الوصول إلى LLM على مستوى الفريق/القسم. يساعدك هذا على:
+- إعداد [حدود الميزانية](https://portkey.ai/docs/product/ai-gateway/virtual-keys/budget-limits)
+- منع الارتفاعات غير المتوقعة في الاستخدام باستخدام حدود المعدل
+- تتبع إنفاق الأقسام
+
+#### إعداد ضوابط خاصة بالقسم:
+1. انتقل إلى [المفاتيح الافتراضية](https://app.portkey.ai/virtual-keys) في لوحة تحكم Portkey
+2. أنشئ مفتاحاً افتراضياً جديداً لكل قسم مع حدود ميزانية ومعدل
+3. هيئ الحدود الخاصة بكل قسم
+
+
+
+
+
+
+
+### الخطوة 2: تحديد قواعد الوصول للنماذج
+
+مع توسع استخدام الذكاء الاصطناعي، يصبح التحكم في الفرق التي يمكنها الوصول إلى نماذج محددة أمراً بالغ الأهمية. توفر تكوينات Portkey طبقة التحكم هذه مع ميزات مثل:
+
+#### ميزات التحكم في الوصول:
+- **قيود النماذج**: تقييد الوصول إلى نماذج محددة
+- **حماية البيانات**: تطبيق حواجز حماية للبيانات الحساسة
+- **ضوابط الموثوقية**: إضافة احتياط ومنطق إعادة المحاولة
+
+#### مثال على التكوين:
+إليك تكويناً أساسياً لتوجيه الطلبات إلى OpenAI، تحديداً باستخدام GPT-4o:
+
+```json
+{
+ "strategy": {
+ "mode": "single"
+ },
+ "targets": [
+ {
+ "virtual_key": "YOUR_OPENAI_VIRTUAL_KEY",
+ "override_params": {
+ "model": "gpt-4o"
+ }
+ }
+ ]
+}
+```
+
+ أنشئ تكوينك في [صفحة التكوينات](https://app.portkey.ai/configs) في لوحة تحكم Portkey.
+
+
+ يمكن تحديث التكوينات في أي وقت لضبط الضوابط دون التأثير على التطبيقات قيد التشغيل.
+
+
+
+
+ ### الخطوة 3: تطبيق ضوابط الوصول
+
+ أنشئ مفاتيح API خاصة بالمستخدم تقوم تلقائياً بـ:
+ - تتبع الاستخدام لكل مستخدم/فريق بمساعدة المفاتيح الافتراضية
+ - تطبيق التكوينات المناسبة لتوجيه الطلبات
+ - جمع البيانات الوصفية ذات الصلة لتصفية السجلات
+ - فرض أذونات الوصول
+
+ أنشئ مفاتيح API من خلال [تطبيق Portkey](https://app.portkey.ai/)
+
+ مثال باستخدام Python SDK:
+ ```python
+ from portkey_ai import Portkey
+
+ portkey = Portkey(api_key="YOUR_ADMIN_API_KEY")
+
+ api_key = portkey.api_keys.create(
+ name="engineering-team",
+ type="organisation",
+ workspace_id="YOUR_WORKSPACE_ID",
+ defaults={
+ "config_id": "your-config-id",
+ "metadata": {
+ "environment": "production",
+ "department": "engineering"
+ }
+ },
+ scopes=["logs.view", "configs.read"]
+ )
+ ```
+
+ للحصول على تعليمات تفصيلية لإدارة المفاتيح، راجع [وثائق Portkey](https://portkey.ai/docs).
+
+
+
+ ### الخطوة 4: النشر والمراقبة
+ بعد توزيع مفاتيح API على أعضاء فريقك، يصبح إعداد CrewAI الجاهز للمؤسسة جاهزاً للعمل. يمكن لكل عضو في الفريق الآن استخدام مفاتيح API المخصصة له مع مستويات وصول وضوابط ميزانية مناسبة.
+
+ راقب الاستخدام في لوحة تحكم Portkey:
+ - تتبع التكاليف حسب القسم
+ - أنماط استخدام النماذج
+ - حجم الطلبات
+ - معدلات الأخطاء
+
+
+
+
+
+### ميزات المؤسسة متاحة الآن
+**تكامل CrewAI الخاص بك يتضمن الآن:**
+- ضوابط ميزانية للأقسام
+- حوكمة الوصول للنماذج
+- تتبع الاستخدام والإسناد
+- حواجز أمان
+- ميزات الموثوقية
+
+
+## الأسئلة الشائعة
+
+
+
+ يضيف Portkey جاهزية الإنتاج لـ CrewAI من خلال مراقبة شاملة (تتبعات وسجلات ومقاييس) وميزات موثوقية (احتياط وإعادة محاولة وتخزين مؤقت) والوصول إلى أكثر من 200 نموذج LLM عبر واجهة موحدة. هذا يسهّل تصحيح الأخطاء وتحسين وتوسيع تطبيقات الوكلاء.
+
+
+
+ نعم! يتكامل Portkey بسلاسة مع تطبيقات CrewAI الحالية. ما عليك سوى تحديث كود تكوين LLM بالنسخة المُمكّنة من Portkey. يبقى باقي كود الوكيل والطاقم دون تغيير.
+
+
+
+ يدعم Portkey جميع ميزات CrewAI، بما في ذلك الوكلاء والأدوات وسير العمل مع تدخل بشري وجميع أنواع عمليات المهام (تسلسلي وهرمي وغيرها). يضيف المراقبة والموثوقية دون تقييد أي من وظائف الإطار.
+
+
+
+ نعم، يتيح لك Portkey استخدام `trace_id` متسق عبر وكلاء متعددين في طاقم لتتبع سير العمل بالكامل. هذا مفيد بشكل خاص للطواقم المعقدة حيث تريد فهم مسار التنفيذ الكامل عبر وكلاء متعددين.
+
+
+
+ يتيح لك Portkey إضافة بيانات وصفية مخصصة لتكوين LLM، والتي يمكنك استخدامها للتصفية. أضف حقولاً مثل `crew_name` أو `crew_type` أو `session_id` للعثور على عمليات تنفيذ طاقم محددة وتحليلها بسهولة.
+
+
+
+ نعم! يستخدم Portkey مفاتيح API الخاصة بك لمزودي LLM المختلفين. يخزنها بشكل آمن كمفاتيح افتراضية، مما يتيح لك إدارة وتدوير المفاتيح بسهولة دون تغيير كودك.
+
+
+
+
+## الموارد
+
+
+
+
وثائق CrewAI الرسمية
+
+
+
احصل على إرشادات مخصصة لتنفيذ هذا التكامل
+
+
diff --git a/docs/v1.15.1/ar/observability/tracing.mdx b/docs/v1.15.1/ar/observability/tracing.mdx
new file mode 100644
index 000000000..234a62fcd
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/tracing.mdx
@@ -0,0 +1,214 @@
+---
+title: تتبع CrewAI
+description: التتبع المدمج لطواقم وتدفقات CrewAI مع منصة CrewAI AMP
+icon: magnifying-glass-chart
+mode: "wide"
+---
+
+# التتبع المدمج في CrewAI
+
+يوفر CrewAI إمكانيات تتبع مدمجة تتيح لك مراقبة وتصحيح أخطاء الطواقم والتدفقات في الوقت الفعلي. يوضح هذا الدليل كيفية تفعيل التتبع لكل من **الطواقم** و**التدفقات** باستخدام منصة المراقبة المتكاملة في CrewAI.
+
+> **ما هو تتبع CrewAI؟** يوفر التتبع المدمج في CrewAI مراقبة شاملة لوكلاء الذكاء الاصطناعي، بما في ذلك قرارات الوكلاء وجداول تنفيذ المهام واستخدام الأدوات واستدعاءات LLM - كل ذلك متاح عبر [منصة CrewAI AMP](https://app.crewai.com).
+
+
+
+## المتطلبات الأساسية
+
+قبل أن تتمكن من استخدام تتبع CrewAI، تحتاج إلى:
+
+1. **حساب CrewAI AMP**: سجّل للحصول على حساب مجاني على [app.crewai.com](https://app.crewai.com)
+2. **مصادقة CLI**: استخدم CLI الخاص بـ CrewAI لمصادقة بيئتك المحلية
+
+```bash
+crewai login
+```
+
+## تعليمات الإعداد
+
+### الخطوة 1: إنشاء حساب CrewAI AMP
+
+قم بزيارة [app.crewai.com](https://app.crewai.com) وأنشئ حسابك المجاني. سيمنحك هذا الوصول إلى منصة CrewAI AMP حيث يمكنك عرض التتبعات والمقاييس وإدارة طواقمك.
+
+### الخطوة 2: تثبيت CLI الخاص بـ CrewAI والمصادقة
+
+إذا لم تكن قد فعلت ذلك بالفعل، ثبّت CrewAI مع أدوات CLI:
+
+```bash
+uv add 'crewai[tools]'
+```
+
+ثم صادق على CLI مع حساب CrewAI AMP الخاص بك:
+
+```bash
+crewai login
+```
+
+سيقوم هذا الأمر بـ:
+
+1. فتح متصفحك إلى صفحة المصادقة
+2. طلب إدخال رمز الجهاز
+3. مصادقة بيئتك المحلية مع حساب CrewAI AMP
+4. تفعيل إمكانيات التتبع لتطويرك المحلي
+
+### الخطوة 3: تفعيل التتبع في طاقمك
+
+يمكنك تفعيل التتبع لطاقمك عبر تعيين معامل `tracing` إلى `True`:
+
+```python
+from crewai import Agent, Crew, Process, Task
+from crewai_tools import SerperDevTool
+
+# Define your agents
+researcher = Agent(
+ role="Senior Research Analyst",
+ goal="Uncover cutting-edge developments in AI and data science",
+ backstory="""You work at a leading tech think tank.
+ Your expertise lies in identifying emerging trends.
+ You have a knack for dissecting complex data and presenting actionable insights.""",
+ verbose=True,
+ tools=[SerperDevTool()],
+)
+
+writer = Agent(
+ role="Tech Content Strategist",
+ goal="Craft compelling content on tech advancements",
+ backstory="""You are a renowned Content Strategist, known for your insightful and engaging articles.
+ You transform complex concepts into compelling narratives.""",
+ verbose=True,
+)
+
+# Create tasks for your agents
+research_task = Task(
+ description="""Conduct a comprehensive analysis of the latest advancements in AI in 2024.
+ Identify key trends, breakthrough technologies, and potential industry impacts.""",
+ expected_output="Full analysis report in bullet points",
+ agent=researcher,
+)
+
+writing_task = Task(
+ description="""Using the insights provided, develop an engaging blog
+ post that highlights the most significant AI advancements.
+ Your post should be informative yet accessible, catering to a tech-savvy audience.""",
+ expected_output="Full blog post of at least 4 paragraphs",
+ agent=writer,
+)
+
+# Enable tracing in your crew
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ process=Process.sequential,
+ tracing=True, # Enable built-in tracing
+ verbose=True
+)
+
+# Execute your crew
+result = crew.kickoff()
+```
+
+### الخطوة 4: تفعيل التتبع في التدفق
+
+بالمثل، يمكنك تفعيل التتبع لتدفقات CrewAI:
+
+```python
+from crewai.flow.flow import Flow, listen, start
+from pydantic import BaseModel
+
+class ExampleState(BaseModel):
+ counter: int = 0
+ message: str = ""
+
+class ExampleFlow(Flow[ExampleState]):
+ def __init__(self):
+ super().__init__(tracing=True) # Enable tracing for the flow
+
+ @start()
+ def first_method(self):
+ print("Starting the flow")
+ self.state.counter = 1
+ self.state.message = "Flow started"
+ return "continue"
+
+ @listen("continue")
+ def second_method(self):
+ print("Continuing the flow")
+ self.state.counter += 1
+ self.state.message = "Flow continued"
+ return "finish"
+
+ @listen("finish")
+ def final_method(self):
+ print("Finishing the flow")
+ self.state.counter += 1
+ self.state.message = "Flow completed"
+
+# Create and run the flow with tracing enabled
+flow = ExampleFlow(tracing=True)
+result = flow.kickoff()
+```
+
+### الخطوة 5: عرض التتبعات في لوحة تحكم CrewAI AMP
+
+بعد تشغيل الطاقم أو التدفق، يمكنك عرض التتبعات التي أنشأها تطبيق CrewAI في لوحة تحكم CrewAI AMP. يجب أن ترى خطوات تفصيلية لتفاعلات الوكلاء واستخدامات الأدوات واستدعاءات LLM.
+ما عليك سوى النقر على الرابط أدناه لعرض التتبعات أو التوجه إلى علامة تبويب التتبعات في لوحة التحكم [هنا](https://app.crewai.com/crewai_plus/trace_batches)
+
+
+### البديل: إعداد متغير البيئة
+
+يمكنك أيضاً تفعيل التتبع عالمياً عبر تعيين متغير بيئة:
+
+```bash
+export CREWAI_TRACING_ENABLED=true
+```
+
+أو إضافته إلى ملف `.env`:
+
+```env
+CREWAI_TRACING_ENABLED=true
+```
+
+عند تعيين متغير البيئة هذا، ستُفعّل جميع الطواقم والتدفقات التتبع تلقائياً، حتى بدون تعيين `tracing=True` صراحةً.
+
+## عرض التتبعات
+
+### الوصول إلى لوحة تحكم CrewAI AMP
+
+1. قم بزيارة [app.crewai.com](https://app.crewai.com) وسجّل الدخول إلى حسابك
+2. انتقل إلى لوحة تحكم مشروعك
+3. انقر على علامة تبويب **التتبعات** لعرض تفاصيل التنفيذ
+
+### ما ستراه في التتبعات
+
+يوفر تتبع CrewAI رؤية شاملة لـ:
+
+- **قرارات الوكلاء**: شاهد كيف يفكر الوكلاء في المهام ويتخذون القرارات
+- **جدول تنفيذ المهام**: تمثيل مرئي لتسلسلات المهام والتبعيات
+- **استخدام الأدوات**: مراقبة الأدوات المستدعاة ونتائجها
+- **استدعاءات LLM**: تتبع جميع تفاعلات نماذج اللغة، بما في ذلك الموجهات والاستجابات
+- **مقاييس الأداء**: أوقات التنفيذ واستخدام الرموز المميزة والتكاليف
+- **تتبع الأخطاء**: معلومات تفصيلية عن الأخطاء وتتبعات المكدس
+
+### ميزات التتبع
+
+- **جدول التنفيذ**: انقر عبر مراحل التنفيذ المختلفة
+- **سجلات تفصيلية**: الوصول إلى سجلات شاملة لتصحيح الأخطاء
+- **تحليلات الأداء**: حلّل أنماط التنفيذ وحسّن الأداء
+- **إمكانيات التصدير**: حمّل التتبعات لمزيد من التحليل
+
+### مشكلات المصادقة
+
+إذا واجهت مشاكل في المصادقة:
+
+1. تأكد من تسجيل الدخول: `crewai login`
+2. تحقق من اتصال الإنترنت
+3. تحقق من حسابك على [app.crewai.com](https://app.crewai.com)
+
+### التتبعات لا تظهر
+
+إذا لم تظهر التتبعات في لوحة التحكم:
+
+1. تأكد من تعيين `tracing=True` في الطاقم/التدفق
+2. تحقق من `CREWAI_TRACING_ENABLED=true` إذا كنت تستخدم متغيرات البيئة
+3. تأكد من المصادقة عبر `crewai login`
+4. تحقق من أن الطاقم/التدفق قيد التنفيذ فعلاً
diff --git a/docs/v1.15.1/ar/observability/truefoundry.mdx b/docs/v1.15.1/ar/observability/truefoundry.mdx
new file mode 100644
index 000000000..9260f43fc
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/truefoundry.mdx
@@ -0,0 +1,146 @@
+---
+title: تكامل TrueFoundry
+icon: chart-line
+mode: "wide"
+---
+
+توفر TrueFoundry [بوابة ذكاء اصطناعي](https://www.truefoundry.com/ai-gateway) جاهزة للمؤسسات يمكنها التكامل مع أطر العمل الوكيلية مثل CrewAI وتوفير الحوكمة والمراقبة لتطبيقات الذكاء الاصطناعي. تعمل بوابة TrueFoundry AI كواجهة موحدة للوصول إلى LLM، وتوفر:
+
+- **وصول موحد لـ API**: الاتصال بأكثر من 250 نموذج LLM (OpenAI وClaude وGemini وGroq وMistral) عبر API واحد
+- **زمن استجابة منخفض**: زمن استجابة داخلي أقل من 3 مللي ثانية مع توجيه ذكي وموازنة أحمال
+- **أمان المؤسسة**: امتثال SOC 2 وHIPAA وGDPR مع RBAC وتسجيل المراجعة
+- **إدارة الحصص والتكاليف**: حصص قائمة على الرموز المميزة وتحديد المعدل وتتبع استخدام شامل
+- **المراقبة**: تسجيل كامل للطلبات/الاستجابات ومقاييس وتتبعات مع احتفاظ قابل للتخصيص
+
+## كيف يتكامل TrueFoundry مع CrewAI
+
+
+### التثبيت والإعداد
+
+
+
+```bash
+pip install crewai
+```
+
+
+
+1. سجّل في [حساب TrueFoundry](https://www.truefoundry.com/register)
+2. اتبع الخطوات هنا في [البدء السريع](https://docs.truefoundry.com/gateway/quick-start)
+
+
+
+
+
+```python
+from crewai import LLM
+
+# Create an LLM instance with TrueFoundry AI Gateway
+truefoundry_llm = LLM(
+ model="openai-main/gpt-4o", # Similarly, you can call any model from any provider
+ base_url="your_truefoundry_gateway_base_url",
+ api_key="your_truefoundry_api_key"
+)
+
+# Use in your CrewAI agents
+from crewai import Agent
+
+@agent
+def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config['researcher'],
+ llm=truefoundry_llm,
+ verbose=True
+ )
+```
+
+
+
+### مثال كامل على CrewAI
+
+```python
+from crewai import Agent, Task, Crew, LLM
+
+# Configure LLM with TrueFoundry
+llm = LLM(
+ model="openai-main/gpt-4o",
+ base_url="your_truefoundry_gateway_base_url",
+ api_key="your_truefoundry_api_key"
+)
+
+# Create agents
+researcher = Agent(
+ role='Research Analyst',
+ goal='Conduct detailed market research',
+ backstory='Expert market analyst with attention to detail',
+ llm=llm,
+ verbose=True
+)
+
+writer = Agent(
+ role='Content Writer',
+ goal='Create comprehensive reports',
+ backstory='Experienced technical writer',
+ llm=llm,
+ verbose=True
+)
+
+# Create tasks
+research_task = Task(
+ description='Research AI market trends for 2024',
+ agent=researcher,
+ expected_output='Comprehensive research summary'
+)
+
+writing_task = Task(
+ description='Create a market research report',
+ agent=writer,
+ expected_output='Well-structured report with insights',
+ context=[research_task]
+)
+
+# Create and execute crew
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ verbose=True
+)
+
+result = crew.kickoff()
+```
+
+### المراقبة والحوكمة
+
+راقب وكلاء CrewAI من خلال علامة تبويب المقاييس في TrueFoundry:
+
+
+مع بوابة الذكاء الاصطناعي من TrueFoundry، يمكنك مراقبة وتحليل:
+
+- **مقاييس الأداء**: تتبع مقاييس زمن الاستجابة الرئيسية مثل زمن استجابة الطلب ووقت أول رمز (TTFS) وزمن الاستجابة بين الرموز (ITL) بنسب مئوية P99 وP90 وP50
+- **التكلفة واستخدام الرموز المميزة**: احصل على رؤية لتكاليف تطبيقك مع تفاصيل دقيقة لرموز الإدخال/الإخراج والنفقات المرتبطة لكل نموذج
+- **أنماط الاستخدام**: افهم كيف يُستخدم تطبيقك مع تحليلات تفصيلية لنشاط المستخدم وتوزيع النماذج والاستخدام حسب الفريق
+- **تحديد المعدل وموازنة الأحمال**: يمكنك إعداد تحديد المعدل وموازنة الأحمال والاحتياط لنماذجك
+
+## التتبع
+
+لفهم أعمق حول التتبع، يرجى مراجعة [البدء بالتتبع](https://docs.truefoundry.com/docs/tracing/tracing-getting-started). للتتبع، يمكنك إضافة Traceloop SDK:
+
+```bash
+pip install traceloop-sdk
+```
+
+```python
+from traceloop.sdk import Traceloop
+
+# Initialize enhanced tracing
+Traceloop.init(
+ api_endpoint="https://your-truefoundry-endpoint/api/tracing",
+ headers={
+ "Authorization": f"Bearer {your_truefoundry_pat_token}",
+ "TFY-Tracing-Project": "your_project_name",
+ },
+)
+```
+
+يوفر هذا ارتباط تتبع إضافي عبر سير عمل CrewAI بالكامل.
+
diff --git a/docs/v1.15.1/ar/observability/weave.mdx b/docs/v1.15.1/ar/observability/weave.mdx
new file mode 100644
index 000000000..c2ded9a86
--- /dev/null
+++ b/docs/v1.15.1/ar/observability/weave.mdx
@@ -0,0 +1,125 @@
+---
+title: تكامل Weave
+description: تعرّف على كيفية استخدام Weights & Biases (W&B) Weave لتتبع وتجربة وتقييم وتحسين تطبيقات CrewAI.
+icon: radar
+mode: "wide"
+---
+
+# نظرة عامة على Weave
+
+[Weights & Biases (W&B) Weave](https://weave-docs.wandb.ai/) هو إطار عمل لتتبع وتجربة وتقييم ونشر وتحسين التطبيقات المبنية على نماذج اللغة الكبيرة.
+
+
+
+يوفر Weave دعماً شاملاً لكل مرحلة من مراحل تطوير تطبيق CrewAI:
+
+- **التتبع والمراقبة**: تتبع تلقائي لاستدعاءات LLM ومنطق التطبيق لتصحيح الأخطاء وتحليل أنظمة الإنتاج
+- **التكرار المنهجي**: تحسين والتكرار على الموجهات ومجموعات البيانات والنماذج
+- **التقييم**: استخدام مقيّمين مخصصين أو مُعدّين مسبقاً لتقييم أداء الوكلاء وتحسينه بشكل منهجي
+- **حواجز الحماية**: حماية وكلائك بحماية مسبقة ولاحقة للإشراف على المحتوى وسلامة الموجهات
+
+يلتقط Weave التتبعات تلقائياً لتطبيقات CrewAI، مما يمكّنك من مراقبة وتحليل أداء وكلائك وتفاعلاتهم وتدفق التنفيذ. يساعدك هذا في بناء مجموعات بيانات تقييم أفضل وتحسين سير عمل وكلائك.
+
+## تعليمات الإعداد
+
+
+
+ ```shell
+ pip install crewai weave
+ ```
+
+
+ سجّل في [حساب Weights & Biases](https://wandb.ai) إذا لم تكن قد فعلت ذلك بالفعل. ستحتاج إليه لعرض التتبعات والمقاييس.
+
+
+ أضف الكود التالي إلى تطبيقك:
+
+ ```python
+ import weave
+
+ # Initialize Weave with your project name
+ weave.init(project_name="crewai_demo")
+ ```
+
+ بعد التهيئة، سيوفر Weave عنوان URL حيث يمكنك عرض التتبعات والمقاييس.
+
+
+ ```python
+ from crewai import Agent, Task, Crew, LLM, Process
+
+ # Create an LLM with a temperature of 0 to ensure deterministic outputs
+ llm = LLM(model="gpt-4o", temperature=0)
+
+ # Create agents
+ researcher = Agent(
+ role='Research Analyst',
+ goal='Find and analyze the best investment opportunities',
+ backstory='Expert in financial analysis and market research',
+ llm=llm,
+ verbose=True,
+ allow_delegation=False,
+ )
+
+ writer = Agent(
+ role='Report Writer',
+ goal='Write clear and concise investment reports',
+ backstory='Experienced in creating detailed financial reports',
+ llm=llm,
+ verbose=True,
+ allow_delegation=False,
+ )
+
+ # Create tasks
+ research_task = Task(
+ description='Deep research on the {topic}',
+ expected_output='Comprehensive market data including key players, market size, and growth trends.',
+ agent=researcher
+ )
+
+ writing_task = Task(
+ description='Write a detailed report based on the research',
+ expected_output='The report should be easy to read and understand. Use bullet points where applicable.',
+ agent=writer
+ )
+
+ # Create a crew
+ crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ verbose=True,
+ process=Process.sequential,
+ )
+
+ # Run the crew
+ result = crew.kickoff(inputs={"topic": "AI in material science"})
+ print(result)
+ ```
+
+
+ بعد تشغيل تطبيق CrewAI، قم بزيارة عنوان URL الذي وفره Weave أثناء التهيئة لعرض:
+ - استدعاءات LLM وبياناتها الوصفية
+ - تفاعلات الوكلاء وتدفق تنفيذ المهام
+ - مقاييس الأداء مثل زمن الاستجابة واستخدام الرموز المميزة
+ - أي أخطاء أو مشكلات حدثت أثناء التنفيذ
+
+
+
+
+
+
+
+## الميزات
+
+- يلتقط Weave تلقائياً جميع عمليات CrewAI: تفاعلات الوكلاء وتنفيذ المهام؛ استدعاءات LLM مع البيانات الوصفية واستخدام الرموز المميزة؛ استخدام الأدوات ونتائجها.
+- يدعم التكامل جميع طرق تنفيذ CrewAI: `kickoff()` و`kickoff_for_each()` و`kickoff_async()` و`kickoff_for_each_async()`.
+- تتبع تلقائي لجميع [أدوات crewAI](https://github.com/crewAIInc/crewAI-tools).
+- دعم ميزة التدفق مع تصحيح المزخرفات (`@start` و`@listen` و`@router` و`@or_` و`@and_`).
+- تتبع حواجز الحماية المخصصة المُمررة لمهام CrewAI `Task` باستخدام `@weave.op()`.
+
+لمعلومات تفصيلية حول ما هو مدعوم، قم بزيارة [وثائق Weave CrewAI](https://weave-docs.wandb.ai/guides/integrations/crewai/#getting-started-with-flow).
+
+## الموارد
+
+- [وثائق Weave](https://weave-docs.wandb.ai)
+- [مثال على لوحة معلومات Weave x CrewAI](https://wandb.ai/ayut/crewai_demo/weave/traces?cols=%7B%22wb_run_id%22%3Afalse%2C%22attributes.weave.client_version%22%3Afalse%2C%22attributes.weave.os_name%22%3Afalse%2C%22attributes.weave.os_release%22%3Afalse%2C%22attributes.weave.os_version%22%3Afalse%2C%22attributes.weave.source%22%3Afalse%2C%22attributes.weave.sys_version%22%3Afalse%7D&peekPath=%2Fayut%2Fcrewai_demo%2Fcalls%2F0195c838-38cb-71a2-8a15-651ecddf9d89)
+- [X](https://x.com/weave_wb)
diff --git a/docs/v1.15.1/ar/quickstart.mdx b/docs/v1.15.1/ar/quickstart.mdx
new file mode 100644
index 000000000..339156423
--- /dev/null
+++ b/docs/v1.15.1/ar/quickstart.mdx
@@ -0,0 +1,257 @@
+---
+title: البدء السريع
+description: ابنِ أول Flow في CrewAI خلال دقائق — التنسيق والحالة وفريقًا بوكيل واحد ينتج تقريرًا فعليًا.
+icon: rocket
+mode: "wide"
+---
+
+### شاهد: بناء Agents و Flows في CrewAI باستخدام Coding Agent Skills
+
+قم بتثبيت مهارات وكيل البرمجة الخاصة بنا (Claude Code، Codex، ...) لتشغيل وكلاء البرمجة بسرعة مع CrewAI.
+
+يمكنك تثبيتها باستخدام `npx skills add crewaiinc/skills`
+
+
+
+في هذا الدليل ستُنشئ **Flow** يحدد موضوع بحث، ويشغّل **طاقمًا بوكيل واحد** (باحث يستخدم البحث على الويب)، وينتهي بتقرير **Markdown** على القرص. يُعد Flow الطريقة الموصى بها لتنظيم التطبيقات الإنتاجية: يمتلك **الحالة** و**ترتيب التنفيذ**، بينما **الوكلاء** ينفّذون العمل داخل خطوة الطاقم.
+
+إذا لم تُكمل تثبيت CrewAI بعد، اتبع [دليل التثبيت](/ar/installation) أولًا.
+
+## المتطلبات الأساسية
+
+- بيئة Python وواجهة سطر أوامر CrewAI (راجع [التثبيت](/ar/installation))
+- نموذج لغوي مهيأ بالمفاتيح الصحيحة — راجع [LLMs](/ar/concepts/llms#setting-up-your-llm)
+- مفتاح API من [Serper.dev](https://serper.dev/) (`SERPER_API_KEY`) للبحث على الويب في هذا الدرس
+
+## ابنِ أول Flow لك
+
+
+
+ من الطرفية، أنشئ مشروع Flow (اسم المجلد يستخدم شرطة سفلية، مثل `latest_ai_flow`):
+
+
+ ```shell Terminal
+ crewai create flow latest-ai-flow
+ cd latest_ai_flow
+ ```
+
+
+ يُنشئ ذلك تطبيق Flow ضمن `src/latest_ai_flow/`، بما في ذلك طاقمًا أوليًا في `crews/content_crew/` ستستبدله بطاقم بحث **بوكيل واحد** في الخطوات التالية.
+
+
+
+ أنشئ `src/latest_ai_flow/crews/content_crew/agents/researcher.jsonc` (أنشئ مجلد `agents/` إذا لزم). تُملأ المتغيرات مثل `{topic}` من `crew.kickoff(inputs=...)`.
+
+ ```jsonc agents/researcher.jsonc
+ {
+ "role": "باحث بيانات أول في {topic}",
+ "goal": "اكتشاف أحدث التطورات في {topic}",
+ "backstory": "أنت باحث يجد المعلومات الأكثر صلة ويعرضها بوضوح.",
+ "tools": ["SerperDevTool"],
+ "settings": {
+ "verbose": true
+ }
+ }
+ ```
+
+
+
+
+ أنشئ `src/latest_ai_flow/crews/content_crew/crew.jsonc`:
+
+ ```jsonc crew.jsonc
+ {
+ "name": "Research Crew",
+ "agents": ["researcher"],
+ "tasks": [
+ {
+ "name": "research_task",
+ "description": "أجرِ بحثًا معمقًا عن {topic}. استخدم البحث على الويب للعثور على معلومات حديثة وموثوقة.",
+ "expected_output": "تقرير بصيغة Markdown بأقسام واضحة: الاتجاهات الرئيسية، أدوات أو شركات بارزة، والآثار. بين 800 و1200 كلمة تقريبًا. دون إحاطة المستند بأكمله بكتل كود.",
+ "agent": "researcher",
+ "output_file": "output/report.md",
+ "markdown": true
+ }
+ ],
+ "process": "sequential",
+ "verbose": true
+ }
+ ```
+
+
+
+
+ استبدل `content_crew.py` المُولّد بمحمل صغير يحول `crew.jsonc` إلى `Crew`.
+
+ ```python content_crew.py
+ # 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})
+ ```
+
+
+
+
+ اربط الطاقم بـ Flow: خطوة `@start()` تضبط الموضوع في **الحالة**، وخطوة `@listen` تشغّل الطاقم. يظل `output_file` للمهمة يكتب `output/report.md`.
+
+ ```python main.py
+ # 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"الموضوع: {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("اكتمل طاقم البحث.")
+
+ @listen(run_research)
+ def summarize(self):
+ print("مسار التقرير: output/report.md")
+
+
+ def kickoff():
+ LatestAiFlow().kickoff()
+
+
+ def plot():
+ LatestAiFlow().plot()
+
+
+ if __name__ == "__main__":
+ kickoff()
+ ```
+
+
+ إذا كان اسم الحزمة ليس `latest_ai_flow`، عدّل استيراد `kickoff_content_crew` ليطابق مسار الوحدة في مشروعك.
+
+
+
+
+ في جذر المشروع، ضبط `.env`:
+
+ - `SERPER_API_KEY` — من [Serper.dev](https://serper.dev/)
+ - مفاتيح مزوّد النموذج حسب الحاجة — راجع [إعداد LLM](/ar/concepts/llms#setting-up-your-llm)
+
+
+
+
+ ```shell Terminal
+ crewai install
+ crewai run
+ ```
+
+
+ يُنفّذ `crewai run` نقطة دخول Flow المعرّفة في المشروع (نفس أمر الطواقم؛ نوع المشروع `"flow"` في `pyproject.toml`).
+
+
+
+ يجب أن ترى سجلات من Flow والطاقم. افتح **`output/report.md`** للتقرير المُولَّد (مقتطف):
+
+
+ ```markdown output/report.md
+ # وكلاء الذكاء الاصطناعي: المشهد والاتجاهات الحديثة
+
+ ## ملخص تنفيذي
+ …
+
+ ## أبرز الاتجاهات
+ - **استخدام الأدوات والتنسيق** — …
+ - **التبني المؤسسي** — …
+
+ ## الآثار
+ …
+ ```
+
+
+ سيكون الملف الفعلي أطول ويعكس نتائج بحث مباشرة.
+
+
+
+## كيف يترابط هذا
+
+1. **Flow** — يشغّل `LatestAiFlow` أولًا `prepare_topic` ثم `run_research` ثم `summarize`. الحالة (`topic`، `report`) على Flow.
+2. **الطاقم** — يحمّل `kickoff_content_crew` ملف `crew.jsonc` ويشغّل مهمة واحدة بوكيل واحد: الباحث يستخدم **Serper** للبحث على الويب ثم يكتب التقرير.
+3. **المُخرَج** — يكتب `output_file` للمهمة التقرير في `output/report.md`.
+
+للتعمق في أنماط Flow (التوجيه، الاستمرارية، الإنسان في الحلقة)، راجع [ابنِ أول Flow](/ar/guides/flows/first-flow) و[Flows](/ar/concepts/flows). للطواقم دون Flow، راجع [Crews](/ar/concepts/crews). لوكيل `Agent` واحد و`kickoff()` بلا مهام، راجع [Agents](/ar/concepts/agents#direct-agent-interaction-with-kickoff).
+
+
+أصبح لديك Flow كامل مع طاقم وكيل وتقرير محفوظ — قاعدة قوية لإضافة خطوات أو طواقم أو أدوات.
+
+
+### اتساق التسمية
+
+يجب أن تطابق الأسماء في `crew.jsonc` الملفات والمراجع:
+
+- `agents: ["researcher"]` يحمّل `agents/researcher.jsonc`
+- `tasks[].agent: "researcher"` يربط المهمة بذلك الـ agent
+
+## النشر
+
+ادفع Flow إلى **[CrewAI AMP](https://app.crewai.com)** بعد أن يعمل محليًا ويكون المشروع في مستودع **GitHub**. من جذر المشروع:
+
+
+```bash المصادقة
+crewai login
+```
+
+```bash إنشاء نشر
+crewai deploy create
+```
+
+```bash الحالة والسجلات
+crewai deploy status
+crewai deploy logs
+```
+
+```bash إرسال التحديثات بعد تغيير الكود
+crewai deploy push
+```
+
+```bash عرض النشرات أو حذفها
+crewai deploy list
+crewai deploy remove
+```
+
+
+
+ غالبًا ما يستغرق **النشر الأول حوالي دقيقة**. المتطلبات الكاملة ومسار الواجهة الويب في [النشر على AMP](/ar/enterprise/guides/deploy-to-amp).
+
+
+
+
+ النشر على AMP خطوة بخطوة (CLI ولوحة التحكم).
+
+
+ ناقش الأفكار وشارك مشاريعك وتواصل مع مطوري CrewAI.
+
+
diff --git a/docs/v1.15.1/ar/skills.mdx b/docs/v1.15.1/ar/skills.mdx
new file mode 100644
index 000000000..57c189c96
--- /dev/null
+++ b/docs/v1.15.1/ar/skills.mdx
@@ -0,0 +1,50 @@
+---
+title: Skills
+description: ثبّت crewaiinc/skills من السجل الرسمي على skills.sh—Flows وCrews ووكلاء مرتبطون بالوثائق لـ Claude Code وCursor وCodex وغيرها.
+icon: wand-magic-sparkles
+mode: "wide"
+---
+
+# Skills
+
+**امنح وكيل البرمجة سياق CrewAI في أمر واحد.**
+
+تُنشر **Skills** الخاصة بـ CrewAI على **[skills.sh/crewaiinc/skills](https://skills.sh/crewaiinc/skills)**—السجل الرسمي لـ `crewaiinc/skills`، بما في ذلك كل مهارة (مثل **design-agent** و**getting-started** و**design-task** و**ask-docs**) وإحصاءات التثبيت والتدقيقات. تعلّم وكلاء البرمجة—مثل Claude Code وCursor وCodex—هيكلة Flows وضبط Crews واستخدام الأدوات واتباع أنماط CrewAI. نفّذ الأمر أدناه (أو الصقه في الوكيل).
+
+```shell Terminal
+npx skills add crewaiinc/skills
+```
+
+يضيف ذلك حزمة المهارات إلى سير عمل الوكيل لتطبيق اتفاقيات CrewAI دون إعادة شرح الإطار في كل جلسة. المصدر والقضايا على [GitHub](https://github.com/crewAIInc/skills).
+
+## ما يحصل عليه الوكيل
+
+- **Flows** — تطبيقات ذات حالة وخطوات وkickoffs للـ crew على نمط CrewAI
+- **Crews والوكلاء** — أنماط JSON-first (`crew.jsonc` و `agents/*.jsonc`)، أدوار، مهام، وتفويض
+- **الأدوات والتكاملات** — ربط الوكلاء بالبحث وواجهات API وأدوات CrewAI الشائعة
+- **هيكل المشروع** — مواءمة مع قوالب CLI واتفاقيات المستودع
+- **أنماط محدثة** — تتبع المهارات وثائق CrewAI والممارسات الموصى بها
+
+## تعرّف أكثر على هذا الموقع
+
+
+
+ استخدام `AGENTS.md` وسير عمل وكلاء البرمجة مع CrewAI.
+
+
+ ابنِ أول Flow وcrew من البداية للنهاية.
+
+
+ ثبّت CrewAI CLI وحزمة Python.
+
+
+ القائمة الرسمية لـ `crewaiinc/skills`—المهارات والتثبيتات والتدقيقات.
+
+
+ مصدر الحزمة والتحديثات والقضايا.
+
+
+
+### فيديو: CrewAI مع مهارات وكلاء البرمجة
+
+
diff --git a/docs/v1.15.1/ar/snippets/snippet-intro.mdx b/docs/v1.15.1/ar/snippets/snippet-intro.mdx
new file mode 100644
index 000000000..d61d5b16c
--- /dev/null
+++ b/docs/v1.15.1/ar/snippets/snippet-intro.mdx
@@ -0,0 +1 @@
+أحد المبادئ الأساسية في تطوير البرمجيات هو مبدأ DRY (لا تكرر نفسك). هذا مبدأ ينطبق على التوثيق أيضاً. إذا وجدت نفسك تكرر نفس المحتوى في أماكن متعددة، يجب أن تفكر في إنشاء مقتطف مخصص للحفاظ على تزامن محتواك.
diff --git a/docs/v1.15.1/ar/telemetry.mdx b/docs/v1.15.1/ar/telemetry.mdx
new file mode 100644
index 000000000..0cc017ae9
--- /dev/null
+++ b/docs/v1.15.1/ar/telemetry.mdx
@@ -0,0 +1,68 @@
+---
+title: القياس عن بُعد
+description: فهم بيانات القياس عن بُعد التي يجمعها CrewAI وكيف تساهم في تحسين المكتبة.
+icon: signal-stream
+mode: "wide"
+---
+
+## القياس عن بُعد
+
+
+ بشكل افتراضي، لا نجمع أي بيانات تُعتبر معلومات شخصية بموجب اللائحة العامة لحماية البيانات (GDPR) وغيرها من لوائح الخصوصية.
+ نحن نجمع أسماء الأدوات وأدوار الوكلاء، لذا يُنصح بعدم تضمين أي معلومات شخصية في أسماء الأدوات أو أدوار الوكلاء.
+ نظراً لعدم جمع معلومات شخصية، ليس من الضروري القلق بشأن إقامة البيانات.
+ عند تفعيل `share_crew`، يتم جمع بيانات إضافية قد تحتوي على معلومات شخصية إذا ضمّنها المستخدم.
+ يجب على المستخدمين توخي الحذر عند تفعيل هذه الميزة لضمان الامتثال للوائح الخصوصية.
+
+
+يستخدم CrewAI القياس عن بُعد المجهول لجمع إحصائيات الاستخدام بهدف أساسي هو تحسين المكتبة.
+تركيزنا ينصبّ على تحسين وتطوير الميزات والتكاملات والأدوات الأكثر استخداماً من قبل مستخدمينا.
+
+من المهم فهم أنه بشكل افتراضي، **لا يتم جمع أي بيانات شخصية** تتعلق بالموجهات أو أوصاف المهام أو خلفيات الوكلاء أو أهدافهم،
+أو استخدام الأدوات أو استدعاءات API أو الاستجابات أو أي بيانات يعالجها الوكلاء أو الأسرار ومتغيرات البيئة.
+عند تفعيل ميزة `share_crew`، يتم جمع بيانات تفصيلية تشمل أوصاف المهام وخلفيات وأهداف الوكلاء وسمات محددة أخرى
+لتوفير رؤى أعمق. قد يتضمن جمع البيانات الموسع هذا معلومات شخصية إذا دمجها المستخدمون في طواقمهم أو مهامهم.
+يجب على المستخدمين النظر بعناية في محتوى طواقمهم ومهامهم قبل تفعيل `share_crew`.
+يمكن للمستخدمين تعطيل القياس عن بُعد عبر تعيين متغير البيئة `CREWAI_DISABLE_TELEMETRY` إلى `true` أو تعيين `OTEL_SDK_DISABLED` إلى `true` (لاحظ أن الأخير يعطل جميع أدوات OpenTelemetry عالمياً).
+
+### أمثلة:
+```python
+# Disable CrewAI telemetry only
+os.environ['CREWAI_DISABLE_TELEMETRY'] = 'true'
+
+# Disable all OpenTelemetry (including CrewAI)
+os.environ['OTEL_SDK_DISABLED'] = 'true'
+```
+
+### شرح البيانات:
+| افتراضي | البيانات | السبب والتفاصيل |
+|:----------|:------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------|
+| نعم | إصدار CrewAI وPython | تتبع إصدارات البرمجيات. مثال: CrewAI v1.2.3، Python 3.8.10. لا بيانات شخصية. |
+| نعم | بيانات وصفية للطاقم | تشمل: مفتاح ومعرّف مُولّد عشوائياً، نوع العملية (مثل 'sequential'، 'parallel')، علم منطقي لاستخدام الذاكرة (true/false)، عدد المهام، عدد الوكلاء. كلها غير شخصية. |
+| نعم | بيانات الوكيل | تشمل: مفتاح ومعرّف مُولّد عشوائياً، اسم الدور (يجب ألا يتضمن معلومات شخصية)، إعدادات منطقية (verbose، التفويض مُفعّل، تنفيذ الكود مسموح)، أقصى عدد تكرارات، أقصى RPM، أقصى حد لإعادة المحاولة، معلومات LLM (انظر سمات LLM)، قائمة أسماء الأدوات (يجب ألا تتضمن معلومات شخصية). لا بيانات شخصية. |
+| نعم | بيانات وصفية للمهمة | تشمل: مفتاح ومعرّف مُولّد عشوائياً، إعدادات تنفيذ منطقية (async_execution، human_input)، دور ومفتاح الوكيل المرتبط، قائمة أسماء الأدوات. كلها غير شخصية. |
+| نعم | إحصائيات استخدام الأدوات | تشمل: اسم الأداة (يجب ألا يتضمن معلومات شخصية)، عدد محاولات الاستخدام (عدد صحيح)، سمات LLM المستخدمة. لا بيانات شخصية. |
+| نعم | بيانات تنفيذ الاختبار | تشمل: مفتاح ومعرّف الطاقم المُولّد عشوائياً، عدد التكرارات، اسم النموذج المستخدم، درجة الجودة (عدد عشري)، وقت التنفيذ (بالثواني). كلها غير شخصية. |
+| نعم | بيانات دورة حياة المهمة | تشمل: أوقات الإنشاء وبدء/انتهاء التنفيذ، معرّفات الطاقم والمهمة. مخزنة كنطاقات مع طوابع زمنية. لا بيانات شخصية. |
+| نعم | سمات LLM | تشمل: الاسم، model_name، model، top_k، temperature، واسم فئة LLM. كلها بيانات تقنية غير شخصية. |
+| نعم | محاولة نشر الطاقم باستخدام CLI الخاص بـ CrewAI | تشمل: حقيقة إجراء النشر ومعرّف الطاقم، وما إذا كان يحاول سحب السجلات، لا بيانات أخرى. |
+| لا | بيانات الوكيل الموسّعة | تشمل: وصف الهدف، نص الخلفية، معرّف ملف موجهات i18n. يجب على المستخدمين التأكد من عدم تضمين معلومات شخصية في حقول النص. |
+| لا | معلومات المهمة التفصيلية | تشمل: وصف المهمة، وصف المخرجات المتوقعة، مراجع السياق. يجب على المستخدمين التأكد من عدم تضمين معلومات شخصية في هذه الحقول. |
+| لا | معلومات البيئة | تشمل: المنصة، الإصدار، النظام، الإصدار، وعدد وحدات المعالجة المركزية. مثال: 'Windows 10'، 'x86_64'. لا بيانات شخصية. |
+| لا | مدخلات ومخرجات الطاقم والمهام | تشمل: معاملات الإدخال ونتائج المخرجات كبيانات غير قابلة للتعريف. يجب على المستخدمين التأكد من عدم تضمين معلومات شخصية. |
+| لا | بيانات تنفيذ الطاقم الشاملة | تشمل: سجلات مفصّلة لعمليات الطاقم، جميع بيانات الوكلاء والمهام، المخرجات النهائية. كلها غير شخصية وتقنية بطبيعتها. |
+
+
+ "لا" في عمود "افتراضي" تشير إلى أن هذه البيانات تُجمع فقط عند تعيين `share_crew` إلى `true`.
+
+
+### الاشتراك في مشاركة قياس عن بُعد إضافية
+
+يمكن للمستخدمين اختيار مشاركة بيانات القياس عن بُعد الكاملة عبر تفعيل سمة `share_crew` إلى `True` في تكوينات طواقمهم.
+تفعيل `share_crew` يؤدي إلى جمع بيانات تفصيلية لتنفيذ الطاقم والمهام، بما في ذلك `goal` و`backstory` و`context` و`output` للمهام.
+يتيح هذا رؤية أعمق لأنماط الاستخدام.
+
+
+ إذا فعّلت `share_crew`، فقد تتضمن البيانات المجمعة معلومات شخصية إذا تم دمجها في تكوينات الطاقم أو أوصاف المهام أو المخرجات.
+ يجب على المستخدمين مراجعة بياناتهم بعناية وضمان الامتثال للائحة العامة لحماية البيانات (GDPR) وغيرها من لوائح الخصوصية المعمول بها قبل تفعيل هذه الميزة.
+
diff --git a/docs/v1.15.1/ar/tools/ai-ml/aimindtool.mdx b/docs/v1.15.1/ar/tools/ai-ml/aimindtool.mdx
new file mode 100644
index 000000000..a900e78d3
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/aimindtool.mdx
@@ -0,0 +1,119 @@
+---
+title: أداة AI Mind
+description: أداة `AIMindTool` مصممة للاستعلام عن مصادر البيانات باللغة الطبيعية.
+icon: brain
+mode: "wide"
+---
+
+# `AIMindTool`
+
+## الوصف
+
+أداة `AIMindTool` هي غلاف حول [AI-Minds](https://mindsdb.com/minds) المقدمة من [MindsDB](https://mindsdb.com/). تتيح لك الاستعلام عن مصادر البيانات باللغة الطبيعية ببساطة من خلال إعداد معاملات الاتصال الخاصة بها. هذه الأداة مفيدة عندما تحتاج إلى إجابات عن أسئلة من بياناتك المخزنة في مصادر بيانات متنوعة بما في ذلك PostgreSQL وMySQL وMariaDB وClickHouse وSnowflake وGoogle BigQuery.
+
+Minds هي أنظمة ذكاء اصطناعي تعمل بشكل مشابه لنماذج اللغة الكبيرة (LLMs) لكنها تتجاوز ذلك من خلال الإجابة على أي سؤال من أي بيانات. يتحقق ذلك من خلال:
+- اختيار البيانات الأكثر صلة للإجابة باستخدام البحث البارامتري
+- فهم المعنى وتقديم الاستجابات ضمن السياق الصحيح من خلال البحث الدلالي
+- تقديم إجابات دقيقة من خلال تحليل البيانات واستخدام نماذج التعلم الآلي (ML)
+
+## التثبيت
+
+لدمج هذه الأداة في مشروعك، تحتاج إلى تثبيت Minds SDK:
+
+```shell
+uv add minds-sdk
+```
+
+## خطوات البدء
+
+لاستخدام `AIMindTool` بفعالية، اتبع الخطوات التالية:
+
+1. **تثبيت الحزمة**: تأكد من تثبيت حزمتي `crewai[tools]` و`minds-sdk` في بيئة Python.
+2. **الحصول على مفتاح API**: سجّل في حساب Minds [هنا](https://mdb.ai/register)، واحصل على مفتاح API.
+3. **إعداد البيئة**: خزّن مفتاح API الذي حصلت عليه في متغير بيئة باسم `MINDS_API_KEY` لتسهيل استخدامه من قبل الأداة.
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة وتنفيذ استعلام:
+
+```python Code
+from crewai_tools import AIMindTool
+
+# Initialize the AIMindTool
+aimind_tool = AIMindTool(
+ datasources=[
+ {
+ "description": "house sales data",
+ "engine": "postgres",
+ "connection_data": {
+ "user": "demo_user",
+ "password": "demo_password",
+ "host": "samples.mindsdb.com",
+ "port": 5432,
+ "database": "demo",
+ "schema": "demo_data"
+ },
+ "tables": ["house_sales"]
+ }
+ ]
+)
+
+# Run a natural language query
+result = aimind_tool.run("How many 3 bedroom houses were sold in 2008?")
+print(result)
+```
+
+## المعاملات
+
+تقبل `AIMindTool` المعاملات التالية:
+
+- **api_key**: اختياري. مفتاح API الخاص بـ Minds. إذا لم يُقدَّم، سيُقرأ من متغير البيئة `MINDS_API_KEY`.
+- **datasources**: قائمة من القواميس، كل منها يحتوي على المفاتيح التالية:
+ - **description**: وصف البيانات الموجودة في مصدر البيانات.
+ - **engine**: محرك (أو نوع) مصدر البيانات.
+ - **connection_data**: قاموس يحتوي على معاملات الاتصال لمصدر البيانات.
+ - **tables**: قائمة الجداول التي سيستخدمها مصدر البيانات. هذا اختياري ويمكن حذفه إذا كانت جميع الجداول في مصدر البيانات مطلوبة.
+
+يمكن العثور على قائمة مصادر البيانات المدعومة ومعاملات اتصالها [هنا](https://docs.mdb.ai/docs/data_sources).
+
+## مثال على التكامل مع الوكيل
+
+إليك كيفية دمج `AIMindTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent
+from crewai.project import agent
+from crewai_tools import AIMindTool
+
+# Initialize the tool
+aimind_tool = AIMindTool(
+ datasources=[
+ {
+ "description": "sales data",
+ "engine": "postgres",
+ "connection_data": {
+ "user": "your_user",
+ "password": "your_password",
+ "host": "your_host",
+ "port": 5432,
+ "database": "your_db",
+ "schema": "your_schema"
+ },
+ "tables": ["sales"]
+ }
+ ]
+)
+
+# Define an agent with the AIMindTool
+@agent
+def data_analyst(self) -> Agent:
+ return Agent(
+ config=self.agents_config["data_analyst"],
+ allow_delegation=False,
+ tools=[aimind_tool]
+ )
+```
+
+## الخلاصة
+
+توفر `AIMindTool` طريقة قوية للاستعلام عن مصادر بياناتك باستخدام اللغة الطبيعية، مما يسهّل استخراج الرؤى دون كتابة استعلامات SQL معقدة. من خلال الاتصال بمصادر بيانات متنوعة والاستفادة من تقنية AI-Minds، تمكّن هذه الأداة الوكلاء من الوصول إلى البيانات وتحليلها بكفاءة.
diff --git a/docs/v1.15.1/ar/tools/ai-ml/codeinterpretertool.mdx b/docs/v1.15.1/ar/tools/ai-ml/codeinterpretertool.mdx
new file mode 100644
index 000000000..bbaea809b
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/codeinterpretertool.mdx
@@ -0,0 +1,214 @@
+---
+title: مفسّر الكود
+description: أداة `CodeInterpreterTool` هي أداة قوية مصممة لتنفيذ كود Python 3 في بيئة آمنة ومعزولة.
+icon: code-simple
+mode: "wide"
+---
+
+# `CodeInterpreterTool`
+
+
+ **مهجور:** تمت إزالة `CodeInterpreterTool` من `crewai-tools`. كما أن معاملَي `allow_code_execution` و`code_execution_mode` على `Agent` أصبحا مهجورَين. استخدم خدمة بيئة معزولة مخصصة — [E2B](https://e2b.dev) أو [Modal](https://modal.com) — لتنفيذ الكود بشكل آمن ومعزول.
+
+
+## الوصف
+
+تمكّن `CodeInterpreterTool` وكلاء CrewAI من تنفيذ كود Python 3 الذي يولّدونه بشكل مستقل. هذه الوظيفة ذات قيمة خاصة لأنها تتيح للوكلاء إنشاء الكود وتنفيذه والحصول على النتائج واستخدام تلك المعلومات لاتخاذ القرارات والإجراءات اللاحقة.
+
+هناك عدة طرق لاستخدام هذه الأداة:
+
+### حاوية Docker (موصى بها)
+
+هذا هو الخيار الأساسي. يُنفَّذ الكود في حاوية Docker آمنة ومعزولة، مما يضمن السلامة بغض النظر عن محتواه.
+تأكد من تثبيت Docker وتشغيله على نظامك. إذا لم يكن لديك، يمكنك تثبيته من [هنا](https://docs.docker.com/get-docker/).
+
+### بيئة الحماية
+
+إذا لم يكن Docker متاحاً - إما غير مُثبّت أو غير قابل للوصول لأي سبب - سيُنفَّذ الكود في بيئة Python مقيدة تُسمى بيئة الحماية.
+هذه البيئة محدودة جداً، مع قيود صارمة على العديد من الوحدات والدوال المدمجة.
+
+### التنفيذ غير الآمن
+
+**غير موصى به للإنتاج**
+يسمح هذا الوضع بتنفيذ أي كود Python، بما في ذلك الاستدعاءات الخطيرة لـ `sys, os..` والوحدات المماثلة. [اطلع على](/ar/tools/ai-ml/codeinterpretertool#enabling-unsafe-mode) كيفية تفعيل هذا الوضع
+
+## التسجيل
+
+تسجّل `CodeInterpreterTool` استراتيجية التنفيذ المختارة في STDOUT
+
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت حزمة أدوات CrewAI:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `CodeInterpreterTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import CodeInterpreterTool
+
+# Initialize the tool
+code_interpreter = CodeInterpreterTool()
+
+# Define an agent that uses the tool
+programmer_agent = Agent(
+ role="Python Programmer",
+ goal="Write and execute Python code to solve problems",
+ backstory="An expert Python programmer who can write efficient code to solve complex problems.",
+ tools=[code_interpreter],
+ verbose=True,
+)
+
+# Example task to generate and execute code
+coding_task = Task(
+ description="Write a Python function to calculate the Fibonacci sequence up to the 10th number and print the result.",
+ expected_output="The Fibonacci sequence up to the 10th number.",
+ agent=programmer_agent,
+)
+
+# Create and run the crew
+crew = Crew(
+ agents=[programmer_agent],
+ tasks=[coding_task],
+ verbose=True,
+ process=Process.sequential,
+)
+result = crew.kickoff()
+```
+
+يمكنك أيضاً تفعيل تنفيذ الكود مباشرة عند إنشاء وكيل:
+
+```python Code
+from crewai import Agent
+
+# Create an agent with code execution enabled
+programmer_agent = Agent(
+ role="Python Programmer",
+ goal="Write and execute Python code to solve problems",
+ backstory="An expert Python programmer who can write efficient code to solve complex problems.",
+ allow_code_execution=True, # This automatically adds the CodeInterpreterTool
+ verbose=True,
+)
+```
+
+### تفعيل `unsafe_mode`
+
+```python Code
+from crewai_tools import CodeInterpreterTool
+
+code = """
+import os
+os.system("ls -la")
+"""
+
+CodeInterpreterTool(unsafe_mode=True).run(code=code)
+```
+
+## المعاملات
+
+تقبل `CodeInterpreterTool` المعاملات التالية أثناء التهيئة:
+
+- **user_dockerfile_path**: اختياري. مسار ملف Dockerfile مخصص لاستخدامه لحاوية مفسّر الكود.
+- **user_docker_base_url**: اختياري. عنوان URL لبرنامج Docker daemon لتشغيل الحاوية.
+- **unsafe_mode**: اختياري. ما إذا كان سيتم تشغيل الكود مباشرة على الجهاز المضيف بدلاً من حاوية Docker أو بيئة الحماية. القيمة الافتراضية `False`. استخدم بحذر!
+- **default_image_tag**: اختياري. وسم صورة Docker الافتراضي. القيمة الافتراضية `code-interpreter:latest`
+
+عند استخدام الأداة مع وكيل، سيحتاج الوكيل لتقديم:
+
+- **code**: مطلوب. كود Python 3 المراد تنفيذه.
+- **libraries_used**: اختياري. قائمة المكتبات المستخدمة في الكود التي تحتاج إلى تثبيت. القيمة الافتراضية `[]`
+
+## مثال على التكامل مع الوكيل
+
+إليك مثالاً أكثر تفصيلاً عن كيفية دمج `CodeInterpreterTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import CodeInterpreterTool
+
+# Initialize the tool
+code_interpreter = CodeInterpreterTool()
+
+# Define an agent that uses the tool
+data_analyst = Agent(
+ role="Data Analyst",
+ goal="Analyze data using Python code",
+ backstory="""You are an expert data analyst who specializes in using Python
+ to analyze and visualize data. You can write efficient code to process
+ large datasets and extract meaningful insights.""",
+ tools=[code_interpreter],
+ verbose=True,
+)
+
+# Create a task for the agent
+analysis_task = Task(
+ description="""
+ Write Python code to:
+ 1. Generate a random dataset of 100 points with x and y coordinates
+ 2. Calculate the correlation coefficient between x and y
+ 3. Create a scatter plot of the data
+ 4. Print the correlation coefficient and save the plot as 'scatter.png'
+
+ Make sure to handle any necessary imports and print the results.
+ """,
+ expected_output="The correlation coefficient and confirmation that the scatter plot has been saved.",
+ agent=data_analyst,
+)
+
+# Run the task
+crew = Crew(
+ agents=[data_analyst],
+ tasks=[analysis_task],
+ verbose=True,
+ process=Process.sequential,
+)
+result = crew.kickoff()
+```
+
+## تفاصيل التنفيذ
+
+تستخدم `CodeInterpreterTool` حاوية Docker لإنشاء بيئة آمنة لتنفيذ الكود:
+
+```python Code
+class CodeInterpreterTool(BaseTool):
+ name: str = "Code Interpreter"
+ description: str = "Interprets Python3 code strings with a final print statement."
+ args_schema: Type[BaseModel] = CodeInterpreterSchema
+ default_image_tag: str = "code-interpreter:latest"
+
+ def _run(self, **kwargs) -> str:
+ code = kwargs.get("code", self.code)
+ libraries_used = kwargs.get("libraries_used", [])
+
+ if self.unsafe_mode:
+ return self.run_code_unsafe(code, libraries_used)
+ else:
+ return self.run_code_safety(code, libraries_used)
+```
+
+تقوم الأداة بالخطوات التالية:
+1. التحقق من وجود صورة Docker أو بنائها إذا لزم الأمر
+2. إنشاء حاوية Docker مع تركيب مجلد العمل الحالي
+3. تثبيت أي مكتبات مطلوبة حددها الوكيل
+4. تنفيذ كود Python في الحاوية
+5. إرجاع مخرجات تنفيذ الكود
+6. التنظيف عن طريق إيقاف الحاوية وإزالتها
+
+## اعتبارات الأمان
+
+بشكل افتراضي، تشغّل `CodeInterpreterTool` الكود في حاوية Docker معزولة، مما يوفر طبقة من الأمان. ومع ذلك، هناك بعض اعتبارات الأمان التي يجب مراعاتها:
+
+1. تمتلك حاوية Docker وصولاً إلى مجلد العمل الحالي، لذا قد يتم الوصول إلى ملفات حساسة.
+2. إذا لم تكن حاوية Docker متاحة وكان الكود يحتاج للتشغيل بأمان، سيُنفَّذ في بيئة حماية. لأسباب أمنية، لا يُسمح بتثبيت مكتبات عشوائية
+3. يسمح معامل `unsafe_mode` بتنفيذ الكود مباشرة على الجهاز المضيف، ويجب استخدامه فقط في بيئات موثوقة.
+4. كن حذراً عند السماح للوكلاء بتثبيت مكتبات عشوائية، لأنها قد تتضمن كوداً ضاراً.
+
+## الخلاصة
+
+توفر `CodeInterpreterTool` طريقة قوية لوكلاء CrewAI لتنفيذ كود Python في بيئة آمنة نسبياً. من خلال تمكين الوكلاء من كتابة وتشغيل الكود، توسّع قدراتهم في حل المشكلات بشكل كبير، خاصة للمهام التي تتضمن تحليل البيانات أو الحسابات أو أعمال حسابية أخرى. هذه الأداة مفيدة بشكل خاص للوكلاء الذين يحتاجون إلى إجراء عمليات معقدة يُعبَّر عنها بكفاءة أكبر في الكود مقارنة باللغة الطبيعية.
diff --git a/docs/v1.15.1/ar/tools/ai-ml/dalletool.mdx b/docs/v1.15.1/ar/tools/ai-ml/dalletool.mdx
new file mode 100644
index 000000000..2caa13b5c
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/dalletool.mdx
@@ -0,0 +1,52 @@
+---
+title: أداة DALL-E
+description: أداة `DallETool` هي أداة قوية مصممة لتوليد الصور من الأوصاف النصية.
+icon: image
+mode: "wide"
+---
+
+# `DallETool`
+
+## الوصف
+
+تُستخدم هذه الأداة لمنح الوكيل القدرة على توليد الصور باستخدام نموذج DALL-E. وهو نموذج قائم على المحولات يولّد الصور من الأوصاف النصية.
+تتيح هذه الأداة للوكيل توليد صور بناءً على النص المدخل من المستخدم.
+
+## التثبيت
+
+ثبّت حزمة crewai_tools
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+تذكر أنه عند استخدام هذه الأداة، يجب أن يُولَّد النص من قبل الوكيل نفسه. يجب أن يكون النص وصفاً للصورة التي تريد توليدها.
+
+```python Code
+from crewai_tools import DallETool
+
+Agent(
+ ...
+ tools=[DallETool()],
+)
+```
+
+إذا لزم الأمر، يمكنك أيضاً ضبط معاملات نموذج DALL-E عبر تمريرها كمعاملات لفئة `DallETool`. على سبيل المثال:
+
+```python Code
+from crewai_tools import DallETool
+
+dalle_tool = DallETool(model="dall-e-3",
+ size="1024x1024",
+ quality="standard",
+ n=1)
+
+Agent(
+ ...
+ tools=[dalle_tool]
+)
+```
+
+المعاملات مبنية على طريقة `client.images.generate` من API الخاص بـ OpenAI. لمزيد من المعلومات حول المعاملات،
+يرجى الرجوع إلى [وثائق OpenAI API](https://platform.openai.com/docs/guides/images/introduction?lang=python).
diff --git a/docs/v1.15.1/ar/tools/ai-ml/daytona.mdx b/docs/v1.15.1/ar/tools/ai-ml/daytona.mdx
new file mode 100644
index 000000000..5c112b0d1
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/daytona.mdx
@@ -0,0 +1,230 @@
+---
+title: Daytona Sandbox Tools
+description: Run shell commands, execute Python, and manage files inside isolated [Daytona](https://www.daytona.io/) sandboxes.
+icon: box
+mode: "wide"
+---
+
+# Daytona Sandbox Tools
+
+## Description
+
+The Daytona sandbox tools give CrewAI agents access to isolated, ephemeral compute environments powered by [Daytona](https://www.daytona.io/). Three tools are available so you can give an agent exactly the capabilities it needs:
+
+- **`DaytonaExecTool`** — run any shell command inside a sandbox.
+- **`DaytonaPythonTool`** — execute a block of Python source code inside a sandbox.
+- **`DaytonaFileTool`** — read, write, append, list, delete, and inspect files inside a sandbox; also supports `move`, `find` (content grep), `search` (filename glob), `chmod` (permissions), `replace` (bulk find-and-replace), and `exists`.
+
+All three tools share the same sandbox lifecycle controls, so you can mix and match them while keeping state in a single persistent sandbox.
+
+## Installation
+
+```shell
+uv add "crewai-tools[daytona]"
+# or
+pip install "crewai-tools[daytona]"
+```
+
+Set your API key:
+
+```shell
+export DAYTONA_API_KEY="your-api-key"
+```
+
+`DAYTONA_API_URL` and `DAYTONA_TARGET` are also respected if set.
+
+## Sandbox Lifecycle
+
+All three tools inherit lifecycle controls from `DaytonaBaseTool`:
+
+| Mode | How to enable | Sandbox created | Sandbox deleted |
+|------|--------------|-----------------|-----------------|
+| **Ephemeral** (default) | `persistent=False` (default) | On every `_run` call | At the end of that same call |
+| **Persistent** | `persistent=True` | Lazily on first use | At process exit (via `atexit`), or manually via `tool.close()` |
+| **Attach** | `sandbox_id=""` | Never — attaches to an existing sandbox | Never — the tool will not delete a sandbox it did not create |
+
+Ephemeral mode is the safe default: nothing leaks if the agent forgets to clean up. Use persistent mode when you want filesystem state or installed packages to carry across multiple tool calls — this is typical when pairing `DaytonaFileTool` with `DaytonaExecTool`.
+
+## Examples
+
+### One-shot Python execution (ephemeral)
+
+```python Code
+from crewai_tools import DaytonaPythonTool
+
+tool = DaytonaPythonTool()
+result = tool.run(code="print(sum(range(10)))")
+print(result)
+# {"exit_code": 0, "result": "45\n", "artifacts": ExecutionArtifacts(stdout="45\n", charts=[])}
+```
+
+### Multi-step shell session (persistent)
+
+```python Code
+from crewai_tools import DaytonaExecTool, DaytonaFileTool
+
+# Create the persistent sandbox via the first tool, then attach the second
+# tool to it so both share state (installed packages, files, env vars).
+exec_tool = DaytonaExecTool(persistent=True)
+exec_tool.run(command="pip install httpx -q")
+file_tool = DaytonaFileTool(sandbox_id=exec_tool.active_sandbox_id)
+
+file_tool.run(
+ action="write",
+ path="workspace/script.py",
+ content="import httpx; print(f'httpx loaded, version {httpx.__version__}')",
+)
+exec_tool.run(command="python workspace/script.py")
+```
+
+
+By default, each tool with `persistent=True` lazily creates its **own** sandbox on first use. The pattern above shares a single sandbox across multiple tools by reading the first tool's `active_sandbox_id` after a `.run()` call and passing it to the others via `sandbox_id=...`. With `persistent=False` (the default), every `.run()` call gets a fresh sandbox that's deleted at the end of that call.
+
+
+### Attach to an existing sandbox
+
+```python Code
+from crewai_tools import DaytonaExecTool
+
+tool = DaytonaExecTool(sandbox_id="my-long-lived-sandbox")
+result = tool.run(command="ls workspace")
+```
+
+### Custom sandbox parameters
+
+Pass Daytona's `CreateSandboxFromSnapshotParams` kwargs via `create_params`:
+
+```python Code
+from crewai_tools import DaytonaExecTool
+
+tool = DaytonaExecTool(
+ persistent=True,
+ create_params={
+ "language": "python",
+ "env_vars": {"MY_FLAG": "1"},
+ "labels": {"owner": "crewai-agent"},
+ },
+)
+```
+
+### Searching, moving, and modifying files
+
+```python Code
+from crewai_tools import DaytonaFileTool
+
+file_tool = DaytonaFileTool(persistent=True)
+
+# Find every TODO in the source tree (grep file contents recursively)
+file_tool.run(action="find", path="workspace/src", pattern="TODO:")
+
+# Find all Python files (glob match on filenames)
+file_tool.run(action="search", path="workspace", pattern="*.py")
+
+# Make a script executable
+file_tool.run(action="chmod", path="workspace/run.sh", mode="755")
+
+# Rename or move a file
+file_tool.run(
+ action="move",
+ path="workspace/draft.md",
+ destination="workspace/final.md",
+)
+
+# Bulk find-and-replace across multiple files
+file_tool.run(
+ action="replace",
+ paths=["workspace/src/a.py", "workspace/src/b.py"],
+ pattern="old_function",
+ replacement="new_function",
+)
+
+# Quick existence check before a destructive op
+file_tool.run(action="exists", path="workspace/cache.db")
+```
+
+### Agent integration
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import DaytonaExecTool, DaytonaPythonTool, DaytonaFileTool
+
+exec_tool = DaytonaExecTool(persistent=True)
+python_tool = DaytonaPythonTool(persistent=True)
+file_tool = DaytonaFileTool(persistent=True)
+
+coder = Agent(
+ role="Sandbox Engineer",
+ goal="Write and run code in an isolated environment",
+ backstory="An engineer who uses Daytona sandboxes to safely execute code and manage files.",
+ tools=[exec_tool, python_tool, file_tool],
+ verbose=True,
+)
+
+task = Task(
+ description="Write a Python script that prints the first 10 Fibonacci numbers, save it to workspace/fib.py, and run it.",
+ expected_output="The first 10 Fibonacci numbers printed to stdout.",
+ agent=coder,
+)
+
+crew = Crew(agents=[coder], tasks=[task])
+result = crew.kickoff()
+```
+
+## Parameters
+
+### Shared (`DaytonaBaseTool`)
+
+All three tools accept these parameters at initialization:
+
+| Parameter | Type | Default | Description |
+|-----------|------|---------|-------------|
+| `api_key` | `str \| None` | `$DAYTONA_API_KEY` | Daytona API key. Falls back to the `DAYTONA_API_KEY` env var. |
+| `api_url` | `str \| None` | `$DAYTONA_API_URL` | Daytona API URL override. |
+| `target` | `str \| None` | `$DAYTONA_TARGET` | Daytona target region. |
+| `persistent` | `bool` | `False` | Reuse one sandbox across all calls and delete it at process exit. |
+| `sandbox_id` | `str \| None` | `None` | Attach to an existing sandbox by id or name. |
+| `create_params` | `dict \| None` | `None` | Extra kwargs forwarded to `CreateSandboxFromSnapshotParams` (e.g. `language`, `env_vars`, `labels`). |
+| `sandbox_timeout` | `float` | `60.0` | Timeout in seconds for sandbox create/delete operations. |
+
+### `DaytonaExecTool`
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `command` | `str` | ✓ | Shell command to execute. |
+| `cwd` | `str \| None` | | Working directory inside the sandbox. |
+| `env` | `dict[str, str] \| None` | | Extra environment variables for this command. |
+| `timeout` | `int \| None` | | Maximum seconds to wait for the command. |
+
+### `DaytonaPythonTool`
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `code` | `str` | ✓ | Python source code to execute. |
+| `argv` | `list[str] \| None` | | Argument vector forwarded via `CodeRunParams`. |
+| `env` | `dict[str, str] \| None` | | Environment variables forwarded via `CodeRunParams`. |
+| `timeout` | `int \| None` | | Maximum seconds to wait for execution. |
+
+### `DaytonaFileTool`
+
+| Parameter | Type | Required | Description |
+|-----------|------|----------|-------------|
+| `action` | `str` | ✓ | One of: `read`, `write`, `append`, `list`, `delete`, `mkdir`, `info`, `exists`, `move`, `find`, `search`, `chmod`, `replace`. |
+| `path` | `str \| None` | ✓ for all actions except `replace` | Absolute path inside the sandbox. |
+| `content` | `str \| None` | ✓ for `append` | Content to write or append. |
+| `binary` | `bool` | | If `True`, `content` is base64 on write; returns base64 on read. |
+| `recursive` | `bool` | | For `delete`: remove directories recursively. |
+| `mode` | `str \| None` | | For `mkdir`: octal permissions for the new directory (defaults to `"0755"`). For `chmod`: octal permissions to apply to the target. |
+| `destination` | `str \| None` | ✓ for `move` | Destination path for `move`. |
+| `pattern` | `str \| None` | ✓ for `find`, `search`, `replace` | For `find`: substring matched against file CONTENTS. For `search`: glob matched against file NAMES (e.g. `*.py`). For `replace`: text to replace inside files. |
+| `replacement` | `str \| None` | ✓ for `replace` | Replacement text for `pattern`. |
+| `paths` | `list[str] \| None` | ✓ for `replace` | List of file paths in which to replace text. |
+| `owner` | `str \| None` | | For `chmod`: new file owner. |
+| `group` | `str \| None` | | For `chmod`: new file group. |
+
+
+For `chmod`, pass at least one of `mode`, `owner`, or `group` — any field left as `None` is left unchanged on the target.
+
+
+
+For files larger than a few KB, create the file first with `action="write"` and empty content, then send the body via multiple `action="append"` calls of ~4 KB each to stay within tool-call payload limits.
+
diff --git a/docs/v1.15.1/ar/tools/ai-ml/langchaintool.mdx b/docs/v1.15.1/ar/tools/ai-ml/langchaintool.mdx
new file mode 100644
index 000000000..550ea0823
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/langchaintool.mdx
@@ -0,0 +1,59 @@
+---
+title: أداة LangChain
+description: أداة `LangChainTool` هي غلاف لأدوات ومحركات استعلام LangChain.
+icon: link
+mode: "wide"
+---
+
+## `LangChainTool`
+
+
+ يتكامل CrewAI بسلاسة مع [قائمة أدوات](https://python.langchain.com/docs/integrations/tools/) LangChain الشاملة، والتي يمكن استخدامها جميعها مع CrewAI.
+
+
+```python Code
+import os
+from dotenv import load_dotenv
+from crewai import Agent, Task, Crew
+from crewai.tools import BaseTool
+from pydantic import Field
+from langchain_community.utilities import GoogleSerperAPIWrapper
+
+# Set up your SERPER_API_KEY key in an .env file, eg:
+# SERPER_API_KEY=
+load_dotenv()
+
+search = GoogleSerperAPIWrapper()
+
+class SearchTool(BaseTool):
+ name: str = "Search"
+ description: str = "Useful for search-based queries. Use this to find current information about markets, companies, and trends."
+ search: GoogleSerperAPIWrapper = Field(default_factory=GoogleSerperAPIWrapper)
+
+ def _run(self, query: str) -> str:
+ """Execute the search query and return results"""
+ try:
+ return self.search.run(query)
+ except Exception as e:
+ return f"Error performing search: {str(e)}"
+
+# Create Agents
+researcher = Agent(
+ role='Research Analyst',
+ goal='Gather current market data and trends',
+ backstory="""You are an expert research analyst with years of experience in
+ gathering market intelligence. You're known for your ability to find
+ relevant and up-to-date market information and present it in a clear,
+ actionable format.""",
+ tools=[SearchTool()],
+ verbose=True
+)
+
+# rest of the code ...
+```
+
+## الخلاصة
+
+تعد الأدوات محورية في توسيع قدرات وكلاء CrewAI، مما يمكّنهم من القيام بمجموعة واسعة من المهام والتعاون بفعالية.
+عند بناء حلول مع CrewAI، استفد من الأدوات المخصصة والموجودة لتمكين وكلائك وتعزيز منظومة الذكاء الاصطناعي. فكّر في الاستفادة من معالجة الأخطاء وآليات التخزين المؤقت
+ومرونة معاملات الأدوات لتحسين أداء وقدرات وكلائك.
diff --git a/docs/v1.15.1/ar/tools/ai-ml/llamaindextool.mdx b/docs/v1.15.1/ar/tools/ai-ml/llamaindextool.mdx
new file mode 100644
index 000000000..91625856b
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/llamaindextool.mdx
@@ -0,0 +1,147 @@
+---
+title: أداة LlamaIndex
+description: أداة `LlamaIndexTool` هي غلاف لأدوات ومحركات استعلام LlamaIndex.
+icon: address-book
+mode: "wide"
+---
+
+# `LlamaIndexTool`
+
+## الوصف
+
+صُممت `LlamaIndexTool` لتكون غلافاً عاماً حول أدوات ومحركات استعلام LlamaIndex، مما يتيح لك الاستفادة من موارد LlamaIndex من حيث خطوط أنابيب RAG/الوكيلية كأدوات للتوصيل بوكلاء CrewAI. تتيح لك هذه الأداة دمج قدرات معالجة واسترجاع البيانات القوية من LlamaIndex في سير عمل CrewAI بسلاسة.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت LlamaIndex:
+
+```shell
+uv add llama-index
+```
+
+## خطوات البدء
+
+لاستخدام `LlamaIndexTool` بفعالية، اتبع الخطوات التالية:
+
+1. **تثبيت LlamaIndex**: ثبّت حزمة LlamaIndex باستخدام الأمر أعلاه.
+2. **إعداد LlamaIndex**: اتبع [وثائق LlamaIndex](https://docs.llamaindex.ai/) لإعداد خط أنابيب RAG/وكيلي.
+3. **إنشاء أداة أو محرك استعلام**: أنشئ أداة أو محرك استعلام LlamaIndex تريد استخدامه مع CrewAI.
+
+## مثال
+
+توضح الأمثلة التالية كيفية تهيئة الأداة من مكونات LlamaIndex مختلفة:
+
+### من أداة LlamaIndex
+
+```python Code
+from crewai_tools import LlamaIndexTool
+from crewai import Agent
+from llama_index.core.tools import FunctionTool
+
+# Example 1: Initialize from FunctionTool
+def search_data(query: str) -> str:
+ """Search for information in the data."""
+ # Your implementation here
+ return f"Results for: {query}"
+
+# Create a LlamaIndex FunctionTool
+og_tool = FunctionTool.from_defaults(
+ search_data,
+ name="DataSearchTool",
+ description="Search for information in the data"
+)
+
+# Wrap it with LlamaIndexTool
+tool = LlamaIndexTool.from_tool(og_tool)
+
+# Define an agent that uses the tool
+@agent
+def researcher(self) -> Agent:
+ '''
+ This agent uses the LlamaIndexTool to search for information.
+ '''
+ return Agent(
+ config=self.agents_config["researcher"],
+ tools=[tool]
+ )
+```
+
+### من أدوات LlamaHub
+
+```python Code
+from crewai_tools import LlamaIndexTool
+from llama_index.tools.wolfram_alpha import WolframAlphaToolSpec
+
+# Initialize from LlamaHub Tools
+wolfram_spec = WolframAlphaToolSpec(app_id="your_app_id")
+wolfram_tools = wolfram_spec.to_tool_list()
+tools = [LlamaIndexTool.from_tool(t) for t in wolfram_tools]
+```
+
+### من محرك استعلام LlamaIndex
+
+```python Code
+from crewai_tools import LlamaIndexTool
+from llama_index.core import VectorStoreIndex
+from llama_index.core.readers import SimpleDirectoryReader
+
+# Load documents
+documents = SimpleDirectoryReader("./data").load_data()
+
+# Create an index
+index = VectorStoreIndex.from_documents(documents)
+
+# Create a query engine
+query_engine = index.as_query_engine()
+
+# Create a LlamaIndexTool from the query engine
+query_tool = LlamaIndexTool.from_query_engine(
+ query_engine,
+ name="Company Data Query Tool",
+ description="Use this tool to lookup information in company documents"
+)
+```
+
+## طرق الفئة
+
+توفر `LlamaIndexTool` طريقتي فئة رئيسيتين لإنشاء المثيلات:
+
+### from_tool
+
+تنشئ `LlamaIndexTool` من أداة LlamaIndex.
+
+```python Code
+@classmethod
+def from_tool(cls, tool: Any, **kwargs: Any) -> "LlamaIndexTool":
+ # Implementation details
+```
+
+### from_query_engine
+
+تنشئ `LlamaIndexTool` من محرك استعلام LlamaIndex.
+
+```python Code
+@classmethod
+def from_query_engine(
+ cls,
+ query_engine: Any,
+ name: Optional[str] = None,
+ description: Optional[str] = None,
+ return_direct: bool = False,
+ **kwargs: Any,
+) -> "LlamaIndexTool":
+ # Implementation details
+```
+
+## المعاملات
+
+تقبل طريقة `from_query_engine` المعاملات التالية:
+
+- **query_engine**: مطلوب. محرك استعلام LlamaIndex المراد تغليفه.
+- **name**: اختياري. اسم الأداة.
+- **description**: اختياري. وصف الأداة.
+- **return_direct**: اختياري. ما إذا كان يتم إرجاع الاستجابة مباشرة. القيمة الافتراضية `False`.
+
+## الخلاصة
+
+توفر `LlamaIndexTool` طريقة قوية لدمج قدرات LlamaIndex في وكلاء CrewAI. من خلال تغليف أدوات ومحركات استعلام LlamaIndex، تمكّن الوكلاء من الاستفادة من وظائف استرجاع ومعالجة البيانات المتطورة، مما يعزز قدرتهم على التعامل مع مصادر المعلومات المعقدة.
diff --git a/docs/v1.15.1/ar/tools/ai-ml/overview.mdx b/docs/v1.15.1/ar/tools/ai-ml/overview.mdx
new file mode 100644
index 000000000..a3d905d8b
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/overview.mdx
@@ -0,0 +1,65 @@
+---
+title: "نظرة عامة"
+description: "استفد من خدمات الذكاء الاصطناعي وولّد الصور وعالج الرؤية وابنِ أنظمة ذكية"
+icon: "face-smile"
+mode: "wide"
+---
+
+تتكامل هذه الأدوات مع خدمات الذكاء الاصطناعي وتعلم الآلة لتعزيز وكلائك بقدرات متقدمة مثل توليد الصور ومعالجة الرؤية وتنفيذ الكود الذكي.
+
+## **الأدوات المتاحة**
+
+
+
+ توليد صور بالذكاء الاصطناعي باستخدام نموذج DALL-E من OpenAI.
+
+
+
+ معالجة وتحليل الصور بقدرات الرؤية الحاسوبية.
+
+
+
+ قدرات متقدمة للتفكير واتخاذ القرار بالذكاء الاصطناعي.
+
+
+
+ بناء قواعد معرفية وأنظمة استرجاع مع LlamaIndex.
+
+
+
+ التكامل مع LangChain لسير عمل ذكاء اصطناعي معقدة.
+
+
+
+ تنفيذ أنظمة التوليد المعزز بالاسترجاع.
+
+
+
+ تنفيذ كود Python وإجراء تحليل البيانات.
+
+
+
+
+
+## **حالات الاستخدام الشائعة**
+
+- **توليد المحتوى**: إنشاء صور ونصوص ومحتوى وسائط متعددة
+- **تحليل البيانات**: تنفيذ الكود وتحليل مجموعات بيانات معقدة
+- **أنظمة المعرفة**: بناء أنظمة RAG وقواعد بيانات ذكية
+- **الرؤية الحاسوبية**: معالجة وفهم المحتوى المرئي
+- **سلامة الذكاء الاصطناعي**: تنفيذ فحوصات الإشراف على المحتوى والسلامة
+
+```python
+from crewai_tools import DallETool, VisionTool, CodeInterpreterTool
+
+# Create AI tools
+image_generator = DallETool()
+vision_processor = VisionTool()
+code_executor = CodeInterpreterTool()
+
+# Add to your agent
+agent = Agent(
+ role="AI Specialist",
+ tools=[image_generator, vision_processor, code_executor],
+ goal="Create and analyze content using AI capabilities"
+)
diff --git a/docs/v1.15.1/ar/tools/ai-ml/ragtool.mdx b/docs/v1.15.1/ar/tools/ai-ml/ragtool.mdx
new file mode 100644
index 000000000..a73709b69
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/ragtool.mdx
@@ -0,0 +1,654 @@
+---
+title: أداة RAG
+description: أداة `RagTool` هي أداة قاعدة معرفية ديناميكية للإجابة على الأسئلة باستخدام التوليد المعزز بالاسترجاع.
+icon: vector-square
+mode: "wide"
+---
+
+# `RagTool`
+
+## الوصف
+
+صُممت `RagTool` للإجابة على الأسئلة من خلال الاستفادة من قوة التوليد المعزز بالاسترجاع (RAG) عبر نظام RAG الأصلي في CrewAI.
+توفر قاعدة معرفية ديناميكية يمكن الاستعلام عنها لاسترجاع المعلومات ذات الصلة من مصادر بيانات متنوعة.
+هذه الأداة مفيدة بشكل خاص للتطبيقات التي تتطلب الوصول إلى مجموعة واسعة من المعلومات وتحتاج إلى تقديم إجابات ذات صلة بالسياق.
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة واستخدامها مع مصادر بيانات مختلفة:
+
+```python Code
+from crewai_tools import RagTool
+
+# Create a RAG tool with default settings
+rag_tool = RagTool()
+
+# Add content from a file
+rag_tool.add(data_type="file", path="path/to/your/document.pdf")
+
+# Add content from a web page
+rag_tool.add(data_type="web_page", url="https://example.com")
+
+# Define an agent with the RagTool
+@agent
+def knowledge_expert(self) -> Agent:
+ '''
+ This agent uses the RagTool to answer questions about the knowledge base.
+ '''
+ return Agent(
+ config=self.agents_config["knowledge_expert"],
+ allow_delegation=False,
+ tools=[rag_tool]
+ )
+```
+
+## مصادر البيانات المدعومة
+
+يمكن استخدام `RagTool` مع مجموعة واسعة من مصادر البيانات، بما في ذلك:
+
+- ملفات PDF
+- ملفات CSV
+- ملفات JSON
+- نصوص
+- مجلدات/أدلة
+- صفحات ويب HTML
+- قنوات YouTube
+- فيديوهات YouTube
+- مواقع التوثيق
+- ملفات MDX
+- ملفات DOCX
+- ملفات XML
+- Gmail
+- مستودعات GitHub
+- قواعد بيانات PostgreSQL
+- قواعد بيانات MySQL
+- محادثات Slack
+- رسائل Discord
+- منتديات Discourse
+- نشرات Substack
+- محتوى Beehiiv
+- ملفات Dropbox
+- صور
+- مصادر بيانات مخصصة
+
+## المعاملات
+
+تقبل `RagTool` المعاملات التالية:
+
+- **summarize**: اختياري. ما إذا كان يتم تلخيص المحتوى المسترجع. القيمة الافتراضية `False`.
+- **adapter**: اختياري. محول مخصص لقاعدة المعرفة. إذا لم يُقدَّم، سيُستخدم CrewAIRagAdapter.
+- **config**: اختياري. إعداد نظام RAG الأساسي في CrewAI. يقبل TypedDict من نوع `RagToolConfig` مع مفاتيح اختيارية `embedding_model` (ProviderSpec) و`vectordb` (VectorDbConfig). جميع قيم الإعداد المقدمة برمجياً لها الأولوية على متغيرات البيئة.
+
+## إضافة المحتوى
+
+يمكنك إضافة محتوى إلى قاعدة المعرفة باستخدام طريقة `add`:
+
+```python Code
+# Add a PDF file
+rag_tool.add(data_type="file", path="path/to/your/document.pdf")
+
+# Add a web page
+rag_tool.add(data_type="web_page", url="https://example.com")
+
+# Add a YouTube video
+rag_tool.add(data_type="youtube_video", url="https://www.youtube.com/watch?v=VIDEO_ID")
+
+# Add a directory of files
+rag_tool.add(data_type="directory", path="path/to/your/directory")
+```
+
+## مثال على التكامل مع الوكيل
+
+إليك كيفية دمج `RagTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent
+from crewai.project import agent
+from crewai_tools import RagTool
+
+# Initialize the tool and add content
+rag_tool = RagTool()
+rag_tool.add(data_type="web_page", url="https://docs.crewai.com")
+rag_tool.add(data_type="file", path="company_data.pdf")
+
+# Define an agent with the RagTool
+@agent
+def knowledge_expert(self) -> Agent:
+ return Agent(
+ config=self.agents_config["knowledge_expert"],
+ allow_delegation=False,
+ tools=[rag_tool]
+ )
+```
+
+## إعداد متقدم
+
+يمكنك تخصيص سلوك `RagTool` من خلال تقديم قاموس إعداد:
+
+```python Code
+from crewai_tools import RagTool
+from crewai_tools.tools.rag import RagToolConfig, VectorDbConfig, ProviderSpec
+
+# Create a RAG tool with custom configuration
+
+vectordb: VectorDbConfig = {
+ "provider": "qdrant",
+ "config": {
+ "collection_name": "my-collection"
+ }
+}
+
+embedding_model: ProviderSpec = {
+ "provider": "openai",
+ "config": {
+ "model_name": "text-embedding-3-small"
+ }
+}
+
+config: RagToolConfig = {
+ "vectordb": vectordb,
+ "embedding_model": embedding_model
+}
+
+rag_tool = RagTool(config=config, summarize=True)
+```
+
+## إعداد نموذج التضمين
+
+يقبل معامل `embedding_model` قاموس `crewai.rag.embeddings.types.ProviderSpec` بالبنية التالية:
+
+```python
+{
+ "provider": "provider-name", # Required
+ "config": { # Optional
+ # Provider-specific configuration
+ }
+}
+```
+
+### المزودون المدعومون
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.openai.types import OpenAIProviderSpec
+
+ embedding_model: OpenAIProviderSpec = {
+ "provider": "openai",
+ "config": {
+ "api_key": "your-api-key",
+ "model_name": "text-embedding-ada-002",
+ "dimensions": 1536,
+ "organization_id": "your-org-id",
+ "api_base": "https://api.openai.com/v1",
+ "api_version": "v1",
+ "default_headers": {"Custom-Header": "value"}
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `api_key` (str): مفتاح API لـ OpenAI
+ - `model_name` (str): النموذج المستخدم. القيمة الافتراضية: `text-embedding-ada-002`. الخيارات: `text-embedding-3-small`، `text-embedding-3-large`، `text-embedding-ada-002`
+ - `dimensions` (int): عدد أبعاد التضمين
+ - `organization_id` (str): معرّف منظمة OpenAI
+ - `api_base` (str): عنوان URL مخصص لقاعدة API
+ - `api_version` (str): إصدار API
+ - `default_headers` (dict): ترويسات مخصصة لطلبات API
+
+ **متغيرات البيئة:**
+ - `OPENAI_API_KEY` أو `EMBEDDINGS_OPENAI_API_KEY`: `api_key`
+ - `OPENAI_ORGANIZATION_ID` أو `EMBEDDINGS_OPENAI_ORGANIZATION_ID`: `organization_id`
+ - `OPENAI_MODEL_NAME` أو `EMBEDDINGS_OPENAI_MODEL_NAME`: `model_name`
+ - `OPENAI_API_BASE` أو `EMBEDDINGS_OPENAI_API_BASE`: `api_base`
+ - `OPENAI_API_VERSION` أو `EMBEDDINGS_OPENAI_API_VERSION`: `api_version`
+ - `OPENAI_DIMENSIONS` أو `EMBEDDINGS_OPENAI_DIMENSIONS`: `dimensions`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.cohere.types import CohereProviderSpec
+
+ embedding_model: CohereProviderSpec = {
+ "provider": "cohere",
+ "config": {
+ "api_key": "your-api-key",
+ "model_name": "embed-english-v3.0"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `api_key` (str): مفتاح API لـ Cohere
+ - `model_name` (str): النموذج المستخدم. القيمة الافتراضية: `large`. الخيارات: `embed-english-v3.0`، `embed-multilingual-v3.0`، `large`، `small`
+
+ **متغيرات البيئة:**
+ - `COHERE_API_KEY` أو `EMBEDDINGS_COHERE_API_KEY`: `api_key`
+ - `EMBEDDINGS_COHERE_MODEL_NAME`: `model_name`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.voyageai.types import VoyageAIProviderSpec
+
+ embedding_model: VoyageAIProviderSpec = {
+ "provider": "voyageai",
+ "config": {
+ "api_key": "your-api-key",
+ "model": "voyage-3",
+ "input_type": "document",
+ "truncation": True,
+ "output_dtype": "float32",
+ "output_dimension": 1024,
+ "max_retries": 3,
+ "timeout": 60.0
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `api_key` (str): مفتاح API لـ VoyageAI
+ - `model` (str): النموذج المستخدم. القيمة الافتراضية: `voyage-2`. الخيارات: `voyage-3`، `voyage-3-lite`، `voyage-code-3`، `voyage-large-2`
+ - `input_type` (str): نوع الإدخال. الخيارات: `document` (للتخزين)، `query` (للبحث)
+ - `truncation` (bool): ما إذا كان يتم اقتطاع المدخلات التي تتجاوز الحد الأقصى. القيمة الافتراضية: `True`
+ - `output_dtype` (str): نوع بيانات المخرجات
+ - `output_dimension` (int): بُعد تضمينات المخرجات
+ - `max_retries` (int): الحد الأقصى لمحاولات إعادة المحاولة. القيمة الافتراضية: `0`
+ - `timeout` (float): مهلة الطلب بالثواني
+
+ **متغيرات البيئة:**
+ - `VOYAGEAI_API_KEY` أو `EMBEDDINGS_VOYAGEAI_API_KEY`: `api_key`
+ - `VOYAGEAI_MODEL` أو `EMBEDDINGS_VOYAGEAI_MODEL`: `model`
+ - `VOYAGEAI_INPUT_TYPE` أو `EMBEDDINGS_VOYAGEAI_INPUT_TYPE`: `input_type`
+ - `VOYAGEAI_TRUNCATION` أو `EMBEDDINGS_VOYAGEAI_TRUNCATION`: `truncation`
+ - `VOYAGEAI_OUTPUT_DTYPE` أو `EMBEDDINGS_VOYAGEAI_OUTPUT_DTYPE`: `output_dtype`
+ - `VOYAGEAI_OUTPUT_DIMENSION` أو `EMBEDDINGS_VOYAGEAI_OUTPUT_DIMENSION`: `output_dimension`
+ - `VOYAGEAI_MAX_RETRIES` أو `EMBEDDINGS_VOYAGEAI_MAX_RETRIES`: `max_retries`
+ - `VOYAGEAI_TIMEOUT` أو `EMBEDDINGS_VOYAGEAI_TIMEOUT`: `timeout`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.ollama.types import OllamaProviderSpec
+
+ embedding_model: OllamaProviderSpec = {
+ "provider": "ollama",
+ "config": {
+ "model_name": "llama2",
+ "url": "http://localhost:11434/api/embeddings"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `model_name` (str): اسم نموذج Ollama (مثل `llama2`، `mistral`، `nomic-embed-text`)
+ - `url` (str): عنوان URL لنقطة نهاية API الخاصة بـ Ollama. القيمة الافتراضية: `http://localhost:11434/api/embeddings`
+
+ **متغيرات البيئة:**
+ - `OLLAMA_MODEL` أو `EMBEDDINGS_OLLAMA_MODEL`: `model_name`
+ - `OLLAMA_URL` أو `EMBEDDINGS_OLLAMA_URL`: `url`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.aws.types import BedrockProviderSpec
+
+ embedding_model: BedrockProviderSpec = {
+ "provider": "amazon-bedrock",
+ "config": {
+ "model_name": "amazon.titan-embed-text-v2:0",
+ "session": boto3_session
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `model_name` (str): معرّف نموذج Bedrock. القيمة الافتراضية: `amazon.titan-embed-text-v1`. الخيارات: `amazon.titan-embed-text-v1`، `amazon.titan-embed-text-v2:0`، `cohere.embed-english-v3`، `cohere.embed-multilingual-v3`
+ - `session` (Any): كائن جلسة Boto3 لمصادقة AWS
+
+ **متغيرات البيئة:**
+ - `AWS_ACCESS_KEY_ID`: مفتاح وصول AWS
+ - `AWS_SECRET_ACCESS_KEY`: مفتاح سري AWS
+ - `AWS_REGION`: منطقة AWS (مثل `us-east-1`)
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.microsoft.types import AzureProviderSpec
+
+ embedding_model: AzureProviderSpec = {
+ "provider": "azure",
+ "config": {
+ "deployment_id": "your-deployment-id",
+ "api_key": "your-api-key",
+ "api_base": "https://your-resource.openai.azure.com",
+ "api_version": "2024-02-01",
+ "model_name": "text-embedding-ada-002",
+ "api_type": "azure"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `deployment_id` (str): **مطلوب** - معرّف نشر Azure OpenAI
+ - `api_key` (str): مفتاح API لـ Azure OpenAI
+ - `api_base` (str): نقطة نهاية مورد Azure OpenAI
+ - `api_version` (str): إصدار API. مثال: `2024-02-01`
+ - `model_name` (str): اسم النموذج. القيمة الافتراضية: `text-embedding-ada-002`
+ - `api_type` (str): نوع API. القيمة الافتراضية: `azure`
+ - `dimensions` (int): أبعاد المخرجات
+ - `default_headers` (dict): ترويسات مخصصة
+
+ **متغيرات البيئة:**
+ - `AZURE_OPENAI_API_KEY` أو `EMBEDDINGS_AZURE_API_KEY`: `api_key`
+ - `AZURE_OPENAI_ENDPOINT` أو `EMBEDDINGS_AZURE_API_BASE`: `api_base`
+ - `EMBEDDINGS_AZURE_DEPLOYMENT_ID`: `deployment_id`
+ - `EMBEDDINGS_AZURE_API_VERSION`: `api_version`
+ - `EMBEDDINGS_AZURE_MODEL_NAME`: `model_name`
+ - `EMBEDDINGS_AZURE_API_TYPE`: `api_type`
+ - `EMBEDDINGS_AZURE_DIMENSIONS`: `dimensions`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.google.types import GenerativeAiProviderSpec
+
+ embedding_model: GenerativeAiProviderSpec = {
+ "provider": "google-generativeai",
+ "config": {
+ "api_key": "your-api-key",
+ "model_name": "gemini-embedding-001",
+ "task_type": "RETRIEVAL_DOCUMENT"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `api_key` (str): مفتاح API لـ Google AI
+ - `model_name` (str): اسم النموذج. القيمة الافتراضية: `gemini-embedding-001`. الخيارات: `gemini-embedding-001`، `text-embedding-005`، `text-multilingual-embedding-002`
+ - `task_type` (str): نوع المهمة للتضمينات. القيمة الافتراضية: `RETRIEVAL_DOCUMENT`. الخيارات: `RETRIEVAL_DOCUMENT`، `RETRIEVAL_QUERY`
+
+ **متغيرات البيئة:**
+ - `GOOGLE_API_KEY` أو `GEMINI_API_KEY` أو `EMBEDDINGS_GOOGLE_API_KEY`: `api_key`
+ - `EMBEDDINGS_GOOGLE_GENERATIVE_AI_MODEL_NAME`: `model_name`
+ - `EMBEDDINGS_GOOGLE_GENERATIVE_AI_TASK_TYPE`: `task_type`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.google.types import VertexAIProviderSpec
+
+ embedding_model: VertexAIProviderSpec = {
+ "provider": "google-vertex",
+ "config": {
+ "model_name": "text-embedding-004",
+ "project_id": "your-project-id",
+ "region": "us-central1",
+ "api_key": "your-api-key"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `model_name` (str): اسم النموذج. القيمة الافتراضية: `textembedding-gecko`. الخيارات: `text-embedding-004`، `textembedding-gecko`، `textembedding-gecko-multilingual`
+ - `project_id` (str): معرّف مشروع Google Cloud. القيمة الافتراضية: `cloud-large-language-models`
+ - `region` (str): منطقة Google Cloud. القيمة الافتراضية: `us-central1`
+ - `api_key` (str): مفتاح API للمصادقة
+
+ **متغيرات البيئة:**
+ - `GOOGLE_APPLICATION_CREDENTIALS`: مسار ملف JSON لحساب الخدمة
+ - `GOOGLE_CLOUD_PROJECT` أو `EMBEDDINGS_GOOGLE_VERTEX_PROJECT_ID`: `project_id`
+ - `EMBEDDINGS_GOOGLE_VERTEX_MODEL_NAME`: `model_name`
+ - `EMBEDDINGS_GOOGLE_VERTEX_REGION`: `region`
+ - `EMBEDDINGS_GOOGLE_VERTEX_API_KEY`: `api_key`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.jina.types import JinaProviderSpec
+
+ embedding_model: JinaProviderSpec = {
+ "provider": "jina",
+ "config": {
+ "api_key": "your-api-key",
+ "model_name": "jina-embeddings-v3"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `api_key` (str): مفتاح API لـ Jina AI
+ - `model_name` (str): اسم النموذج. القيمة الافتراضية: `jina-embeddings-v2-base-en`. الخيارات: `jina-embeddings-v3`، `jina-embeddings-v2-base-en`، `jina-embeddings-v2-small-en`
+
+ **متغيرات البيئة:**
+ - `JINA_API_KEY` أو `EMBEDDINGS_JINA_API_KEY`: `api_key`
+ - `EMBEDDINGS_JINA_MODEL_NAME`: `model_name`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.huggingface.types import HuggingFaceProviderSpec
+
+ embedding_model: HuggingFaceProviderSpec = {
+ "provider": "huggingface",
+ "config": {
+ "url": "https://api-inference.huggingface.co/models/sentence-transformers/all-MiniLM-L6-v2"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `url` (str): عنوان URL الكامل لنقطة نهاية API الاستدلالي لـ HuggingFace
+
+ **متغيرات البيئة:**
+ - `HUGGINGFACE_URL` أو `EMBEDDINGS_HUGGINGFACE_URL`: `url`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.instructor.types import InstructorProviderSpec
+
+ embedding_model: InstructorProviderSpec = {
+ "provider": "instructor",
+ "config": {
+ "model_name": "hkunlp/instructor-xl",
+ "device": "cuda",
+ "instruction": "Represent the document"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `model_name` (str): معرّف نموذج HuggingFace. القيمة الافتراضية: `hkunlp/instructor-base`. الخيارات: `hkunlp/instructor-xl`، `hkunlp/instructor-large`، `hkunlp/instructor-base`
+ - `device` (str): الجهاز للتشغيل. القيمة الافتراضية: `cpu`. الخيارات: `cpu`، `cuda`، `mps`
+ - `instruction` (str): بادئة التعليمات للتضمينات
+
+ **متغيرات البيئة:**
+ - `EMBEDDINGS_INSTRUCTOR_MODEL_NAME`: `model_name`
+ - `EMBEDDINGS_INSTRUCTOR_DEVICE`: `device`
+ - `EMBEDDINGS_INSTRUCTOR_INSTRUCTION`: `instruction`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.sentence_transformer.types import SentenceTransformerProviderSpec
+
+ embedding_model: SentenceTransformerProviderSpec = {
+ "provider": "sentence-transformer",
+ "config": {
+ "model_name": "all-mpnet-base-v2",
+ "device": "cuda",
+ "normalize_embeddings": True
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `model_name` (str): اسم نموذج Sentence Transformers. القيمة الافتراضية: `all-MiniLM-L6-v2`. الخيارات: `all-mpnet-base-v2`، `all-MiniLM-L6-v2`، `paraphrase-multilingual-MiniLM-L12-v2`
+ - `device` (str): الجهاز للتشغيل. القيمة الافتراضية: `cpu`. الخيارات: `cpu`، `cuda`، `mps`
+ - `normalize_embeddings` (bool): ما إذا كان يتم تطبيع التضمينات. القيمة الافتراضية: `False`
+
+ **متغيرات البيئة:**
+ - `EMBEDDINGS_SENTENCE_TRANSFORMER_MODEL_NAME`: `model_name`
+ - `EMBEDDINGS_SENTENCE_TRANSFORMER_DEVICE`: `device`
+ - `EMBEDDINGS_SENTENCE_TRANSFORMER_NORMALIZE_EMBEDDINGS`: `normalize_embeddings`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.onnx.types import ONNXProviderSpec
+
+ embedding_model: ONNXProviderSpec = {
+ "provider": "onnx",
+ "config": {
+ "preferred_providers": ["CUDAExecutionProvider", "CPUExecutionProvider"]
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `preferred_providers` (list[str]): قائمة مزودي تنفيذ ONNX حسب ترتيب الأفضلية
+
+ **متغيرات البيئة:**
+ - `EMBEDDINGS_ONNX_PREFERRED_PROVIDERS`: `preferred_providers` (قائمة مفصولة بفواصل)
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.openclip.types import OpenCLIPProviderSpec
+
+ embedding_model: OpenCLIPProviderSpec = {
+ "provider": "openclip",
+ "config": {
+ "model_name": "ViT-B-32",
+ "checkpoint": "laion2b_s34b_b79k",
+ "device": "cuda"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `model_name` (str): بنية نموذج OpenCLIP. القيمة الافتراضية: `ViT-B-32`. الخيارات: `ViT-B-32`، `ViT-B-16`، `ViT-L-14`
+ - `checkpoint` (str): اسم نقطة التحقق المُدرّبة مسبقاً. القيمة الافتراضية: `laion2b_s34b_b79k`. الخيارات: `laion2b_s34b_b79k`، `laion400m_e32`، `openai`
+ - `device` (str): الجهاز للتشغيل. القيمة الافتراضية: `cpu`. الخيارات: `cpu`، `cuda`
+
+ **متغيرات البيئة:**
+ - `EMBEDDINGS_OPENCLIP_MODEL_NAME`: `model_name`
+ - `EMBEDDINGS_OPENCLIP_CHECKPOINT`: `checkpoint`
+ - `EMBEDDINGS_OPENCLIP_DEVICE`: `device`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.text2vec.types import Text2VecProviderSpec
+
+ embedding_model: Text2VecProviderSpec = {
+ "provider": "text2vec",
+ "config": {
+ "model_name": "shibing624/text2vec-base-multilingual"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `model_name` (str): اسم نموذج Text2Vec من HuggingFace. القيمة الافتراضية: `shibing624/text2vec-base-chinese`. الخيارات: `shibing624/text2vec-base-multilingual`، `shibing624/text2vec-base-chinese`
+
+ **متغيرات البيئة:**
+ - `EMBEDDINGS_TEXT2VEC_MODEL_NAME`: `model_name`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.roboflow.types import RoboflowProviderSpec
+
+ embedding_model: RoboflowProviderSpec = {
+ "provider": "roboflow",
+ "config": {
+ "api_key": "your-api-key",
+ "api_url": "https://infer.roboflow.com"
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `api_key` (str): مفتاح API لـ Roboflow. القيمة الافتراضية: `""` (سلسلة فارغة)
+ - `api_url` (str): عنوان URL لـ API الاستدلالي لـ Roboflow. القيمة الافتراضية: `https://infer.roboflow.com`
+
+ **متغيرات البيئة:**
+ - `ROBOFLOW_API_KEY` أو `EMBEDDINGS_ROBOFLOW_API_KEY`: `api_key`
+ - `ROBOFLOW_API_URL` أو `EMBEDDINGS_ROBOFLOW_API_URL`: `api_url`
+
+
+
+ ```python main.py
+ from crewai.rag.embeddings.providers.ibm.types import WatsonXProviderSpec
+
+ embedding_model: WatsonXProviderSpec = {
+ "provider": "watsonx",
+ "config": {
+ "model_id": "ibm/slate-125m-english-rtrvr",
+ "url": "https://us-south.ml.cloud.ibm.com",
+ "api_key": "your-api-key",
+ "project_id": "your-project-id",
+ "batch_size": 100,
+ "concurrency_limit": 10,
+ "persistent_connection": True
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `model_id` (str): معرّف نموذج WatsonX
+ - `url` (str): نقطة نهاية API لـ WatsonX
+ - `api_key` (str): مفتاح API لـ IBM Cloud
+ - `project_id` (str): معرّف مشروع WatsonX
+ - `space_id` (str): معرّف مساحة WatsonX (بديل لـ project_id)
+ - `batch_size` (int): حجم الدفعة للتضمينات. القيمة الافتراضية: `100`
+ - `concurrency_limit` (int): الحد الأقصى للطلبات المتزامنة. القيمة الافتراضية: `10`
+ - `persistent_connection` (bool): استخدام اتصالات مستمرة. القيمة الافتراضية: `True`
+ - بالإضافة إلى أكثر من 20 خيار مصادقة وإعداد إضافي
+
+ **متغيرات البيئة:**
+ - `WATSONX_API_KEY` أو `EMBEDDINGS_WATSONX_API_KEY`: `api_key`
+ - `WATSONX_URL` أو `EMBEDDINGS_WATSONX_URL`: `url`
+ - `WATSONX_PROJECT_ID` أو `EMBEDDINGS_WATSONX_PROJECT_ID`: `project_id`
+ - `EMBEDDINGS_WATSONX_MODEL_ID`: `model_id`
+ - `EMBEDDINGS_WATSONX_SPACE_ID`: `space_id`
+ - `EMBEDDINGS_WATSONX_BATCH_SIZE`: `batch_size`
+ - `EMBEDDINGS_WATSONX_CONCURRENCY_LIMIT`: `concurrency_limit`
+ - `EMBEDDINGS_WATSONX_PERSISTENT_CONNECTION`: `persistent_connection`
+
+
+
+ ```python main.py
+ from crewai.rag.core.base_embeddings_callable import EmbeddingFunction
+ from crewai.rag.embeddings.providers.custom.types import CustomProviderSpec
+
+ class MyEmbeddingFunction(EmbeddingFunction):
+ def __call__(self, input):
+ # Your custom embedding logic
+ return embeddings
+
+ embedding_model: CustomProviderSpec = {
+ "provider": "custom",
+ "config": {
+ "embedding_callable": MyEmbeddingFunction
+ }
+ }
+ ```
+
+ **خيارات الإعداد:**
+ - `embedding_callable` (type[EmbeddingFunction]): فئة دالة تضمين مخصصة
+
+ **ملاحظة:** يجب أن تنفّذ دوال التضمين المخصصة بروتوكول `EmbeddingFunction` المحدد في `crewai.rag.core.base_embeddings_callable`. يجب أن تقبل طريقة `__call__` بيانات الإدخال وتعيد التضمينات كقائمة من مصفوفات numpy (أو تنسيق متوافق سيتم تطبيعه). يتم تطبيع التضمينات المُعادة والتحقق منها تلقائياً.
+
+
+
+### ملاحظات
+- جميع حقول الإعداد اختيارية ما لم يُذكر أنها **مطلوبة**
+- يمكن عادة تقديم مفاتيح API عبر متغيرات البيئة بدلاً من الإعداد
+- تُعرض القيم الافتراضية حيثما ينطبق ذلك
+
+
+## الخلاصة
+توفر `RagTool` طريقة قوية لإنشاء واستعلام قواعد المعرفة من مصادر بيانات متنوعة. من خلال الاستفادة من التوليد المعزز بالاسترجاع، تمكّن الوكلاء من الوصول إلى المعلومات ذات الصلة واسترجاعها بكفاءة، مما يعزز قدرتهم على تقديم استجابات دقيقة ومناسبة للسياق.
diff --git a/docs/v1.15.1/ar/tools/ai-ml/visiontool.mdx b/docs/v1.15.1/ar/tools/ai-ml/visiontool.mdx
new file mode 100644
index 000000000..ecd09a6a3
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/ai-ml/visiontool.mdx
@@ -0,0 +1,50 @@
+---
+title: أداة الرؤية
+description: أداة `VisionTool` مصممة لاستخراج النص من الصور.
+icon: eye
+mode: "wide"
+---
+
+# `VisionTool`
+
+## الوصف
+
+تُستخدم هذه الأداة لاستخراج النص من الصور. عند تمريرها إلى الوكيل، ستستخرج النص من الصورة ثم تستخدمه لتوليد استجابة أو تقرير أو أي مخرج آخر.
+يجب تمرير عنوان URL أو مسار الصورة إلى الوكيل.
+
+## التثبيت
+
+ثبّت حزمة crewai_tools
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## الاستخدام
+
+لاستخدام VisionTool، يجب تعيين مفتاح API الخاص بـ OpenAI في متغير البيئة `OPENAI_API_KEY`.
+
+```python Code
+from crewai_tools import VisionTool
+
+vision_tool = VisionTool()
+
+@agent
+def researcher(self) -> Agent:
+ '''
+ This agent uses the VisionTool to extract text from images.
+ '''
+ return Agent(
+ config=self.agents_config["researcher"],
+ allow_delegation=False,
+ tools=[vision_tool]
+ )
+```
+
+## المعاملات
+
+تتطلب VisionTool المعاملات التالية:
+
+| المعامل | النوع | الوصف |
+| :----------------- | :------- | :------------------------------------------------------------------------------- |
+| **image_path_url** | `string` | **إلزامي**. مسار ملف الصورة المراد استخراج النص منها. |
diff --git a/docs/v1.15.1/ar/tools/automation/apifyactorstool.mdx b/docs/v1.15.1/ar/tools/automation/apifyactorstool.mdx
new file mode 100644
index 000000000..77c8c38c4
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/automation/apifyactorstool.mdx
@@ -0,0 +1,99 @@
+---
+title: Apify Actors
+description: "تتيح لك `ApifyActorsTool` استدعاء Apify Actors لتوفير إمكانيات تجريف الويب والزحف واستخراج البيانات وأتمتة الويب لسير عمل CrewAI."
+icon: "); -webkit-mask-image: url('https://upload.wikimedia.org/wikipedia/commons/a/ae/Apify.svg');/*"
+mode: "wide"
+---
+
+# `ApifyActorsTool`
+
+دمج [Apify Actors](https://apify.com/actors) في سير عمل CrewAI الخاص بك.
+
+## الوصف
+
+تربط `ApifyActorsTool` بين [Apify Actors](https://apify.com/actors)، وهي برامج سحابية لتجريف الويب والأتمتة، وسير عمل CrewAI الخاص بك.
+استخدم أياً من أكثر من 4,000 Actor على [متجر Apify](https://apify.com/store) لحالات استخدام مثل استخراج البيانات من وسائل التواصل الاجتماعي ومحركات البحث والخرائط الإلكترونية ومواقع التجارة الإلكترونية وبوابات السفر أو المواقع العامة.
+
+للتفاصيل، راجع [تكامل Apify CrewAI](https://docs.apify.com/platform/integrations/crewai) في وثائق Apify.
+
+## خطوات البدء
+
+
+
+ ثبّت `crewai[tools]` و`langchain-apify` باستخدام pip: `pip install 'crewai[tools]' langchain-apify`.
+
+
+ سجّل في [وحدة تحكم Apify](https://console.apify.com/) واحصل على [رمز API الخاص بك](https://console.apify.com/settings/integrations).
+
+
+ عيّن رمز API لـ Apify كمتغير بيئة `APIFY_API_TOKEN` لتمكين وظائف الأداة.
+
+
+
+## مثال على الاستخدام
+
+استخدم `ApifyActorsTool` يدوياً لتشغيل [RAG Web Browser Actor](https://apify.com/apify/rag-web-browser) لإجراء بحث ويب:
+
+```python
+from crewai_tools import ApifyActorsTool
+
+# Initialize the tool with an Apify Actor
+tool = ApifyActorsTool(actor_name="apify/rag-web-browser")
+
+# Run the tool with input parameters
+results = tool.run(run_input={"query": "What is CrewAI?", "maxResults": 5})
+
+# Process the results
+for result in results:
+ print(f"URL: {result['metadata']['url']}")
+ print(f"Content: {result.get('markdown', 'N/A')[:100]}...")
+```
+
+### المخرجات المتوقعة
+
+إليك المخرجات من تشغيل الكود أعلاه:
+
+```text
+URL: https://www.example.com/crewai-intro
+Content: CrewAI is a framework for building AI-powered workflows...
+URL: https://docs.crewai.com/
+Content: Official documentation for CrewAI...
+```
+
+تقوم `ApifyActorsTool` تلقائياً بجلب تعريف Actor ومخطط الإدخال من Apify باستخدام `actor_name` المقدم ثم تبني وصف الأداة ومخطط المعاملات. هذا يعني أنك تحتاج فقط إلى تحديد `actor_name` صالح، والأداة تتعامل مع الباقي عند استخدامها مع الوكلاء - دون الحاجة لتحديد `run_input`. إليك كيفية عمل ذلك:
+
+```python
+from crewai import Agent
+from crewai_tools import ApifyActorsTool
+
+rag_browser = ApifyActorsTool(actor_name="apify/rag-web-browser")
+
+agent = Agent(
+ role="Research Analyst",
+ goal="Find and summarize information about specific topics",
+ backstory="You are an experienced researcher with attention to detail",
+ tools=[rag_browser],
+)
+```
+
+يمكنك تشغيل Actors أخرى من [متجر Apify](https://apify.com/store) ببساطة عن طريق تغيير `actor_name` وعند الاستخدام اليدوي، ضبط `run_input` بناءً على مخطط إدخال Actor.
+
+لمثال على الاستخدام مع الوكلاء، راجع [قالب CrewAI Actor](https://apify.com/templates/python-crewai).
+
+## الإعداد
+
+تتطلب `ApifyActorsTool` المدخلات التالية للعمل:
+
+- **`actor_name`**
+ معرّف Apify Actor المراد تشغيله، مثل `"apify/rag-web-browser"`. تصفح جميع Actors على [متجر Apify](https://apify.com/store).
+- **`run_input`**
+ قاموس من معاملات الإدخال لـ Actor عند تشغيل الأداة يدوياً.
+ - على سبيل المثال، لـ Actor `apify/rag-web-browser`: `{"query": "search term", "maxResults": 5}`
+ - راجع [مخطط إدخال](https://apify.com/apify/rag-web-browser/input-schema) Actor لقائمة معاملات الإدخال.
+
+## الموارد
+
+- **[Apify](https://apify.com/)**: استكشف منصة Apify.
+- **[كيفية بناء وكيل ذكاء اصطناعي على Apify](https://blog.apify.com/how-to-build-an-ai-agent/)** - دليل شامل خطوة بخطوة لإنشاء ونشر وتسويق وكلاء الذكاء الاصطناعي على منصة Apify.
+- **[RAG Web Browser Actor](https://apify.com/apify/rag-web-browser)**: Actor شائع لبحث الويب لنماذج LLM.
+- **[دليل تكامل CrewAI](https://docs.apify.com/platform/integrations/crewai)**: اتبع الدليل الرسمي لتكامل Apify وCrewAI.
diff --git a/docs/v1.15.1/ar/tools/automation/composiotool.mdx b/docs/v1.15.1/ar/tools/automation/composiotool.mdx
new file mode 100644
index 000000000..78e81b556
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/automation/composiotool.mdx
@@ -0,0 +1,88 @@
+---
+title: أداة Composio
+description: يوفر Composio أكثر من 250 أداة جاهزة للإنتاج لوكلاء الذكاء الاصطناعي مع إدارة مصادقة مرنة.
+icon: gear-code
+mode: "wide"
+---
+
+# `ComposioToolSet`
+
+## الوصف
+Composio هو منصة تكامل تتيح لك ربط وكلاء الذكاء الاصطناعي بأكثر من 250 أداة. تشمل الميزات الرئيسية:
+
+- **مصادقة على مستوى المؤسسة**: دعم مدمج لـ OAuth ومفاتيح API وJWT مع تحديث الرموز تلقائياً
+- **مراقبة كاملة**: سجلات استخدام أدوات تفصيلية وطوابع تنفيذ زمنية والمزيد
+
+## التثبيت
+
+لدمج أدوات Composio في مشروعك، اتبع التعليمات أدناه:
+
+```shell
+pip install composio composio-crewai
+pip install crewai
+```
+
+بعد اكتمال التثبيت، عيّن مفتاح API الخاص بك لـ Composio كـ `COMPOSIO_API_KEY`. احصل على مفتاح API من [هنا](https://platform.composio.dev)
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة وتنفيذ إجراء على GitHub:
+
+1. تهيئة Composio مع مزود CrewAI
+
+```python Code
+from composio_crewai import ComposioProvider
+from composio import Composio
+from crewai import Agent, Task, Crew
+
+composio = Composio(provider=ComposioProvider())
+```
+
+2. إنشاء جلسة Composio جديدة واسترجاع الأدوات
+
+```python
+session = composio.create(
+ user_id="your-user-id",
+ toolkits=["gmail", "github"] # optional, default is all toolkits
+)
+tools = session.tools()
+```
+اقرأ المزيد حول الجلسات وإدارة المستخدمين [هنا](https://docs.composio.dev/docs/configuring-sessions)
+
+
+3. مصادقة المستخدمين يدوياً
+
+يقوم Composio بمصادقة المستخدمين تلقائياً أثناء جلسة دردشة الوكيل. ومع ذلك، يمكنك أيضاً مصادقة المستخدم يدوياً عبر استدعاء طريقة `authorize`.
+```python Code
+connection_request = session.authorize("github")
+print(f"Open this URL to authenticate: {connection_request.redirect_url}")
+```
+
+4. تعريف الوكيل
+
+```python Code
+crewai_agent = Agent(
+ role="GitHub Agent",
+ goal="You take action on GitHub using GitHub APIs",
+ backstory="You are AI agent that is responsible for taking actions on GitHub on behalf of users using GitHub APIs",
+ verbose=True,
+ tools=tools,
+ llm= # pass an llm
+)
+```
+
+5. تنفيذ المهمة
+
+```python Code
+task = Task(
+ description="Star a repo composiohq/composio on GitHub",
+ agent=crewai_agent,
+ expected_output="Status of the operation",
+)
+
+crew = Crew(agents=[crewai_agent], tasks=[task])
+
+crew.kickoff()
+```
+
+* يمكن العثور على قائمة أكثر تفصيلاً من الأدوات [هنا](https://docs.composio.dev/toolkits)
diff --git a/docs/v1.15.1/ar/tools/automation/multiontool.mdx b/docs/v1.15.1/ar/tools/automation/multiontool.mdx
new file mode 100644
index 000000000..2d767a1f8
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/automation/multiontool.mdx
@@ -0,0 +1,127 @@
+---
+title: أداة MultiOn
+description: تمكّن `MultiOnTool` وكلاء CrewAI من التنقل والتفاعل مع الويب من خلال تعليمات اللغة الطبيعية.
+icon: globe
+mode: "wide"
+---
+
+## نظرة عامة
+
+صُممت `MultiOnTool` لتغليف قدرات تصفح الويب الخاصة بـ [MultiOn](https://docs.multion.ai/welcome)، مما يمكّن وكلاء CrewAI من التحكم في متصفحات الويب باستخدام تعليمات اللغة الطبيعية. تسهّل هذه الأداة تصفح الويب بسلاسة، مما يجعلها أصلاً أساسياً للمشاريع التي تتطلب تفاعلاً ديناميكياً مع بيانات الويب وأتمتة المهام المستندة إلى الويب.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت حزمة MultiOn:
+
+```shell
+uv add multion
+```
+
+ستحتاج أيضاً إلى تثبيت إضافة متصفح MultiOn وتفعيل استخدام API.
+
+## خطوات البدء
+
+لاستخدام `MultiOnTool` بفعالية، اتبع الخطوات التالية:
+
+1. **تثبيت CrewAI**: تأكد من تثبيت حزمة `crewai[tools]` في بيئة Python.
+2. **تثبيت واستخدام MultiOn**: اتبع [وثائق MultiOn](https://docs.multion.ai/learn/browser-extension) لتثبيت إضافة متصفح MultiOn.
+3. **تفعيل استخدام API**: انقر على إضافة MultiOn في مجلد الإضافات في متصفحك (وليس أيقونة MultiOn العائمة على صفحة الويب) لفتح إعدادات الإضافة. انقر على زر تفعيل API لتمكينه.
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة وتنفيذ مهمة تصفح ويب:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import MultiOnTool
+
+# Initialize the tool
+multion_tool = MultiOnTool(api_key="YOUR_MULTION_API_KEY", local=False)
+
+# Define an agent that uses the tool
+browser_agent = Agent(
+ role="Browser Agent",
+ goal="Control web browsers using natural language",
+ backstory="An expert browsing agent.",
+ tools=[multion_tool],
+ verbose=True,
+)
+
+# Example task to search and summarize news
+browse_task = Task(
+ description="Summarize the top 3 trending AI News headlines",
+ expected_output="A summary of the top 3 trending AI News headlines",
+ agent=browser_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[browser_agent], tasks=[browse_task])
+result = crew.kickoff()
+```
+
+## المعاملات
+
+تقبل `MultiOnTool` المعاملات التالية أثناء التهيئة:
+
+- **api_key**: اختياري. يحدد مفتاح API لـ MultiOn. إذا لم يُقدَّم، سيبحث عن متغير البيئة `MULTION_API_KEY`.
+- **local**: اختياري. عيّنه إلى `True` لتشغيل الوكيل محلياً على متصفحك. تأكد من تثبيت إضافة متصفح MultiOn وتفعيل API. القيمة الافتراضية `False`.
+- **max_steps**: اختياري. يحدد الحد الأقصى لعدد الخطوات التي يمكن لوكيل MultiOn اتخاذها لأمر ما. القيمة الافتراضية `3`.
+
+## الاستخدام
+
+عند استخدام `MultiOnTool`، سيقدم الوكيل تعليمات بلغة طبيعية تترجمها الأداة إلى إجراءات تصفح ويب. تعيد الأداة نتائج جلسة التصفح مع الحالة.
+
+```python Code
+# Example of using the tool with an agent
+browser_agent = Agent(
+ role="Web Browser Agent",
+ goal="Search for and summarize information from the web",
+ backstory="An expert at finding and extracting information from websites.",
+ tools=[multion_tool],
+ verbose=True,
+)
+
+# Create a task for the agent
+search_task = Task(
+ description="Search for the latest AI news on TechCrunch and summarize the top 3 headlines",
+ expected_output="A summary of the top 3 AI news headlines from TechCrunch",
+ agent=browser_agent,
+)
+
+# Run the task
+crew = Crew(agents=[browser_agent], tasks=[search_task])
+result = crew.kickoff()
+```
+
+إذا كانت الحالة المُعادة هي `CONTINUE`، يجب توجيه الوكيل لإعادة إصدار نفس التعليمات لمتابعة التنفيذ.
+
+## تفاصيل التنفيذ
+
+`MultiOnTool` منفذة كفئة فرعية من `BaseTool` في CrewAI. تغلف عميل MultiOn لتوفير قدرات تصفح الويب:
+
+```python Code
+class MultiOnTool(BaseTool):
+ """Tool to wrap MultiOn Browse Capabilities."""
+
+ name: str = "Multion Browse Tool"
+ description: str = """Multion gives the ability for LLMs to control web browsers using natural language instructions.
+ If the status is 'CONTINUE', reissue the same instruction to continue execution
+ """
+
+ # Implementation details...
+
+ def _run(self, cmd: str, *args: Any, **kwargs: Any) -> str:
+ """
+ Run the Multion client with the given command.
+
+ Args:
+ cmd (str): The detailed and specific natural language instruction for web browsing
+ *args (Any): Additional arguments to pass to the Multion client
+ **kwargs (Any): Additional keyword arguments to pass to the Multion client
+ """
+ # Implementation details...
+```
+
+## الخلاصة
+
+توفر `MultiOnTool` طريقة قوية لدمج قدرات تصفح الويب في وكلاء CrewAI. من خلال تمكين الوكلاء من التفاعل مع المواقع عبر تعليمات اللغة الطبيعية، تفتح مجموعة واسعة من الإمكانيات للمهام المستندة إلى الويب، من جمع البيانات والبحث إلى التفاعلات الآلية مع خدمات الويب.
diff --git a/docs/v1.15.1/ar/tools/automation/overview.mdx b/docs/v1.15.1/ar/tools/automation/overview.mdx
new file mode 100644
index 000000000..0d33d5f4e
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/automation/overview.mdx
@@ -0,0 +1,60 @@
+---
+title: "نظرة عامة"
+description: "أتمتة سير العمل والتكامل مع المنصات والخدمات الخارجية"
+icon: "face-smile"
+mode: "wide"
+---
+
+تمكّن هذه الأدوات وكلاءك من أتمتة سير العمل والتكامل مع المنصات الخارجية والاتصال بخدمات الطرف الثالث المتنوعة لتعزيز الوظائف.
+
+## **الأدوات المتاحة**
+
+
+
+ تشغيل Apify Actors لمهام تجريف الويب والأتمتة.
+
+
+
+ التكامل مع مئات التطبيقات والخدمات من خلال Composio.
+
+
+
+ أتمتة تفاعلات المتصفح وسير العمل المستند إلى الويب.
+
+
+
+ عرض إجراءات Zapier كأدوات CrewAI للأتمتة عبر آلاف التطبيقات.
+
+
+
+## **حالات الاستخدام الشائعة**
+
+- **أتمتة سير العمل**: أتمتة المهام والعمليات المتكررة
+- **تكامل API**: الاتصال بواجهات برمجة التطبيقات والخدمات الخارجية
+- **مزامنة البيانات**: مزامنة البيانات بين منصات مختلفة
+- **تنسيق العمليات**: تنسيق سير العمل المعقد متعدد الخطوات
+- **خدمات الطرف الثالث**: الاستفادة من الأدوات والمنصات الخارجية
+
+```python
+from crewai_tools import ApifyActorTool, ComposioTool, MultiOnTool
+
+# Create automation tools
+apify_automation = ApifyActorTool()
+platform_integration = ComposioTool()
+browser_automation = MultiOnTool()
+
+# Add to your agent
+agent = Agent(
+ role="Automation Specialist",
+ tools=[apify_automation, platform_integration, browser_automation],
+ goal="Automate workflows and integrate systems"
+)
+```
+
+## **فوائد التكامل**
+
+- **الكفاءة**: تقليل العمل اليدوي من خلال الأتمتة
+- **قابلية التوسع**: التعامل مع أعباء العمل المتزايدة تلقائياً
+- **الموثوقية**: تنفيذ متسق لسير العمل
+- **الاتصال**: ربط الأنظمة والمنصات المختلفة
+- **الإنتاجية**: التركيز على المهام ذات القيمة العالية بينما تتولى الأتمتة العمل الروتيني
diff --git a/docs/v1.15.1/ar/tools/automation/zapieractionstool.mdx b/docs/v1.15.1/ar/tools/automation/zapieractionstool.mdx
new file mode 100644
index 000000000..a6e6d0774
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/automation/zapieractionstool.mdx
@@ -0,0 +1,59 @@
+---
+title: أداة إجراءات Zapier
+description: يعرض `ZapierActionsAdapter` إجراءات Zapier كأدوات CrewAI للأتمتة.
+icon: bolt
+mode: "wide"
+---
+
+# `ZapierActionsAdapter`
+
+## الوصف
+
+استخدم محول Zapier لسرد واستدعاء إجراءات Zapier كأدوات CrewAI. يمكّن هذا الوكلاء من تشغيل عمليات الأتمتة عبر آلاف التطبيقات.
+
+## التثبيت
+
+هذا المحول مضمّن مع `crewai-tools`. لا يلزم تثبيت إضافي.
+
+## متغيرات البيئة
+
+- `ZAPIER_API_KEY` (مطلوب): مفتاح API لـ Zapier. احصل على واحد من لوحة تحكم Zapier Actions على https://actions.zapier.com/ (أنشئ حساباً، ثم ولّد مفتاح API). يمكنك أيضاً تمرير `zapier_api_key` مباشرة عند إنشاء المحول.
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools.adapters.zapier_adapter import ZapierActionsAdapter
+
+adapter = ZapierActionsAdapter(api_key="your_zapier_api_key")
+tools = adapter.tools()
+
+agent = Agent(
+ role="Automator",
+ goal="Execute Zapier actions",
+ backstory="Automation specialist",
+ tools=tools,
+ verbose=True,
+)
+
+task = Task(
+ description="Create a new Google Sheet and add a row using Zapier actions",
+ expected_output="Confirmation with created resource IDs",
+ agent=agent,
+)
+
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff()
+```
+
+## ملاحظات وحدود
+
+- يسرد المحول الإجراءات المتاحة لمفتاحك وينشئ أغلفة `BaseTool` ديناميكياً.
+- تعامل مع الحقول المطلوبة الخاصة بالإجراء في تعليمات المهمة أو استدعاء الأداة.
+- تعتمد حدود المعدل على خطة Zapier الخاصة بك؛ راجع وثائق Zapier Actions.
+
+## ملاحظات
+
+- يجلب المحول الإجراءات المتاحة وينشئ أغلفة `BaseTool` ديناميكياً.
+
+
diff --git a/docs/v1.15.1/ar/tools/cloud-storage/bedrockkbretriever.mdx b/docs/v1.15.1/ar/tools/cloud-storage/bedrockkbretriever.mdx
new file mode 100644
index 000000000..d46a7a644
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/cloud-storage/bedrockkbretriever.mdx
@@ -0,0 +1,166 @@
+---
+title: 'مسترجع قاعدة معرفة Bedrock'
+description: 'استرجاع المعلومات من قواعد معرفة Amazon Bedrock باستخدام استعلامات اللغة الطبيعية'
+icon: aws
+mode: "wide"
+---
+
+# `BedrockKBRetrieverTool`
+
+تمكّن `BedrockKBRetrieverTool` وكلاء CrewAI من استرجاع المعلومات من قواعد معرفة Amazon Bedrock باستخدام استعلامات اللغة الطبيعية.
+
+## التثبيت
+
+```bash
+uv pip install 'crewai[tools]'
+```
+
+## المتطلبات
+
+- بيانات اعتماد AWS مُعدّة (إما من خلال متغيرات البيئة أو AWS CLI)
+- حزمتا `boto3` و`python-dotenv`
+- الوصول إلى قاعدة معرفة Amazon Bedrock
+
+## الاستخدام
+
+إليك كيفية استخدام الأداة مع وكيل CrewAI:
+
+```python {2, 4-17}
+from crewai import Agent, Task, Crew
+from crewai_tools.aws.bedrock.knowledge_base.retriever_tool import BedrockKBRetrieverTool
+
+# Initialize the tool
+kb_tool = BedrockKBRetrieverTool(
+ knowledge_base_id="your-kb-id",
+ number_of_results=5
+)
+
+# Create a CrewAI agent that uses the tool
+researcher = Agent(
+ role='Knowledge Base Researcher',
+ goal='Find information about company policies',
+ backstory='I am a researcher specialized in retrieving and analyzing company documentation.',
+ tools=[kb_tool],
+ verbose=True
+)
+
+# Create a task for the agent
+research_task = Task(
+ description="Find our company's remote work policy and summarize the key points.",
+ agent=researcher
+)
+
+# Create a crew with the agent
+crew = Crew(
+ agents=[researcher],
+ tasks=[research_task],
+ verbose=2
+)
+
+# Run the crew
+result = crew.kickoff()
+print(result)
+```
+
+## معاملات الأداة
+
+| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
+|:---------|:-----|:---------|:---------|:-------------|
+| **knowledge_base_id** | `str` | نعم | None | المعرّف الفريد لقاعدة المعرفة (0-10 أحرف أبجدية رقمية) |
+| **number_of_results** | `int` | لا | 5 | الحد الأقصى لعدد النتائج المُعادة |
+| **retrieval_configuration** | `dict` | لا | None | إعدادات مخصصة لاستعلام قاعدة المعرفة |
+| **guardrail_configuration** | `dict` | لا | None | إعدادات تصفية المحتوى |
+| **next_token** | `str` | لا | None | رمز لتصفح الصفحات |
+
+## متغيرات البيئة
+
+```bash
+BEDROCK_KB_ID=your-knowledge-base-id # Alternative to passing knowledge_base_id
+AWS_REGION=your-aws-region # Defaults to us-east-1
+AWS_ACCESS_KEY_ID=your-access-key # Required for AWS authentication
+AWS_SECRET_ACCESS_KEY=your-secret-key # Required for AWS authentication
+```
+
+## تنسيق الاستجابة
+
+تعيد الأداة النتائج بتنسيق JSON:
+
+```json
+{
+ "results": [
+ {
+ "content": "Retrieved text content",
+ "content_type": "text",
+ "source_type": "S3",
+ "source_uri": "s3://bucket/document.pdf",
+ "score": 0.95,
+ "metadata": {
+ "additional": "metadata"
+ }
+ }
+ ],
+ "nextToken": "pagination-token",
+ "guardrailAction": "NONE"
+}
+```
+
+## الاستخدام المتقدم
+
+### إعداد استرجاع مخصص
+
+```python
+kb_tool = BedrockKBRetrieverTool(
+ knowledge_base_id="your-kb-id",
+ retrieval_configuration={
+ "vectorSearchConfiguration": {
+ "numberOfResults": 10,
+ "overrideSearchType": "HYBRID"
+ }
+ }
+)
+
+policy_expert = Agent(
+ role='Policy Expert',
+ goal='Analyze company policies in detail',
+ backstory='I am an expert in corporate policy analysis with deep knowledge of regulatory requirements.',
+ tools=[kb_tool]
+)
+```
+
+## مصادر البيانات المدعومة
+
+- Amazon S3
+- Confluence
+- Salesforce
+- SharePoint
+- صفحات الويب
+- مواقع مستندات مخصصة
+- Amazon Kendra
+- قواعد بيانات SQL
+
+## حالات الاستخدام
+
+### تكامل المعرفة المؤسسية
+- تمكين وكلاء CrewAI من الوصول إلى المعرفة الخاصة بمؤسستك دون كشف البيانات الحساسة
+- السماح للوكلاء باتخاذ قرارات بناءً على سياسات وإجراءات ووثائق شركتك المحددة
+- إنشاء وكلاء يمكنهم الإجابة على الأسئلة بناءً على وثائقك الداخلية مع الحفاظ على أمان البيانات
+
+### المعرفة المتخصصة بالمجال
+- ربط وكلاء CrewAI بقواعد معرفة متخصصة بالمجال (قانونية، طبية، تقنية) دون إعادة تدريب النماذج
+- الاستفادة من مستودعات المعرفة الموجودة المُدارة بالفعل في بيئة AWS
+- الجمع بين تفكير CrewAI والمعلومات المتخصصة من قواعد معرفتك
+
+### اتخاذ القرارات المبنية على البيانات
+- تأسيس استجابات وكلاء CrewAI على بيانات شركتك الفعلية بدلاً من المعرفة العامة
+- ضمان تقديم الوكلاء لتوصيات بناءً على سياق أعمالك ووثائقك المحددة
+- تقليل التوهمات من خلال استرجاع معلومات واقعية من قواعد معرفتك
+
+### وصول معلوماتي قابل للتوسع
+- الوصول إلى تيرابايت من المعرفة المؤسسية دون تضمينها كلها في نماذجك
+- الاستعلام الديناميكي عن المعلومات ذات الصلة فقط اللازمة لمهام محددة
+- الاستفادة من البنية التحتية القابلة للتوسع من AWS للتعامل مع قواعد معرفة كبيرة بكفاءة
+
+### الامتثال والحوكمة
+- ضمان تقديم وكلاء CrewAI لاستجابات تتوافق مع وثائق شركتك المعتمدة
+- إنشاء مسارات قابلة للتدقيق لمصادر المعلومات المستخدمة من قبل وكلائك
+- الحفاظ على التحكم في مصادر المعلومات التي يمكن لوكلائك الوصول إليها
diff --git a/docs/v1.15.1/ar/tools/cloud-storage/overview.mdx b/docs/v1.15.1/ar/tools/cloud-storage/overview.mdx
new file mode 100644
index 000000000..8c905b51e
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/cloud-storage/overview.mdx
@@ -0,0 +1,51 @@
+---
+title: "نظرة عامة"
+description: "التفاعل مع الخدمات السحابية وأنظمة التخزين ومنصات الذكاء الاصطناعي السحابية"
+icon: "face-smile"
+mode: "wide"
+---
+
+تمكّن هذه الأدوات وكلاءك من التفاعل مع الخدمات السحابية والوصول إلى التخزين السحابي والاستفادة من منصات الذكاء الاصطناعي السحابية لعمليات قابلة للتوسع.
+
+## **الأدوات المتاحة**
+
+
+
+ قراءة الملفات والبيانات من حاويات Amazon S3.
+
+
+
+ كتابة وتحميل الملفات إلى تخزين Amazon S3.
+
+
+
+ استدعاء وكلاء Amazon Bedrock للمهام المدعومة بالذكاء الاصطناعي.
+
+
+
+ استرجاع المعلومات من قواعد معرفة Amazon Bedrock.
+
+
+
+## **حالات الاستخدام الشائعة**
+
+- **تخزين الملفات**: تخزين واسترجاع الملفات من أنظمة التخزين السحابية
+- **نسخ البيانات احتياطياً**: نسخ البيانات المهمة احتياطياً إلى التخزين السحابي
+- **خدمات الذكاء الاصطناعي**: الوصول إلى نماذج وخدمات الذكاء الاصطناعي السحابية
+- **استرجاع المعرفة**: الاستعلام عن قواعد المعرفة المستضافة سحابياً
+- **عمليات قابلة للتوسع**: الاستفادة من البنية التحتية السحابية للمعالجة
+
+```python
+from crewai_tools import S3ReaderTool, S3WriterTool, BedrockInvokeAgentTool
+
+# Create cloud tools
+s3_reader = S3ReaderTool()
+s3_writer = S3WriterTool()
+bedrock_agent = BedrockInvokeAgentTool()
+
+# Add to your agent
+agent = Agent(
+ role="Cloud Operations Specialist",
+ tools=[s3_reader, s3_writer, bedrock_agent],
+ goal="Manage cloud resources and AI services"
+)
diff --git a/docs/v1.15.1/ar/tools/cloud-storage/s3readertool.mdx b/docs/v1.15.1/ar/tools/cloud-storage/s3readertool.mdx
new file mode 100644
index 000000000..763e56074
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/cloud-storage/s3readertool.mdx
@@ -0,0 +1,145 @@
+---
+title: أداة قراءة S3
+description: تمكّن `S3ReaderTool` وكلاء CrewAI من قراءة الملفات من حاويات Amazon S3.
+icon: aws
+mode: "wide"
+---
+
+# `S3ReaderTool`
+
+## الوصف
+
+صُممت `S3ReaderTool` لقراءة الملفات من حاويات Amazon S3. تتيح هذه الأداة لوكلاء CrewAI الوصول إلى المحتوى المخزن في S3 واسترجاعه، مما يجعلها مثالية لسير العمل الذي يتطلب قراءة البيانات أو ملفات الإعداد أو أي محتوى آخر مخزن في تخزين AWS S3.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت التبعيات المطلوبة:
+
+```shell
+uv add boto3
+```
+
+## خطوات البدء
+
+لاستخدام `S3ReaderTool` بفعالية، اتبع الخطوات التالية:
+
+1. **تثبيت التبعيات**: ثبّت الحزم المطلوبة باستخدام الأمر أعلاه.
+2. **إعداد بيانات اعتماد AWS**: عيّن بيانات اعتماد AWS كمتغيرات بيئة.
+3. **تهيئة الأداة**: أنشئ مثيلاً من الأداة.
+4. **تحديد مسار S3**: قدّم مسار S3 للملف المراد قراءته.
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `S3ReaderTool` لقراءة ملف من حاوية S3:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools.aws.s3 import S3ReaderTool
+
+# Initialize the tool
+s3_reader_tool = S3ReaderTool()
+
+# Define an agent that uses the tool
+file_reader_agent = Agent(
+ role="File Reader",
+ goal="Read files from S3 buckets",
+ backstory="An expert in retrieving and processing files from cloud storage.",
+ tools=[s3_reader_tool],
+ verbose=True,
+)
+
+# Example task to read a configuration file
+read_task = Task(
+ description="Read the configuration file from {my_bucket} and summarize its contents.",
+ expected_output="A summary of the configuration file contents.",
+ agent=file_reader_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[file_reader_agent], tasks=[read_task])
+result = crew.kickoff(inputs={"my_bucket": "s3://my-bucket/config/app-config.json"})
+```
+
+## المعاملات
+
+تقبل `S3ReaderTool` المعامل التالي عند استخدامها من قبل وكيل:
+
+- **file_path**: مطلوب. مسار ملف S3 بتنسيق `s3://bucket-name/file-name`.
+
+## بيانات اعتماد AWS
+
+تتطلب الأداة بيانات اعتماد AWS للوصول إلى حاويات S3. يمكنك إعداد هذه البيانات باستخدام متغيرات البيئة:
+
+- **CREW_AWS_REGION**: منطقة AWS حيث تقع حاوية S3. القيمة الافتراضية `us-east-1`.
+- **CREW_AWS_ACCESS_KEY_ID**: معرّف مفتاح الوصول لـ AWS.
+- **CREW_AWS_SEC_ACCESS_KEY**: مفتاح الوصول السري لـ AWS.
+
+## الاستخدام
+
+عند استخدام `S3ReaderTool` مع وكيل، سيحتاج الوكيل لتقديم مسار ملف S3:
+
+```python Code
+# Example of using the tool with an agent
+file_reader_agent = Agent(
+ role="File Reader",
+ goal="Read files from S3 buckets",
+ backstory="An expert in retrieving and processing files from cloud storage.",
+ tools=[s3_reader_tool],
+ verbose=True,
+)
+
+# Create a task for the agent to read a specific file
+read_config_task = Task(
+ description="Read the application configuration file from {my_bucket} and extract the database connection settings.",
+ expected_output="The database connection settings from the configuration file.",
+ agent=file_reader_agent,
+)
+
+# Run the task
+crew = Crew(agents=[file_reader_agent], tasks=[read_config_task])
+result = crew.kickoff(inputs={"my_bucket": "s3://my-bucket/config/app-config.json"})
+```
+
+## معالجة الأخطاء
+
+تتضمن `S3ReaderTool` معالجة أخطاء لمشكلات S3 الشائعة:
+
+- تنسيق مسار S3 غير صالح
+- ملفات مفقودة أو غير قابلة للوصول
+- مشكلات الأذونات
+- مشكلات بيانات اعتماد AWS
+
+عند حدوث خطأ، ستعيد الأداة رسالة خطأ تتضمن تفاصيل حول المشكلة.
+
+## تفاصيل التنفيذ
+
+تستخدم `S3ReaderTool` حزمة AWS SDK لـ Python (boto3) للتفاعل مع S3:
+
+```python Code
+class S3ReaderTool(BaseTool):
+ name: str = "S3 Reader Tool"
+ description: str = "Reads a file from Amazon S3 given an S3 file path"
+
+ def _run(self, file_path: str) -> str:
+ try:
+ bucket_name, object_key = self._parse_s3_path(file_path)
+
+ s3 = boto3.client(
+ 's3',
+ region_name=os.getenv('CREW_AWS_REGION', 'us-east-1'),
+ aws_access_key_id=os.getenv('CREW_AWS_ACCESS_KEY_ID'),
+ aws_secret_access_key=os.getenv('CREW_AWS_SEC_ACCESS_KEY')
+ )
+
+ # Read file content from S3
+ response = s3.get_object(Bucket=bucket_name, Key=object_key)
+ file_content = response['Body'].read().decode('utf-8')
+
+ return file_content
+ except ClientError as e:
+ return f"Error reading file from S3: {str(e)}"
+```
+
+## الخلاصة
+
+توفر `S3ReaderTool` طريقة مباشرة لقراءة الملفات من حاويات Amazon S3. من خلال تمكين الوكلاء من الوصول إلى المحتوى المخزن في S3، تسهّل سير العمل الذي يتطلب وصولاً سحابياً للملفات. هذه الأداة مفيدة بشكل خاص لمعالجة البيانات وإدارة الإعدادات وأي مهمة تتضمن استرجاع المعلومات من تخزين AWS S3.
diff --git a/docs/v1.15.1/ar/tools/cloud-storage/s3writertool.mdx b/docs/v1.15.1/ar/tools/cloud-storage/s3writertool.mdx
new file mode 100644
index 000000000..68fecc5dd
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/cloud-storage/s3writertool.mdx
@@ -0,0 +1,151 @@
+---
+title: أداة كتابة S3
+description: تمكّن `S3WriterTool` وكلاء CrewAI من كتابة المحتوى إلى ملفات في حاويات Amazon S3.
+icon: aws
+mode: "wide"
+---
+
+# `S3WriterTool`
+
+## الوصف
+
+صُممت `S3WriterTool` لكتابة المحتوى إلى ملفات في حاويات Amazon S3. تتيح هذه الأداة لوكلاء CrewAI إنشاء أو تحديث الملفات في S3، مما يجعلها مثالية لسير العمل الذي يتطلب تخزين البيانات أو حفظ ملفات الإعداد أو حفظ أي محتوى آخر في تخزين AWS S3.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت التبعيات المطلوبة:
+
+```shell
+uv add boto3
+```
+
+## خطوات البدء
+
+لاستخدام `S3WriterTool` بفعالية، اتبع الخطوات التالية:
+
+1. **تثبيت التبعيات**: ثبّت الحزم المطلوبة باستخدام الأمر أعلاه.
+2. **إعداد بيانات اعتماد AWS**: عيّن بيانات اعتماد AWS كمتغيرات بيئة.
+3. **تهيئة الأداة**: أنشئ مثيلاً من الأداة.
+4. **تحديد مسار S3 والمحتوى**: قدّم مسار S3 حيث تريد كتابة الملف والمحتوى المراد كتابته.
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `S3WriterTool` لكتابة محتوى إلى ملف في حاوية S3:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools.aws.s3 import S3WriterTool
+
+# Initialize the tool
+s3_writer_tool = S3WriterTool()
+
+# Define an agent that uses the tool
+file_writer_agent = Agent(
+ role="File Writer",
+ goal="Write content to files in S3 buckets",
+ backstory="An expert in storing and managing files in cloud storage.",
+ tools=[s3_writer_tool],
+ verbose=True,
+)
+
+# Example task to write a report
+write_task = Task(
+ description="Generate a summary report of the quarterly sales data and save it to {my_bucket}.",
+ expected_output="Confirmation that the report was successfully saved to S3.",
+ agent=file_writer_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[file_writer_agent], tasks=[write_task])
+result = crew.kickoff(inputs={"my_bucket": "s3://my-bucket/reports/quarterly-summary.txt"})
+```
+
+## المعاملات
+
+تقبل `S3WriterTool` المعاملات التالية عند استخدامها من قبل وكيل:
+
+- **file_path**: مطلوب. مسار ملف S3 بتنسيق `s3://bucket-name/file-name`.
+- **content**: مطلوب. المحتوى المراد كتابته في الملف.
+
+## بيانات اعتماد AWS
+
+تتطلب الأداة بيانات اعتماد AWS للوصول إلى حاويات S3. يمكنك إعداد هذه البيانات باستخدام متغيرات البيئة:
+
+- **CREW_AWS_REGION**: منطقة AWS حيث تقع حاوية S3. القيمة الافتراضية `us-east-1`.
+- **CREW_AWS_ACCESS_KEY_ID**: معرّف مفتاح الوصول لـ AWS.
+- **CREW_AWS_SEC_ACCESS_KEY**: مفتاح الوصول السري لـ AWS.
+
+## الاستخدام
+
+عند استخدام `S3WriterTool` مع وكيل، سيحتاج الوكيل لتقديم كل من مسار ملف S3 والمحتوى المراد كتابته:
+
+```python Code
+# Example of using the tool with an agent
+file_writer_agent = Agent(
+ role="File Writer",
+ goal="Write content to files in S3 buckets",
+ backstory="An expert in storing and managing files in cloud storage.",
+ tools=[s3_writer_tool],
+ verbose=True,
+)
+
+# Create a task for the agent to write a specific file
+write_config_task = Task(
+ description="""
+ Create a configuration file with the following database settings:
+ - host: db.example.com
+ - port: 5432
+ - username: app_user
+ - password: secure_password
+
+ Save this configuration as JSON to {my_bucket}.
+ """,
+ expected_output="Confirmation that the configuration file was successfully saved to S3.",
+ agent=file_writer_agent,
+)
+
+# Run the task
+crew = Crew(agents=[file_writer_agent], tasks=[write_config_task])
+result = crew.kickoff(inputs={"my_bucket": "s3://my-bucket/config/db-config.json"})
+```
+
+## معالجة الأخطاء
+
+تتضمن `S3WriterTool` معالجة أخطاء لمشكلات S3 الشائعة:
+
+- تنسيق مسار S3 غير صالح
+- مشكلات الأذونات (مثل عدم وجود صلاحية كتابة للحاوية)
+- مشكلات بيانات اعتماد AWS
+- الحاوية غير موجودة
+
+عند حدوث خطأ، ستعيد الأداة رسالة خطأ تتضمن تفاصيل حول المشكلة.
+
+## تفاصيل التنفيذ
+
+تستخدم `S3WriterTool` حزمة AWS SDK لـ Python (boto3) للتفاعل مع S3:
+
+```python Code
+class S3WriterTool(BaseTool):
+ name: str = "S3 Writer Tool"
+ description: str = "Writes content to a file in Amazon S3 given an S3 file path"
+
+ def _run(self, file_path: str, content: str) -> str:
+ try:
+ bucket_name, object_key = self._parse_s3_path(file_path)
+
+ s3 = boto3.client(
+ 's3',
+ region_name=os.getenv('CREW_AWS_REGION', 'us-east-1'),
+ aws_access_key_id=os.getenv('CREW_AWS_ACCESS_KEY_ID'),
+ aws_secret_access_key=os.getenv('CREW_AWS_SEC_ACCESS_KEY')
+ )
+
+ s3.put_object(Bucket=bucket_name, Key=object_key, Body=content.encode('utf-8'))
+ return f"Successfully wrote content to {file_path}"
+ except ClientError as e:
+ return f"Error writing file to S3: {str(e)}"
+```
+
+## الخلاصة
+
+توفر `S3WriterTool` طريقة مباشرة لكتابة المحتوى إلى ملفات في حاويات Amazon S3. من خلال تمكين الوكلاء من إنشاء وتحديث الملفات في S3، تسهّل سير العمل الذي يتطلب تخزين ملفات سحابي. هذه الأداة مفيدة بشكل خاص لحفظ البيانات وإدارة الإعدادات وتوليد التقارير وأي مهمة تتضمن تخزين المعلومات في تخزين AWS S3.
diff --git a/docs/v1.15.1/ar/tools/database-data/mongodbvectorsearchtool.mdx b/docs/v1.15.1/ar/tools/database-data/mongodbvectorsearchtool.mdx
new file mode 100644
index 000000000..cbff43b11
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/mongodbvectorsearchtool.mdx
@@ -0,0 +1,167 @@
+---
+title: أداة البحث المتجهي في MongoDB
+description: تقوم `MongoDBVectorSearchTool` بإجراء بحث متجهي على MongoDB Atlas مع أدوات مساعدة اختيارية لإنشاء الفهارس.
+icon: "leaf"
+mode: "wide"
+---
+
+# `MongoDBVectorSearchTool`
+
+## الوصف
+
+تنفيذ استعلامات التشابه المتجهي على مجموعات MongoDB Atlas. تدعم أدوات مساعدة لإنشاء الفهارس وإدراج النصوص المضمنة بكميات كبيرة.
+
+يدعم MongoDB Atlas البحث المتجهي الأصلي. اعرف المزيد:
+https://www.mongodb.com/docs/atlas/atlas-vector-search/vector-search-overview/
+
+## التثبيت
+
+قم بالتثبيت مع إضافة MongoDB:
+
+```shell
+pip install crewai-tools[mongodb]
+```
+
+أو
+
+```shell
+uv add crewai-tools --extra mongodb
+```
+
+## المعاملات
+
+### التهيئة
+
+- `connection_string` (str, مطلوب)
+- `database_name` (str, مطلوب)
+- `collection_name` (str, مطلوب)
+- `vector_index_name` (str, الافتراضي `vector_index`)
+- `text_key` (str, الافتراضي `text`)
+- `embedding_key` (str, الافتراضي `embedding`)
+- `dimensions` (int, الافتراضي `1536`)
+
+### معاملات التشغيل
+
+- `query` (str, مطلوب): استعلام بلغة طبيعية لتضمينه والبحث عنه.
+
+## بداية سريعة
+
+```python Code
+from crewai_tools import MongoDBVectorSearchTool
+
+tool = MongoDBVectorSearchTool(
+ connection_string="mongodb+srv://...",
+ database_name="mydb",
+ collection_name="docs",
+)
+
+print(tool.run(query="how to create vector index"))
+```
+
+## أدوات مساعدة لإنشاء الفهارس
+
+استخدم `create_vector_search_index(...)` لإنشاء فهرس بحث متجهي في Atlas بالأبعاد والتشابه الصحيحين.
+
+## المشكلات الشائعة
+
+- فشل المصادقة: تأكد من أن قائمة الوصول إلى عناوين IP في Atlas تسمح بخادمك وأن سلسلة الاتصال تتضمن بيانات الاعتماد.
+- الفهرس غير موجود: أنشئ الفهرس المتجهي أولاً؛ يجب أن يتطابق الاسم مع `vector_index_name`.
+- عدم تطابق الأبعاد: قم بمحاذاة أبعاد نموذج التضمين مع `dimensions`.
+
+## أمثلة إضافية
+
+### التهيئة الأساسية
+
+```python Code
+from crewai_tools import MongoDBVectorSearchTool
+
+tool = MongoDBVectorSearchTool(
+ database_name="example_database",
+ collection_name="example_collection",
+ connection_string="",
+)
+```
+
+### تكوين استعلام مخصص
+
+```python Code
+from crewai_tools import MongoDBVectorSearchConfig, MongoDBVectorSearchTool
+
+query_config = MongoDBVectorSearchConfig(limit=10, oversampling_factor=2)
+tool = MongoDBVectorSearchTool(
+ database_name="example_database",
+ collection_name="example_collection",
+ connection_string="",
+ query_config=query_config,
+ vector_index_name="my_vector_index",
+)
+
+rag_agent = Agent(
+ name="rag_agent",
+ role="You are a helpful assistant that can answer questions with the help of the MongoDBVectorSearchTool.",
+ goal="...",
+ backstory="...",
+ tools=[tool],
+)
+```
+
+### تحميل قاعدة البيانات مسبقاً وإنشاء الفهرس
+
+```python Code
+import os
+from crewai_tools import MongoDBVectorSearchTool
+
+tool = MongoDBVectorSearchTool(
+ database_name="example_database",
+ collection_name="example_collection",
+ connection_string="",
+)
+
+# Load text content from a local folder and add to MongoDB
+texts = []
+for fname in os.listdir("knowledge"):
+ path = os.path.join("knowledge", fname)
+ if os.path.isfile(path):
+ with open(path, "r", encoding="utf-8") as f:
+ texts.append(f.read())
+
+tool.add_texts(texts)
+
+# Create the Atlas Vector Search index (e.g., 3072 dims for text-embedding-3-large)
+tool.create_vector_search_index(dimensions=3072)
+```
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import MongoDBVectorSearchTool
+
+tool = MongoDBVectorSearchTool(
+ connection_string="mongodb+srv://...",
+ database_name="mydb",
+ collection_name="docs",
+)
+
+agent = Agent(
+ role="RAG Agent",
+ goal="Answer using MongoDB vector search",
+ backstory="Knowledge retrieval specialist",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="Find relevant content for 'indexing guidance'",
+ expected_output="A concise answer citing the most relevant matches",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+)
+
+result = crew.kickoff()
+```
diff --git a/docs/v1.15.1/ar/tools/database-data/mysqltool.mdx b/docs/v1.15.1/ar/tools/database-data/mysqltool.mdx
new file mode 100644
index 000000000..4f8bb050c
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/mysqltool.mdx
@@ -0,0 +1,67 @@
+---
+title: بحث RAG في MySQL
+description: أداة `MySQLSearchTool` مصممة للبحث في قواعد بيانات MySQL وإرجاع النتائج الأكثر صلة.
+icon: database
+mode: "wide"
+---
+
+## نظرة عامة
+
+هذه الأداة مصممة لتسهيل عمليات البحث الدلالي داخل جداول قواعد بيانات MySQL. من خلال الاستفادة من تقنية RAG (الاسترجاع والتوليد)، توفر أداة MySQLSearchTool للمستخدمين وسيلة فعالة للاستعلام عن محتوى جداول قواعد البيانات، مصممة خصيصاً لقواعد بيانات MySQL. تبسط عملية العثور على البيانات ذات الصلة من خلال استعلامات البحث الدلالي، مما يجعلها مورداً لا يُقدَّر بثمن للمستخدمين الذين يحتاجون إلى إجراء استعلامات متقدمة على مجموعات بيانات واسعة داخل قاعدة بيانات MySQL.
+
+## التثبيت
+
+لتثبيت حزمة `crewai_tools` واستخدام MySQLSearchTool، نفّذ الأمر التالي في الطرفية:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+فيما يلي مثال يوضح كيفية استخدام MySQLSearchTool لإجراء بحث دلالي على جدول داخل قاعدة بيانات MySQL:
+
+```python Code
+from crewai_tools import MySQLSearchTool
+
+# Initialize the tool with the database URI and the target table name
+tool = MySQLSearchTool(
+ db_uri='mysql://user:password@localhost:3306/mydatabase',
+ table_name='employees'
+)
+```
+
+## المعاملات
+
+تتطلب أداة MySQLSearchTool المعاملات التالية لتشغيلها:
+
+- `db_uri`: سلسلة نصية تمثل عنوان URI لقاعدة بيانات MySQL المراد الاستعلام عنها. هذا المعامل إلزامي ويجب أن يتضمن تفاصيل المصادقة اللازمة وموقع قاعدة البيانات.
+- `table_name`: سلسلة نصية تحدد اسم الجدول داخل قاعدة البيانات الذي سيتم إجراء البحث الدلالي عليه. هذا المعامل إلزامي.
+
+## النموذج والتضمينات المخصصة
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+tool = MySQLSearchTool(
+ config=dict(
+ llm=dict(
+ provider="ollama", # or google, openai, anthropic, llama2, ...
+ config=dict(
+ model="llama2",
+ # temperature=0.5,
+ # top_p=1,
+ # stream=true,
+ ),
+ ),
+ embedder=dict(
+ provider="google-generativeai",
+ config=dict(
+ model_name="gemini-embedding-001",
+ task_type="RETRIEVAL_DOCUMENT",
+ # title="Embeddings",
+ ),
+ ),
+ )
+)
+```
diff --git a/docs/v1.15.1/ar/tools/database-data/nl2sqltool.mdx b/docs/v1.15.1/ar/tools/database-data/nl2sqltool.mdx
new file mode 100644
index 000000000..6ddc6e058
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/nl2sqltool.mdx
@@ -0,0 +1,170 @@
+---
+title: أداة NL2SQL
+description: أداة `NL2SQLTool` مصممة لتحويل اللغة الطبيعية إلى استعلامات SQL.
+icon: language
+mode: "wide"
+---
+
+## نظرة عامة
+
+تُستخدم هذه الأداة لتحويل اللغة الطبيعية إلى استعلامات SQL. عند تمريرها إلى الوكيل، ستقوم بتوليد الاستعلامات ثم استخدامها للتفاعل مع قاعدة البيانات.
+
+يتيح ذلك سير عمل متعددة مثل أن يقوم وكيل بالوصول إلى قاعدة البيانات واسترجاع المعلومات بناءً على الهدف ثم استخدام تلك المعلومات لتوليد استجابة أو تقرير أو أي مخرجات أخرى. بالإضافة إلى ذلك، يوفر القدرة للوكيل على تحديث قاعدة البيانات بناءً على هدفه.
+
+**تنبيه**: الأداة للقراءة فقط بشكل افتراضي (SELECT/SHOW/DESCRIBE/EXPLAIN فقط). تتطلب عمليات الكتابة تمرير `allow_dml=True` أو ضبط متغير البيئة `CREWAI_NL2SQL_ALLOW_DML=true`. عند تفعيل الكتابة، تأكد من أن الوكيل يستخدم مستخدم قاعدة بيانات محدود الصلاحيات أو نسخة قراءة كلما أمكن.
+
+## نموذج الأمان
+
+`NL2SQLTool` هي أداة قابلة للتنفيذ. تقوم بتشغيل استعلامات SQL المولّدة من النموذج مباشرة على اتصال قاعدة البيانات المُهيأ.
+
+هذا يعني أن المخاطر تعتمد على خيارات النشر الخاصة بك:
+
+- بيانات الاعتماد التي تقدمها في `db_uri`
+- ما إذا كان بإمكان المدخلات غير الموثوقة التأثير على الأوامر
+- ما إذا كنت تضيف حواجز حماية لاستدعاءات الأدوات قبل التنفيذ
+
+إذا كنت توجه مدخلات غير موثوقة إلى وكلاء يستخدمون هذه الأداة، تعامل معها كتكامل عالي المخاطر.
+
+## توصيات التقوية
+
+استخدم جميع الإجراءات التالية في بيئة الإنتاج:
+
+- استخدم مستخدم قاعدة بيانات للقراءة فقط كلما أمكن
+- فضّل نسخة القراءة لأعباء العمل التحليلية/الاسترجاعية
+- امنح أقل صلاحيات ممكنة (بدون أدوار المسؤول/المستخدم الفائق، بدون صلاحيات على مستوى الملفات/النظام)
+- طبّق حدود الموارد على مستوى قاعدة البيانات (مهلة الاستعلام، مهلة القفل، حدود التكلفة/الصفوف)
+- أضف خطافات `before_tool_call` لفرض أنماط الاستعلام المسموح بها
+- فعّل تسجيل الاستعلامات والتنبيهات للعبارات التدميرية
+
+## وضع القراءة فقط وتهيئة DML
+
+تعمل `NL2SQLTool` في **وضع القراءة فقط بشكل افتراضي**. لا يُسمح إلا بأنواع العبارات التالية دون تهيئة إضافية:
+
+- `SELECT`
+- `SHOW`
+- `DESCRIBE`
+- `EXPLAIN`
+
+أي محاولة لتنفيذ عملية كتابة (`INSERT`، `UPDATE`، `DELETE`، `DROP`، `CREATE`، `ALTER`، `TRUNCATE`، إلخ) ستُسبب خطأً ما لم يتم تفعيل DML صراحةً.
+
+كما تُحظر الاستعلامات متعددة العبارات التي تحتوي على فاصلة منقوطة (مثل `SELECT 1; DROP TABLE users`) في وضع القراءة فقط لمنع هجمات الحقن.
+
+### تفعيل عمليات الكتابة
+
+يمكنك تفعيل DML (لغة معالجة البيانات) بطريقتين:
+
+**الخيار الأول — معامل المُنشئ:**
+
+```python
+from crewai_tools import NL2SQLTool
+
+nl2sql = NL2SQLTool(
+ db_uri="postgresql://example@localhost:5432/test_db",
+ allow_dml=True,
+)
+```
+
+**الخيار الثاني — متغير البيئة:**
+
+```bash
+CREWAI_NL2SQL_ALLOW_DML=true
+```
+
+```python
+from crewai_tools import NL2SQLTool
+
+# DML مفعّل عبر متغير البيئة
+nl2sql = NL2SQLTool(db_uri="postgresql://example@localhost:5432/test_db")
+```
+
+### أمثلة الاستخدام
+
+**القراءة فقط (الافتراضي) — آمن للتحليلات والتقارير:**
+
+```python
+from crewai_tools import NL2SQLTool
+
+# يُسمح فقط بـ SELECT/SHOW/DESCRIBE/EXPLAIN
+nl2sql = NL2SQLTool(db_uri="postgresql://example@localhost:5432/test_db")
+```
+
+**مع تفعيل DML — مطلوب لأعباء عمل الكتابة:**
+
+```python
+from crewai_tools import NL2SQLTool
+
+# يُسمح بـ INSERT وUPDATE وDELETE وDROP وغيرها
+nl2sql = NL2SQLTool(
+ db_uri="postgresql://example@localhost:5432/test_db",
+ allow_dml=True,
+)
+```
+
+
+يمنح تفعيل DML للوكيل القدرة على تعديل البيانات أو حذفها. لا تفعّله إلا عندما يتطلب حالة الاستخدام صراحةً وصولاً للكتابة، وتأكد من أن بيانات اعتماد قاعدة البيانات محدودة بالحد الأدنى من الصلاحيات المطلوبة.
+
+
+## المتطلبات
+
+- SqlAlchemy
+- أي مكتبة متوافقة مع قواعد البيانات (مثل psycopg2، mysql-connector-python)
+
+## التثبيت
+
+قم بتثبيت حزمة crewai_tools
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## الاستخدام
+
+لاستخدام أداة NL2SQLTool، تحتاج إلى تمرير عنوان URI لقاعدة البيانات إلى الأداة. يجب أن يكون العنوان بصيغة `dialect+driver://username:password@host:port/database`.
+
+```python Code
+from crewai_tools import NL2SQLTool
+
+# psycopg2 was installed to run this example with PostgreSQL
+nl2sql = NL2SQLTool(db_uri="postgresql://example@localhost:5432/test_db")
+
+@agent
+def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config["researcher"],
+ allow_delegation=False,
+ tools=[nl2sql]
+ )
+```
+
+## مثال
+
+كان هدف المهمة الأساسي:
+
+"استرجاع المتوسط والحد الأقصى والحد الأدنى للإيرادات الشهرية لكل مدينة، مع تضمين المدن التي بها أكثر من مستخدم واحد فقط. أيضاً، قم بعدّ المستخدمين في كل مدينة وترتيب النتائج حسب متوسط الإيرادات الشهرية بترتيب تنازلي"
+
+حاول الوكيل الحصول على المعلومات من قاعدة البيانات، الاستعلام الأول كان خاطئاً فحاول الوكيل مرة أخرى وحصل على المعلومات الصحيحة ومررها إلى الوكيل التالي.
+
+
+
+
+
+كان هدف المهمة الثانية:
+
+"مراجعة البيانات وإنشاء تقرير مفصّل، ثم إنشاء جدول في قاعدة البيانات بحقول مبنية على البيانات المقدمة. تضمين معلومات عن المتوسط والحد الأقصى والحد الأدنى للإيرادات الشهرية لكل مدينة، مع تضمين المدن التي بها أكثر من مستخدم واحد فقط. أيضاً، عدّ المستخدمين في كل مدينة وترتيب النتائج حسب متوسط الإيرادات الشهرية بترتيب تنازلي."
+
+الآن تصبح الأمور مثيرة للاهتمام، حيث يولّد الوكيل استعلام SQL ليس فقط لإنشاء الجدول بل أيضاً لإدراج البيانات فيه. وفي النهاية لا يزال الوكيل يُرجع التقرير النهائي الذي يتطابق تماماً مع ما كان في قاعدة البيانات.
+
+
+
+
+
+
+
+
+هذا مثال بسيط على كيفية استخدام أداة NL2SQLTool للتفاعل مع قاعدة البيانات وتوليد التقارير بناءً على البيانات الموجودة فيها.
+
+توفر الأداة إمكانيات لا حصر لها لمنطق الوكيل وكيفية تفاعله مع قاعدة البيانات.
+
+```md
+ DB -> Agent -> ... -> Agent -> DB
+```
diff --git a/docs/v1.15.1/ar/tools/database-data/overview.mdx b/docs/v1.15.1/ar/tools/database-data/overview.mdx
new file mode 100644
index 000000000..f4824f515
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/overview.mdx
@@ -0,0 +1,67 @@
+---
+title: "نظرة عامة"
+description: "الاتصال بقواعد البيانات ومخازن المتجهات ومستودعات البيانات للحصول على وصول شامل للبيانات"
+icon: "face-smile"
+mode: "wide"
+---
+
+تتيح هذه الأدوات لوكلائك التفاعل مع أنظمة قواعد بيانات متنوعة، من قواعد بيانات SQL التقليدية إلى مخازن المتجهات الحديثة ومستودعات البيانات.
+
+## **الأدوات المتاحة**
+
+
+
+ الاتصال بقواعد بيانات MySQL والاستعلام عنها بعمليات SQL.
+
+
+
+ البحث والاستعلام في قواعد بيانات PostgreSQL بكفاءة.
+
+
+
+ الوصول إلى مستودع بيانات Snowflake للتحليلات وإعداد التقارير.
+
+
+
+ تحويل استعلامات اللغة الطبيعية إلى عبارات SQL تلقائياً.
+
+
+
+ البحث في التضمينات المتجهية باستخدام قاعدة بيانات Qdrant المتجهية.
+
+
+
+ إجراء بحث دلالي باستخدام قاعدة بيانات Weaviate المتجهية.
+
+
+
+ بحث التشابه المتجهي على MongoDB Atlas مع أدوات مساعدة للفهرسة.
+
+
+
+ استعلامات SELECT/SHOW آمنة على SingleStore مع تجميع الاتصالات والتحقق.
+
+
+
+## **حالات الاستخدام الشائعة**
+
+- **تحليل البيانات**: الاستعلام عن قواعد البيانات لذكاء الأعمال وإعداد التقارير
+- **البحث المتجهي**: العثور على محتوى مشابه باستخدام التضمينات الدلالية
+- **عمليات ETL**: استخراج البيانات وتحويلها وتحميلها بين الأنظمة
+- **التحليلات الفورية**: الوصول إلى البيانات الحية لاتخاذ القرارات
+
+```python
+from crewai_tools import MySQLTool, QdrantVectorSearchTool, NL2SQLTool
+
+# Create database tools
+mysql_db = MySQLTool()
+vector_search = QdrantVectorSearchTool()
+nl_to_sql = NL2SQLTool()
+
+# Add to your agent
+agent = Agent(
+ role="Data Analyst",
+ tools=[mysql_db, vector_search, nl_to_sql],
+ goal="Extract insights from various data sources"
+)
+```
diff --git a/docs/v1.15.1/ar/tools/database-data/pgsearchtool.mdx b/docs/v1.15.1/ar/tools/database-data/pgsearchtool.mdx
new file mode 100644
index 000000000..ca959aad5
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/pgsearchtool.mdx
@@ -0,0 +1,80 @@
+---
+title: بحث RAG في PostgreSQL
+description: أداة `PGSearchTool` مصممة للبحث في قواعد بيانات PostgreSQL وإرجاع النتائج الأكثر صلة.
+icon: elephant
+mode: "wide"
+---
+
+## نظرة عامة
+
+
+ أداة PGSearchTool قيد التطوير حالياً. يوضح هذا المستند الوظائف والواجهة المقصودة.
+ مع تقدم التطوير، يرجى الانتباه إلى أن بعض الميزات قد لا تكون متاحة أو قد تتغير.
+
+
+## الوصف
+
+صُممت أداة PGSearchTool كأداة قوية لتسهيل عمليات البحث الدلالي داخل جداول قواعد بيانات PostgreSQL. من خلال الاستفادة من تقنية الاسترجاع والتوليد (RAG) المتقدمة، تهدف إلى توفير وسيلة فعالة للاستعلام عن محتوى جداول قواعد البيانات، مصممة خصيصاً لقواعد بيانات PostgreSQL. هدف الأداة هو تبسيط عملية العثور على البيانات ذات الصلة من خلال استعلامات البحث الدلالي، مما يوفر مورداً قيماً للمستخدمين الذين يحتاجون إلى إجراء استعلامات متقدمة على مجموعات بيانات واسعة في بيئة PostgreSQL.
+
+## التثبيت
+
+يمكن تثبيت حزمة `crewai_tools`، التي ستتضمن أداة PGSearchTool عند إصدارها، باستخدام الأمر التالي:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+
+ أداة PGSearchTool غير متاحة بعد في الإصدار الحالي من حزمة `crewai_tools`. سيتم تحديث أمر التثبيت هذا بمجرد إصدار الأداة.
+
+
+## مثال على الاستخدام
+
+فيما يلي مثال مقترح يوضح كيفية استخدام أداة PGSearchTool لإجراء بحث دلالي على جدول داخل قاعدة بيانات PostgreSQL:
+
+```python Code
+from crewai_tools import PGSearchTool
+
+# Initialize the tool with the database URI and the target table name
+tool = PGSearchTool(
+ db_uri='postgresql://user:password@localhost:5432/mydatabase',
+ table_name='employees'
+)
+```
+
+## المعاملات
+
+صُممت أداة PGSearchTool لتتطلب المعاملات التالية لتشغيلها:
+
+| المعامل | النوع | الوصف |
+|:---------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------|
+| **db_uri** | `string` | **إلزامي**. سلسلة نصية تمثل عنوان URI لقاعدة بيانات PostgreSQL المراد الاستعلام عنها. هذا المعامل إلزامي ويجب أن يتضمن تفاصيل المصادقة اللازمة وموقع قاعدة البيانات. |
+| **table_name** | `string` | **إلزامي**. سلسلة نصية تحدد اسم الجدول داخل قاعدة البيانات الذي سيتم إجراء البحث الدلالي عليه. هذا المعامل إلزامي أيضاً. |
+
+## النموذج والتضمينات المخصصة
+
+تنوي الأداة استخدام OpenAI لكل من التضمينات والتلخيص بشكل افتراضي. سيكون لدى المستخدمين خيار تخصيص النموذج باستخدام قاموس تكوين كما يلي:
+
+```python Code
+tool = PGSearchTool(
+ config=dict(
+ llm=dict(
+ provider="ollama", # or google, openai, anthropic, llama2, ...
+ config=dict(
+ model="llama2",
+ # temperature=0.5,
+ # top_p=1,
+ # stream=true,
+ ),
+ ),
+ embedder=dict(
+ provider="google-generativeai", # or openai, ollama, ...
+ config=dict(
+ model_name="gemini-embedding-001",
+ task_type="RETRIEVAL_DOCUMENT",
+ # title="Embeddings",
+ ),
+ ),
+ )
+)
+```
diff --git a/docs/v1.15.1/ar/tools/database-data/qdrantvectorsearchtool.mdx b/docs/v1.15.1/ar/tools/database-data/qdrantvectorsearchtool.mdx
new file mode 100644
index 000000000..b77ed5a4b
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/qdrantvectorsearchtool.mdx
@@ -0,0 +1,344 @@
+---
+title: 'أداة البحث المتجهي Qdrant'
+description: 'إمكانيات البحث الدلالي لوكلاء CrewAI باستخدام قاعدة بيانات Qdrant المتجهية'
+icon: vector-square
+mode: "wide"
+---
+
+## نظرة عامة
+
+تتيح أداة البحث المتجهي Qdrant إمكانيات البحث الدلالي في وكلاء CrewAI من خلال الاستفادة من [Qdrant](https://qdrant.tech/)، محرك بحث التشابه المتجهي. تسمح هذه الأداة لوكلائك بالبحث في المستندات المخزنة في مجموعة Qdrant باستخدام التشابه الدلالي.
+
+## التثبيت
+
+قم بتثبيت الحزم المطلوبة:
+
+```bash
+uv add qdrant-client
+```
+
+## الاستخدام الأساسي
+
+إليك مثال بسيط لكيفية استخدام الأداة:
+
+```python
+from crewai import Agent
+from crewai_tools import QdrantVectorSearchTool, QdrantConfig
+
+# Initialize the tool with QdrantConfig
+qdrant_tool = QdrantVectorSearchTool(
+ qdrant_config=QdrantConfig(
+ qdrant_url="your_qdrant_url",
+ qdrant_api_key="your_qdrant_api_key",
+ collection_name="your_collection"
+ )
+)
+
+# Create an agent that uses the tool
+agent = Agent(
+ role="Research Assistant",
+ goal="Find relevant information in documents",
+ tools=[qdrant_tool]
+)
+
+# The tool will automatically use OpenAI embeddings
+# and return the 3 most relevant results with scores > 0.35
+```
+
+## مثال عملي كامل
+
+إليك مثالاً كاملاً يوضح كيفية:
+1. استخراج النص من ملف PDF
+2. توليد التضمينات باستخدام OpenAI
+3. التخزين في Qdrant
+4. إنشاء سير عمل RAG وكيلي باستخدام CrewAI للبحث الدلالي
+
+```python
+import os
+import uuid
+import pdfplumber
+from openai import OpenAI
+from dotenv import load_dotenv
+from crewai import Agent, Task, Crew, Process, LLM
+from crewai_tools import QdrantVectorSearchTool
+from qdrant_client import QdrantClient
+from qdrant_client.models import PointStruct, Distance, VectorParams
+
+# Load environment variables
+load_dotenv()
+
+# Initialize OpenAI client
+client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
+
+# Extract text from PDF
+def extract_text_from_pdf(pdf_path):
+ text = []
+ with pdfplumber.open(pdf_path) as pdf:
+ for page in pdf.pages:
+ page_text = page.extract_text()
+ if page_text:
+ text.append(page_text.strip())
+ return text
+
+# Generate OpenAI embeddings
+def get_openai_embedding(text):
+ response = client.embeddings.create(
+ input=text,
+ model="text-embedding-3-large"
+ )
+ return response.data[0].embedding
+
+# Store text and embeddings in Qdrant
+def load_pdf_to_qdrant(pdf_path, qdrant, collection_name):
+ # Extract text from PDF
+ text_chunks = extract_text_from_pdf(pdf_path)
+
+ # Create Qdrant collection
+ if qdrant.collection_exists(collection_name):
+ qdrant.delete_collection(collection_name)
+ qdrant.create_collection(
+ collection_name=collection_name,
+ vectors_config=VectorParams(size=3072, distance=Distance.COSINE)
+ )
+
+ # Store embeddings
+ points = []
+ for chunk in text_chunks:
+ embedding = get_openai_embedding(chunk)
+ points.append(PointStruct(
+ id=str(uuid.uuid4()),
+ vector=embedding,
+ payload={"text": chunk}
+ ))
+ qdrant.upsert(collection_name=collection_name, points=points)
+
+# Initialize Qdrant client and load data
+qdrant = QdrantClient(
+ url=os.getenv("QDRANT_URL"),
+ api_key=os.getenv("QDRANT_API_KEY")
+)
+collection_name = "example_collection"
+pdf_path = "path/to/your/document.pdf"
+load_pdf_to_qdrant(pdf_path, qdrant, collection_name)
+
+# Initialize Qdrant search tool
+from crewai_tools import QdrantConfig
+
+qdrant_tool = QdrantVectorSearchTool(
+ qdrant_config=QdrantConfig(
+ qdrant_url=os.getenv("QDRANT_URL"),
+ qdrant_api_key=os.getenv("QDRANT_API_KEY"),
+ collection_name=collection_name,
+ limit=3,
+ score_threshold=0.35
+ )
+)
+
+# Create CrewAI agents
+search_agent = Agent(
+ role="Senior Semantic Search Agent",
+ goal="Find and analyze documents based on semantic search",
+ backstory="""You are an expert research assistant who can find relevant
+ information using semantic search in a Qdrant database.""",
+ tools=[qdrant_tool],
+ verbose=True
+)
+
+answer_agent = Agent(
+ role="Senior Answer Assistant",
+ goal="Generate answers to questions based on the context provided",
+ backstory="""You are an expert answer assistant who can generate
+ answers to questions based on the context provided.""",
+ tools=[qdrant_tool],
+ verbose=True
+)
+
+# Define tasks
+search_task = Task(
+ description="""Search for relevant documents about the {query}.
+ Your final answer should include:
+ - The relevant information found
+ - The similarity scores of the results
+ - The metadata of the relevant documents""",
+ agent=search_agent
+)
+
+answer_task = Task(
+ description="""Given the context and metadata of relevant documents,
+ generate a final answer based on the context.""",
+ agent=answer_agent
+)
+
+# Run CrewAI workflow
+crew = Crew(
+ agents=[search_agent, answer_agent],
+ tasks=[search_task, answer_task],
+ process=Process.sequential,
+ verbose=True
+)
+
+result = crew.kickoff(
+ inputs={"query": "What is the role of X in the document?"}
+)
+print(result)
+```
+
+## معاملات الأداة
+
+### المعاملات المطلوبة
+- `qdrant_config` (QdrantConfig): كائن التكوين الذي يحتوي على جميع إعدادات Qdrant
+
+### معاملات QdrantConfig
+- `qdrant_url` (str): عنوان URL لخادم Qdrant الخاص بك
+- `qdrant_api_key` (str, اختياري): مفتاح API للمصادقة مع Qdrant
+- `collection_name` (str): اسم مجموعة Qdrant المراد البحث فيها
+- `limit` (int): الحد الأقصى لعدد النتائج المُرجعة (الافتراضي: 3)
+- `score_threshold` (float): الحد الأدنى لدرجة التشابه (الافتراضي: 0.35)
+- `filter` (Any, اختياري): نسخة Filter من Qdrant للتصفية المتقدمة (الافتراضي: None)
+
+### المعاملات الاختيارية للأداة
+- `custom_embedding_fn` (Callable[[str], list[float]]): دالة مخصصة لتحويل النص إلى متجهات
+- `qdrant_package` (str): مسار الحزمة الأساسية لـ Qdrant (الافتراضي: "qdrant_client")
+- `client` (Any): عميل Qdrant مُهيأ مسبقاً (اختياري)
+
+## التصفية المتقدمة
+
+تدعم أداة QdrantVectorSearchTool إمكانيات تصفية قوية لتحسين نتائج البحث:
+
+### التصفية الديناميكية
+استخدم معاملات `filter_by` و `filter_value` في بحثك لتصفية النتائج أثناء التنفيذ:
+
+```python
+# Agent will use these parameters when calling the tool
+# The tool schema accepts filter_by and filter_value
+# Example: search with category filter
+# Results will be filtered where category == "technology"
+```
+
+### المرشحات المسبقة مع QdrantConfig
+للتصفية المعقدة، استخدم نسخ Filter من Qdrant في تكوينك:
+
+```python
+from qdrant_client.http import models as qmodels
+from crewai_tools import QdrantVectorSearchTool, QdrantConfig
+
+# Create a filter for specific conditions
+preset_filter = qmodels.Filter(
+ must=[
+ qmodels.FieldCondition(
+ key="category",
+ match=qmodels.MatchValue(value="research")
+ ),
+ qmodels.FieldCondition(
+ key="year",
+ match=qmodels.MatchValue(value=2024)
+ )
+ ]
+)
+
+# Initialize tool with preset filter
+qdrant_tool = QdrantVectorSearchTool(
+ qdrant_config=QdrantConfig(
+ qdrant_url="your_url",
+ qdrant_api_key="your_key",
+ collection_name="your_collection",
+ filter=preset_filter # Preset filter applied to all searches
+ )
+)
+```
+
+### دمج المرشحات
+تقوم الأداة تلقائياً بدمج المرشحات المسبقة من `QdrantConfig` مع المرشحات الديناميكية من `filter_by` و `filter_value`:
+
+```python
+# If QdrantConfig has a preset filter for category="research"
+# And the search uses filter_by="year", filter_value=2024
+# Both filters will be combined (AND logic)
+```
+
+## معاملات البحث
+
+تقبل الأداة هذه المعاملات في مخططها:
+- `query` (str): استعلام البحث للعثور على مستندات مشابهة
+- `filter_by` (str, اختياري): حقل البيانات الوصفية للتصفية عليه
+- `filter_value` (Any, اختياري): القيمة المراد التصفية بها
+
+## صيغة الإرجاع
+
+تُرجع الأداة النتائج بصيغة JSON:
+
+```json
+[
+ {
+ "metadata": {
+ // Any metadata stored with the document
+ },
+ "context": "The actual text content of the document",
+ "distance": 0.95 // Similarity score
+ }
+]
+```
+
+## التضمين الافتراضي
+
+بشكل افتراضي، تستخدم الأداة نموذج `text-embedding-3-large` من OpenAI للتحويل إلى متجهات. يتطلب ذلك:
+- تعيين مفتاح OpenAI API في البيئة: `OPENAI_API_KEY`
+
+## التضمينات المخصصة
+
+بدلاً من استخدام نموذج التضمين الافتراضي، قد ترغب في استخدام دالة تضمين خاصة بك في الحالات التالية:
+
+1. تريد استخدام نموذج تضمين مختلف (مثل Cohere أو HuggingFace أو نماذج Ollama)
+2. تحتاج إلى تقليل التكاليف باستخدام نماذج تضمين مفتوحة المصدر
+3. لديك متطلبات محددة لأبعاد المتجهات أو جودة التضمين
+4. تريد استخدام تضمينات خاصة بمجال معين (مثل النصوص الطبية أو القانونية)
+
+إليك مثال باستخدام نموذج HuggingFace:
+
+```python
+from transformers import AutoTokenizer, AutoModel
+import torch
+
+# Load model and tokenizer
+tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
+model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
+
+def custom_embeddings(text: str) -> list[float]:
+ # Tokenize and get model outputs
+ inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
+ outputs = model(**inputs)
+
+ # Use mean pooling to get text embedding
+ embeddings = outputs.last_hidden_state.mean(dim=1)
+
+ # Convert to list of floats and return
+ return embeddings[0].tolist()
+
+# Use custom embeddings with the tool
+from crewai_tools import QdrantConfig
+
+tool = QdrantVectorSearchTool(
+ qdrant_config=QdrantConfig(
+ qdrant_url="your_url",
+ qdrant_api_key="your_key",
+ collection_name="your_collection"
+ ),
+ custom_embedding_fn=custom_embeddings # Pass your custom function
+)
+```
+
+## معالجة الأخطاء
+
+تتعامل الأداة مع هذه الأخطاء المحددة:
+- تُثير ImportError إذا لم يكن `qdrant-client` مثبتاً (مع خيار التثبيت التلقائي)
+- تُثير ValueError إذا لم يتم تعيين `QDRANT_URL`
+- تطلب تثبيت `qdrant-client` إذا كان مفقوداً باستخدام `uv add qdrant-client`
+
+## متغيرات البيئة
+
+متغيرات البيئة المطلوبة:
+```bash
+export QDRANT_URL="your_qdrant_url" # If not provided in constructor
+export QDRANT_API_KEY="your_api_key" # If not provided in constructor
+export OPENAI_API_KEY="your_openai_key" # If using default embeddings
+```
diff --git a/docs/v1.15.1/ar/tools/database-data/singlestoresearchtool.mdx b/docs/v1.15.1/ar/tools/database-data/singlestoresearchtool.mdx
new file mode 100644
index 000000000..68c882b6a
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/singlestoresearchtool.mdx
@@ -0,0 +1,60 @@
+---
+title: أداة بحث SingleStore
+description: تنفذ `SingleStoreSearchTool` استعلامات SELECT/SHOW بأمان على SingleStore مع تجميع الاتصالات.
+icon: circle
+mode: "wide"
+---
+
+# `SingleStoreSearchTool`
+
+## الوصف
+
+تنفيذ استعلامات القراءة فقط (`SELECT`/`SHOW`) على SingleStore مع تجميع الاتصالات والتحقق من صحة المدخلات.
+
+## التثبيت
+
+```shell
+uv add crewai-tools[singlestore]
+```
+
+## متغيرات البيئة
+
+يمكن استخدام متغيرات مثل `SINGLESTOREDB_HOST` و `SINGLESTOREDB_USER` و `SINGLESTOREDB_PASSWORD` وغيرها، أو `SINGLESTOREDB_URL` كعنوان DSN واحد.
+
+قم بتوليد مفتاح API من لوحة تحكم SingleStore، [الوثائق هنا](https://docs.singlestore.com/cloud/reference/management-api/#generate-an-api-key).
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import SingleStoreSearchTool
+
+tool = SingleStoreSearchTool(
+ tables=["products"],
+ host="host",
+ user="user",
+ password="pass",
+ database="db",
+)
+
+agent = Agent(
+ role="Analyst",
+ goal="Query SingleStore",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="List 5 products",
+ expected_output="5 rows as JSON/text",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+)
+
+result = crew.kickoff()
+```
diff --git a/docs/v1.15.1/ar/tools/database-data/snowflakesearchtool.mdx b/docs/v1.15.1/ar/tools/database-data/snowflakesearchtool.mdx
new file mode 100644
index 000000000..ea7e19127
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/snowflakesearchtool.mdx
@@ -0,0 +1,203 @@
+---
+title: أداة بحث Snowflake
+description: تتيح `SnowflakeSearchTool` لوكلاء CrewAI تنفيذ استعلامات SQL وإجراء بحث دلالي على مستودعات بيانات Snowflake.
+icon: snowflake
+mode: "wide"
+---
+
+# `SnowflakeSearchTool`
+
+## الوصف
+
+صُممت `SnowflakeSearchTool` للاتصال بمستودعات بيانات Snowflake وتنفيذ استعلامات SQL مع ميزات متقدمة مثل تجميع الاتصالات ومنطق إعادة المحاولة والتنفيذ غير المتزامن. تتيح هذه الأداة لوكلاء CrewAI التفاعل مع قواعد بيانات Snowflake، مما يجعلها مثالية لمهام تحليل البيانات وإعداد التقارير وذكاء الأعمال التي تتطلب الوصول إلى بيانات المؤسسة المخزنة في Snowflake.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت التبعيات المطلوبة:
+
+```shell
+uv add cryptography snowflake-connector-python snowflake-sqlalchemy
+```
+
+أو بدلاً من ذلك:
+
+```shell
+uv sync --extra snowflake
+```
+
+## خطوات البدء
+
+لاستخدام `SnowflakeSearchTool` بفعالية، اتبع هذه الخطوات:
+
+1. **تثبيت التبعيات**: قم بتثبيت الحزم المطلوبة باستخدام أحد الأوامر أعلاه.
+2. **تكوين اتصال Snowflake**: أنشئ كائن `SnowflakeConfig` ببيانات اعتماد Snowflake الخاصة بك.
+3. **تهيئة الأداة**: أنشئ نسخة من الأداة بالتكوين اللازم.
+4. **تنفيذ الاستعلامات**: استخدم الأداة لتشغيل استعلامات SQL على قاعدة بيانات Snowflake الخاصة بك.
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `SnowflakeSearchTool` للاستعلام عن البيانات من قاعدة بيانات Snowflake:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import SnowflakeSearchTool, SnowflakeConfig
+
+# Create Snowflake configuration
+config = SnowflakeConfig(
+ account="your_account",
+ user="your_username",
+ password="your_password",
+ warehouse="COMPUTE_WH",
+ database="your_database",
+ snowflake_schema="your_schema"
+)
+
+# Initialize the tool
+snowflake_tool = SnowflakeSearchTool(config=config)
+
+# Define an agent that uses the tool
+data_analyst_agent = Agent(
+ role="Data Analyst",
+ goal="Analyze data from Snowflake database",
+ backstory="An expert data analyst who can extract insights from enterprise data.",
+ tools=[snowflake_tool],
+ verbose=True,
+)
+
+# Example task to query sales data
+query_task = Task(
+ description="Query the sales data for the last quarter and summarize the top 5 products by revenue.",
+ expected_output="A summary of the top 5 products by revenue for the last quarter.",
+ agent=data_analyst_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[data_analyst_agent],
+ tasks=[query_task])
+result = crew.kickoff()
+```
+
+يمكنك أيضاً تخصيص الأداة بمعاملات إضافية:
+
+```python Code
+# Initialize the tool with custom parameters
+snowflake_tool = SnowflakeSearchTool(
+ config=config,
+ pool_size=10,
+ max_retries=5,
+ retry_delay=2.0,
+ enable_caching=True
+)
+```
+
+## المعاملات
+
+### معاملات SnowflakeConfig
+
+يقبل صنف `SnowflakeConfig` المعاملات التالية:
+
+- **account**: مطلوب. معرّف حساب Snowflake.
+- **user**: مطلوب. اسم مستخدم Snowflake.
+- **password**: اختياري*. كلمة مرور Snowflake.
+- **private_key_path**: اختياري*. مسار ملف المفتاح الخاص (بديل لكلمة المرور).
+- **warehouse**: مطلوب. اسم مستودع Snowflake.
+- **database**: مطلوب. قاعدة البيانات الافتراضية.
+- **snowflake_schema**: مطلوب. المخطط الافتراضي.
+- **role**: اختياري. دور Snowflake.
+- **session_parameters**: اختياري. معاملات جلسة مخصصة كقاموس.
+
+*يجب توفير إما `password` أو `private_key_path`.
+
+### معاملات SnowflakeSearchTool
+
+تقبل `SnowflakeSearchTool` المعاملات التالية أثناء التهيئة:
+
+- **config**: مطلوب. كائن `SnowflakeConfig` يحتوي على تفاصيل الاتصال.
+- **pool_size**: اختياري. عدد الاتصالات في المجمع. الافتراضي هو 5.
+- **max_retries**: اختياري. الحد الأقصى لمحاولات إعادة المحاولة للاستعلامات الفاشلة. الافتراضي هو 3.
+- **retry_delay**: اختياري. التأخير بين المحاولات بالثواني. الافتراضي هو 1.0.
+- **enable_caching**: اختياري. ما إذا كان سيتم تفعيل التخزين المؤقت لنتائج الاستعلامات. الافتراضي هو True.
+
+## الاستخدام
+
+عند استخدام `SnowflakeSearchTool`، تحتاج إلى توفير المعاملات التالية:
+
+- **query**: مطلوب. استعلام SQL المراد تنفيذه.
+- **database**: اختياري. تجاوز قاعدة البيانات الافتراضية المحددة في التكوين.
+- **snowflake_schema**: اختياري. تجاوز المخطط الافتراضي المحدد في التكوين.
+- **timeout**: اختياري. مهلة الاستعلام بالثواني. الافتراضي هو 300.
+
+ستُرجع الأداة نتائج الاستعلام كقائمة من القواميس، حيث يمثل كل قاموس صفاً بأسماء الأعمدة كمفاتيح.
+
+```python Code
+# Example of using the tool with an agent
+data_analyst = Agent(
+ role="Data Analyst",
+ goal="Analyze sales data from Snowflake",
+ backstory="An expert data analyst with experience in SQL and data visualization.",
+ tools=[snowflake_tool],
+ verbose=True
+)
+
+# The agent will use the tool with parameters like:
+# query="SELECT product_name, SUM(revenue) as total_revenue FROM sales GROUP BY product_name ORDER BY total_revenue DESC LIMIT 5"
+# timeout=600
+
+# Create a task for the agent
+analysis_task = Task(
+ description="Query the sales database and identify the top 5 products by revenue for the last quarter.",
+ expected_output="A detailed analysis of the top 5 products by revenue.",
+ agent=data_analyst
+)
+
+# Run the task
+crew = Crew(
+ agents=[data_analyst],
+ tasks=[analysis_task]
+)
+result = crew.kickoff()
+```
+
+## الميزات المتقدمة
+
+### تجميع الاتصالات
+
+تُطبّق `SnowflakeSearchTool` تجميع الاتصالات لتحسين الأداء من خلال إعادة استخدام اتصالات قاعدة البيانات. يمكنك التحكم في حجم المجمع بمعامل `pool_size`.
+
+### إعادة المحاولة التلقائية
+
+تُعيد الأداة تلقائياً محاولة الاستعلامات الفاشلة مع تراجع أسي. يمكنك تكوين سلوك إعادة المحاولة بمعاملات `max_retries` و `retry_delay`.
+
+### التخزين المؤقت لنتائج الاستعلامات
+
+لتحسين أداء الاستعلامات المتكررة، يمكن للأداة تخزين نتائج الاستعلامات مؤقتاً. هذه الميزة مفعّلة افتراضياً ولكن يمكن تعطيلها بتعيين `enable_caching=False`.
+
+### مصادقة زوج المفاتيح
+
+بالإضافة إلى مصادقة كلمة المرور، تدعم الأداة مصادقة زوج المفاتيح لتعزيز الأمان:
+
+```python Code
+config = SnowflakeConfig(
+ account="your_account",
+ user="your_username",
+ private_key_path="/path/to/your/private/key.p8",
+ warehouse="COMPUTE_WH",
+ database="your_database",
+ snowflake_schema="your_schema"
+)
+```
+
+## معالجة الأخطاء
+
+تتضمن `SnowflakeSearchTool` معالجة شاملة للأخطاء لمشكلات Snowflake الشائعة:
+
+- فشل الاتصال
+- انتهاء مهلة الاستعلام
+- أخطاء المصادقة
+- أخطاء قاعدة البيانات والمخطط
+
+عند حدوث خطأ، ستحاول الأداة إعادة العملية (إذا تم تكوينها) وتوفير معلومات تفصيلية عن الخطأ.
+
+## الخلاصة
+
+توفر `SnowflakeSearchTool` طريقة قوية لدمج مستودعات بيانات Snowflake مع وكلاء CrewAI. مع ميزات مثل تجميع الاتصالات وإعادة المحاولة التلقائية والتخزين المؤقت للاستعلامات، تتيح وصولاً فعالاً وموثوقاً لبيانات المؤسسة. هذه الأداة مفيدة بشكل خاص لمهام تحليل البيانات وإعداد التقارير وذكاء الأعمال التي تتطلب الوصول إلى بيانات منظمة مخزنة في Snowflake.
diff --git a/docs/v1.15.1/ar/tools/database-data/weaviatevectorsearchtool.mdx b/docs/v1.15.1/ar/tools/database-data/weaviatevectorsearchtool.mdx
new file mode 100644
index 000000000..8579ccafc
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/database-data/weaviatevectorsearchtool.mdx
@@ -0,0 +1,168 @@
+---
+title: بحث متجهي Weaviate
+description: أداة `WeaviateVectorSearchTool` مصممة للبحث في قاعدة بيانات Weaviate المتجهية عن مستندات متشابهة دلالياً باستخدام البحث الهجين.
+icon: network-wired
+mode: "wide"
+---
+
+## نظرة عامة
+
+صُممت `WeaviateVectorSearchTool` خصيصاً لإجراء عمليات بحث دلالي داخل المستندات المخزنة في قاعدة بيانات Weaviate المتجهية. تتيح لك هذه الأداة العثور على مستندات متشابهة دلالياً لاستعلام معين، من خلال الاستفادة من قوة البحث المتجهي والبحث بالكلمات المفتاحية للحصول على نتائج بحث أكثر دقة وذات صلة بالسياق.
+
+[Weaviate](https://weaviate.io/) هي قاعدة بيانات متجهية تخزن وتستعلم عن التضمينات المتجهية، مما يتيح إمكانيات البحث الدلالي.
+
+## التثبيت
+
+لدمج هذه الأداة في مشروعك، تحتاج إلى تثبيت عميل Weaviate:
+
+```shell
+uv add weaviate-client
+```
+
+## خطوات البدء
+
+لاستخدام `WeaviateVectorSearchTool` بفعالية، اتبع هذه الخطوات:
+
+1. **تثبيت الحزمة**: تأكد من تثبيت حزمتي `crewai[tools]` و `weaviate-client` في بيئة Python الخاصة بك.
+2. **إعداد Weaviate**: قم بإعداد مجموعة Weaviate. يمكنك اتباع [وثائق Weaviate](https://weaviate.io/developers/wcs/manage-clusters/connect) للتعليمات.
+3. **مفاتيح API**: احصل على عنوان URL لمجموعة Weaviate ومفتاح API.
+4. **مفتاح OpenAI API**: تأكد من تعيين مفتاح OpenAI API في متغيرات البيئة كـ `OPENAI_API_KEY`.
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة وتنفيذ بحث:
+
+```python Code
+from crewai_tools import WeaviateVectorSearchTool
+
+# Initialize the tool
+tool = WeaviateVectorSearchTool(
+ collection_name='example_collections',
+ limit=3,
+ alpha=0.75,
+ weaviate_cluster_url="https://your-weaviate-cluster-url.com",
+ weaviate_api_key="your-weaviate-api-key",
+)
+
+@agent
+def search_agent(self) -> Agent:
+ '''
+ This agent uses the WeaviateVectorSearchTool to search for
+ semantically similar documents in a Weaviate vector database.
+ '''
+ return Agent(
+ config=self.agents_config["search_agent"],
+ tools=[tool]
+ )
+```
+
+## المعاملات
+
+تقبل `WeaviateVectorSearchTool` المعاملات التالية:
+
+- **collection_name**: مطلوب. اسم المجموعة المراد البحث فيها.
+- **weaviate_cluster_url**: مطلوب. عنوان URL لمجموعة Weaviate.
+- **weaviate_api_key**: مطلوب. مفتاح API لمجموعة Weaviate.
+- **limit**: اختياري. عدد النتائج المُرجعة. الافتراضي هو `3`.
+- **alpha**: اختياري. يتحكم في الترجيح بين البحث المتجهي والبحث بالكلمات المفتاحية (BM25). alpha = 0 -> BM25 فقط، alpha = 1 -> بحث متجهي فقط. الافتراضي هو `0.75`.
+- **vectorizer**: اختياري. المحوّل المتجهي المستخدم. إذا لم يُحدد، سيستخدم `text2vec_openai` مع نموذج `nomic-embed-text`.
+- **generative_model**: اختياري. النموذج التوليدي المستخدم. إذا لم يُحدد، سيستخدم `gpt-4o` من OpenAI.
+
+## التكوين المتقدم
+
+يمكنك تخصيص المحوّل المتجهي والنموذج التوليدي المستخدمين في الأداة:
+
+```python Code
+from crewai_tools import WeaviateVectorSearchTool
+from weaviate.classes.config import Configure
+
+# Setup custom model for vectorizer and generative model
+tool = WeaviateVectorSearchTool(
+ collection_name='example_collections',
+ limit=3,
+ alpha=0.75,
+ vectorizer=Configure.Vectorizer.text2vec_openai(model="nomic-embed-text"),
+ generative_model=Configure.Generative.openai(model="gpt-4o-mini"),
+ weaviate_cluster_url="https://your-weaviate-cluster-url.com",
+ weaviate_api_key="your-weaviate-api-key",
+)
+```
+
+## تحميل المستندات مسبقاً
+
+يمكنك تحميل قاعدة بيانات Weaviate بالمستندات مسبقاً قبل استخدام الأداة:
+
+```python Code
+import os
+from crewai_tools import WeaviateVectorSearchTool
+import weaviate
+from weaviate.classes.init import Auth
+
+# Connect to Weaviate
+client = weaviate.connect_to_weaviate_cloud(
+ cluster_url="https://your-weaviate-cluster-url.com",
+ auth_credentials=Auth.api_key("your-weaviate-api-key"),
+ headers={"X-OpenAI-Api-Key": "your-openai-api-key"}
+)
+
+# Get or create collection
+test_docs = client.collections.get("example_collections")
+if not test_docs:
+ test_docs = client.collections.create(
+ name="example_collections",
+ vectorizer_config=Configure.Vectorizer.text2vec_openai(model="nomic-embed-text"),
+ generative_config=Configure.Generative.openai(model="gpt-4o"),
+ )
+
+# Load documents
+docs_to_load = os.listdir("knowledge")
+with test_docs.batch.dynamic() as batch:
+ for d in docs_to_load:
+ with open(os.path.join("knowledge", d), "r") as f:
+ content = f.read()
+ batch.add_object(
+ {
+ "content": content,
+ "year": d.split("_")[0],
+ }
+ )
+
+# Initialize the tool
+tool = WeaviateVectorSearchTool(
+ collection_name='example_collections',
+ limit=3,
+ alpha=0.75,
+ weaviate_cluster_url="https://your-weaviate-cluster-url.com",
+ weaviate_api_key="your-weaviate-api-key",
+)
+```
+
+## مثال على التكامل مع الوكيل
+
+إليك كيفية دمج `WeaviateVectorSearchTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent
+from crewai_tools import WeaviateVectorSearchTool
+
+# Initialize the tool
+weaviate_tool = WeaviateVectorSearchTool(
+ collection_name='example_collections',
+ limit=3,
+ alpha=0.75,
+ weaviate_cluster_url="https://your-weaviate-cluster-url.com",
+ weaviate_api_key="your-weaviate-api-key",
+)
+
+# Create an agent with the tool
+rag_agent = Agent(
+ name="rag_agent",
+ role="You are a helpful assistant that can answer questions with the help of the WeaviateVectorSearchTool.",
+ llm="gpt-4o-mini",
+ tools=[weaviate_tool],
+)
+```
+
+## الخلاصة
+
+توفر `WeaviateVectorSearchTool` طريقة قوية للبحث عن مستندات متشابهة دلالياً في قاعدة بيانات Weaviate المتجهية. من خلال الاستفادة من التضمينات المتجهية، تتيح نتائج بحث أكثر دقة وذات صلة بالسياق مقارنة بعمليات البحث التقليدية القائمة على الكلمات المفتاحية. هذه الأداة مفيدة بشكل خاص للتطبيقات التي تتطلب العثور على المعلومات بناءً على المعنى بدلاً من التطابق الحرفي.
diff --git a/docs/v1.15.1/ar/tools/file-document/csvsearchtool.mdx b/docs/v1.15.1/ar/tools/file-document/csvsearchtool.mdx
new file mode 100644
index 000000000..9e4e89658
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/csvsearchtool.mdx
@@ -0,0 +1,92 @@
+---
+title: بحث RAG في CSV
+description: أداة `CSVSearchTool` هي أداة RAG (الاسترجاع المعزز بالتوليد) قوية مصممة لعمليات البحث الدلالي داخل محتوى ملف CSV.
+icon: file-csv
+mode: "wide"
+---
+
+# `CSVSearchTool`
+
+
+ **تجريبية**: لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+تُستخدم هذه الأداة لإجراء بحث RAG (الاسترجاع المعزز بالتوليد) داخل محتوى ملف CSV. تتيح للمستخدمين البحث دلالياً عن استعلامات في محتوى ملف CSV محدد. هذه الميزة مفيدة بشكل خاص لاستخراج المعلومات من مجموعات بيانات CSV الكبيرة حيث قد تكون طرق البحث التقليدية غير فعالة. جميع الأدوات التي تحتوي على "Search" في اسمها، بما في ذلك CSVSearchTool، هي أدوات RAG مصممة للبحث في مصادر بيانات مختلفة.
+
+## التثبيت
+
+قم بتثبيت حزمة crewai_tools
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+```python Code
+from crewai_tools import CSVSearchTool
+
+# Initialize the tool with a specific CSV file.
+# This setup allows the agent to only search the given CSV file.
+tool = CSVSearchTool(csv='path/to/your/csvfile.csv')
+
+# OR
+
+# Initialize the tool without a specific CSV file.
+# Agent will need to provide the CSV path at runtime.
+tool = CSVSearchTool()
+```
+
+## المعاملات
+
+يمكن استخدام المعاملات التالية لتخصيص سلوك `CSVSearchTool`:
+
+| المعامل | النوع | الوصف |
+|:---------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------|
+| **csv** | `string` | _اختياري_. مسار ملف CSV المراد البحث فيه. هذا معامل إلزامي إذا تمت تهيئة الأداة بدون ملف CSV محدد؛ وإلا فهو اختياري. |
+
+## النموذج والتضمينات المخصصة
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+from chromadb.config import Settings
+
+tool = CSVSearchTool(
+ config={
+ "embedding_model": {
+ "provider": "openai",
+ "config": {
+ "model": "text-embedding-3-small",
+ # "api_key": "sk-...",
+ },
+ },
+ "vectordb": {
+ "provider": "chromadb", # or "qdrant"
+ "config": {
+ # "settings": Settings(persist_directory="/content/chroma", allow_reset=True, is_persistent=True),
+ # from qdrant_client.models import VectorParams, Distance
+ # "vectors_config": VectorParams(size=384, distance=Distance.COSINE),
+ }
+ },
+ }
+)
+```
+
+## الأمان
+
+### التحقق من صحة المسارات
+
+يتم التحقق من مسارات الملفات المقدمة لهذه الأداة مقابل مجلد العمل الحالي. يتم رفض المسارات التي تحل خارج مجلد العمل وإطلاق `ValueError`.
+
+للسماح بالمسارات خارج مجلد العمل (مثلاً في الاختبارات أو خطوط الأنابيب الموثوقة)، عيّن متغير البيئة التالي:
+
+```shell
+CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true
+```
+
+### التحقق من صحة الروابط
+
+يتم التحقق من مدخلات الروابط: يتم حظر مخطط `file://` والطلبات التي تستهدف نطاقات IP الخاصة أو المحجوزة لمنع هجمات تزوير الطلبات من جانب الخادم (SSRF).
diff --git a/docs/v1.15.1/ar/tools/file-document/directoryreadtool.mdx b/docs/v1.15.1/ar/tools/file-document/directoryreadtool.mdx
new file mode 100644
index 000000000..1e9d7ddee
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/directoryreadtool.mdx
@@ -0,0 +1,52 @@
+---
+title: قراءة المجلدات
+description: أداة `DirectoryReadTool` هي أداة مساعدة قوية مصممة لتوفير قائمة شاملة بمحتويات المجلد.
+icon: folder-tree
+mode: "wide"
+---
+
+# `DirectoryReadTool`
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+أداة DirectoryReadTool هي أداة مساعدة قوية مصممة لتوفير قائمة شاملة بمحتويات المجلد. يمكنها التنقل بشكل متكرر عبر المجلد المحدد، مما يوفر للمستخدمين تعداداً مفصلاً لجميع الملفات، بما في ذلك تلك الموجودة داخل المجلدات الفرعية. هذه الأداة ضرورية للمهام التي تتطلب جرداً شاملاً لهياكل المجلدات أو للتحقق من تنظيم الملفات داخل المجلدات.
+
+## التثبيت
+
+لاستخدام DirectoryReadTool في مشروعك، قم بتثبيت حزمة `crewai_tools`. إذا لم تكن هذه الحزمة جزءاً من بيئتك بعد، يمكنك تثبيتها باستخدام pip بالأمر التالي:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+يُثبّت هذا الأمر أحدث إصدار من حزمة `crewai_tools`، مما يمنح الوصول إلى DirectoryReadTool بالإضافة إلى أدوات مساعدة أخرى.
+
+## مثال
+
+استخدام DirectoryReadTool بسيط ومباشر. يوضح مقتطف الكود التالي كيفية إعدادها واستخدام الأداة لعرض محتويات مجلد محدد:
+
+```python Code
+from crewai_tools import DirectoryReadTool
+
+# Initialize the tool so the agent can read any directory's content
+# it learns about during execution
+tool = DirectoryReadTool()
+
+# OR
+
+# Initialize the tool with a specific directory,
+# so the agent can only read the content of the specified directory
+tool = DirectoryReadTool(directory='/path/to/your/directory')
+```
+
+## المعاملات
+
+يمكن استخدام المعاملات التالية لتخصيص سلوك `DirectoryReadTool`:
+
+| المعامل | النوع | الوصف |
+|:---------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------|
+| **directory** | `string` | _اختياري_. معامل يحدد المسار إلى المجلد الذي ترغب في عرض محتوياته. يقبل كلاً من المسارات المطلقة والنسبية، ويوجه الأداة إلى المجلد المطلوب لعرض المحتوى. |
diff --git a/docs/v1.15.1/ar/tools/file-document/directorysearchtool.mdx b/docs/v1.15.1/ar/tools/file-document/directorysearchtool.mdx
new file mode 100644
index 000000000..577836ad9
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/directorysearchtool.mdx
@@ -0,0 +1,82 @@
+---
+title: بحث RAG في المجلدات
+description: أداة `DirectorySearchTool` هي أداة RAG (الاسترجاع المعزز بالتوليد) قوية مصممة لعمليات البحث الدلالي داخل محتوى المجلد.
+icon: address-book
+mode: "wide"
+---
+
+# `DirectorySearchTool`
+
+
+ **تجريبية**: أداة DirectorySearchTool قيد التطوير المستمر. قد تُضاف ميزات أو تُزال، وقد يتغير الأداء بشكل غير متوقع أثناء تحسين الأداة.
+
+
+## الوصف
+
+تتيح DirectorySearchTool البحث الدلالي داخل محتوى المجلدات المحددة، مستفيدة من منهجية الاسترجاع المعزز بالتوليد (RAG) للتنقل الفعال بين الملفات. صُممت لتكون مرنة، حيث تسمح للمستخدمين بتحديد مجلدات البحث ديناميكياً أثناء التشغيل أو تعيين مجلد ثابت أثناء الإعداد الأولي.
+
+## التثبيت
+
+لاستخدام DirectorySearchTool، ابدأ بتثبيت حزمة crewai_tools. نفّذ الأمر التالي في الطرفية:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## التهيئة والاستخدام
+
+قم باستيراد DirectorySearchTool من حزمة `crewai_tools` للبدء. يمكنك تهيئة الأداة بدون تحديد مجلد، مما يتيح تعيين مجلد البحث أثناء التشغيل. بدلاً من ذلك، يمكن تهيئة الأداة بمجلد محدد مسبقاً.
+
+```python Code
+from crewai_tools import DirectorySearchTool
+
+# For dynamic directory specification at runtime
+tool = DirectorySearchTool()
+
+# For fixed directory searches
+tool = DirectorySearchTool(directory='/path/to/directory')
+```
+
+## المعاملات
+
+- `directory`: معامل نصي يحدد مجلد البحث. هذا اختياري أثناء التهيئة لكنه مطلوب لعمليات البحث إذا لم يتم تعيينه مبدئياً.
+
+## النموذج والتضمينات المخصصة
+
+تستخدم DirectorySearchTool افتراضياً OpenAI للتضمينات والتلخيص. تتضمن خيارات التخصيص لهذه الإعدادات تغيير مزود النموذج والتكوين، مما يعزز المرونة للمستخدمين المتقدمين.
+
+```python Code
+from chromadb.config import Settings
+
+tool = DirectorySearchTool(
+ config={
+ "embedding_model": {
+ "provider": "openai",
+ "config": {
+ "model": "text-embedding-3-small",
+ # "api_key": "sk-...",
+ },
+ },
+ "vectordb": {
+ "provider": "chromadb", # or "qdrant"
+ "config": {
+ # "settings": Settings(persist_directory="/content/chroma", allow_reset=True, is_persistent=True),
+ # from qdrant_client.models import VectorParams, Distance
+ # "vectors_config": VectorParams(size=384, distance=Distance.COSINE),
+ }
+ },
+ }
+)
+```
+
+## الأمان
+
+### التحقق من صحة المسارات
+
+يتم التحقق من مسارات المجلدات المقدمة لهذه الأداة مقابل مجلد العمل الحالي. يتم رفض المسارات التي تحل خارج مجلد العمل وإطلاق `ValueError`.
+
+للسماح بالمسارات خارج مجلد العمل (مثلاً في الاختبارات أو خطوط الأنابيب الموثوقة)، عيّن متغير البيئة التالي:
+
+```shell
+CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true
+```
diff --git a/docs/v1.15.1/ar/tools/file-document/docxsearchtool.mdx b/docs/v1.15.1/ar/tools/file-document/docxsearchtool.mdx
new file mode 100644
index 000000000..046941bc1
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/docxsearchtool.mdx
@@ -0,0 +1,77 @@
+---
+title: بحث RAG في DOCX
+description: أداة `DOCXSearchTool` هي أداة RAG مصممة للبحث الدلالي داخل مستندات DOCX.
+icon: file-word
+mode: "wide"
+---
+
+# `DOCXSearchTool`
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+أداة `DOCXSearchTool` هي أداة RAG مصممة للبحث الدلالي داخل مستندات DOCX. تتيح للمستخدمين البحث بفعالية واستخراج المعلومات ذات الصلة من ملفات DOCX باستخدام عمليات بحث قائمة على الاستعلامات. هذه الأداة لا تُقدَّر بثمن لمهام تحليل البيانات وإدارة المعلومات والبحث، حيث تبسط عملية العثور على معلومات محددة داخل مجموعات مستندات كبيرة.
+
+## التثبيت
+
+قم بتثبيت حزمة crewai_tools بتنفيذ الأمر التالي في الطرفية:
+
+```shell
+uv pip install docx2txt 'crewai[tools]'
+```
+
+## مثال
+
+يوضح المثال التالي تهيئة DOCXSearchTool للبحث داخل محتوى أي ملف DOCX أو بمسار ملف DOCX محدد.
+
+```python Code
+from crewai_tools import DOCXSearchTool
+
+# Initialize the tool to search within any DOCX file's content
+tool = DOCXSearchTool()
+
+# OR
+
+# Initialize the tool with a specific DOCX file,
+# so the agent can only search the content of the specified DOCX file
+tool = DOCXSearchTool(docx='path/to/your/document.docx')
+```
+
+## المعاملات
+
+يمكن استخدام المعاملات التالية لتخصيص سلوك `DOCXSearchTool`:
+
+| المعامل | النوع | الوصف |
+|:---------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------|
+| **docx** | `string` | _اختياري_. معامل يحدد مسار ملف DOCX المراد البحث فيه. إذا لم يُقدَّم أثناء التهيئة، تسمح الأداة بتحديد مسار محتوى أي ملف DOCX للبحث لاحقاً. |
+
+## النموذج والتضمينات المخصصة
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+from chromadb.config import Settings
+
+tool = DOCXSearchTool(
+ config={
+ "embedding_model": {
+ "provider": "openai",
+ "config": {
+ "model": "text-embedding-3-small",
+ # "api_key": "sk-...",
+ },
+ },
+ "vectordb": {
+ "provider": "chromadb", # or "qdrant"
+ "config": {
+ # "settings": Settings(persist_directory="/content/chroma", allow_reset=True, is_persistent=True),
+ # from qdrant_client.models import VectorParams, Distance
+ # "vectors_config": VectorParams(size=384, distance=Distance.COSINE),
+ }
+ },
+ }
+)
+```
diff --git a/docs/v1.15.1/ar/tools/file-document/filereadtool.mdx b/docs/v1.15.1/ar/tools/file-document/filereadtool.mdx
new file mode 100644
index 000000000..10053a735
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/filereadtool.mdx
@@ -0,0 +1,42 @@
+---
+title: قراءة الملفات
+description: أداة `FileReadTool` مصممة لقراءة الملفات من نظام الملفات المحلي.
+icon: folders
+mode: "wide"
+---
+
+## نظرة عامة
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+تمثل أداة FileReadTool مفهومياً مجموعة من الوظائف ضمن حزمة crewai_tools تهدف إلى تسهيل قراءة الملفات واسترجاع المحتوى. تتضمن هذه المجموعة أدوات لمعالجة ملفات نصية دفعية، وقراءة ملفات التكوين أثناء التشغيل، واستيراد البيانات للتحليلات. تدعم مجموعة متنوعة من صيغ الملفات النصية مثل `.txt` و `.csv` و `.json` وغيرها. اعتماداً على نوع الملف، توفر المجموعة وظائف متخصصة، مثل تحويل محتوى JSON إلى قاموس Python لسهولة الاستخدام.
+
+## التثبيت
+
+لاستخدام الوظائف المنسوبة سابقاً لأداة FileReadTool، قم بتثبيت حزمة crewai_tools:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال على الاستخدام
+
+للبدء مع FileReadTool:
+
+```python Code
+from crewai_tools import FileReadTool
+
+# Initialize the tool to read any files the agents knows or lean the path for
+file_read_tool = FileReadTool()
+
+# OR
+
+# Initialize the tool with a specific file path, so the agent can only read the content of the specified file
+file_read_tool = FileReadTool(file_path='path/to/your/file.txt')
+```
+
+## المعاملات
+
+- `file_path`: مسار الملف المراد قراءته. يقبل كلاً من المسارات المطلقة والنسبية. تأكد من وجود الملف وأن لديك الصلاحيات اللازمة للوصول إليه.
diff --git a/docs/v1.15.1/ar/tools/file-document/filewritetool.mdx b/docs/v1.15.1/ar/tools/file-document/filewritetool.mdx
new file mode 100644
index 000000000..fc01a9c0a
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/filewritetool.mdx
@@ -0,0 +1,47 @@
+---
+title: كتابة الملفات
+description: أداة `FileWriterTool` مصممة لكتابة المحتوى في الملفات.
+icon: file-pen
+mode: "wide"
+---
+
+# `FileWriterTool`
+
+## الوصف
+
+أداة `FileWriterTool` هي مكوّن من حزمة crewai_tools، مصممة لتبسيط عملية كتابة المحتوى في الملفات مع توافق عبر المنصات (Windows و Linux و macOS). تكون مفيدة بشكل خاص في سيناريوهات مثل توليد التقارير وحفظ السجلات وإنشاء ملفات التكوين والمزيد. تتعامل هذه الأداة مع اختلافات المسارات عبر أنظمة التشغيل، وتدعم ترميز UTF-8، وتنشئ المجلدات تلقائياً إذا لم تكن موجودة، مما يسهل تنظيم المخرجات بشكل موثوق عبر المنصات المختلفة.
+
+## التثبيت
+
+قم بتثبيت حزمة crewai_tools لاستخدام `FileWriterTool` في مشاريعك:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+للبدء مع `FileWriterTool`:
+
+```python Code
+from crewai_tools import FileWriterTool
+
+# Initialize the tool
+file_writer_tool = FileWriterTool()
+
+# Write content to a file in a specified directory
+result = file_writer_tool._run('example.txt', 'This is a test content.', 'test_directory')
+print(result)
+```
+
+## المعاملات
+
+- `filename`: اسم الملف الذي تريد إنشاءه أو الكتابة فوقه.
+- `content`: المحتوى المراد كتابته في الملف.
+- `directory` (اختياري): مسار المجلد حيث سيتم إنشاء الملف. الافتراضي هو المجلد الحالي (`.`). إذا لم يكن المجلد موجوداً، سيتم إنشاؤه.
+
+## الخلاصة
+
+من خلال دمج `FileWriterTool` في أطقمك، يمكن للوكلاء كتابة المحتوى في الملفات بشكل موثوق عبر أنظمة التشغيل المختلفة. هذه الأداة ضرورية للمهام التي تتطلب حفظ بيانات المخرجات وإنشاء أنظمة ملفات منظمة والتعامل مع عمليات الملفات عبر المنصات. يُوصى بها بشكل خاص لمستخدمي Windows الذين قد يواجهون مشكلات في كتابة الملفات مع عمليات ملفات Python القياسية.
+
+من خلال الالتزام بإرشادات الإعداد والاستخدام المقدمة، فإن دمج هذه الأداة في المشاريع أمر مباشر ويضمن سلوكاً متسقاً لكتابة الملفات عبر جميع المنصات.
diff --git a/docs/v1.15.1/ar/tools/file-document/jsonsearchtool.mdx b/docs/v1.15.1/ar/tools/file-document/jsonsearchtool.mdx
new file mode 100644
index 000000000..53aebacea
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/jsonsearchtool.mdx
@@ -0,0 +1,91 @@
+---
+title: بحث RAG في JSON
+description: أداة `JSONSearchTool` مصممة للبحث في ملفات JSON وإرجاع النتائج الأكثر صلة.
+icon: file-code
+mode: "wide"
+---
+
+# `JSONSearchTool`
+
+
+ أداة JSONSearchTool حالياً في مرحلة تجريبية. هذا يعني أن الأداة قيد التطوير
+ النشط، وقد يواجه المستخدمون سلوكاً غير متوقع أو تغييرات. نشجع بشدة التعليقات
+ حول أي مشكلات أو اقتراحات للتحسين.
+
+
+## الوصف
+
+صُممت أداة JSONSearchTool لتسهيل عمليات البحث الفعالة والدقيقة داخل محتوى ملفات JSON. تستخدم آلية بحث RAG (الاسترجاع والتوليد)، مما يتيح للمستخدمين تحديد مسار JSON لعمليات بحث مستهدفة داخل ملف JSON معين. تحسّن هذه القدرة بشكل ملحوظ دقة نتائج البحث وصلتها.
+
+## التثبيت
+
+لتثبيت JSONSearchTool، استخدم أمر pip التالي:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## أمثلة على الاستخدام
+
+فيما يلي أمثلة محدّثة حول كيفية استخدام JSONSearchTool بفعالية للبحث داخل ملفات JSON. تأخذ هذه الأمثلة بعين الاعتبار التنفيذ الحالي وأنماط الاستخدام المحددة في قاعدة الكود.
+
+```python Code
+from crewai_tools import JSONSearchTool
+
+# General JSON content search
+# This approach is suitable when the JSON path is either known beforehand or can be dynamically identified.
+tool = JSONSearchTool()
+
+# Restricting search to a specific JSON file
+# Use this initialization method when you want to limit the search scope to a specific JSON file.
+tool = JSONSearchTool(json_path='./path/to/your/file.json')
+```
+
+## المعاملات
+
+- `json_path` (str, اختياري): يحدد مسار ملف JSON المراد البحث فيه. هذا المعامل غير مطلوب إذا تمت تهيئة الأداة لبحث عام. عند تقديمه، يقتصر البحث على ملف JSON المحدد.
+
+## خيارات التكوين
+
+تدعم أداة JSONSearchTool تخصيصاً واسعاً من خلال قاموس تكوين. يتيح هذا للمستخدمين اختيار نماذج مختلفة للتضمينات والتلخيص بناءً على متطلباتهم.
+
+```python Code
+tool = JSONSearchTool(
+ config={
+ "llm": {
+ "provider": "ollama", # Other options include google, openai, anthropic, llama2, etc.
+ "config": {
+ "model": "llama2",
+ # Additional optional configurations can be specified here.
+ # temperature=0.5,
+ # top_p=1,
+ # stream=true,
+ },
+ },
+ "embedding_model": {
+ "provider": "google-generativeai", # or openai, ollama, ...
+ "config": {
+ "model_name": "gemini-embedding-001",
+ "task_type": "RETRIEVAL_DOCUMENT",
+ # Further customization options can be added here.
+ },
+ },
+ }
+)
+```
+
+## الأمان
+
+### التحقق من صحة المسارات
+
+يتم التحقق من مسارات الملفات المقدمة لهذه الأداة مقابل مجلد العمل الحالي. يتم رفض المسارات التي تحل خارج مجلد العمل وإطلاق `ValueError`.
+
+للسماح بالمسارات خارج مجلد العمل (مثلاً في الاختبارات أو خطوط الأنابيب الموثوقة)، عيّن متغير البيئة التالي:
+
+```shell
+CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true
+```
+
+### التحقق من صحة الروابط
+
+يتم التحقق من مدخلات الروابط: يتم حظر مخطط `file://` والطلبات التي تستهدف نطاقات IP الخاصة أو المحجوزة لمنع هجمات تزوير الطلبات من جانب الخادم (SSRF).
diff --git a/docs/v1.15.1/ar/tools/file-document/mdxsearchtool.mdx b/docs/v1.15.1/ar/tools/file-document/mdxsearchtool.mdx
new file mode 100644
index 000000000..c70f30d7b
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/mdxsearchtool.mdx
@@ -0,0 +1,72 @@
+---
+title: بحث RAG في MDX
+description: أداة `MDXSearchTool` مصممة للبحث في ملفات MDX وإرجاع النتائج الأكثر صلة.
+icon: markdown
+mode: "wide"
+---
+
+# `MDXSearchTool`
+
+
+ أداة MDXSearchTool في تطوير مستمر. قد تُضاف ميزات أو تُزال، وقد تتغير الوظائف بشكل غير متوقع أثناء تحسين الأداة.
+
+
+## الوصف
+
+أداة البحث في MDX هي مكوّن من حزمة `crewai_tools` يهدف إلى تسهيل استخراج لغة Markdown المتقدمة. تتيح للمستخدمين البحث بفعالية واستخراج المعلومات ذات الصلة من ملفات MD باستخدام عمليات بحث قائمة على الاستعلامات. هذه الأداة لا تُقدَّر بثمن لمهام تحليل البيانات وإدارة المعلومات والبحث، حيث تبسط عملية العثور على معلومات محددة داخل مجموعات مستندات كبيرة.
+
+## التثبيت
+
+قبل استخدام أداة البحث في MDX، تأكد من تثبيت حزمة `crewai_tools`. إذا لم تكن مثبتة، يمكنك تثبيتها بالأمر التالي:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال على الاستخدام
+
+لاستخدام أداة البحث في MDX، يجب أولاً إعداد متغيرات البيئة اللازمة. ثم قم بدمج الأداة في مشروع crewAI الخاص بك لبدء أبحاث السوق. فيما يلي مثال أساسي لكيفية القيام بذلك:
+
+```python Code
+from crewai_tools import MDXSearchTool
+
+# Initialize the tool to search any MDX content it learns about during execution
+tool = MDXSearchTool()
+
+# OR
+
+# Initialize the tool with a specific MDX file path for an exclusive search within that document
+tool = MDXSearchTool(mdx='path/to/your/document.mdx')
+```
+
+## المعاملات
+
+- mdx: **اختياري**. يحدد مسار ملف MDX للبحث. يمكن تقديمه أثناء التهيئة.
+
+## تخصيص النموذج والتضمينات
+
+تستخدم الأداة افتراضياً OpenAI للتضمينات والتلخيص. للتخصيص، استخدم قاموس تكوين كما هو موضح أدناه:
+
+```python Code
+from chromadb.config import Settings
+
+tool = MDXSearchTool(
+ config={
+ "embedding_model": {
+ "provider": "openai",
+ "config": {
+ "model": "text-embedding-3-small",
+ # "api_key": "sk-...",
+ },
+ },
+ "vectordb": {
+ "provider": "chromadb", # or "qdrant"
+ "config": {
+ # "settings": Settings(persist_directory="/content/chroma", allow_reset=True, is_persistent=True),
+ # from qdrant_client.models import VectorParams, Distance
+ # "vectors_config": VectorParams(size=384, distance=Distance.COSINE),
+ }
+ },
+ }
+)
+```
diff --git a/docs/v1.15.1/ar/tools/file-document/ocrtool.mdx b/docs/v1.15.1/ar/tools/file-document/ocrtool.mdx
new file mode 100644
index 000000000..b4d12faed
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/ocrtool.mdx
@@ -0,0 +1,88 @@
+---
+title: أداة OCR
+description: تستخرج `OCRTool` النص من الصور المحلية أو عناوين URL للصور باستخدام نموذج LLM مزود بالرؤية.
+icon: image
+mode: "wide"
+---
+
+# `OCRTool`
+
+## الوصف
+
+استخراج النص من الصور (مسار محلي أو عنوان URL). تستخدم نموذج LLM مزوداً بالرؤية عبر واجهة LLM الخاصة بـ CrewAI.
+
+## التثبيت
+
+لا حاجة لتثبيت إضافي بخلاف `crewai-tools`. تأكد من أن النموذج المحدد يدعم الرؤية.
+
+## المعاملات
+
+### معاملات التشغيل
+
+- `image_path_url` (str, مطلوب): مسار صورة محلية أو عنوان URL بروتوكول HTTP(S).
+
+## أمثلة
+
+### الاستخدام المباشر
+
+```python Code
+from crewai_tools import OCRTool
+
+print(OCRTool().run(image_path_url="/tmp/receipt.png"))
+```
+
+### مع وكيل
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import OCRTool
+
+ocr = OCRTool()
+
+agent = Agent(
+ role="OCR",
+ goal="Extract text",
+ tools=[ocr],
+)
+
+task = Task(
+ description="Extract text from https://example.com/invoice.jpg",
+ expected_output="All detected text in plain text",
+ agent=agent,
+)
+
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff()
+```
+
+## ملاحظات
+
+- تأكد من أن النموذج المحدد يدعم مدخلات الصور.
+- للصور الكبيرة، فكر في تصغير الحجم لتقليل استهلاك الرموز.
+ - يمكنك تمرير نسخة LLM محددة للأداة (مثل `LLM(model="gpt-4o")`) إذا لزم الأمر، وفقاً لتوجيهات README.
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import OCRTool
+
+tool = OCRTool()
+
+agent = Agent(
+ role="OCR Specialist",
+ goal="Extract text from images",
+ backstory="Vision‑enabled analyst",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="Extract text from https://example.com/receipt.png",
+ expected_output="All detected text in plain text",
+ agent=agent,
+)
+
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff()
+```
diff --git a/docs/v1.15.1/ar/tools/file-document/overview.mdx b/docs/v1.15.1/ar/tools/file-document/overview.mdx
new file mode 100644
index 000000000..c547c763d
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/overview.mdx
@@ -0,0 +1,97 @@
+---
+title: "نظرة عامة"
+description: "قراءة وكتابة والبحث في صيغ ملفات متنوعة باستخدام أدوات معالجة المستندات من CrewAI"
+icon: "face-smile"
+mode: "wide"
+---
+
+تتيح هذه الأدوات لوكلائك العمل مع صيغ ملفات وأنواع مستندات متنوعة. من قراءة ملفات PDF إلى معالجة بيانات JSON، تتعامل هذه الأدوات مع جميع احتياجات معالجة المستندات الخاصة بك.
+
+## **الأدوات المتاحة**
+
+
+
+ قراءة المحتوى من أي نوع ملف بما في ذلك النصوص و Markdown والمزيد.
+
+
+
+ كتابة المحتوى في الملفات وإنشاء مستندات جديدة وحفظ البيانات المعالجة.
+
+
+
+ البحث واستخراج محتوى نصي من مستندات PDF بكفاءة.
+
+
+
+ البحث في مستندات Microsoft Word واستخراج المحتوى ذي الصلة.
+
+
+
+ تحليل والبحث في ملفات JSON بإمكانيات استعلام متقدمة.
+
+
+
+ معالجة والبحث في ملفات CSV واستخراج صفوف وأعمدة محددة.
+
+
+
+ تحليل ملفات XML والبحث عن عناصر وخصائص محددة.
+
+
+
+ البحث في ملفات MDX واستخراج المحتوى من الوثائق.
+
+
+
+ البحث في ملفات النص العادي بإمكانيات مطابقة الأنماط.
+
+
+
+ البحث عن الملفات والمجلدات داخل هياكل المجلدات.
+
+
+
+ قراءة وعرض محتويات المجلدات وهياكل الملفات والبيانات الوصفية.
+
+
+
+ استخراج النص من الصور (ملفات محلية أو عناوين URL) باستخدام نموذج LLM مزود بالرؤية.
+
+
+
+ كتابة نص في إحداثيات محددة في ملفات PDF، مع خطوط مخصصة اختيارية.
+
+
+
+## **حالات الاستخدام الشائعة**
+
+- **معالجة المستندات**: استخراج وتحليل المحتوى من صيغ ملفات متنوعة
+- **استيراد البيانات**: قراءة بيانات منظمة من ملفات CSV و JSON و XML
+- **بحث المحتوى**: العثور على معلومات محددة داخل مجموعات مستندات كبيرة
+- **إدارة الملفات**: تنظيم ومعالجة الملفات والمجلدات
+- **تصدير البيانات**: حفظ النتائج المعالجة في صيغ ملفات متنوعة
+
+## **مثال للبدء السريع**
+
+```python
+from crewai_tools import FileReadTool, PDFSearchTool, JSONSearchTool
+
+# Create tools
+file_reader = FileReadTool()
+pdf_searcher = PDFSearchTool()
+json_processor = JSONSearchTool()
+
+# Add to your agent
+agent = Agent(
+ role="Document Analyst",
+ tools=[file_reader, pdf_searcher, json_processor],
+ goal="Process and analyze various document types"
+)
+```
+
+## **نصائح لمعالجة المستندات**
+
+- **صلاحيات الملفات**: تأكد من أن وكيلك لديه صلاحيات القراءة/الكتابة المناسبة
+- **الملفات الكبيرة**: فكر في التقسيم إلى أجزاء للمستندات الكبيرة جداً
+- **دعم الصيغ**: راجع وثائق الأداة لمعرفة صيغ الملفات المدعومة
+- **معالجة الأخطاء**: طبّق معالجة أخطاء مناسبة للملفات التالفة أو التي يتعذر الوصول إليها
diff --git a/docs/v1.15.1/ar/tools/file-document/pdf-text-writing-tool.mdx b/docs/v1.15.1/ar/tools/file-document/pdf-text-writing-tool.mdx
new file mode 100644
index 000000000..86bca0227
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/pdf-text-writing-tool.mdx
@@ -0,0 +1,75 @@
+---
+title: أداة كتابة نص PDF
+description: تكتب `PDFTextWritingTool` نصاً في مواضع محددة في ملف PDF، مع دعم الخطوط المخصصة.
+icon: file-pdf
+mode: "wide"
+---
+
+# `PDFTextWritingTool`
+
+## الوصف
+
+كتابة نص في إحداثيات دقيقة على صفحة PDF، مع إمكانية تضمين خط TrueType مخصص اختيارياً.
+
+## المعاملات
+
+### معاملات التشغيل
+
+- `pdf_path` (str, مطلوب): مسار ملف PDF المدخل.
+- `text` (str, مطلوب): النص المراد إضافته.
+- `position` (tuple[int, int], مطلوب): إحداثيات `(x, y)`.
+- `font_size` (int, الافتراضي `12`)
+- `font_color` (str, الافتراضي `"0 0 0 rg"`)
+- `font_name` (str, الافتراضي `"F1"`)
+- `font_file` (str, اختياري): مسار ملف `.ttf`.
+- `page_number` (int, الافتراضي `0`)
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import PDFTextWritingTool
+
+tool = PDFTextWritingTool()
+
+agent = Agent(
+ role="PDF Editor",
+ goal="Annotate PDFs",
+ backstory="Documentation specialist",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="Write 'CONFIDENTIAL' at (72, 720) on page 1 of ./sample.pdf",
+ expected_output="Confirmation message",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+)
+
+result = crew.kickoff()
+```
+
+### الاستخدام المباشر
+
+```python Code
+from crewai_tools import PDFTextWritingTool
+
+PDFTextWritingTool().run(
+ pdf_path="./input.pdf",
+ text="CONFIDENTIAL",
+ position=(72, 720),
+ font_size=18,
+ page_number=0,
+)
+```
+
+## نصائح
+
+- نقطة أصل الإحداثيات هي الزاوية السفلية اليسرى.
+- إذا كنت تستخدم خطاً مخصصاً (`font_file`)، تأكد من أنه ملف `.ttf` صالح.
diff --git a/docs/v1.15.1/ar/tools/file-document/pdfsearchtool.mdx b/docs/v1.15.1/ar/tools/file-document/pdfsearchtool.mdx
new file mode 100644
index 000000000..96d4b98ba
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/pdfsearchtool.mdx
@@ -0,0 +1,123 @@
+---
+title: بحث RAG في PDF
+description: أداة `PDFSearchTool` مصممة للبحث في ملفات PDF وإرجاع النتائج الأكثر صلة.
+icon: file-pdf
+mode: "wide"
+---
+
+# `PDFSearchTool`
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+أداة PDFSearchTool هي أداة RAG مصممة لعمليات البحث الدلالي داخل محتوى PDF. تتيح إدخال استعلام بحث ومستند PDF، مستفيدة من تقنيات بحث متقدمة للعثور على المحتوى ذي الصلة بكفاءة. هذه القدرة تجعلها مفيدة بشكل خاص لاستخراج معلومات محددة من ملفات PDF الكبيرة بسرعة.
+
+## التثبيت
+
+للبدء مع أداة PDFSearchTool، تأكد أولاً من تثبيت حزمة crewai_tools بالأمر التالي:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+إليك كيفية استخدام PDFSearchTool للبحث داخل مستند PDF:
+
+```python Code
+from crewai_tools import PDFSearchTool
+
+# Initialize the tool allowing for any PDF content search if the path is provided during execution
+tool = PDFSearchTool()
+
+# OR
+
+# Initialize the tool with a specific PDF path for exclusive search within that document
+tool = PDFSearchTool(pdf='path/to/your/document.pdf')
+```
+
+## المعاملات
+
+- `pdf`: **اختياري** مسار ملف PDF للبحث. يمكن تقديمه عند التهيئة أو ضمن معاملات طريقة `run`. إذا قُدم عند التهيئة، تقتصر الأداة في بحثها على المستند المحدد.
+
+## النموذج والتضمينات المخصصة
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي. ملاحظة: قاعدة بيانات متجهية مطلوبة لأن التضمينات المولّدة يجب تخزينها والاستعلام عنها من قاعدة بيانات متجهية.
+
+```python Code
+from crewai_tools import PDFSearchTool
+
+# - embedding_model (required): choose provider + provider-specific config
+# - vectordb (required): choose vector DB and pass its config
+
+tool = PDFSearchTool(
+ config={
+ "embedding_model": {
+ # Supported providers: "openai", "azure", "google-generativeai", "google-vertex",
+ # "voyageai", "cohere", "huggingface", "jina", "sentence-transformer",
+ # "text2vec", "ollama", "openclip", "instructor", "onnx", "roboflow", "watsonx", "custom"
+ "provider": "openai", # or: "google-generativeai", "cohere", "ollama", ...
+ "config": {
+ # Model identifier for the chosen provider. "model" will be auto-mapped to "model_name" internally.
+ "model": "text-embedding-3-small",
+ # Optional: API key. If omitted, the tool will use provider-specific env vars
+ # (e.g., OPENAI_API_KEY or EMBEDDINGS_OPENAI_API_KEY for OpenAI).
+ # "api_key": "sk-...",
+
+ # Provider-specific examples:
+ # --- Google Generative AI ---
+ # (Set provider="google-generativeai" above)
+ # "model_name": "gemini-embedding-001",
+ # "task_type": "RETRIEVAL_DOCUMENT",
+ # "title": "Embeddings",
+
+ # --- Cohere ---
+ # (Set provider="cohere" above)
+ # "model": "embed-english-v3.0",
+
+ # --- Ollama (local) ---
+ # (Set provider="ollama" above)
+ # "model": "nomic-embed-text",
+ },
+ },
+ "vectordb": {
+ "provider": "chromadb", # or "qdrant"
+ "config": {
+ # For ChromaDB: pass "settings" (chromadb.config.Settings) or rely on defaults.
+ # Example (uncomment and import):
+ # from chromadb.config import Settings
+ # "settings": Settings(
+ # persist_directory="/content/chroma",
+ # allow_reset=True,
+ # is_persistent=True,
+ # ),
+
+ # For Qdrant: pass "vectors_config" (qdrant_client.models.VectorParams).
+ # Example (uncomment and import):
+ # from qdrant_client.models import VectorParams, Distance
+ # "vectors_config": VectorParams(size=384, distance=Distance.COSINE),
+
+ # Note: collection name is controlled by the tool (default: "rag_tool_collection"), not set here.
+ }
+ },
+ }
+)
+```
+
+## الأمان
+
+### التحقق من صحة المسارات
+
+يتم التحقق من مسارات الملفات المقدمة لهذه الأداة مقابل مجلد العمل الحالي. يتم رفض المسارات التي تحل خارج مجلد العمل وإطلاق `ValueError`.
+
+للسماح بالمسارات خارج مجلد العمل (مثلاً في الاختبارات أو خطوط الأنابيب الموثوقة)، عيّن متغير البيئة التالي:
+
+```shell
+CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true
+```
+
+### التحقق من صحة الروابط
+
+يتم التحقق من مدخلات الروابط: يتم حظر مخطط `file://` والطلبات التي تستهدف نطاقات IP الخاصة أو المحجوزة لمنع هجمات تزوير الطلبات من جانب الخادم (SSRF).
diff --git a/docs/v1.15.1/ar/tools/file-document/txtsearchtool.mdx b/docs/v1.15.1/ar/tools/file-document/txtsearchtool.mdx
new file mode 100644
index 000000000..9f253141f
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/txtsearchtool.mdx
@@ -0,0 +1,89 @@
+---
+title: بحث RAG في TXT
+description: أداة `TXTSearchTool` مصممة لإجراء بحث RAG (الاسترجاع المعزز بالتوليد) داخل محتوى ملف نصي.
+icon: file-lines
+mode: "wide"
+---
+
+## نظرة عامة
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+تُستخدم هذه الأداة لإجراء بحث RAG (الاسترجاع المعزز بالتوليد) داخل محتوى ملف نصي. تتيح البحث الدلالي عن استعلام داخل محتوى ملف نصي محدد، مما يجعلها مورداً لا يُقدَّر بثمن لاستخراج المعلومات بسرعة أو العثور على أقسام محددة من النص بناءً على الاستعلام المقدم.
+
+## التثبيت
+
+لاستخدام `TXTSearchTool`، تحتاج أولاً إلى تثبيت حزمة `crewai_tools`. يمكن القيام بذلك باستخدام pip، مدير الحزم لـ Python. افتح الطرفية أو موجه الأوامر وأدخل الأمر التالي:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+سيقوم هذا الأمر بتنزيل وتثبيت TXTSearchTool مع أي تبعيات ضرورية.
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام TXTSearchTool للبحث داخل ملف نصي. يعرض هذا المثال كلاً من تهيئة الأداة بملف نصي محدد والبحث اللاحق داخل محتوى ذلك الملف.
+
+```python Code
+from crewai_tools import TXTSearchTool
+
+# Initialize the tool to search within any text file's content
+# the agent learns about during its execution
+tool = TXTSearchTool()
+
+# OR
+
+# Initialize the tool with a specific text file,
+# so the agent can search within the given text file's content
+tool = TXTSearchTool(txt='path/to/text/file.txt')
+```
+
+## المعاملات
+- `txt` (str): **اختياري**. مسار الملف النصي المراد البحث فيه. هذا المعامل مطلوب فقط إذا لم يتم تهيئة الأداة بملف نصي محدد؛ وإلا سيتم إجراء البحث داخل الملف النصي المقدم مبدئياً.
+
+## النموذج والتضمينات المخصصة
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+from chromadb.config import Settings
+
+tool = TXTSearchTool(
+ config={
+ # Required: embeddings provider + config
+ "embedding_model": {
+ "provider": "openai", # or google-generativeai, cohere, ollama, ...
+ "config": {
+ "model": "text-embedding-3-small",
+ # "api_key": "sk-...", # optional if env var is set (e.g., OPENAI_API_KEY or EMBEDDINGS_OPENAI_API_KEY)
+ # Provider examples:
+ # Google → model_name: "gemini-embedding-001", task_type: "RETRIEVAL_DOCUMENT"
+ # Cohere → model: "embed-english-v3.0"
+ # Ollama → model: "nomic-embed-text"
+ },
+ },
+
+ # Required: vector database config
+ "vectordb": {
+ "provider": "chromadb", # or "qdrant"
+ "config": {
+ # Chroma settings (optional persistence)
+ # "settings": Settings(
+ # persist_directory="/content/chroma",
+ # allow_reset=True,
+ # is_persistent=True,
+ # ),
+
+ # Qdrant vector params example:
+ # from qdrant_client.models import VectorParams, Distance
+ # "vectors_config": VectorParams(size=384, distance=Distance.COSINE),
+
+ # Note: collection name is controlled by the tool (default: "rag_tool_collection").
+ }
+ },
+ }
+)
+```
diff --git a/docs/v1.15.1/ar/tools/file-document/xmlsearchtool.mdx b/docs/v1.15.1/ar/tools/file-document/xmlsearchtool.mdx
new file mode 100644
index 000000000..d82c57b0e
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/file-document/xmlsearchtool.mdx
@@ -0,0 +1,74 @@
+---
+title: بحث RAG في XML
+description: أداة `XMLSearchTool` مصممة لإجراء بحث RAG (الاسترجاع المعزز بالتوليد) داخل محتوى ملف XML.
+icon: file-xml
+mode: "wide"
+---
+
+# `XMLSearchTool`
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+أداة XMLSearchTool هي أداة RAG متطورة مصممة لإجراء عمليات بحث دلالي داخل ملفات XML. مثالية للمستخدمين الذين يحتاجون إلى تحليل واستخراج المعلومات من محتوى XML بكفاءة، تدعم هذه الأداة إدخال استعلام بحث ومسار ملف XML اختياري. من خلال تحديد مسار XML، يمكن للمستخدمين استهداف بحثهم بدقة أكبر نحو محتوى ذلك الملف، وبالتالي الحصول على نتائج بحث أكثر صلة.
+
+## التثبيت
+
+للبدء باستخدام XMLSearchTool، يجب أولاً تثبيت حزمة crewai_tools. يمكن القيام بذلك بسهولة بالأمر التالي:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+فيما يلي مثالان يوضحان كيفية استخدام XMLSearchTool. المثال الأول يوضح البحث داخل ملف XML محدد، بينما يوضح المثال الثاني بدء بحث بدون تحديد مسار XML مسبقاً، مما يوفر مرونة في نطاق البحث.
+
+```python Code
+from crewai_tools import XMLSearchTool
+
+# Allow agents to search within any XML file's content
+#as it learns about their paths during execution
+tool = XMLSearchTool()
+
+# OR
+
+# Initialize the tool with a specific XML file path
+#for exclusive search within that document
+tool = XMLSearchTool(xml='path/to/your/xmlfile.xml')
+```
+
+## المعاملات
+
+- `xml`: مسار ملف XML المراد البحث فيه. هذا معامل اختياري أثناء تهيئة الأداة ولكن يجب تقديمه إما عند التهيئة أو كجزء من معاملات طريقة `run` لتنفيذ البحث.
+
+## النموذج والتضمينات المخصصة
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+from chromadb.config import Settings
+
+tool = XMLSearchTool(
+ config={
+ "embedding_model": {
+ "provider": "openai",
+ "config": {
+ "model": "text-embedding-3-small",
+ # "api_key": "sk-...",
+ },
+ },
+ "vectordb": {
+ "provider": "chromadb", # or "qdrant"
+ "config": {
+ # "settings": Settings(persist_directory="/content/chroma", allow_reset=True, is_persistent=True),
+ # from qdrant_client.models import VectorParams, Distance
+ # "vectors_config": VectorParams(size=384, distance=Distance.COSINE),
+ }
+ },
+ }
+)
+```
diff --git a/docs/v1.15.1/ar/tools/integration/bedrockinvokeagenttool.mdx b/docs/v1.15.1/ar/tools/integration/bedrockinvokeagenttool.mdx
new file mode 100644
index 000000000..24b650889
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/integration/bedrockinvokeagenttool.mdx
@@ -0,0 +1,188 @@
+---
+title: أداة استدعاء وكيل Bedrock
+description: تتيح لوكلاء CrewAI استدعاء وكلاء Amazon Bedrock والاستفادة من قدراتهم ضمن سير العمل الخاص بك
+icon: aws
+mode: "wide"
+---
+
+# `BedrockInvokeAgentTool`
+
+تتيح `BedrockInvokeAgentTool` لوكلاء CrewAI استدعاء وكلاء Amazon Bedrock والاستفادة من قدراتهم ضمن سير العمل الخاص بك.
+
+## التثبيت
+
+```bash
+uv pip install 'crewai[tools]'
+```
+
+## المتطلبات
+
+- بيانات اعتماد AWS مُهيأة (إما من خلال متغيرات البيئة أو AWS CLI)
+- حزمتا `boto3` و `python-dotenv`
+- الوصول إلى وكلاء Amazon Bedrock
+
+## الاستخدام
+
+إليك كيفية استخدام الأداة مع وكيل CrewAI:
+
+```python {2, 4-8}
+from crewai import Agent, Task, Crew
+from crewai_tools.aws.bedrock.agents.invoke_agent_tool import BedrockInvokeAgentTool
+
+# Initialize the tool
+agent_tool = BedrockInvokeAgentTool(
+ agent_id="your-agent-id",
+ agent_alias_id="your-agent-alias-id"
+)
+
+# Create a CrewAI agent that uses the tool
+aws_expert = Agent(
+ role='AWS Service Expert',
+ goal='Help users understand AWS services and quotas',
+ backstory='I am an expert in AWS services and can provide detailed information about them.',
+ tools=[agent_tool],
+ verbose=True
+)
+
+# Create a task for the agent
+quota_task = Task(
+ description="Find out the current service quotas for EC2 in us-west-2 and explain any recent changes.",
+ agent=aws_expert
+)
+
+# Create a crew with the agent
+crew = Crew(
+ agents=[aws_expert],
+ tasks=[quota_task],
+ verbose=2
+)
+
+# Run the crew
+result = crew.kickoff()
+print(result)
+```
+
+## معاملات الأداة
+
+| المعامل | النوع | مطلوب | الافتراضي | الوصف |
+|:---------|:-----|:---------|:--------|:------------|
+| **agent_id** | `str` | نعم | None | المعرّف الفريد لوكيل Bedrock |
+| **agent_alias_id** | `str` | نعم | None | المعرّف الفريد لاسم الوكيل المستعار |
+| **session_id** | `str` | لا | الطابع الزمني | المعرّف الفريد للجلسة |
+| **enable_trace** | `bool` | لا | False | ما إذا كان سيتم تفعيل التتبع لأغراض التصحيح |
+| **end_session** | `bool` | لا | False | ما إذا كان سيتم إنهاء الجلسة بعد الاستدعاء |
+| **description** | `str` | لا | None | وصف مخصص للأداة |
+
+## متغيرات البيئة
+
+```bash
+BEDROCK_AGENT_ID=your-agent-id # Alternative to passing agent_id
+BEDROCK_AGENT_ALIAS_ID=your-agent-alias-id # Alternative to passing agent_alias_id
+AWS_REGION=your-aws-region # Defaults to us-west-2
+AWS_ACCESS_KEY_ID=your-access-key # Required for AWS authentication
+AWS_SECRET_ACCESS_KEY=your-secret-key # Required for AWS authentication
+```
+
+## الاستخدام المتقدم
+
+### سير عمل متعدد الوكلاء مع إدارة الجلسات
+
+```python {2, 4-22}
+from crewai import Agent, Task, Crew, Process
+from crewai_tools.aws.bedrock.agents.invoke_agent_tool import BedrockInvokeAgentTool
+
+# Initialize tools with session management
+initial_tool = BedrockInvokeAgentTool(
+ agent_id="your-agent-id",
+ agent_alias_id="your-agent-alias-id",
+ session_id="custom-session-id"
+)
+
+followup_tool = BedrockInvokeAgentTool(
+ agent_id="your-agent-id",
+ agent_alias_id="your-agent-alias-id",
+ session_id="custom-session-id"
+)
+
+final_tool = BedrockInvokeAgentTool(
+ agent_id="your-agent-id",
+ agent_alias_id="your-agent-alias-id",
+ session_id="custom-session-id",
+ end_session=True
+)
+
+# Create agents for different stages
+researcher = Agent(
+ role='AWS Service Researcher',
+ goal='Gather information about AWS services',
+ backstory='I am specialized in finding detailed AWS service information.',
+ tools=[initial_tool]
+)
+
+analyst = Agent(
+ role='Service Compatibility Analyst',
+ goal='Analyze service compatibility and requirements',
+ backstory='I analyze AWS services for compatibility and integration possibilities.',
+ tools=[followup_tool]
+)
+
+summarizer = Agent(
+ role='Technical Documentation Writer',
+ goal='Create clear technical summaries',
+ backstory='I specialize in creating clear, concise technical documentation.',
+ tools=[final_tool]
+)
+
+# Create tasks
+research_task = Task(
+ description="Find all available AWS services in us-west-2 region.",
+ agent=researcher
+)
+
+analysis_task = Task(
+ description="Analyze which services support IPv6 and their implementation requirements.",
+ agent=analyst
+)
+
+summary_task = Task(
+ description="Create a summary of IPv6-compatible services and their key features.",
+ agent=summarizer
+)
+
+# Create a crew with the agents and tasks
+crew = Crew(
+ agents=[researcher, analyst, summarizer],
+ tasks=[research_task, analysis_task, summary_task],
+ process=Process.sequential,
+ verbose=2
+)
+
+# Run the crew
+result = crew.kickoff()
+```
+
+## حالات الاستخدام
+
+### التعاون الهجين متعدد الوكلاء
+- إنشاء سير عمل حيث يتعاون وكلاء CrewAI مع وكلاء Bedrock المُدارة التي تعمل كخدمات في AWS
+- تمكين سيناريوهات حيث تتم معالجة البيانات الحساسة داخل بيئة AWS الخاصة بك بينما تعمل وكلاء أخرى خارجياً
+- ربط وكلاء CrewAI المحلية مع وكلاء Bedrock السحابية لسير عمل ذكاء موزع
+
+### سيادة البيانات والامتثال
+- الحفاظ على سير عمل الوكلاء الحساسة للبيانات داخل بيئة AWS الخاصة بك مع السماح لوكلاء CrewAI الخارجية بتنسيق المهام
+- الحفاظ على الامتثال لمتطلبات إقامة البيانات من خلال معالجة المعلومات الحساسة فقط داخل حساب AWS الخاص بك
+- تمكين التعاون الآمن متعدد الوكلاء حيث لا يمكن لبعض الوكلاء الوصول إلى البيانات الخاصة بمؤسستك
+
+### التكامل السلس مع خدمات AWS
+- الوصول إلى أي خدمة AWS من خلال Amazon Bedrock Actions دون كتابة كود تكامل معقد
+- تمكين وكلاء CrewAI من التفاعل مع خدمات AWS من خلال طلبات اللغة الطبيعية
+- الاستفادة من قدرات وكلاء Bedrock المبنية مسبقاً للتفاعل مع خدمات AWS مثل Bedrock Knowledge Bases و Lambda والمزيد
+
+### هياكل وكلاء هجينة قابلة للتوسع
+- تفريغ المهام الحسابية المكثفة إلى وكلاء Bedrock المُدارة بينما تعمل المهام الخفيفة في CrewAI
+- توسيع معالجة الوكلاء من خلال توزيع أعباء العمل بين وكلاء CrewAI المحلية ووكلاء Bedrock السحابية
+
+### التعاون بين المؤسسات
+- تمكين التعاون الآمن بين وكلاء CrewAI الخاصة بمؤسستك ووكلاء Bedrock الخاصة بالمؤسسات الشريكة
+- إنشاء سير عمل حيث يمكن دمج الخبرة الخارجية من وكلاء Bedrock دون كشف البيانات الحساسة
+- بناء أنظمة وكلاء تمتد عبر حدود المؤسسات مع الحفاظ على الأمان والتحكم في البيانات
diff --git a/docs/v1.15.1/ar/tools/integration/crewaiautomationtool.mdx b/docs/v1.15.1/ar/tools/integration/crewaiautomationtool.mdx
new file mode 100644
index 000000000..6ee8778f4
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/integration/crewaiautomationtool.mdx
@@ -0,0 +1,276 @@
+---
+title: أداة تشغيل أتمتة CrewAI
+description: تتيح لوكلاء CrewAI استدعاء أتمتة منصة CrewAI والاستفادة من خدمات الأطقم الخارجية ضمن سير العمل الخاص بك.
+icon: robot
+---
+
+# `InvokeCrewAIAutomationTool`
+
+توفر `InvokeCrewAIAutomationTool` تكاملاً مع واجهة برمجة تطبيقات منصة CrewAI مع خدمات الأطقم الخارجية. تتيح لك هذه الأداة استدعاء أتمتة منصة CrewAI والتفاعل معها من داخل وكلاء CrewAI، مما يمكّن التكامل السلس بين سير عمل الأطقم المختلفة.
+
+## التثبيت
+
+```bash
+uv pip install 'crewai[tools]'
+```
+
+## المتطلبات
+
+- الوصول إلى واجهة برمجة تطبيقات منصة CrewAI
+- رمز حامل صالح للمصادقة
+- الوصول الشبكي إلى نقاط نهاية أتمتة منصة CrewAI
+
+## الاستخدام
+
+إليك كيفية استخدام الأداة مع وكيل CrewAI:
+
+```python {2, 4-9}
+from crewai import Agent, Task, Crew
+from crewai_tools import InvokeCrewAIAutomationTool
+
+# Initialize the tool
+automation_tool = InvokeCrewAIAutomationTool(
+ crew_api_url="https://data-analysis-crew-[...].crewai.com",
+ crew_bearer_token="your_bearer_token_here",
+ crew_name="Data Analysis Crew",
+ crew_description="Analyzes data and generates insights"
+)
+
+# Create a CrewAI agent that uses the tool
+automation_coordinator = Agent(
+ role='Automation Coordinator',
+ goal='Coordinate and execute automated crew tasks',
+ backstory='I am an expert at leveraging automation tools to execute complex workflows.',
+ tools=[automation_tool],
+ verbose=True
+)
+
+# Create a task for the agent
+analysis_task = Task(
+ description="Execute data analysis automation and provide insights",
+ agent=automation_coordinator,
+ expected_output="Comprehensive data analysis report"
+)
+
+# Create a crew with the agent
+crew = Crew(
+ agents=[automation_coordinator],
+ tasks=[analysis_task],
+ verbose=2
+)
+
+# Run the crew
+result = crew.kickoff()
+print(result)
+```
+
+## معاملات الأداة
+
+| المعامل | النوع | مطلوب | الافتراضي | الوصف |
+|:---------|:-----|:---------|:--------|:------------|
+| **crew_api_url** | `str` | نعم | None | عنوان URL الأساسي لواجهة برمجة تطبيقات أتمتة منصة CrewAI |
+| **crew_bearer_token** | `str` | نعم | None | رمز حامل لمصادقة API |
+| **crew_name** | `str` | نعم | None | اسم أتمتة الطاقم |
+| **crew_description** | `str` | نعم | None | وصف ما تفعله أتمتة الطاقم |
+| **max_polling_time** | `int` | لا | 600 | الحد الأقصى للوقت بالثواني للانتظار حتى اكتمال المهمة |
+| **crew_inputs** | `dict` | لا | None | قاموس يحدد حقول مخطط المدخلات المخصصة |
+
+## متغيرات البيئة
+
+```bash
+CREWAI_API_URL=https://your-crew-automation.crewai.com # Alternative to passing crew_api_url
+CREWAI_BEARER_TOKEN=your_bearer_token_here # Alternative to passing crew_bearer_token
+```
+
+## الاستخدام المتقدم
+
+### مخطط مدخلات مخصص مع معاملات ديناميكية
+
+```python {2, 4-15}
+from crewai import Agent, Task, Crew
+from crewai_tools import InvokeCrewAIAutomationTool
+from pydantic import Field
+
+# Define custom input schema
+custom_inputs = {
+ "year": Field(..., description="Year to retrieve the report for (integer)"),
+ "region": Field(default="global", description="Geographic region for analysis"),
+ "format": Field(default="summary", description="Report format (summary, detailed, raw)")
+}
+
+# Create tool with custom inputs
+market_research_tool = InvokeCrewAIAutomationTool(
+ crew_api_url="https://state-of-ai-report-crew-[...].crewai.com",
+ crew_bearer_token="your_bearer_token_here",
+ crew_name="State of AI Report",
+ crew_description="Retrieves a comprehensive report on state of AI for a given year and region",
+ crew_inputs=custom_inputs,
+ max_polling_time=15 * 60 # 15 minutes timeout
+)
+
+# Create an agent with the tool
+research_agent = Agent(
+ role="Research Coordinator",
+ goal="Coordinate and execute market research tasks",
+ backstory="You are an expert at coordinating research tasks and leveraging automation tools.",
+ tools=[market_research_tool],
+ verbose=True
+)
+
+# Create and execute a task with custom parameters
+research_task = Task(
+ description="Conduct market research on AI tools market for 2024 in North America with detailed format",
+ agent=research_agent,
+ expected_output="Comprehensive market research report"
+)
+
+crew = Crew(
+ agents=[research_agent],
+ tasks=[research_task]
+)
+
+result = crew.kickoff()
+```
+
+### سير عمل أتمتة متعدد المراحل
+
+```python {2, 4-35}
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import InvokeCrewAIAutomationTool
+
+# Initialize different automation tools
+data_collection_tool = InvokeCrewAIAutomationTool(
+ crew_api_url="https://data-collection-crew-[...].crewai.com",
+ crew_bearer_token="your_bearer_token_here",
+ crew_name="Data Collection Automation",
+ crew_description="Collects and preprocesses raw data"
+)
+
+analysis_tool = InvokeCrewAIAutomationTool(
+ crew_api_url="https://analysis-crew-[...].crewai.com",
+ crew_bearer_token="your_bearer_token_here",
+ crew_name="Analysis Automation",
+ crew_description="Performs advanced data analysis and modeling"
+)
+
+reporting_tool = InvokeCrewAIAutomationTool(
+ crew_api_url="https://reporting-crew-[...].crewai.com",
+ crew_bearer_token="your_bearer_token_here",
+ crew_name="Reporting Automation",
+ crew_description="Generates comprehensive reports and visualizations"
+)
+
+# Create specialized agents
+data_collector = Agent(
+ role='Data Collection Specialist',
+ goal='Gather and preprocess data from various sources',
+ backstory='I specialize in collecting and cleaning data from multiple sources.',
+ tools=[data_collection_tool]
+)
+
+data_analyst = Agent(
+ role='Data Analysis Expert',
+ goal='Perform advanced analysis on collected data',
+ backstory='I am an expert in statistical analysis and machine learning.',
+ tools=[analysis_tool]
+)
+
+report_generator = Agent(
+ role='Report Generation Specialist',
+ goal='Create comprehensive reports and visualizations',
+ backstory='I excel at creating clear, actionable reports from complex data.',
+ tools=[reporting_tool]
+)
+
+# Create sequential tasks
+collection_task = Task(
+ description="Collect market data for Q4 2024 analysis",
+ agent=data_collector
+)
+
+analysis_task = Task(
+ description="Analyze collected data to identify trends and patterns",
+ agent=data_analyst
+)
+
+reporting_task = Task(
+ description="Generate executive summary report with key insights and recommendations",
+ agent=report_generator
+)
+
+# Create a crew with sequential processing
+crew = Crew(
+ agents=[data_collector, data_analyst, report_generator],
+ tasks=[collection_task, analysis_task, reporting_task],
+ process=Process.sequential,
+ verbose=2
+)
+
+result = crew.kickoff()
+```
+
+## حالات الاستخدام
+
+### تنسيق الأطقم الموزعة
+- تنسيق أتمتة أطقم متخصصة متعددة للتعامل مع سير عمل معقدة ومتعددة المراحل
+- تمكين عمليات التسليم السلسة بين خدمات الأتمتة المختلفة لتنفيذ شامل للمهام
+- توسيع المعالجة من خلال توزيع أعباء العمل عبر أتمتة منصة CrewAI المتعددة
+
+### التكامل عبر المنصات
+- ربط وكلاء CrewAI مع أتمتة منصة CrewAI لسير عمل محلي-سحابي هجين
+- الاستفادة من الأتمتة المتخصصة مع الحفاظ على التحكم والتنسيق المحلي
+- تمكين التعاون الآمن بين الوكلاء المحليين وخدمات الأتمتة السحابية
+
+### خطوط أنابيب أتمتة المؤسسات
+- إنشاء خطوط أنابيب أتمتة بمستوى المؤسسة تجمع بين الذكاء المحلي وقوة المعالجة السحابية
+- تنفيذ سير عمل أعمال معقدة تمتد عبر خدمات أتمتة متعددة
+- تمكين عمليات قابلة للتوسع ومتكررة لتحليل البيانات وإعداد التقارير واتخاذ القرارات
+
+### تركيب سير العمل الديناميكي
+- تركيب سير العمل ديناميكياً من خلال تسلسل خدمات أتمتة مختلفة بناءً على متطلبات المهمة
+- تمكين المعالجة التكيفية حيث يعتمد اختيار الأتمتة على خصائص البيانات أو قواعد العمل
+- إنشاء مكونات أتمتة مرنة وقابلة لإعادة الاستخدام يمكن دمجها بطرق مختلفة
+
+### المعالجة المتخصصة بالمجال
+- الوصول إلى أتمتة خاصة بالمجال (التحليل المالي، البحث القانوني، التوثيق التقني) من وكلاء ذات أغراض عامة
+- الاستفادة من أتمتة أطقم متخصصة مبنية مسبقاً دون إعادة بناء منطق المجال المعقد
+- تمكين الوكلاء من الوصول إلى قدرات مستوى الخبراء من خلال خدمات أتمتة مستهدفة
+
+## مخطط المدخلات المخصص
+
+عند تعريف `crew_inputs`، استخدم كائنات Pydantic Field لتحديد معاملات المدخلات:
+
+```python
+from pydantic import Field
+
+crew_inputs = {
+ "required_param": Field(..., description="This parameter is required"),
+ "optional_param": Field(default="default_value", description="This parameter is optional"),
+ "typed_param": Field(..., description="Integer parameter", ge=1, le=100) # With validation
+}
+```
+
+## معالجة الأخطاء
+
+توفر الأداة معالجة شاملة للأخطاء للسيناريوهات الشائعة:
+
+- **أخطاء اتصال API**: مشكلات الاتصال الشبكي مع منصة CrewAI
+- **أخطاء المصادقة**: رموز حامل غير صالحة أو منتهية الصلاحية
+- **أخطاء المهلة**: المهام التي تتجاوز الحد الأقصى لوقت الاستقصاء
+- **فشل المهام**: أتمتة الأطقم التي تفشل أثناء التنفيذ
+- **أخطاء التحقق من المدخلات**: معاملات غير صالحة مُمررة إلى نقاط نهاية الأتمتة
+
+## نقاط نهاية API
+
+تتفاعل الأداة مع نقطتي نهاية API رئيسيتين:
+
+- `POST {crew_api_url}/kickoff`: بدء مهمة أتمتة طاقم جديدة
+- `GET {crew_api_url}/status/{crew_id}`: التحقق من حالة مهمة قيد التشغيل
+
+## ملاحظات
+
+- تقوم الأداة تلقائياً باستقصاء نقطة نهاية الحالة كل ثانية حتى الاكتمال أو انتهاء المهلة
+- تُرجع المهام الناجحة النتيجة مباشرة، بينما تُرجع المهام الفاشلة معلومات الخطأ
+- يجب الحفاظ على أمان رموز الحامل وعدم ترميزها بشكل ثابت في بيئات الإنتاج
+- فكر في استخدام متغيرات البيئة للتكوينات الحساسة مثل رموز الحامل
+- يجب أن تكون مخططات المدخلات المخصصة متوافقة مع المعاملات المتوقعة لأتمتة الطاقم المستهدف
diff --git a/docs/v1.15.1/ar/tools/integration/mergeagenthandlertool.mdx b/docs/v1.15.1/ar/tools/integration/mergeagenthandlertool.mdx
new file mode 100644
index 000000000..8c492a953
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/integration/mergeagenthandlertool.mdx
@@ -0,0 +1,367 @@
+---
+title: أداة معالج وكيل Merge
+description: تتيح لوكلاء CrewAI الوصول بأمان إلى تكاملات الأطراف الثالثة مثل Linear و GitHub و Slack والمزيد من خلال منصة معالج الوكيل من Merge
+icon: diagram-project
+mode: "wide"
+---
+
+# `MergeAgentHandlerTool`
+
+تتيح `MergeAgentHandlerTool` لوكلاء CrewAI الوصول بأمان إلى تكاملات الأطراف الثالثة من خلال منصة [معالج الوكيل من Merge](https://www.merge.dev/products/merge-agent-handler). يوفر معالج الوكيل موصلات جاهزة وآمنة لأدوات شائعة مثل Linear و GitHub و Slack و Notion ومئات غيرها - جميعها مع مصادقة وصلاحيات ومراقبة مدمجة.
+
+## التثبيت
+
+```bash
+uv pip install 'crewai[tools]'
+```
+
+## المتطلبات
+
+- حساب معالج وكيل Merge مع حزمة أدوات مُهيأة
+- مفتاح API لمعالج الوكيل
+- مستخدم مسجل واحد على الأقل مرتبط بحزمة الأدوات الخاصة بك
+- تكاملات أطراف ثالثة مُهيأة في حزمة الأدوات الخاصة بك
+
+## البدء مع معالج الوكيل
+
+1. **التسجيل** في حساب معالج وكيل Merge على [ah.merge.dev/signup](https://ah.merge.dev/signup)
+2. **إنشاء حزمة أدوات** وتكوين التكاملات التي تحتاجها
+3. **تسجيل المستخدمين** الذين سيقومون بالمصادقة مع خدمات الأطراف الثالثة
+4. **الحصول على مفتاح API** من لوحة تحكم معالج الوكيل
+5. **تعيين متغير البيئة**: `export AGENT_HANDLER_API_KEY='your-key-here'`
+6. **البدء بالبناء** مع MergeAgentHandlerTool في CrewAI
+
+## ملاحظات
+
+- يمكن العثور على معرّفات حزمة الأدوات ومعرّفات المستخدمين المسجلين في لوحة تحكم معالج الوكيل أو إنشاؤها عبر API
+- تستخدم الأداة بروتوكول سياق النموذج (MCP) للتواصل مع معالج الوكيل
+- يتم توليد معرّفات الجلسة تلقائياً ولكن يمكن تخصيصها لاستمرارية السياق
+- يتم تسجيل جميع استدعاءات الأدوات وإمكانية مراجعتها من خلال منصة معالج الوكيل
+- يتم اكتشاف معاملات الأدوات ديناميكياً من واجهة برمجة تطبيقات معالج الوكيل والتحقق منها تلقائياً
+
+## الاستخدام
+
+### استخدام أداة واحدة
+
+إليك كيفية استخدام أداة محددة من حزمة الأدوات الخاصة بك:
+
+```python {2, 4-9}
+from crewai import Agent, Task, Crew
+from crewai_tools import MergeAgentHandlerTool
+
+# Create a tool for Linear issue creation
+linear_create_tool = MergeAgentHandlerTool.from_tool_name(
+ tool_name="linear__create_issue",
+ tool_pack_id="134e0111-0f67-44f6-98f0-597000290bb3",
+ registered_user_id="91b2b905-e866-40c8-8be2-efe53827a0aa"
+)
+
+# Create a CrewAI agent that uses the tool
+project_manager = Agent(
+ role='Project Manager',
+ goal='Manage project tasks and issues efficiently',
+ backstory='I am an expert at tracking project work and creating actionable tasks.',
+ tools=[linear_create_tool],
+ verbose=True
+)
+
+# Create a task for the agent
+create_issue_task = Task(
+ description="Create a new high-priority issue in Linear titled 'Implement user authentication' with a detailed description of the requirements.",
+ agent=project_manager,
+ expected_output="Confirmation that the issue was created with its ID"
+)
+
+# Create a crew with the agent
+crew = Crew(
+ agents=[project_manager],
+ tasks=[create_issue_task],
+ verbose=True
+)
+
+# Run the crew
+result = crew.kickoff()
+print(result)
+```
+
+### تحميل أدوات متعددة من حزمة أدوات
+
+يمكنك تحميل جميع الأدوات المتاحة من حزمة الأدوات دفعة واحدة:
+
+```python {2, 4-8}
+from crewai import Agent, Task, Crew
+from crewai_tools import MergeAgentHandlerTool
+
+# Load all tools from the Tool Pack
+tools = MergeAgentHandlerTool.from_tool_pack(
+ tool_pack_id="134e0111-0f67-44f6-98f0-597000290bb3",
+ registered_user_id="91b2b905-e866-40c8-8be2-efe53827a0aa"
+)
+
+# Create an agent with access to all tools
+automation_expert = Agent(
+ role='Automation Expert',
+ goal='Automate workflows across multiple platforms',
+ backstory='I can work with any tool in the toolbox to get things done.',
+ tools=tools,
+ verbose=True
+)
+
+automation_task = Task(
+ description="Check for any high-priority issues in Linear and post a summary to Slack.",
+ agent=automation_expert
+)
+
+crew = Crew(
+ agents=[automation_expert],
+ tasks=[automation_task],
+ verbose=True
+)
+
+result = crew.kickoff()
+```
+
+### تحميل أدوات محددة فقط
+
+تحميل الأدوات التي تحتاجها فقط:
+
+```python {2, 4-10}
+from crewai import Agent, Task, Crew
+from crewai_tools import MergeAgentHandlerTool
+
+# Load specific tools from the Tool Pack
+selected_tools = MergeAgentHandlerTool.from_tool_pack(
+ tool_pack_id="134e0111-0f67-44f6-98f0-597000290bb3",
+ registered_user_id="91b2b905-e866-40c8-8be2-efe53827a0aa",
+ tool_names=["linear__create_issue", "linear__get_issues", "slack__post_message"]
+)
+
+developer_assistant = Agent(
+ role='Developer Assistant',
+ goal='Help developers track and communicate about their work',
+ backstory='I help developers stay organized and keep the team informed.',
+ tools=selected_tools,
+ verbose=True
+)
+
+daily_update_task = Task(
+ description="Get all issues assigned to the current user in Linear and post a summary to the #dev-updates Slack channel.",
+ agent=developer_assistant
+)
+
+crew = Crew(
+ agents=[developer_assistant],
+ tasks=[daily_update_task],
+ verbose=True
+)
+
+result = crew.kickoff()
+```
+
+## معاملات الأداة
+
+### طريقة `from_tool_name()`
+
+| المعامل | النوع | مطلوب | الافتراضي | الوصف |
+|:---------|:-----|:---------|:--------|:------------|
+| **tool_name** | `str` | نعم | None | اسم الأداة المحددة المراد استخدامها (مثل "linear__create_issue") |
+| **tool_pack_id** | `str` | نعم | None | معرّف UUID لحزمة أدوات معالج الوكيل |
+| **registered_user_id** | `str` | نعم | None | معرّف UUID أو origin_id للمستخدم المسجل |
+| **base_url** | `str` | لا | "https://ah-api.merge.dev" | عنوان URL الأساسي لواجهة برمجة تطبيقات معالج الوكيل |
+| **session_id** | `str` | لا | يتم توليده تلقائياً | معرّف جلسة MCP للحفاظ على السياق |
+
+### طريقة `from_tool_pack()`
+
+| المعامل | النوع | مطلوب | الافتراضي | الوصف |
+|:---------|:-----|:---------|:--------|:------------|
+| **tool_pack_id** | `str` | نعم | None | معرّف UUID لحزمة أدوات معالج الوكيل |
+| **registered_user_id** | `str` | نعم | None | معرّف UUID أو origin_id للمستخدم المسجل |
+| **tool_names** | `list[str]` | لا | None | أسماء أدوات محددة للتحميل. إذا كانت None، يتم تحميل جميع الأدوات المتاحة |
+| **base_url** | `str` | لا | "https://ah-api.merge.dev" | عنوان URL الأساسي لواجهة برمجة تطبيقات معالج الوكيل |
+
+## متغيرات البيئة
+
+```bash
+AGENT_HANDLER_API_KEY=your_api_key_here # Required for authentication
+```
+
+## الاستخدام المتقدم
+
+### سير عمل متعدد الوكلاء مع صلاحيات أدوات مختلفة
+
+```python {2, 4-20}
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import MergeAgentHandlerTool
+
+# Create specialized tools for different agents
+github_tools = MergeAgentHandlerTool.from_tool_pack(
+ tool_pack_id="134e0111-0f67-44f6-98f0-597000290bb3",
+ registered_user_id="91b2b905-e866-40c8-8be2-efe53827a0aa",
+ tool_names=["github__create_pull_request", "github__get_pull_requests"]
+)
+
+linear_tools = MergeAgentHandlerTool.from_tool_pack(
+ tool_pack_id="134e0111-0f67-44f6-98f0-597000290bb3",
+ registered_user_id="91b2b905-e866-40c8-8be2-efe53827a0aa",
+ tool_names=["linear__create_issue", "linear__update_issue"]
+)
+
+slack_tool = MergeAgentHandlerTool.from_tool_name(
+ tool_name="slack__post_message",
+ tool_pack_id="134e0111-0f67-44f6-98f0-597000290bb3",
+ registered_user_id="91b2b905-e866-40c8-8be2-efe53827a0aa"
+)
+
+# Create specialized agents
+code_reviewer = Agent(
+ role='Code Reviewer',
+ goal='Review pull requests and ensure code quality',
+ backstory='I am an expert at reviewing code changes and providing constructive feedback.',
+ tools=github_tools
+)
+
+task_manager = Agent(
+ role='Task Manager',
+ goal='Track and update project tasks based on code changes',
+ backstory='I keep the project board up to date with the latest development progress.',
+ tools=linear_tools
+)
+
+communicator = Agent(
+ role='Team Communicator',
+ goal='Keep the team informed about important updates',
+ backstory='I make sure everyone knows what is happening in the project.',
+ tools=[slack_tool]
+)
+
+# Create sequential tasks
+review_task = Task(
+ description="Review all open pull requests in the 'api-service' repository and identify any that need attention.",
+ agent=code_reviewer,
+ expected_output="List of pull requests that need review or have issues"
+)
+
+update_task = Task(
+ description="Update Linear issues based on the pull request review findings. Mark completed PRs as done.",
+ agent=task_manager,
+ expected_output="Summary of updated Linear issues"
+)
+
+notify_task = Task(
+ description="Post a summary of today's code review and task updates to the #engineering Slack channel.",
+ agent=communicator,
+ expected_output="Confirmation that the message was posted"
+)
+
+# Create a crew with sequential processing
+crew = Crew(
+ agents=[code_reviewer, task_manager, communicator],
+ tasks=[review_task, update_task, notify_task],
+ process=Process.sequential,
+ verbose=True
+)
+
+result = crew.kickoff()
+```
+
+### إدارة الجلسات المخصصة
+
+الحفاظ على السياق عبر استدعاءات أدوات متعددة باستخدام معرّفات الجلسة:
+
+```python {2, 4-17}
+from crewai import Agent, Task, Crew
+from crewai_tools import MergeAgentHandlerTool
+
+# Create tools with the same session ID to maintain context
+session_id = "project-sprint-planning-2024"
+
+create_tool = MergeAgentHandlerTool(
+ name="linear_create_issue",
+ description="Creates a new issue in Linear",
+ tool_name="linear__create_issue",
+ tool_pack_id="134e0111-0f67-44f6-98f0-597000290bb3",
+ registered_user_id="91b2b905-e866-40c8-8be2-efe53827a0aa",
+ session_id=session_id
+)
+
+update_tool = MergeAgentHandlerTool(
+ name="linear_update_issue",
+ description="Updates an existing issue in Linear",
+ tool_name="linear__update_issue",
+ tool_pack_id="134e0111-0f67-44f6-98f0-597000290bb3",
+ registered_user_id="91b2b905-e866-40c8-8be2-efe53827a0aa",
+ session_id=session_id
+)
+
+sprint_planner = Agent(
+ role='Sprint Planner',
+ goal='Plan and organize sprint tasks',
+ backstory='I help teams plan effective sprints with well-defined tasks.',
+ tools=[create_tool, update_tool],
+ verbose=True
+)
+
+planning_task = Task(
+ description="Create 5 sprint tasks for the authentication feature and set their priorities based on dependencies.",
+ agent=sprint_planner
+)
+
+crew = Crew(
+ agents=[sprint_planner],
+ tasks=[planning_task],
+ verbose=True
+)
+
+result = crew.kickoff()
+```
+
+## حالات الاستخدام
+
+### الوصول الموحد للتكاملات
+- الوصول إلى مئات أدوات الأطراف الثالثة من خلال واجهة برمجة تطبيقات موحدة واحدة دون إدارة حزم SDK متعددة
+- تمكين الوكلاء من العمل مع Linear و GitHub و Slack و Notion و Jira و Asana والمزيد من نقطة تكامل واحدة
+- تقليل تعقيد التكامل من خلال السماح لمعالج الوكيل بإدارة المصادقة وإصدارات API
+
+### سير عمل المؤسسات الآمنة
+- الاستفادة من إدارة المصادقة والصلاحيات المدمجة لجميع تكاملات الأطراف الثالثة
+- الحفاظ على معايير أمان المؤسسة مع التحكم المركزي في الوصول وتسجيل المراجعة
+- تمكين الوكلاء من الوصول إلى أدوات الشركة دون كشف مفاتيح API أو بيانات الاعتماد في الكود
+
+### الأتمتة عبر المنصات
+- بناء سير عمل يمتد عبر منصات متعددة (مثل إنشاء مشكلات GitHub من مهام Linear، مزامنة صفحات Notion مع Slack)
+- تمكين تدفق البيانات السلس بين الأدوات المختلفة في مجموعتك التقنية
+- إنشاء أتمتة ذكية تفهم السياق عبر المنصات المختلفة
+
+### اكتشاف الأدوات الديناميكي
+- تحميل جميع الأدوات المتاحة أثناء التشغيل دون ترميز منطق التكامل بشكل ثابت
+- تمكين الوكلاء من اكتشاف واستخدام أدوات جديدة عند إضافتها إلى حزمة الأدوات
+- بناء وكلاء مرنة يمكنها التكيف مع تغير توفر الأدوات
+
+### الوصول إلى الأدوات حسب المستخدم
+- يمكن لمستخدمين مختلفين الحصول على صلاحيات ومستويات وصول مختلفة للأدوات
+- تمكين سير عمل متعدد المستأجرين حيث تعمل الوكلاء نيابة عن مستخدمين محددين
+- الحفاظ على الإسناد والصلاحيات المناسبة لجميع إجراءات الأدوات
+
+## التكاملات المتاحة
+
+يدعم معالج وكيل Merge مئات التكاملات عبر فئات متعددة:
+
+- **إدارة المشاريع**: Linear، Jira، Asana، Monday.com، ClickUp
+- **إدارة الكود**: GitHub، GitLab، Bitbucket
+- **التواصل**: Slack، Microsoft Teams، Discord
+- **التوثيق**: Notion، Confluence، Google Docs
+- **إدارة علاقات العملاء**: Salesforce، HubSpot، Pipedrive
+- **والمزيد...**
+
+قم بزيارة [وثائق معالج وكيل Merge](https://docs.ah.merge.dev/) للحصول على قائمة كاملة بالتكاملات المتاحة.
+
+## معالجة الأخطاء
+
+توفر الأداة معالجة شاملة للأخطاء:
+
+- **أخطاء المصادقة**: مفاتيح API غير صالحة أو مفقودة
+- **أخطاء الصلاحيات**: المستخدم يفتقر إلى صلاحية الإجراء المطلوب
+- **أخطاء API**: مشكلات في التواصل مع معالج الوكيل أو خدمات الأطراف الثالثة
+- **أخطاء التحقق**: معاملات غير صالحة مُمررة لطرق الأداة
+
+يتم تغليف جميع الأخطاء في `MergeAgentHandlerToolError` لمعالجة أخطاء متسقة.
diff --git a/docs/v1.15.1/ar/tools/integration/overview.mdx b/docs/v1.15.1/ar/tools/integration/overview.mdx
new file mode 100644
index 000000000..accb39072
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/integration/overview.mdx
@@ -0,0 +1,76 @@
+---
+title: "نظرة عامة"
+description: "ربط وكلاء CrewAI مع الأتمتة الخارجية وخدمات الذكاء الاصطناعي المُدارة"
+icon: "face-smile"
+mode: "wide"
+---
+
+تتيح أدوات التكامل لوكلائك تسليم العمل إلى منصات أتمتة أخرى وخدمات ذكاء اصطناعي مُدارة. استخدمها عندما يحتاج سير العمل إلى استدعاء نشر CrewAI موجود أو تفويض مهام متخصصة لمزودين مثل Amazon Bedrock.
+
+## **الأدوات المتاحة**
+
+
+
+ الوصول بأمان إلى مئات أدوات الأطراف الثالثة مثل Linear و GitHub و Slack والمزيد من خلال واجهة API الموحدة من Merge.
+
+
+
+ استدعاء أتمتة منصة CrewAI المباشرة، تمرير مدخلات مخصصة، واستقصاء النتائج مباشرة من وكيلك.
+
+
+
+ استدعاء وكلاء Amazon Bedrock من أطقمك، إعادة استخدام حواجز حماية AWS، وبث الاستجابات مرة أخرى إلى سير العمل.
+
+
+
+## **حالات الاستخدام الشائعة**
+
+- **تسلسل الأتمتة**: بدء نشر CrewAI موجود من داخل طاقم أو تدفق آخر
+- **تسليم المؤسسة**: توجيه المهام إلى وكلاء Bedrock التي تغلف بالفعل منطق الشركة وحواجز الحماية
+- **سير العمل الهجين**: الجمع بين تفكير CrewAI والأنظمة اللاحقة التي تكشف واجهات برمجة تطبيقات الوكلاء الخاصة بها
+- **المهام طويلة التشغيل**: استقصاء الأتمتة الخارجية ودمج النتائج النهائية مرة أخرى في التشغيل الحالي
+
+## **مثال للبدء السريع**
+
+```python
+from crewai import Agent, Task, Crew
+from crewai_tools import InvokeCrewAIAutomationTool
+from crewai_tools.aws.bedrock.agents.invoke_agent_tool import BedrockInvokeAgentTool
+
+# External automation
+analysis_automation = InvokeCrewAIAutomationTool(
+ crew_api_url="https://analysis-crew.acme.crewai.com",
+ crew_bearer_token="YOUR_BEARER_TOKEN",
+ crew_name="Analysis Automation",
+ crew_description="Runs the production-grade analysis pipeline",
+)
+
+# Managed agent on Bedrock
+knowledge_router = BedrockInvokeAgentTool(
+ agent_id="bedrock-agent-id",
+ agent_alias_id="prod",
+)
+
+automation_strategist = Agent(
+ role="Automation Strategist",
+ goal="Orchestrate external automations and summarise their output",
+ backstory="You coordinate enterprise workflows and know when to delegate tasks to specialised services.",
+ tools=[analysis_automation, knowledge_router],
+ verbose=True,
+)
+
+execute_playbook = Task(
+ description="Run the analysis automation and ask the Bedrock agent for executive talking points.",
+ agent=automation_strategist,
+)
+
+Crew(agents=[automation_strategist], tasks=[execute_playbook]).kickoff()
+```
+
+## **أفضل الممارسات**
+
+- **تأمين بيانات الاعتماد**: قم بتخزين مفاتيح API ورموز الحامل في متغيرات البيئة أو مدير الأسرار
+- **التخطيط لزمن الاستجابة**: قد تستغرق الأتمتة الخارجية وقتاً أطول - عيّن فترات استقصاء ومهلات مناسبة
+- **إعادة استخدام الجلسات**: تدعم وكلاء Bedrock معرّفات الجلسة حتى تتمكن من الحفاظ على السياق عبر استدعاءات أدوات متعددة
+- **التحقق من الاستجابات**: قم بتوحيد المخرجات عن بُعد (JSON، نص، رموز الحالة) قبل إعادة توجيهها إلى المهام اللاحقة
+- **مراقبة الاستخدام**: تتبع سجلات المراجعة في منصة CrewAI أو AWS CloudWatch للبقاء على اطلاع بحدود الحصص والأعطال
diff --git a/docs/v1.15.1/ar/tools/overview.mdx b/docs/v1.15.1/ar/tools/overview.mdx
new file mode 100644
index 000000000..0a20c720d
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/overview.mdx
@@ -0,0 +1,140 @@
+---
+title: "نظرة عامة على الأدوات"
+description: "اكتشف مكتبة CrewAI الواسعة التي تضم أكثر من 40 أداة لتعزيز قدرات وكلاء الذكاء الاصطناعي"
+icon: "toolbox"
+mode: "wide"
+---
+
+توفر CrewAI مكتبة واسعة من الأدوات الجاهزة لتعزيز قدرات وكلائك. من معالجة الملفات إلى استخراج بيانات الويب، ومن استعلامات قواعد البيانات إلى خدمات الذكاء الاصطناعي - لدينا ما تحتاجه.
+
+## **فئات الأدوات**
+
+
+
+ قراءة وكتابة والبحث في صيغ ملفات متنوعة بما في ذلك PDF و DOCX و JSON و CSV والمزيد. مثالية لسير عمل معالجة المستندات.
+
+
+
+ استخراج البيانات من المواقع، أتمتة تفاعلات المتصفح، واستخراج المحتوى على نطاق واسع باستخدام أدوات مثل Firecrawl و Selenium والمزيد.
+
+
+
+ إجراء عمليات بحث على الويب، العثور على مستودعات الكود، استكشاف محتوى YouTube، واكتشاف المعلومات عبر الإنترنت.
+
+
+
+ الاتصال بقواعد بيانات SQL ومخازن المتجهات ومستودعات البيانات. الاستعلام عن MySQL و PostgreSQL و Snowflake و Qdrant و Weaviate.
+
+
+
+ توليد الصور باستخدام DALL-E، معالجة مهام الرؤية، التكامل مع LangChain، بناء أنظمة RAG، والاستفادة من مفسرات الكود.
+
+
+
+ التفاعل مع الخدمات السحابية بما في ذلك AWS S3 و Amazon Bedrock وخدمات التخزين السحابي والذكاء الاصطناعي الأخرى.
+
+
+
+ أتمتة سير العمل مع Apify و Composio ومنصات أخرى لربط وكلائك بالخدمات الخارجية.
+
+
+
+ دمج CrewAI مع الأنظمة الخارجية مثل Amazon Bedrock ومجموعة أدوات أتمتة CrewAI.
+
+
+
+## **الوصول السريع**
+
+هل تحتاج إلى أداة محددة؟ إليك بعض الخيارات الشائعة:
+
+
+
+ تنفيذ الاسترجاع المعزز بالتوليد
+
+
+ واجهة برمجة تطبيقات بحث Google
+
+
+ قراءة أي نوع ملف
+
+
+ استخراج محتوى الويب
+
+
+ تنفيذ كود Python
+
+
+ الوصول إلى ملفات AWS S3
+
+
+
+## **البدء**
+
+لاستخدام أي أداة في مشروع CrewAI الخاص بك:
+
+1. **استيراد** الأداة في تكوين طاقمك
+2. **إضافتها** إلى قائمة أدوات وكيلك
+3. **تكوين** أي مفاتيح API أو إعدادات مطلوبة
+
+```python
+from crewai_tools import FileReadTool, SerperDevTool
+
+# Add tools to your agent
+agent = Agent(
+ role="Research Analyst",
+ tools=[FileReadTool(), SerperDevTool()],
+ # ... other configuration
+)
+```
+
+## **الحد الأقصى لعدد الاستخدامات**
+
+يمكنك تعيين حد أقصى لعدد استخدامات الأداة لمنع استخدامها أكثر من عدد معين من المرات. بشكل افتراضي، الحد الأقصى لعدد الاستخدامات غير محدود.
+
+```python
+from crewai_tools import FileReadTool
+
+tool = FileReadTool(max_usage_count=5, ...)
+```
+
+هل أنت مستعد للاستكشاف؟ اختر فئة أعلاه لاكتشاف الأدوات التي تناسب حالة استخدامك!
diff --git a/docs/v1.15.1/ar/tools/search-research/arxivpapertool.mdx b/docs/v1.15.1/ar/tools/search-research/arxivpapertool.mdx
new file mode 100644
index 000000000..099aa0afe
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/arxivpapertool.mdx
@@ -0,0 +1,111 @@
+---
+title: أداة أوراق arXiv
+description: تبحث `ArxivPaperTool` في arXiv عن أوراق بحثية مطابقة لاستعلام وتقوم اختيارياً بتنزيل ملفات PDF.
+icon: box-archive
+mode: "wide"
+---
+
+# `ArxivPaperTool`
+
+## الوصف
+
+تستعلم `ArxivPaperTool` من واجهة برمجة تطبيقات arXiv عن الأوراق الأكاديمية وتُرجع نتائج مختصرة وقابلة للقراءة. يمكنها أيضاً تنزيل ملفات PDF اختيارياً إلى القرص.
+
+## التثبيت
+
+لا تحتاج هذه الأداة إلى تثبيت خاص بخلاف `crewai-tools`.
+
+```shell
+uv add crewai-tools
+```
+
+لا يتطلب مفتاح API. تستخدم هذه الأداة واجهة Atom API العامة من arXiv.
+
+## خطوات البدء
+
+1. قم بتهيئة الأداة.
+2. قدّم `search_query` (مثل "transformer neural network").
+3. عيّن اختيارياً `max_results` (1-100) وفعّل تنزيل PDF في المُنشئ.
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import ArxivPaperTool
+
+tool = ArxivPaperTool(
+ download_pdfs=False,
+ save_dir="./arxiv_pdfs",
+ use_title_as_filename=True,
+)
+
+agent = Agent(
+ role="Researcher",
+ goal="Find relevant arXiv papers",
+ backstory="Expert at literature discovery",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="Search arXiv for 'transformer neural network' and list top 5 results.",
+ expected_output="A concise list of 5 relevant papers with titles, links, and summaries.",
+ agent=agent,
+)
+
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff()
+```
+
+### الاستخدام المباشر (بدون وكيل)
+
+```python Code
+from crewai_tools import ArxivPaperTool
+
+tool = ArxivPaperTool(
+ download_pdfs=True,
+ save_dir="./arxiv_pdfs",
+)
+print(tool.run(search_query="mixture of experts", max_results=3))
+```
+
+## المعاملات
+
+### معاملات التهيئة
+
+- `download_pdfs` (bool, الافتراضي `False`): ما إذا كان سيتم تنزيل ملفات PDF.
+- `save_dir` (str, الافتراضي `./arxiv_pdfs`): المجلد لحفظ ملفات PDF.
+- `use_title_as_filename` (bool, الافتراضي `False`): استخدام عناوين الأوراق كأسماء ملفات.
+
+### معاملات التشغيل
+
+- `search_query` (str, مطلوب): استعلام البحث في arXiv.
+- `max_results` (int, الافتراضي `5`, النطاق 1-100): عدد النتائج.
+
+## صيغة الإخراج
+
+تُرجع الأداة قائمة أوراق قابلة للقراءة تتضمن:
+- العنوان
+- الرابط (صفحة الملخص)
+- مقتطف/ملخص (مقتطع)
+
+عند تعيين `download_pdfs=True`، يتم حفظ ملفات PDF على القرص ويشير الملخص إلى الملفات المحفوظة.
+
+## ملاحظات الاستخدام
+
+- تُرجع الأداة نصاً منسقاً مع البيانات الوصفية الرئيسية والروابط.
+- عند تعيين `download_pdfs=True`، سيتم تخزين ملفات PDF في `save_dir`.
+
+## استكشاف الأخطاء وإصلاحها
+
+- إذا تلقيت انتهاء مهلة الشبكة، أعد المحاولة أو قلل `max_results`.
+- أخطاء XML غير صالحة تشير إلى مشكلة في تحليل استجابة arXiv؛ جرب استعلاماً أبسط.
+- قد تحدث أخطاء نظام الملفات (مثل رفض الصلاحية) عند حفظ ملفات PDF؛ تأكد من أن `save_dir` قابل للكتابة.
+
+## روابط ذات صلة
+
+- وثائق واجهة arXiv API: https://info.arxiv.org/help/api/index.html
+
+## معالجة الأخطاء
+
+- يتم التعامل مع مشكلات الشبكة و XML غير الصالح وأخطاء نظام التشغيل برسائل توضيحية.
diff --git a/docs/v1.15.1/ar/tools/search-research/bravesearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/bravesearchtool.mdx
new file mode 100644
index 000000000..20e94599c
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/bravesearchtool.mdx
@@ -0,0 +1,314 @@
+---
+title: أدوات بحث Brave
+description: مجموعة أدوات للاستعلام من واجهة برمجة تطبيقات Brave Search - تغطي البحث في الويب والأخبار والصور والفيديو.
+icon: searchengin
+mode: "wide"
+---
+
+# أدوات بحث Brave
+
+## الوصف
+
+تقدم CrewAI عائلة من أدوات بحث Brave، كل منها يستهدف نقطة نهاية محددة في [واجهة برمجة تطبيقات Brave Search](https://brave.com/search/api/). بدلاً من أداة واحدة شاملة، يمكنك اختيار الأداة التي تتطابق بدقة مع نوع النتائج التي يحتاجها وكيلك:
+
+| الأداة | نقطة النهاية | حالة الاستخدام |
+| --- | --- | --- |
+| `BraveWebSearchTool` | بحث الويب | نتائج ويب عامة ومقتطفات وعناوين URL |
+| `BraveNewsSearchTool` | بحث الأخبار | مقالات إخبارية حديثة وعناوين |
+| `BraveImageSearchTool` | بحث الصور | نتائج صور مع الأبعاد وعناوين URL المصدر |
+| `BraveVideoSearchTool` | بحث الفيديو | نتائج فيديو من جميع أنحاء الويب |
+| `BraveLocalPOIsTool` | نقاط الاهتمام المحلية | العثور على نقاط الاهتمام (مثل المطاعم) |
+| `BraveLocalPOIsDescriptionTool` | نقاط الاهتمام المحلية | استرجاع أوصاف المواقع المولّدة بالذكاء الاصطناعي |
+| `BraveLLMContextTool` | سياق LLM | محتوى ويب مستخرج مسبقاً ومُحسَّن لوكلاء الذكاء الاصطناعي وتأريض LLM وخطوط أنابيب RAG. |
+
+تشترك جميع الأدوات في صنف أساسي مشترك (`BraveSearchToolBase`) يوفر سلوكاً متسقاً - تحديد المعدل، إعادة المحاولة التلقائية عند استجابات `429`، التحقق من صحة الرؤوس والمعاملات، والحفظ الاختياري في الملفات.
+
+
+ لا يزال صنف `BraveSearchTool` القديم متاحاً للتوافق مع الإصدارات السابقة، لكنه يُعتبر **قديماً** ولن يحظى بنفس مستوى الاهتمام في المستقبل. نوصي بالانتقال إلى الأدوات المحددة المدرجة أعلاه، والتي توفر تكويناً أغنى وواجهة أكثر تركيزاً.
+
+
+
+ بينما يمكن استخدام العديد من الأدوات (مثل _BraveWebSearchTool_ و _BraveNewsSearchTool_ و _BraveImageSearchTool_ و _BraveVideoSearchTool_) مع اشتراك/خطة مجانية لواجهة Brave Search API، تتطلب بعض المعاملات (مثل `enable_snippets`) وبعض الأدوات (مثل _BraveLocalPOIsTool_ و _BraveLocalPOIsDescriptionTool_) خطة مدفوعة. راجع إمكانيات خطة اشتراكك للتوضيح.
+
+
+## التثبيت
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## البدء
+
+1. **تثبيت الحزمة** - تأكد من تثبيت `crewai[tools]` في بيئة Python الخاصة بك.
+2. **الحصول على مفتاح API** - سجّل في [api-dashboard.search.brave.com/login](https://api-dashboard.search.brave.com/login) لتوليد مفتاح.
+3. **تعيين متغير البيئة** - خزّن مفتاحك كـ `BRAVE_API_KEY`، أو مرره مباشرة عبر معامل `api_key`.
+
+## أمثلة سريعة
+
+### بحث الويب
+
+```python Code
+from crewai_tools import BraveWebSearchTool
+
+tool = BraveWebSearchTool()
+results = tool.run(q="CrewAI agent framework")
+print(results)
+```
+
+### بحث الأخبار
+
+```python Code
+from crewai_tools import BraveNewsSearchTool
+
+tool = BraveNewsSearchTool()
+results = tool.run(q="latest AI breakthroughs")
+print(results)
+```
+
+### بحث الصور
+
+```python Code
+from crewai_tools import BraveImageSearchTool
+
+tool = BraveImageSearchTool()
+results = tool.run(q="northern lights photography")
+print(results)
+```
+
+### بحث الفيديو
+
+```python Code
+from crewai_tools import BraveVideoSearchTool
+
+tool = BraveVideoSearchTool()
+results = tool.run(q="how to build AI agents")
+print(results)
+```
+
+### أوصاف نقاط الاهتمام المحلية
+
+```python Code
+from crewai_tools import (
+ BraveWebSearchTool,
+ BraveLocalPOIsDescriptionTool,
+)
+
+web_search = BraveWebSearchTool(raw=True)
+poi_details = BraveLocalPOIsDescriptionTool()
+
+results = web_search.run(q="italian restaurants in pensacola, florida")
+
+if "locations" in results:
+ location_ids = [ loc["id"] for loc in results["locations"]["results"] ]
+ if location_ids:
+ descriptions = poi_details.run(ids=location_ids)
+ print(descriptions)
+```
+
+## معاملات المُنشئ المشتركة
+
+تقبل كل أداة بحث Brave المعاملات التالية عند التهيئة:
+
+| المعامل | النوع | الافتراضي | الوصف |
+| --- | --- | --- | --- |
+| `api_key` | `str \| None` | `None` | مفتاح Brave API. يعود إلى متغير البيئة `BRAVE_API_KEY`. |
+| `headers` | `dict \| None` | `None` | رؤوس HTTP إضافية لإرسالها مع كل طلب (مثل `api-version`، رؤوس تحديد الموقع الجغرافي). |
+| `requests_per_second` | `float` | `1.0` | الحد الأقصى لمعدل الطلبات. ستنتظر الأداة بين الاستدعاءات للبقاء ضمن هذا الحد. |
+| `save_file` | `bool` | `False` | عند `True`، يتم كتابة كل استجابة في ملف `.txt` مختوم بالوقت. |
+| `raw` | `bool` | `False` | عند `True`، يتم إرجاع استجابة JSON الكاملة من API دون أي تنقيح. |
+| `timeout` | `int` | `30` | مهلة طلب HTTP بالثواني. |
+| `country` | `str \| None` | `None` | اختصار قديم لاستهداف جغرافي (مثل `"US"`). يُفضل استخدام معامل الاستعلام `country` مباشرة. |
+| `n_results` | `int` | `10` | اختصار قديم لعدد النتائج. يُفضل استخدام معامل الاستعلام `count` مباشرة. |
+
+
+ معاملات المُنشئ `country` و `n_results` موجودة للتوافق مع الإصدارات السابقة. يتم تطبيقها كقيم افتراضية عندما لا يتم تقديم معاملات الاستعلام المقابلة (`country`، `count`) وقت الاستدعاء. للكود الجديد، نوصي بتمرير `country` و `count` مباشرة كمعاملات استعلام بدلاً من ذلك.
+
+
+## معاملات الاستعلام
+
+تتحقق كل أداة من صحة معاملات الاستعلام مقابل مخطط Pydantic قبل إرسال الطلب. تتنوع المعاملات قليلاً حسب نقطة النهاية - إليك ملخص لأكثرها استخداماً:
+
+### BraveWebSearchTool
+
+| المعامل | الوصف |
+| --- | --- |
+| `q` | **(مطلوب)** سلسلة استعلام البحث (الحد الأقصى 400 حرف). |
+| `country` | رمز بلد من حرفين للاستهداف الجغرافي (مثل `"US"`). |
+| `search_lang` | رمز لغة من حرفين للنتائج (مثل `"en"`). |
+| `count` | الحد الأقصى لعدد النتائج المُرجعة (1-20). |
+| `offset` | تخطي أول N صفحة من النتائج (0-9). |
+| `safesearch` | مرشح المحتوى: `"off"` أو `"moderate"` أو `"strict"`. |
+| `freshness` | مرشح الحداثة: `"pd"` (اليوم الماضي)، `"pw"` (الأسبوع الماضي)، `"pm"` (الشهر الماضي)، `"py"` (السنة الماضية)، أو نطاق تاريخ مثل `"2025-01-01to2025-06-01"`. |
+| `extra_snippets` | تضمين حتى 5 مقتطفات نصية إضافية لكل نتيجة. |
+| `goggles` | عنوان(عناوين) URL لـ Brave Goggles و/أو المصدر لإعادة الترتيب المخصص. |
+
+للمرجع الكامل للمعاملات والرؤوس، انظر [وثائق واجهة Brave Web Search API](https://api-dashboard.search.brave.com/api-reference/web/search/get).
+
+### BraveNewsSearchTool
+
+| المعامل | الوصف |
+| --- | --- |
+| `q` | **(مطلوب)** سلسلة استعلام البحث (الحد الأقصى 400 حرف). |
+| `country` | رمز بلد من حرفين للاستهداف الجغرافي. |
+| `search_lang` | رمز لغة من حرفين للنتائج. |
+| `count` | الحد الأقصى لعدد النتائج المُرجعة (1-50). |
+| `offset` | تخطي أول N صفحة من النتائج (0-9). |
+| `safesearch` | مرشح المحتوى: `"off"` أو `"moderate"` أو `"strict"`. |
+| `freshness` | مرشح الحداثة (نفس خيارات بحث الويب). |
+| `goggles` | عنوان(عناوين) URL لـ Brave Goggles و/أو المصدر لإعادة الترتيب المخصص. |
+
+للمرجع الكامل للمعاملات والرؤوس، انظر [وثائق واجهة Brave News Search API](https://api-dashboard.search.brave.com/api-reference/news/news_search/get).
+
+### BraveImageSearchTool
+
+| المعامل | الوصف |
+| --- | --- |
+| `q` | **(مطلوب)** سلسلة استعلام البحث (الحد الأقصى 400 حرف). |
+| `country` | رمز بلد من حرفين للاستهداف الجغرافي. |
+| `search_lang` | رمز لغة من حرفين للنتائج. |
+| `count` | الحد الأقصى لعدد النتائج المُرجعة (1-200). |
+| `safesearch` | مرشح المحتوى: `"off"` أو `"strict"`. |
+| `spellcheck` | محاولة تصحيح الأخطاء الإملائية في الاستعلام. |
+
+للمرجع الكامل للمعاملات والرؤوس، انظر [وثائق واجهة Brave Image Search API](https://api-dashboard.search.brave.com/api-reference/images/image_search).
+
+### BraveVideoSearchTool
+
+| المعامل | الوصف |
+| --- | --- |
+| `q` | **(مطلوب)** سلسلة استعلام البحث (الحد الأقصى 400 حرف). |
+| `country` | رمز بلد من حرفين للاستهداف الجغرافي. |
+| `search_lang` | رمز لغة من حرفين للنتائج. |
+| `count` | الحد الأقصى لعدد النتائج المُرجعة (1-50). |
+| `offset` | تخطي أول N صفحة من النتائج (0-9). |
+| `safesearch` | مرشح المحتوى: `"off"` أو `"moderate"` أو `"strict"`. |
+| `freshness` | مرشح الحداثة (نفس خيارات بحث الويب). |
+
+للمرجع الكامل للمعاملات والرؤوس، انظر [وثائق واجهة Brave Video Search API](https://api-dashboard.search.brave.com/api-reference/videos/video_search/get).
+
+### BraveLocalPOIsTool
+
+| المعامل | الوصف |
+| --- | --- |
+| `ids` | **(مطلوب)** قائمة معرّفات فريدة للمواقع المطلوبة. |
+| `search_lang` | رمز لغة من حرفين للنتائج. |
+
+للمرجع الكامل للمعاملات والرؤوس، انظر [وثائق واجهة Brave Local POIs API](https://api-dashboard.search.brave.com/api-reference/web/local_pois).
+
+### BraveLocalPOIsDescriptionTool
+
+| المعامل | الوصف |
+| --- | --- |
+| `ids` | **(مطلوب)** قائمة معرّفات فريدة للمواقع المطلوبة. |
+
+للمرجع الكامل للمعاملات والرؤوس، انظر [وثائق واجهة Brave POI Descriptions API](https://api-dashboard.search.brave.com/api-reference/web/poi_descriptions).
+
+## الرؤوس المخصصة
+
+تدعم جميع الأدوات رؤوس طلبات HTTP مخصصة. أداة بحث الويب، على سبيل المثال، تقبل رؤوس تحديد الموقع الجغرافي للحصول على نتائج واعية بالموقع:
+
+```python Code
+from crewai_tools import BraveWebSearchTool
+
+tool = BraveWebSearchTool(
+ headers={
+ "x-loc-lat": "37.7749",
+ "x-loc-long": "-122.4194",
+ "x-loc-city": "San Francisco",
+ "x-loc-state": "CA",
+ "x-loc-country": "US",
+ }
+)
+
+results = tool.run(q="best coffee shops nearby")
+```
+
+يمكنك أيضاً تحديث الرؤوس بعد التهيئة باستخدام طريقة `set_headers()`:
+
+```python Code
+tool.set_headers({"api-version": "2025-01-01"})
+```
+
+## الوضع الخام
+
+بشكل افتراضي، تقوم كل أداة بتنقيح استجابة API إلى قائمة نتائج مختصرة. إذا كنت تحتاج إلى استجابة API الكاملة غير المعالجة، فعّل الوضع الخام:
+
+```python Code
+from crewai_tools import BraveWebSearchTool
+
+tool = BraveWebSearchTool(raw=True)
+full_response = tool.run(q="Brave Search API")
+```
+
+## مثال على التكامل مع الوكيل
+
+إليك كيفية تزويد وكيل CrewAI بأدوات بحث Brave متعددة:
+
+```python Code
+from crewai import Agent
+from crewai.project import agent
+from crewai_tools import BraveWebSearchTool, BraveNewsSearchTool
+
+web_search = BraveWebSearchTool()
+news_search = BraveNewsSearchTool()
+
+@agent
+def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config["researcher"],
+ tools=[web_search, news_search],
+ )
+```
+
+## مثال متقدم
+
+الجمع بين معاملات متعددة لبحث مستهدف:
+
+```python Code
+from crewai_tools import BraveWebSearchTool
+
+tool = BraveWebSearchTool(
+ requests_per_second=0.5, # conservative rate limit
+ save_file=True,
+)
+
+results = tool.run(
+ q="artificial intelligence news",
+ country="US",
+ search_lang="en",
+ count=5,
+ freshness="pm", # past month only
+ extra_snippets=True,
+)
+print(results)
+```
+
+## الانتقال من `BraveSearchTool` (القديمة)
+
+إذا كنت تستخدم حالياً `BraveSearchTool`، فالتبديل إلى الأدوات الجديدة بسيط:
+
+```python Code
+# Before (legacy)
+from crewai_tools import BraveSearchTool
+
+tool = BraveSearchTool(country="US", n_results=5, save_file=True)
+results = tool.run(search_query="AI agents")
+
+# After (recommended)
+from crewai_tools import BraveWebSearchTool
+
+tool = BraveWebSearchTool(save_file=True)
+results = tool.run(q="AI agents", country="US", count=5)
+```
+
+الاختلافات الرئيسية:
+- **الاستيراد**: استخدم `BraveWebSearchTool` (أو متغير الأخبار/الصور/الفيديو) بدلاً من `BraveSearchTool`.
+- **معامل الاستعلام**: استخدم `q` بدلاً من `search_query`. (لا يزال كلا `search_query` و `query` مقبولين للراحة، لكن `q` هو المعامل المفضل.)
+- **عدد النتائج**: مرر `count` كمعامل استعلام بدلاً من `n_results` عند التهيئة.
+- **البلد**: مرر `country` كمعامل استعلام بدلاً من عند التهيئة.
+- **مفتاح API**: يمكن الآن تمريره مباشرة عبر `api_key=` بالإضافة إلى متغير البيئة `BRAVE_API_KEY`.
+- **تحديد المعدل**: قابل للتكوين عبر `requests_per_second` مع إعادة محاولة تلقائية عند استجابات `429`.
+
+## الخلاصة
+
+توفر مجموعة أدوات بحث Brave لوكلاء CrewAI وصولاً مرناً ومحدداً بنقطة النهاية إلى واجهة برمجة تطبيقات Brave Search. سواء كنت تحتاج إلى صفحات ويب أو أخبار عاجلة أو صور أو مقاطع فيديو، هناك أداة مخصصة مع معاملات مُتحقق منها ومرونة مدمجة. اختر الأداة المناسبة لحالة استخدامك، وارجع إلى [وثائق واجهة Brave Search API](https://brave.com/search/api/) للحصول على التفاصيل الكاملة حول المعاملات المتاحة وصيغ الاستجابة.
diff --git a/docs/v1.15.1/ar/tools/search-research/codedocssearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/codedocssearchtool.mdx
new file mode 100644
index 000000000..a81aa5480
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/codedocssearchtool.mdx
@@ -0,0 +1,85 @@
+---
+title: البحث في توثيق الكود باستخدام RAG
+description: أداة `CodeDocsSearchTool` هي أداة RAG (التوليد المعزز بالاسترجاع) قوية مصممة للبحث الدلالي داخل توثيق الكود.
+icon: code
+mode: "wide"
+---
+
+# `CodeDocsSearchTool`
+
+
+ **تجريبي**: لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+أداة CodeDocsSearchTool هي أداة RAG (التوليد المعزز بالاسترجاع) قوية مصممة للبحث الدلالي داخل توثيق الكود.
+تتيح للمستخدمين العثور بكفاءة على معلومات أو مواضيع محددة داخل توثيق الكود. من خلال تقديم `docs_url` أثناء التهيئة،
+تقتصر الأداة على البحث في موقع التوثيق المحدد. بدلاً من ذلك، بدون `docs_url` محدد،
+تبحث الأداة عبر مجموعة واسعة من توثيق الكود المعروف أو المكتشف خلال تنفيذها، مما يجعلها متعددة الاستخدامات لاحتياجات البحث المختلفة في التوثيق.
+
+## التثبيت
+
+للبدء في استخدام CodeDocsSearchTool، قم أولاً بتثبيت حزمة crewai_tools عبر pip:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+استخدم CodeDocsSearchTool كما يلي لإجراء عمليات بحث داخل توثيق الكود:
+
+```python Code
+from crewai_tools import CodeDocsSearchTool
+
+# To search any code documentation content
+# if the URL is known or discovered during its execution:
+tool = CodeDocsSearchTool()
+
+# OR
+
+# To specifically focus your search on a given documentation site
+# by providing its URL:
+tool = CodeDocsSearchTool(docs_url='https://docs.example.com/reference')
+```
+
+ استبدل 'https://docs.example.com/reference' بعنوان URL الخاص بالتوثيق المستهدف
+ و 'How to use search tool' باستعلام البحث المناسب لاحتياجاتك.
+
+
+## المعاملات
+
+يمكن استخدام المعاملات التالية لتخصيص سلوك `CodeDocsSearchTool`:
+
+| المعامل | النوع | الوصف |
+|:---------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------|
+| **docs_url** | `string` | _اختياري_. يحدد عنوان URL لتوثيق الكود المراد البحث فيه. |
+
+## النموذج المخصص والتضمينات
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+tool = CodeDocsSearchTool(
+ config=dict(
+ llm=dict(
+ provider="ollama", # or google, openai, anthropic, llama2, ...
+ config=dict(
+ model="llama2",
+ # temperature=0.5,
+ # top_p=1,
+ # stream=true,
+ ),
+ ),
+ embedder=dict(
+ provider="google-generativeai", # or openai, ollama, ...
+ config=dict(
+ model_name="gemini-embedding-001",
+ task_type="RETRIEVAL_DOCUMENT",
+ # title="Embeddings",
+ ),
+ ),
+ )
+)
+```
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/databricks-query-tool.mdx b/docs/v1.15.1/ar/tools/search-research/databricks-query-tool.mdx
new file mode 100644
index 000000000..5384995d8
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/databricks-query-tool.mdx
@@ -0,0 +1,81 @@
+---
+title: أداة استعلام Databricks SQL
+description: أداة `DatabricksQueryTool` تنفذ استعلامات SQL على جداول مساحة عمل Databricks.
+icon: trowel-bricks
+mode: "wide"
+---
+
+# `DatabricksQueryTool`
+
+## الوصف
+
+تنفيذ استعلامات SQL على جداول مساحة عمل Databricks باستخدام ملف تعريف CLI أو مصادقة المضيف/الرمز المباشرة.
+
+## التثبيت
+
+```shell
+uv add crewai-tools[databricks-sdk]
+```
+
+## متغيرات البيئة
+
+- `DATABRICKS_CONFIG_PROFILE` أو (`DATABRICKS_HOST` + `DATABRICKS_TOKEN`)
+
+أنشئ رمز وصول شخصي واعثر على تفاصيل المضيف في مساحة عمل Databricks ضمن إعدادات المستخدم ← المطور.
+التوثيق: https://docs.databricks.com/en/dev-tools/auth/pat.html
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import DatabricksQueryTool
+
+tool = DatabricksQueryTool(
+ default_catalog="main",
+ default_schema="default",
+)
+
+agent = Agent(
+ role="Data Analyst",
+ goal="Query Databricks",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="SELECT * FROM my_table LIMIT 10",
+ expected_output="10 rows",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+)
+result = crew.kickoff()
+
+print(result)
+```
+
+## المعاملات
+
+- `query` (مطلوب): استعلام SQL المراد تنفيذه
+- `catalog` (اختياري): تجاوز الكتالوج الافتراضي
+- `db_schema` (اختياري): تجاوز المخطط الافتراضي
+- `warehouse_id` (اختياري): تجاوز مستودع SQL الافتراضي
+- `row_limit` (اختياري): الحد الأقصى لعدد الصفوف المُرجعة (الافتراضي: 1000)
+
+## القيم الافتراضية عند التهيئة
+
+- `default_catalog`
+- `default_schema`
+- `default_warehouse_id`
+
+### معالجة الأخطاء والنصائح
+
+- أخطاء المصادقة: تحقق من أن `DATABRICKS_HOST` يبدأ بـ `https://` وأن الرمز صالح.
+- الصلاحيات: تأكد من أن مستودع SQL والمخطط متاحان لرمزك.
+- الحدود: يجب تجنب الاستعلامات طويلة التشغيل في حلقات الـ Agent؛ أضف فلاتر/حدود.
+
+
diff --git a/docs/v1.15.1/ar/tools/search-research/exasearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/exasearchtool.mdx
new file mode 100644
index 000000000..18f339e00
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/exasearchtool.mdx
@@ -0,0 +1,137 @@
+---
+title: "أداة بحث Exa"
+description: "ابحث في الويب باستخدام Exa Search API للعثور على النتائج الأكثر صلة لأي استعلام، مع خيارات لمحتوى الصفحة الكامل والمقتطفات."
+icon: "magnifying-glass"
+mode: "wide"
+---
+
+تتيح أداة `ExaSearchTool` لوكلاء CrewAI البحث في الويب باستخدام [Exa](https://exa.ai/) search API. تُرجع النتائج الأكثر صلة لأي استعلام، مع خيارات لمحتوى الصفحة الكامل والمقتطفات الموفرة للرموز.
+
+## التثبيت
+
+ثبّت حزمة أدوات CrewAI:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## متغيرات البيئة
+
+عيّن مفتاح Exa API كمتغير بيئة:
+
+```bash
+export EXA_API_KEY='your_exa_api_key'
+```
+
+احصل على مفتاح API من [لوحة تحكم Exa](https://dashboard.exa.ai/api-keys).
+
+## مثال على الاستخدام
+
+إليك كيفية استخدام `ExaSearchTool` مع وكيل CrewAI:
+
+```python
+import os
+from crewai import Agent, Task, Crew
+from crewai_tools import ExaSearchTool
+
+# Initialize the tool
+exa_tool = ExaSearchTool()
+
+# Create an agent that uses the tool
+researcher = Agent(
+ role='Research Analyst',
+ goal='Find the latest information on any topic',
+ backstory='An expert researcher who finds the most relevant and up-to-date information.',
+ tools=[exa_tool],
+ verbose=True
+)
+
+# Create a task for the agent
+research_task = Task(
+ description='Find the top 3 recent breakthroughs in quantum computing.',
+ expected_output='A summary of the top 3 breakthroughs with source URLs.',
+ agent=researcher
+)
+
+# Form the crew and kick it off
+crew = Crew(
+ agents=[researcher],
+ tasks=[research_task],
+ verbose=True
+)
+
+result = crew.kickoff()
+print(result)
+```
+
+## خيارات التكوين
+
+تقبل أداة `ExaSearchTool` المعاملات التالية أثناء التهيئة:
+
+- `type` (str، اختياري): نوع البحث المستخدم. الافتراضي هو `"auto"`. الخيارات: `"auto"`، `"instant"`، `"fast"`، `"deep"`.
+- `highlights` (bool أو dict، اختياري): إرجاع مقتطفات موفرة للرموز أكثر صلة بالاستعلام بدلاً من الصفحة الكاملة. الافتراضي هو `True`. مرر قاموسًا مثل `{"max_characters": 4000}` للتكوين، أو `False` للتعطيل.
+- `content` (bool، اختياري): ما إذا كان يجب تضمين محتوى الصفحة الكامل في النتائج. الافتراضي هو `False`.
+- `api_key` (str، اختياري): مفتاح Exa API الخاص بك. يعود إلى متغير البيئة `EXA_API_KEY` إذا لم يتم تقديمه.
+- `base_url` (str، اختياري): عنوان URL مخصص لخادم API. يعود إلى متغير البيئة `EXA_BASE_URL` إذا لم يتم تقديمه.
+
+عند استدعاء الأداة (أو عندما يستدعيها وكيل)، تتوفر معاملات البحث التالية:
+
+- `search_query` (str): **مطلوب**. سلسلة استعلام البحث.
+- `start_published_date` (str، اختياري): تصفية النتائج المنشورة بعد هذا التاريخ (تنسيق ISO 8601، مثل `"2024-01-01"`).
+- `end_published_date` (str، اختياري): تصفية النتائج المنشورة قبل هذا التاريخ (تنسيق ISO 8601).
+- `include_domains` (list[str]، اختياري): قائمة بالنطاقات لتقييد البحث عليها.
+
+## الاستخدام المتقدم
+
+يمكنك تكوين الأداة بمعاملات مخصصة للحصول على نتائج أغنى:
+
+```python
+# Use 'deep' for thorough, multi-step searches
+exa_tool = ExaSearchTool(
+ highlights=True,
+ type="deep"
+)
+
+# Use it in an agent
+agent = Agent(
+ role="Deep Researcher",
+ goal="Conduct thorough research",
+ tools=[exa_tool]
+)
+```
+
+## استخدام Exa عبر MCP
+
+يمكنك أيضًا ربط وكيلك بخادم MCP المستضاف من Exa. مرّر مفتاح API الخاص بك عبر ترويسة `x-api-key`:
+
+```python
+from crewai import Agent
+from crewai.mcp import MCPServerHTTP
+
+agent = Agent(
+ role="Research Analyst",
+ goal="Find and analyze information on the web",
+ backstory="Expert researcher with access to Exa's tools",
+ mcps=[
+ MCPServerHTTP(
+ url="https://mcp.exa.ai/mcp",
+ headers={"x-api-key": "YOUR_EXA_API_KEY"},
+ ),
+ ],
+)
+```
+
+احصل على مفتاح API من [لوحة تحكم Exa](https://dashboard.exa.ai/api-keys). لمزيد من المعلومات حول MCP في CrewAI، راجع [نظرة عامة على MCP](/ar/mcp/overview).
+
+## الميزات
+
+- **مقتطفات موفرة للرموز**: الحصول على المقتطفات الأكثر صلة من كل نتيجة، باستخدام رموز أقل بكثير من النص الكامل
+- **البحث الدلالي**: العثور على نتائج بناءً على المعنى، وليس الكلمات المفتاحية فقط
+- **استرجاع المحتوى الكامل**: الحصول على النص الكامل لصفحات الويب مع نتائج البحث
+- **تصفية التاريخ**: تقييد النتائج لفترات زمنية محددة باستخدام فلاتر تاريخ النشر
+- **تصفية النطاقات**: تقييد عمليات البحث على نطاقات محددة
+
+## موارد
+
+- [توثيق Exa](https://exa.ai/docs)
+- [لوحة تحكم Exa — إدارة مفاتيح API والاستخدام](https://dashboard.exa.ai)
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/githubsearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/githubsearchtool.mdx
new file mode 100644
index 000000000..5a2c0a326
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/githubsearchtool.mdx
@@ -0,0 +1,86 @@
+---
+title: بحث Github
+description: أداة `GithubSearchTool` مصممة للبحث في المواقع وتحويلها إلى markdown نظيف أو بيانات منظمة.
+icon: github
+mode: "wide"
+---
+
+# `GithubSearchTool`
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+أداة GithubSearchTool هي أداة التوليد المعزز بالاسترجاع (RAG) مصممة خصيصاً لإجراء عمليات بحث دلالية داخل مستودعات GitHub. باستخدام قدرات البحث الدلالي المتقدمة، تقوم بتصفية الكود وطلبات السحب والمشكلات والمستودعات، مما يجعلها أداة أساسية للمطورين والباحثين أو أي شخص يحتاج إلى معلومات دقيقة من GitHub.
+
+## التثبيت
+
+لاستخدام GithubSearchTool، تأكد أولاً من تثبيت حزمة crewai_tools في بيئة Python الخاصة بك:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+يثبّت هذا الأمر الحزمة اللازمة لتشغيل GithubSearchTool مع أي أدوات أخرى مضمنة في حزمة crewai_tools.
+
+احصل على رمز وصول شخصي من GitHub على https://github.com/settings/tokens (إعدادات المطور ← الرموز الدقيقة أو الرموز الكلاسيكية).
+
+## مثال
+
+إليك كيفية استخدام GithubSearchTool لإجراء عمليات بحث دلالية داخل مستودع GitHub:
+
+```python Code
+from crewai_tools import GithubSearchTool
+
+# Initialize the tool for semantic searches within a specific GitHub repository
+tool = GithubSearchTool(
+ github_repo='https://github.com/example/repo',
+ gh_token='your_github_personal_access_token',
+ content_types=['code', 'issue'] # Options: code, repo, pr, issue
+)
+
+# OR
+
+# Initialize the tool for semantic searches within a specific GitHub repository, so the agent can search any repository if it learns about during its execution
+tool = GithubSearchTool(
+ gh_token='your_github_personal_access_token',
+ content_types=['code', 'issue'] # Options: code, repo, pr, issue
+)
+```
+
+## المعاملات
+
+- `github_repo`: عنوان URL لمستودع GitHub حيث سيتم إجراء البحث. هذا حقل إلزامي ويحدد المستودع المستهدف لبحثك.
+- `gh_token`: رمز الوصول الشخصي من GitHub (PAT) المطلوب للمصادقة. يمكنك إنشاء واحد في إعدادات حساب GitHub الخاص بك ضمن إعدادات المطور > رموز الوصول الشخصية.
+- `content_types`: يحدد أنواع المحتوى المراد تضمينها في بحثك. يجب تقديم قائمة بأنواع المحتوى من الخيارات التالية: `code` للبحث داخل الكود،
+`repo` للبحث في المعلومات العامة للمستودع، `pr` للبحث داخل طلبات السحب، و `issue` للبحث داخل المشكلات.
+هذا الحقل إلزامي ويسمح بتخصيص البحث لأنواع محتوى محددة داخل مستودع GitHub.
+
+## النموذج المخصص والتضمينات
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+tool = GithubSearchTool(
+ config=dict(
+ llm=dict(
+ provider="ollama", # or google, openai, anthropic, llama2, ...
+ config=dict(
+ model="llama2",
+ # temperature=0.5,
+ # top_p=1,
+ # stream=true,
+ ),
+ ),
+ embedder=dict(
+ provider="google-generativeai", # or openai, ollama, ...
+ config=dict(
+ model_name="gemini-embedding-001",
+ task_type="RETRIEVAL_DOCUMENT",
+ # title="Embeddings",
+ ),
+ ),
+ )
+)
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/linkupsearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/linkupsearchtool.mdx
new file mode 100644
index 000000000..3963ec454
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/linkupsearchtool.mdx
@@ -0,0 +1,113 @@
+---
+title: أداة بحث Linkup
+description: أداة `LinkupSearchTool` تتيح الاستعلام من Linkup API للحصول على معلومات سياقية.
+icon: link
+mode: "wide"
+---
+
+# `LinkupSearchTool`
+
+## الوصف
+
+توفر أداة `LinkupSearchTool` القدرة على الاستعلام من Linkup API للحصول على معلومات سياقية واسترجاع نتائج منظمة. هذه الأداة مثالية لإثراء سير العمل بمعلومات محدّثة وموثوقة من Linkup، مما يسمح للوكلاء بالوصول إلى بيانات ذات صلة أثناء مهامهم.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت Linkup SDK:
+
+```shell
+uv add linkup-sdk
+```
+
+## خطوات البدء
+
+لاستخدام `LinkupSearchTool` بفعالية، اتبع هذه الخطوات:
+
+1. **مفتاح API**: احصل على مفتاح Linkup API.
+2. **إعداد البيئة**: قم بإعداد بيئتك بمفتاح API.
+3. **تثبيت SDK**: ثبّت Linkup SDK باستخدام الأمر أعلاه.
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة واستخدامها مع وكيل:
+
+```python Code
+from crewai_tools import LinkupSearchTool
+from crewai import Agent
+import os
+
+# Initialize the tool with your API key
+linkup_tool = LinkupSearchTool(api_key=os.getenv("LINKUP_API_KEY"))
+
+# Define an agent that uses the tool
+@agent
+def researcher(self) -> Agent:
+ '''
+ This agent uses the LinkupSearchTool to retrieve contextual information
+ from the Linkup API.
+ '''
+ return Agent(
+ config=self.agents_config["researcher"],
+ tools=[linkup_tool]
+ )
+```
+
+## المعاملات
+
+تقبل أداة `LinkupSearchTool` المعاملات التالية:
+
+### معاملات المُنشئ
+- **api_key**: مطلوب. مفتاح Linkup API الخاص بك.
+
+### معاملات التشغيل
+- **query**: مطلوب. مصطلح أو عبارة البحث.
+- **depth**: اختياري. عمق البحث. الافتراضي هو "standard".
+- **output_type**: اختياري. نوع المخرجات. الافتراضي هو "searchResults".
+
+## الاستخدام المتقدم
+
+يمكنك تخصيص معاملات البحث للحصول على نتائج أكثر تحديداً:
+
+```python Code
+# Perform a search with custom parameters
+results = linkup_tool.run(
+ query="Women Nobel Prize Physics",
+ depth="deep",
+ output_type="searchResults"
+)
+```
+
+## تنسيق الإرجاع
+
+تُرجع الأداة النتائج بالتنسيق التالي:
+
+```json
+{
+ "success": true,
+ "results": [
+ {
+ "name": "Result Title",
+ "url": "https://example.com/result",
+ "content": "Content of the result..."
+ },
+ // Additional results...
+ ]
+}
+```
+
+في حالة حدوث خطأ، ستكون الاستجابة:
+
+```json
+{
+ "success": false,
+ "error": "Error message"
+}
+```
+
+## معالجة الأخطاء
+
+تتعامل الأداة بسلاسة مع أخطاء API وتوفر ملاحظات منظمة. إذا فشل طلب API، ستُرجع الأداة قاموساً يحتوي على `success: false` ورسالة خطأ.
+
+## الخلاصة
+
+توفر أداة `LinkupSearchTool` طريقة سلسة لدمج قدرات استرجاع المعلومات السياقية من Linkup في وكلاء CrewAI. من خلال الاستفادة من هذه الأداة، يمكن للوكلاء الوصول إلى معلومات ذات صلة ومحدّثة لتعزيز اتخاذ القرارات وتنفيذ المهام.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/overview.mdx b/docs/v1.15.1/ar/tools/search-research/overview.mdx
new file mode 100644
index 000000000..6b73d12b5
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/overview.mdx
@@ -0,0 +1,94 @@
+---
+title: "نظرة عامة"
+description: "إجراء عمليات بحث على الويب، والعثور على المستودعات، والبحث عن المعلومات عبر الإنترنت"
+icon: "face-smile"
+mode: "wide"
+---
+
+تتيح هذه الأدوات لوكلائك البحث في الويب، والبحث في المواضيع، والعثور على المعلومات عبر منصات متعددة بما في ذلك محركات البحث و GitHub و YouTube.
+
+## **الأدوات المتاحة**
+
+
+
+ تكامل مع Google search API لقدرات بحث شاملة على الويب.
+
+
+
+ بحث يركز على الخصوصية مع فهرس بحث Brave المستقل.
+
+
+
+ بحث مدعوم بالذكاء الاصطناعي للعثور على محتوى محدد وذي صلة.
+
+
+
+ بحث في الويب في الوقت الحقيقي مع فهرسة محتوى حديث.
+
+
+
+ البحث في مستودعات GitHub والكود والمشكلات والتوثيق.
+
+
+
+ البحث داخل مواقع ونطاقات محددة.
+
+
+
+ البحث في توثيق الكود والموارد التقنية.
+
+
+
+ البحث في قنوات YouTube عن محتوى ومنشئين محددين.
+
+
+
+ العثور على مقاطع فيديو YouTube وتحليلها حسب الموضوع أو الكلمة المفتاحية أو المعايير.
+
+
+
+ بحث شامل على الويب باستخدام Tavily search API المدعوم بالذكاء الاصطناعي.
+
+
+
+ استخراج محتوى منظم من صفحات الويب باستخدام Tavily API.
+
+
+
+ البحث في arXiv وتنزيل ملفات PDF اختيارياً.
+
+
+
+ بحث Google عبر SerpApi مع نتائج منظمة.
+
+
+
+ استعلامات Google Shopping عبر SerpApi.
+
+
+
+## **حالات الاستخدام الشائعة**
+
+- **أبحاث السوق**: البحث عن اتجاهات الصناعة وتحليل المنافسين
+- **اكتشاف المحتوى**: العثور على مقالات وفيديوهات وموارد ذات صلة
+- **بحث الكود**: البحث في المستودعات والتوثيق عن حلول
+- **توليد العملاء المحتملين**: البحث عن الشركات والأفراد
+- **البحث الأكاديمي**: العثور على مقالات علمية وأوراق تقنية
+
+```python
+from crewai_tools import SerperDevTool, GitHubSearchTool, YoutubeVideoSearchTool, TavilySearchTool, TavilyExtractorTool
+
+# Create research tools
+web_search = SerperDevTool()
+code_search = GitHubSearchTool()
+video_research = YoutubeVideoSearchTool()
+tavily_search = TavilySearchTool()
+content_extractor = TavilyExtractorTool()
+
+# Add to your agent
+agent = Agent(
+ role="Research Analyst",
+ tools=[web_search, code_search, video_research, tavily_search, content_extractor],
+ goal="Gather comprehensive information on any topic"
+)
+```
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/serpapi-googlesearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/serpapi-googlesearchtool.mdx
new file mode 100644
index 000000000..89a5e27f8
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/serpapi-googlesearchtool.mdx
@@ -0,0 +1,66 @@
+---
+title: أداة بحث Google عبر SerpApi
+description: أداة `SerpApiGoogleSearchTool` تنفذ عمليات بحث Google باستخدام خدمة SerpApi.
+icon: google
+mode: "wide"
+---
+
+# `SerpApiGoogleSearchTool`
+
+## الوصف
+
+استخدم `SerpApiGoogleSearchTool` لتشغيل عمليات بحث Google باستخدام SerpApi واسترجاع نتائج منظمة. يتطلب مفتاح SerpApi API.
+
+## التثبيت
+
+```shell
+uv add crewai-tools[serpapi]
+```
+
+## متغيرات البيئة
+
+- `SERPAPI_API_KEY` (مطلوب): مفتاح API لـ SerpApi. أنشئ واحداً على https://serpapi.com/ (طبقة مجانية متاحة).
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import SerpApiGoogleSearchTool
+
+tool = SerpApiGoogleSearchTool()
+
+agent = Agent(
+ role="Researcher",
+ goal="Answer questions using Google search",
+ backstory="Search specialist",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="Search for the latest CrewAI releases",
+ expected_output="A concise list of relevant results with titles and links",
+ agent=agent,
+)
+
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff()
+```
+
+## ملاحظات
+
+- عيّن `SERPAPI_API_KEY` في البيئة. أنشئ مفتاحاً على https://serpapi.com/
+- انظر أيضاً Google Shopping عبر SerpApi: `/ar/tools/search-research/serpapi-googleshoppingtool`
+
+## المعاملات
+
+### معاملات التشغيل
+
+- `search_query` (str، مطلوب): استعلام Google.
+- `location` (str، اختياري): معامل الموقع الجغرافي.
+
+## ملاحظات
+
+- هذه الأداة تغلّف SerpApi وتُرجع نتائج بحث منظمة.
+
+
diff --git a/docs/v1.15.1/ar/tools/search-research/serpapi-googleshoppingtool.mdx b/docs/v1.15.1/ar/tools/search-research/serpapi-googleshoppingtool.mdx
new file mode 100644
index 000000000..28a823f2d
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/serpapi-googleshoppingtool.mdx
@@ -0,0 +1,62 @@
+---
+title: أداة تسوق Google عبر SerpApi
+description: أداة `SerpApiGoogleShoppingTool` تبحث في نتائج Google Shopping باستخدام SerpApi.
+icon: cart-shopping
+mode: "wide"
+---
+
+# `SerpApiGoogleShoppingTool`
+
+## الوصف
+
+استفد من `SerpApiGoogleShoppingTool` للاستعلام من Google Shopping عبر SerpApi واسترجاع نتائج موجّهة للمنتجات.
+
+## التثبيت
+
+```shell
+uv add crewai-tools[serpapi]
+```
+
+## متغيرات البيئة
+
+- `SERPAPI_API_KEY` (مطلوب): مفتاح API لـ SerpApi. أنشئ واحداً على https://serpapi.com/ (طبقة مجانية متاحة).
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import SerpApiGoogleShoppingTool
+
+tool = SerpApiGoogleShoppingTool()
+
+agent = Agent(
+ role="Shopping Researcher",
+ goal="Find relevant products",
+ backstory="Expert in product search",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="Search Google Shopping for 'wireless noise-canceling headphones'",
+ expected_output="Top relevant products with titles and links",
+ agent=agent,
+)
+
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff()
+```
+
+## ملاحظات
+
+- عيّن `SERPAPI_API_KEY` في البيئة. أنشئ مفتاحاً على https://serpapi.com/
+- انظر أيضاً بحث Google على الويب عبر SerpApi: `/ar/tools/search-research/serpapi-googlesearchtool`
+
+## المعاملات
+
+### معاملات التشغيل
+
+- `search_query` (str، مطلوب): استعلام البحث عن المنتجات.
+- `location` (str، اختياري): معامل الموقع الجغرافي.
+
+
diff --git a/docs/v1.15.1/ar/tools/search-research/serperdevtool.mdx b/docs/v1.15.1/ar/tools/search-research/serperdevtool.mdx
new file mode 100644
index 000000000..63d03bea3
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/serperdevtool.mdx
@@ -0,0 +1,107 @@
+---
+title: بحث Google عبر Serper
+description: أداة `SerperDevTool` مصممة للبحث في الإنترنت وإرجاع النتائج الأكثر صلة.
+icon: google
+mode: "wide"
+---
+
+# `SerperDevTool`
+
+## الوصف
+
+هذه الأداة مصممة لإجراء بحث دلالي عن استعلام محدد من محتوى نصي عبر الإنترنت. تستخدم [serper.dev](https://serper.dev) API
+لجلب وعرض نتائج البحث الأكثر صلة بناءً على الاستعلام المقدم من المستخدم.
+
+## التثبيت
+
+لاستخدام `SerperDevTool` بفعالية، اتبع هذه الخطوات:
+
+1. **تثبيت الحزمة**: تأكد من تثبيت حزمة `crewai[tools]` في بيئة Python الخاصة بك.
+2. **الحصول على مفتاح API**: احصل على مفتاح `serper.dev` API على https://serper.dev/ (طبقة مجانية متاحة).
+3. **تكوين البيئة**: خزّن مفتاح API الذي حصلت عليه في متغير بيئة باسم `SERPER_API_KEY` لتسهيل استخدامه بواسطة الأداة.
+
+لدمج هذه الأداة في مشروعك، اتبع تعليمات التثبيت أدناه:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة وتنفيذ بحث باستعلام معين:
+
+```python Code
+from crewai_tools import SerperDevTool
+
+# Initialize the tool for internet searching capabilities
+tool = SerperDevTool()
+```
+
+## المعاملات
+
+تأتي أداة `SerperDevTool` مع عدة معاملات تُمرّر إلى API:
+
+- **search_url**: نقطة نهاية URL لـ search API. (الافتراضي هو `https://google.serper.dev/search`)
+
+- **country**: اختياري. تحديد البلد لنتائج البحث.
+- **location**: اختياري. تحديد الموقع لنتائج البحث.
+- **locale**: اختياري. تحديد اللغة المحلية لنتائج البحث.
+- **n_results**: عدد نتائج البحث المُرجعة. الافتراضي هو `10`.
+
+يمكن العثور على قيم `country` و `location` و `locale` و `search_url` في [Serper Playground](https://serper.dev/playground).
+
+## مثال مع المعاملات
+
+إليك مثالاً يوضح كيفية استخدام الأداة مع معاملات إضافية:
+
+```python Code
+from crewai_tools import SerperDevTool
+
+tool = SerperDevTool(
+ search_url="https://google.serper.dev/scholar",
+ n_results=2,
+)
+
+print(tool.run(search_query="ChatGPT"))
+
+# Using Tool: Search the internet
+
+# Search results: Title: Role of chat gpt in public health
+# Link: https://link.springer.com/article/10.1007/s10439-023-03172-7
+# Snippet: … ChatGPT in public health. In this overview, we will examine the potential uses of ChatGPT in
+# ---
+# Title: Potential use of chat gpt in global warming
+# Link: https://link.springer.com/article/10.1007/s10439-023-03171-8
+# Snippet: … as ChatGPT, have the potential to play a critical role in advancing our understanding of climate
+# ---
+
+```
+
+```python Code
+from crewai_tools import SerperDevTool
+
+tool = SerperDevTool(
+ country="fr",
+ locale="fr",
+ location="Paris, Paris, Ile-de-France, France",
+ n_results=2,
+)
+
+print(tool.run(search_query="Jeux Olympiques"))
+
+# Using Tool: Search the internet
+
+# Search results: Title: Jeux Olympiques de Paris 2024 - Actualités, calendriers, résultats
+# Link: https://olympics.com/fr/paris-2024
+# Snippet: Quels sont les sports présents aux Jeux Olympiques de Paris 2024 ? · Athlétisme · Aviron · Badminton · Basketball · Basketball 3x3 · Boxe · Breaking · Canoë ...
+# ---
+# Title: Billetterie Officielle de Paris 2024 - Jeux Olympiques et Paralympiques
+# Link: https://tickets.paris2024.org/
+# Snippet: Achetez vos billets exclusivement sur le site officiel de la billetterie de Paris 2024 pour participer au plus grand événement sportif au monde.
+# ---
+```
+
+## الخلاصة
+
+من خلال دمج `SerperDevTool` في مشاريع Python، يكتسب المستخدمون القدرة على إجراء عمليات بحث فورية وذات صلة عبر الإنترنت مباشرة من تطبيقاتهم.
+تسمح المعاملات المحدّثة بنتائج بحث أكثر تخصيصاً وتوطيناً. من خلال الالتزام بإرشادات الإعداد والاستخدام المقدمة، يصبح دمج هذه الأداة في المشاريع سلساً ومباشراً.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/tavilyextractortool.mdx b/docs/v1.15.1/ar/tools/search-research/tavilyextractortool.mdx
new file mode 100644
index 000000000..3b5eb1aed
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/tavilyextractortool.mdx
@@ -0,0 +1,140 @@
+---
+title: "أداة استخراج Tavily"
+description: "استخراج محتوى منظم من صفحات الويب باستخدام Tavily API"
+icon: square-poll-horizontal
+mode: "wide"
+---
+
+تتيح أداة `TavilyExtractorTool` لوكلاء CrewAI استخراج محتوى منظم من صفحات الويب باستخدام Tavily API. يمكنها معالجة عناوين URL مفردة أو قوائم من عناوين URL وتوفر خيارات للتحكم في عمق الاستخراج وتضمين الصور.
+
+## التثبيت
+
+لاستخدام `TavilyExtractorTool`، تحتاج إلى تثبيت مكتبة `tavily-python`:
+
+```shell
+uv add 'crewai[tools]' tavily-python
+```
+
+تحتاج أيضاً إلى تعيين مفتاح Tavily API كمتغير بيئة:
+
+```bash
+export TAVILY_API_KEY='your-tavily-api-key'
+```
+
+## مثال على الاستخدام
+
+إليك كيفية تهيئة واستخدام `TavilyExtractorTool` مع وكيل CrewAI:
+
+```python
+import os
+from crewai import Agent, Task, Crew
+from crewai_tools import TavilyExtractorTool
+
+# Ensure TAVILY_API_KEY is set in your environment
+# os.environ["TAVILY_API_KEY"] = "YOUR_API_KEY"
+
+# Initialize the tool
+tavily_tool = TavilyExtractorTool()
+
+# Create an agent that uses the tool
+extractor_agent = Agent(
+ role='Web Content Extractor',
+ goal='Extract key information from specified web pages',
+ backstory='You are an expert at extracting relevant content from websites using the Tavily API.',
+ tools=[tavily_tool],
+ verbose=True
+)
+
+# Define a task for the agent
+extract_task = Task(
+ description='Extract the main content from the URL https://example.com using basic extraction depth.',
+ expected_output='A JSON string containing the extracted content from the URL.',
+ agent=extractor_agent
+)
+
+# Create and run the crew
+crew = Crew(
+ agents=[extractor_agent],
+ tasks=[extract_task],
+ verbose=2
+)
+
+result = crew.kickoff()
+print(result)
+```
+
+## خيارات التكوين
+
+تقبل أداة `TavilyExtractorTool` المعاملات التالية:
+
+- `urls` (Union[List[str], str]): **مطلوب**. سلسلة URL واحدة أو قائمة من سلاسل URL لاستخراج البيانات منها.
+- `include_images` (Optional[bool]): ما إذا كان يجب تضمين الصور في نتائج الاستخراج. الافتراضي هو `False`.
+- `extract_depth` (Literal["basic", "advanced"]): عمق الاستخراج. استخدم `"basic"` للاستخراج السريع السطحي أو `"advanced"` للاستخراج الأكثر شمولاً. الافتراضي هو `"basic"`.
+- `timeout` (int): الحد الأقصى للوقت بالثواني لانتظار إكمال طلب الاستخراج. الافتراضي هو `60`.
+
+## الاستخدام المتقدم
+
+### عناوين URL متعددة مع استخراج متقدم
+
+```python
+# Example with multiple URLs and advanced extraction
+multi_extract_task = Task(
+ description='Extract content from https://example.com and https://anotherexample.org using advanced extraction.',
+ expected_output='A JSON string containing the extracted content from both URLs.',
+ agent=extractor_agent
+)
+
+# Configure the tool with custom parameters
+custom_extractor = TavilyExtractorTool(
+ extract_depth='advanced',
+ include_images=True,
+ timeout=120
+)
+
+agent_with_custom_tool = Agent(
+ role="Advanced Content Extractor",
+ goal="Extract comprehensive content with images",
+ tools=[custom_extractor]
+)
+```
+
+### معاملات الأداة
+
+يمكنك تخصيص سلوك الأداة عن طريق تعيين المعاملات أثناء التهيئة:
+
+```python
+# Initialize with custom configuration
+extractor_tool = TavilyExtractorTool(
+ extract_depth='advanced', # More comprehensive extraction
+ include_images=True, # Include image results
+ timeout=90 # Custom timeout
+)
+```
+
+## الميزات
+
+- **عنوان URL واحد أو متعدد**: استخراج المحتوى من عنوان URL واحد أو معالجة عناوين URL متعددة في طلب واحد
+- **عمق قابل للتكوين**: الاختيار بين أوضاع الاستخراج الأساسي (السريع) والمتقدم (الشامل)
+- **دعم الصور**: تضمين الصور اختيارياً في نتائج الاستخراج
+- **مخرجات منظمة**: إرجاع JSON منسّق يحتوي على المحتوى المستخرج
+- **معالجة الأخطاء**: معالجة قوية لمهلات الشبكة وأخطاء الاستخراج
+
+## تنسيق الاستجابة
+
+تُرجع الأداة سلسلة JSON تمثل البيانات المنظمة المستخرجة من عنوان (عناوين) URL المقدمة. يعتمد الهيكل الدقيق على محتوى الصفحات و `extract_depth` المستخدم.
+
+تشمل عناصر الاستجابة الشائعة:
+- **Title**: عنوان الصفحة
+- **Content**: المحتوى النصي الرئيسي للصفحة
+- **Images**: عناوين URL للصور والبيانات الوصفية (عند `include_images=True`)
+- **Metadata**: معلومات إضافية عن الصفحة مثل المؤلف والوصف وغيرها
+
+## حالات الاستخدام
+
+- **تحليل المحتوى**: استخراج وتحليل المحتوى من مواقع المنافسين
+- **البحث**: جمع بيانات منظمة من مصادر متعددة للتحليل
+- **ترحيل المحتوى**: استخراج المحتوى من المواقع الحالية للترحيل
+- **المراقبة**: الاستخراج المنتظم للمحتوى لاكتشاف التغييرات
+- **جمع البيانات**: الاستخراج المنهجي للمعلومات من مصادر الويب
+
+راجع [توثيق Tavily API](https://docs.tavily.com/docs/tavily-api/python-sdk#extract) للحصول على معلومات مفصلة حول هيكل الاستجابة والخيارات المتاحة.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/tavilyresearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/tavilyresearchtool.mdx
new file mode 100644
index 000000000..34fdc8c66
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/tavilyresearchtool.mdx
@@ -0,0 +1,125 @@
+---
+title: "Tavily Research Tool"
+description: "Run multi-step research tasks and get cited reports using the Tavily Research API"
+icon: "flask"
+mode: "wide"
+---
+
+The `TavilyResearchTool` lets CrewAI agents kick off Tavily research tasks, returning a synthesized, cited report (or a stream of progress events) instead of raw search results. Use it when an agent needs an investigative answer rather than a single web search.
+
+## Installation
+
+To use the `TavilyResearchTool`, install the `tavily-python` library alongside `crewai-tools`:
+
+```shell
+uv add 'crewai[tools]' tavily-python
+```
+
+## Environment Variables
+
+Set your Tavily API key:
+
+```bash
+export TAVILY_API_KEY='your_tavily_api_key'
+```
+
+Get an API key at [https://app.tavily.com/](https://app.tavily.com/) (sign up, then create a key).
+
+## Example Usage
+
+```python
+import os
+from crewai import Agent, Crew, Task
+from crewai_tools import TavilyResearchTool
+
+# Ensure TAVILY_API_KEY is set in your environment
+# os.environ["TAVILY_API_KEY"] = "YOUR_API_KEY"
+
+tavily_tool = TavilyResearchTool()
+
+researcher = Agent(
+ role="Research Analyst",
+ goal="Investigate questions and produce concise, well-cited briefings.",
+ backstory=(
+ "You are a meticulous analyst who delegates web research to the Tavily "
+ "Research tool, then synthesizes the findings into short briefings."
+ ),
+ tools=[tavily_tool],
+ verbose=True,
+)
+
+research_task = Task(
+ description=(
+ "Investigate notable open-source agent orchestration frameworks released "
+ "in the last six months and summarize their differentiators."
+ ),
+ expected_output="A bulleted briefing with citations.",
+ agent=researcher,
+)
+
+crew = Crew(agents=[researcher], tasks=[research_task])
+print(crew.kickoff())
+```
+
+## Configuration Options
+
+The `TavilyResearchTool` accepts the following arguments — all can be set on the tool instance (defaults for every call) or per-call via the agent's tool input:
+
+- `input` (str): **Required.** The research task or question to investigate.
+- `model` (Literal["mini", "pro", "auto"]): The Tavily research model. `"auto"` lets Tavily pick; `"mini"` is faster/cheaper; `"pro"` is the most capable. Defaults to `"auto"`.
+- `output_schema` (dict | None): Optional JSON Schema that structures the research output. Useful when you want strictly typed results.
+- `stream` (bool): When `True`, the tool returns an iterator of SSE chunks emitting research progress and the final result instead of a single string. Defaults to `False`.
+- `citation_format` (Literal["numbered", "mla", "apa", "chicago"]): Citation format for the report. Defaults to `"numbered"`.
+
+## Advanced Usage
+
+### Configure defaults on the tool instance
+
+```python
+from crewai_tools import TavilyResearchTool
+
+tavily_tool = TavilyResearchTool(
+ model="pro", # use Tavily's most capable research model
+ citation_format="apa", # APA-style citations
+)
+```
+
+### Stream research progress
+
+When `stream=True`, the tool returns a generator (or async generator from `_arun`) of SSE chunks so your application can surface incremental progress:
+
+```python
+tavily_tool = TavilyResearchTool(stream=True)
+
+for chunk in tavily_tool.run(input="Summarize recent advances in retrieval-augmented generation."):
+ print(chunk)
+```
+
+### Structured output via JSON Schema
+
+Pass an `output_schema` when you need a typed result instead of a free-form report:
+
+```python
+output_schema = {
+ "type": "object",
+ "properties": {
+ "summary": {"type": "string"},
+ "key_points": {"type": "array", "items": {"type": "string"}},
+ "sources": {"type": "array", "items": {"type": "string"}},
+ },
+ "required": ["summary", "key_points", "sources"],
+}
+
+tavily_tool = TavilyResearchTool(output_schema=output_schema)
+```
+
+## Features
+
+- **End-to-end research**: Returns a synthesized, cited report rather than raw search hits.
+- **Model selection**: Trade off cost, speed, and depth via `mini`, `pro`, or `auto`.
+- **Streaming**: Stream incremental progress and results as SSE chunks for responsive UIs.
+- **Structured output**: Coerce results to a JSON Schema you define.
+- **Multiple citation styles**: Choose from numbered, MLA, APA, or Chicago citations.
+- **Sync and async**: Use either `_run` or `_arun` depending on your application's runtime.
+
+Refer to the [Tavily API documentation](https://docs.tavily.com/) for full details on the Research API.
diff --git a/docs/v1.15.1/ar/tools/search-research/tavilysearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/tavilysearchtool.mdx
new file mode 100644
index 000000000..bc2c52e72
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/tavilysearchtool.mdx
@@ -0,0 +1,125 @@
+---
+title: "أداة بحث Tavily"
+description: "إجراء عمليات بحث شاملة على الويب باستخدام Tavily Search API"
+icon: "magnifying-glass"
+mode: "wide"
+---
+
+توفر أداة `TavilySearchTool` واجهة لـ Tavily Search API، مما يتيح لوكلاء CrewAI إجراء عمليات بحث شاملة على الويب. تسمح بتحديد عمق البحث والمواضيع والنطاقات الزمنية والنطاقات المضمنة/المستبعدة، وما إذا كان يجب تضمين إجابات مباشرة أو محتوى خام أو صور في النتائج.
+
+## التثبيت
+
+لاستخدام `TavilySearchTool`، تحتاج إلى تثبيت مكتبة `tavily-python`:
+
+```shell
+uv add 'crewai[tools]' tavily-python
+```
+
+## متغيرات البيئة
+
+تأكد من تعيين مفتاح Tavily API كمتغير بيئة:
+
+```bash
+export TAVILY_API_KEY='your_tavily_api_key'
+```
+
+احصل على مفتاح API على https://app.tavily.com/ (سجّل، ثم أنشئ مفتاحاً).
+
+## مثال على الاستخدام
+
+إليك كيفية تهيئة واستخدام `TavilySearchTool` مع وكيل CrewAI:
+
+```python
+import os
+from crewai import Agent, Task, Crew
+from crewai_tools import TavilySearchTool
+
+# Ensure the TAVILY_API_KEY environment variable is set
+# os.environ["TAVILY_API_KEY"] = "YOUR_TAVILY_API_KEY"
+
+# Initialize the tool
+tavily_tool = TavilySearchTool()
+
+# Create an agent that uses the tool
+researcher = Agent(
+ role='Market Researcher',
+ goal='Find information about the latest AI trends',
+ backstory='An expert market researcher specializing in technology.',
+ tools=[tavily_tool],
+ verbose=True
+)
+
+# Create a task for the agent
+research_task = Task(
+ description='Search for the top 3 AI trends in 2024.',
+ expected_output='A JSON report summarizing the top 3 AI trends found.',
+ agent=researcher
+)
+
+# Form the crew and kick it off
+crew = Crew(
+ agents=[researcher],
+ tasks=[research_task],
+ verbose=2
+)
+
+result = crew.kickoff()
+print(result)
+```
+
+## خيارات التكوين
+
+تقبل أداة `TavilySearchTool` المعاملات التالية أثناء التهيئة أو عند استدعاء طريقة `run`:
+
+- `query` (str): **مطلوب**. سلسلة استعلام البحث.
+- `search_depth` (Literal["basic", "advanced"]، اختياري): عمق البحث. الافتراضي هو `"basic"`.
+- `topic` (Literal["general", "news", "finance"]، اختياري): الموضوع لتركيز البحث عليه. الافتراضي هو `"general"`.
+- `time_range` (Literal["day", "week", "month", "year"]، اختياري): النطاق الزمني للبحث. الافتراضي هو `None`.
+- `days` (int، اختياري): عدد الأيام للبحث للخلف. ذو صلة إذا لم يتم تعيين `time_range`. الافتراضي هو `7`.
+- `max_results` (int، اختياري): الحد الأقصى لعدد نتائج البحث المُرجعة. الافتراضي هو `5`.
+- `include_domains` (Sequence[str]، اختياري): قائمة بالنطاقات لإعطائها الأولوية في البحث. الافتراضي هو `None`.
+- `exclude_domains` (Sequence[str]، اختياري): قائمة بالنطاقات لاستبعادها من البحث. الافتراضي هو `None`.
+- `include_answer` (Union[bool, Literal["basic", "advanced"]]، اختياري): ما إذا كان يجب تضمين إجابة مباشرة مُركّبة من نتائج البحث. الافتراضي هو `False`.
+- `include_raw_content` (bool، اختياري): ما إذا كان يجب تضمين محتوى HTML الخام للصفحات المبحوث عنها. الافتراضي هو `False`.
+- `include_images` (bool، اختياري): ما إذا كان يجب تضمين نتائج الصور. الافتراضي هو `False`.
+- `timeout` (int، اختياري): مهلة الطلب بالثواني. الافتراضي هو `60`.
+
+## الاستخدام المتقدم
+
+يمكنك تكوين الأداة بمعاملات مخصصة:
+
+```python
+# Example: Initialize with specific parameters
+custom_tavily_tool = TavilySearchTool(
+ search_depth='advanced',
+ max_results=10,
+ include_answer=True
+)
+
+# The agent will use these defaults
+agent_with_custom_tool = Agent(
+ role="Advanced Researcher",
+ goal="Conduct detailed research with comprehensive results",
+ tools=[custom_tavily_tool]
+)
+```
+
+## الميزات
+
+- **بحث شامل**: الوصول إلى فهرس بحث Tavily القوي
+- **عمق قابل للتكوين**: الاختيار بين أوضاع البحث الأساسي والمتقدم
+- **تصفية المواضيع**: تركيز عمليات البحث على المواضيع العامة أو الأخبار أو المالية
+- **التحكم في النطاق الزمني**: تقييد النتائج لفترات زمنية محددة
+- **التحكم في النطاقات**: تضمين أو استبعاد نطاقات محددة
+- **إجابات مباشرة**: الحصول على إجابات مُركّبة من نتائج البحث
+- **تصفية المحتوى**: منع مشاكل نافذة السياق مع اقتطاع المحتوى التلقائي
+
+## تنسيق الاستجابة
+
+تُرجع الأداة نتائج البحث كسلسلة JSON تحتوي على:
+- نتائج بحث مع عناوين وعناوين URL ومقتطفات محتوى
+- إجابات مباشرة اختيارية للاستعلامات
+- نتائج صور اختيارية
+- محتوى HTML خام اختياري (عند التفعيل)
+
+يتم اقتطاع المحتوى لكل نتيجة تلقائياً لمنع مشاكل نافذة السياق مع الحفاظ على المعلومات الأكثر صلة.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/websitesearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/websitesearchtool.mdx
new file mode 100644
index 000000000..f332f329c
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/websitesearchtool.mdx
@@ -0,0 +1,78 @@
+---
+title: البحث في المواقع باستخدام RAG
+description: أداة `WebsiteSearchTool` مصممة لإجراء بحث RAG (التوليد المعزز بالاسترجاع) داخل محتوى موقع ويب.
+icon: globe-stand
+mode: "wide"
+---
+
+# `WebsiteSearchTool`
+
+
+ أداة WebsiteSearchTool حالياً في مرحلة تجريبية. نحن نعمل بنشاط على دمج هذه الأداة في مجموعة عروضنا وسنقوم بتحديث التوثيق وفقاً لذلك.
+
+
+## الوصف
+
+أداة WebsiteSearchTool مصممة كمفهوم لإجراء عمليات بحث دلالية داخل محتوى المواقع.
+تهدف إلى الاستفادة من نماذج التعلم الآلي المتقدمة مثل التوليد المعزز بالاسترجاع (RAG) للتنقل واستخراج المعلومات من عناوين URL المحددة بكفاءة.
+تهدف هذه الأداة إلى توفير المرونة، مما يسمح للمستخدمين بإجراء عمليات بحث عبر أي موقع أو التركيز على مواقع محددة ذات اهتمام.
+يرجى ملاحظة أن تفاصيل التنفيذ الحالية لأداة WebsiteSearchTool قيد التطوير، وقد لا تكون وظائفها كما هو موصوف متاحة بعد.
+
+## التثبيت
+
+لتحضير بيئتك لعندما تصبح أداة WebsiteSearchTool متاحة، يمكنك تثبيت الحزمة الأساسية بـ:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+يثبّت هذا الأمر التبعيات اللازمة لضمان أنه بمجرد دمج الأداة بالكامل، يمكن للمستخدمين البدء في استخدامها فوراً.
+
+## مثال على الاستخدام
+
+فيما يلي أمثلة على كيفية استخدام أداة WebsiteSearchTool في سيناريوهات مختلفة. يرجى ملاحظة أن هذه الأمثلة توضيحية وتمثل وظائف مخططة:
+
+```python Code
+from crewai_tools import WebsiteSearchTool
+
+# Example of initiating tool that agents can use
+# to search across any discovered websites
+tool = WebsiteSearchTool()
+
+# Example of limiting the search to the content of a specific website,
+# so now agents can only search within that website
+tool = WebsiteSearchTool(website='https://example.com')
+```
+
+## المعاملات
+
+- `website`: معامل اختياري مخصص لتحديد عنوان URL للموقع لعمليات البحث المركزة. هذا المعامل مصمم لتعزيز مرونة الأداة من خلال السماح بعمليات بحث موجّهة عند الحاجة.
+
+## خيارات التخصيص
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+
+```python Code
+tool = WebsiteSearchTool(
+ config=dict(
+ llm=dict(
+ provider="ollama", # or google, openai, anthropic, llama2, ...
+ config=dict(
+ model="llama2",
+ # temperature=0.5,
+ # top_p=1,
+ # stream=true,
+ ),
+ ),
+ embedder=dict(
+ provider="google-generativeai", # or openai, ollama, ...
+ config=dict(
+ model_name="gemini-embedding-001",
+ task_type="RETRIEVAL_DOCUMENT",
+ # title="Embeddings",
+ ),
+ ),
+ )
+)
+```
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/youtubechannelsearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/youtubechannelsearchtool.mdx
new file mode 100644
index 000000000..a88e87d01
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/youtubechannelsearchtool.mdx
@@ -0,0 +1,195 @@
+---
+title: البحث في قنوات YouTube باستخدام RAG
+description: أداة `YoutubeChannelSearchTool` مصممة لإجراء بحث RAG (التوليد المعزز بالاسترجاع) داخل محتوى قناة YouTube.
+icon: youtube
+mode: "wide"
+---
+
+# `YoutubeChannelSearchTool`
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+هذه الأداة مصممة لإجراء عمليات بحث دلالية داخل محتوى قناة YouTube محددة.
+من خلال الاستفادة من منهجية RAG (التوليد المعزز بالاسترجاع)، توفر نتائج بحث ذات صلة،
+مما يجعلها لا تقدر بثمن لاستخراج المعلومات أو العثور على محتوى محدد دون الحاجة إلى تصفح الفيديوهات يدوياً.
+تبسّط عملية البحث داخل قنوات YouTube، مما يخدم الباحثين ومنشئي المحتوى والمشاهدين الذين يبحثون عن معلومات أو مواضيع محددة.
+
+## التثبيت
+
+لاستخدام YoutubeChannelSearchTool، يجب تثبيت حزمة `crewai_tools`. نفّذ الأمر التالي في الطرفية للتثبيت:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `YoutubeChannelSearchTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import YoutubeChannelSearchTool
+
+# Initialize the tool for general YouTube channel searches
+youtube_channel_tool = YoutubeChannelSearchTool()
+
+# Define an agent that uses the tool
+channel_researcher = Agent(
+ role="Channel Researcher",
+ goal="Extract relevant information from YouTube channels",
+ backstory="An expert researcher who specializes in analyzing YouTube channel content.",
+ tools=[youtube_channel_tool],
+ verbose=True,
+)
+
+# Example task to search for information in a specific channel
+research_task = Task(
+ description="Search for information about machine learning tutorials in the YouTube channel {youtube_channel_handle}",
+ expected_output="A summary of the key machine learning tutorials available on the channel.",
+ agent=channel_researcher,
+)
+
+# Create and run the crew
+crew = Crew(agents=[channel_researcher], tasks=[research_task])
+result = crew.kickoff(inputs={"youtube_channel_handle": "@exampleChannel"})
+```
+
+يمكنك أيضاً تهيئة الأداة بمعرّف قناة YouTube محدد:
+
+```python Code
+# Initialize the tool with a specific YouTube channel handle
+youtube_channel_tool = YoutubeChannelSearchTool(
+ youtube_channel_handle='@exampleChannel'
+)
+
+# Define an agent that uses the tool
+channel_researcher = Agent(
+ role="Channel Researcher",
+ goal="Extract relevant information from a specific YouTube channel",
+ backstory="An expert researcher who specializes in analyzing YouTube channel content.",
+ tools=[youtube_channel_tool],
+ verbose=True,
+)
+```
+
+## المعاملات
+
+تقبل أداة `YoutubeChannelSearchTool` المعاملات التالية:
+
+- **youtube_channel_handle**: اختياري. معرّف قناة YouTube للبحث داخلها. إذا تم تقديمه أثناء التهيئة، لن يحتاج الوكيل إلى تحديده عند استخدام الأداة. إذا لم يبدأ المعرّف بـ '@'، سيتم إضافته تلقائياً.
+- **config**: اختياري. تكوين لنظام RAG الأساسي، بما في ذلك إعدادات LLM والتضمينات.
+- **summarize**: اختياري. ما إذا كان يجب تلخيص المحتوى المسترجع. الافتراضي هو `False`.
+
+عند استخدام الأداة مع وكيل، سيحتاج الوكيل إلى تقديم:
+
+- **search_query**: مطلوب. استعلام البحث للعثور على معلومات ذات صلة في محتوى القناة.
+- **youtube_channel_handle**: مطلوب فقط إذا لم يتم تقديمه أثناء التهيئة. معرّف قناة YouTube للبحث داخلها.
+
+## النموذج المخصص والتضمينات
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+youtube_channel_tool = YoutubeChannelSearchTool(
+ config=dict(
+ llm=dict(
+ provider="ollama", # or google, openai, anthropic, llama2, ...
+ config=dict(
+ model="llama2",
+ # temperature=0.5,
+ # top_p=1,
+ # stream=true,
+ ),
+ ),
+ embedder=dict(
+ provider="google-generativeai", # or openai, ollama, ...
+ config=dict(
+ model_name="gemini-embedding-001",
+ task_type="RETRIEVAL_DOCUMENT",
+ # title="Embeddings",
+ ),
+ ),
+ )
+)
+```
+
+## مثال على التكامل مع الوكيل
+
+إليك مثالاً أكثر تفصيلاً لكيفية دمج `YoutubeChannelSearchTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import YoutubeChannelSearchTool
+
+# Initialize the tool
+youtube_channel_tool = YoutubeChannelSearchTool()
+
+# Define an agent that uses the tool
+channel_researcher = Agent(
+ role="Channel Researcher",
+ goal="Extract and analyze information from YouTube channels",
+ backstory="""You are an expert channel researcher who specializes in extracting
+ and analyzing information from YouTube channels. You have a keen eye for detail
+ and can quickly identify key points and insights from video content across an entire channel.""",
+ tools=[youtube_channel_tool],
+ verbose=True,
+)
+
+# Create a task for the agent
+research_task = Task(
+ description="""
+ Search for information about data science projects and tutorials
+ in the YouTube channel {youtube_channel_handle}.
+
+ Focus on:
+ 1. Key data science techniques covered
+ 2. Popular tutorial series
+ 3. Most viewed or recommended videos
+
+ Provide a comprehensive summary of these points.
+ """,
+ expected_output="A detailed summary of data science content available on the channel.",
+ agent=channel_researcher,
+)
+
+# Run the task
+crew = Crew(agents=[channel_researcher], tasks=[research_task])
+result = crew.kickoff(inputs={"youtube_channel_handle": "@exampleDataScienceChannel"})
+```
+
+## تفاصيل التنفيذ
+
+أداة `YoutubeChannelSearchTool` مُنفّذة كفئة فرعية من `RagTool`، التي توفر الوظائف الأساسية للتوليد المعزز بالاسترجاع:
+
+```python Code
+class YoutubeChannelSearchTool(RagTool):
+ name: str = "Search a Youtube Channels content"
+ description: str = "A tool that can be used to semantic search a query from a Youtube Channels content."
+ args_schema: Type[BaseModel] = YoutubeChannelSearchToolSchema
+
+ def __init__(self, youtube_channel_handle: Optional[str] = None, **kwargs):
+ super().__init__(**kwargs)
+ if youtube_channel_handle is not None:
+ kwargs["data_type"] = DataType.YOUTUBE_CHANNEL
+ self.add(youtube_channel_handle)
+ self.description = f"A tool that can be used to semantic search a query the {youtube_channel_handle} Youtube Channels content."
+ self.args_schema = FixedYoutubeChannelSearchToolSchema
+ self._generate_description()
+
+ def add(
+ self,
+ youtube_channel_handle: str,
+ **kwargs: Any,
+ ) -> None:
+ if not youtube_channel_handle.startswith("@"):
+ youtube_channel_handle = f"@{youtube_channel_handle}"
+ super().add(youtube_channel_handle, **kwargs)
+```
+
+## الخلاصة
+
+توفر أداة `YoutubeChannelSearchTool` طريقة قوية للبحث واستخراج المعلومات من محتوى قنوات YouTube باستخدام تقنيات RAG. من خلال تمكين الوكلاء من البحث عبر فيديوهات قناة كاملة، تسهّل مهام استخراج المعلومات والتحليل التي قد يكون من الصعب تنفيذها بطريقة أخرى. هذه الأداة مفيدة بشكل خاص للبحث وتحليل المحتوى واستخراج المعرفة من قنوات YouTube.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/search-research/youtubevideosearchtool.mdx b/docs/v1.15.1/ar/tools/search-research/youtubevideosearchtool.mdx
new file mode 100644
index 000000000..1260ea7e3
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/search-research/youtubevideosearchtool.mdx
@@ -0,0 +1,188 @@
+---
+title: البحث في فيديوهات YouTube باستخدام RAG
+description: أداة `YoutubeVideoSearchTool` مصممة لإجراء بحث RAG (التوليد المعزز بالاسترجاع) داخل محتوى فيديو YouTube.
+icon: youtube
+mode: "wide"
+---
+
+# `YoutubeVideoSearchTool`
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+هذه الأداة جزء من حزمة `crewai_tools` وهي مصممة لإجراء عمليات بحث دلالية داخل محتوى فيديو YouTube، باستخدام تقنيات التوليد المعزز بالاسترجاع (RAG).
+هي واحدة من عدة أدوات "بحث" في الحزمة التي تستفيد من RAG لمصادر مختلفة.
+تتيح أداة YoutubeVideoSearchTool المرونة في عمليات البحث؛ يمكن للمستخدمين البحث عبر أي محتوى فيديو YouTube دون تحديد عنوان URL للفيديو،
+أو يمكنهم توجيه بحثهم إلى فيديو YouTube محدد من خلال تقديم عنوان URL الخاص به.
+
+## التثبيت
+
+لاستخدام `YoutubeVideoSearchTool`، يجب أولاً تثبيت حزمة `crewai_tools`.
+تحتوي هذه الحزمة على `YoutubeVideoSearchTool` إلى جانب أدوات مساعدة أخرى مصممة لتعزيز مهام تحليل ومعالجة البيانات.
+ثبّت الحزمة بتنفيذ الأمر التالي في الطرفية:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `YoutubeVideoSearchTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import YoutubeVideoSearchTool
+
+# Initialize the tool for general YouTube video searches
+youtube_search_tool = YoutubeVideoSearchTool()
+
+# Define an agent that uses the tool
+video_researcher = Agent(
+ role="Video Researcher",
+ goal="Extract relevant information from YouTube videos",
+ backstory="An expert researcher who specializes in analyzing video content.",
+ tools=[youtube_search_tool],
+ verbose=True,
+)
+
+# Example task to search for information in a specific video
+research_task = Task(
+ description="Search for information about machine learning frameworks in the YouTube video at {youtube_video_url}",
+ expected_output="A summary of the key machine learning frameworks mentioned in the video.",
+ agent=video_researcher,
+)
+
+# Create and run the crew
+crew = Crew(agents=[video_researcher], tasks=[research_task])
+result = crew.kickoff(inputs={"youtube_video_url": "https://youtube.com/watch?v=example"})
+```
+
+يمكنك أيضاً تهيئة الأداة بعنوان URL محدد لفيديو YouTube:
+
+```python Code
+# Initialize the tool with a specific YouTube video URL
+youtube_search_tool = YoutubeVideoSearchTool(
+ youtube_video_url='https://youtube.com/watch?v=example'
+)
+
+# Define an agent that uses the tool
+video_researcher = Agent(
+ role="Video Researcher",
+ goal="Extract relevant information from a specific YouTube video",
+ backstory="An expert researcher who specializes in analyzing video content.",
+ tools=[youtube_search_tool],
+ verbose=True,
+)
+```
+
+## المعاملات
+
+تقبل أداة `YoutubeVideoSearchTool` المعاملات التالية:
+
+- **youtube_video_url**: اختياري. عنوان URL لفيديو YouTube للبحث داخله. إذا تم تقديمه أثناء التهيئة، لن يحتاج الوكيل إلى تحديده عند استخدام الأداة.
+- **config**: اختياري. تكوين لنظام RAG الأساسي، بما في ذلك إعدادات LLM والتضمينات.
+- **summarize**: اختياري. ما إذا كان يجب تلخيص المحتوى المسترجع. الافتراضي هو `False`.
+
+عند استخدام الأداة مع وكيل، سيحتاج الوكيل إلى تقديم:
+
+- **search_query**: مطلوب. استعلام البحث للعثور على معلومات ذات صلة في محتوى الفيديو.
+- **youtube_video_url**: مطلوب فقط إذا لم يتم تقديمه أثناء التهيئة. عنوان URL لفيديو YouTube للبحث داخله.
+
+## النموذج المخصص والتضمينات
+
+بشكل افتراضي، تستخدم الأداة OpenAI لكل من التضمينات والتلخيص. لتخصيص النموذج، يمكنك استخدام قاموس تكوين كما يلي:
+
+```python Code
+youtube_search_tool = YoutubeVideoSearchTool(
+ config=dict(
+ llm=dict(
+ provider="ollama", # or google, openai, anthropic, llama2, ...
+ config=dict(
+ model="llama2",
+ # temperature=0.5,
+ # top_p=1,
+ # stream=true,
+ ),
+ ),
+ embedder=dict(
+ provider="google-generativeai", # or openai, ollama, ...
+ config=dict(
+ model_name="gemini-embedding-001",
+ task_type="RETRIEVAL_DOCUMENT",
+ # title="Embeddings",
+ ),
+ ),
+ )
+)
+```
+
+## مثال على التكامل مع الوكيل
+
+إليك مثالاً أكثر تفصيلاً لكيفية دمج `YoutubeVideoSearchTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import YoutubeVideoSearchTool
+
+# Initialize the tool
+youtube_search_tool = YoutubeVideoSearchTool()
+
+# Define an agent that uses the tool
+video_researcher = Agent(
+ role="Video Researcher",
+ goal="Extract and analyze information from YouTube videos",
+ backstory="""You are an expert video researcher who specializes in extracting
+ and analyzing information from YouTube videos. You have a keen eye for detail
+ and can quickly identify key points and insights from video content.""",
+ tools=[youtube_search_tool],
+ verbose=True,
+)
+
+# Create a task for the agent
+research_task = Task(
+ description="""
+ Search for information about recent advancements in artificial intelligence
+ in the YouTube video at {youtube_video_url}.
+
+ Focus on:
+ 1. Key AI technologies mentioned
+ 2. Real-world applications discussed
+ 3. Future predictions made by the speaker
+
+ Provide a comprehensive summary of these points.
+ """,
+ expected_output="A detailed summary of AI advancements, applications, and future predictions from the video.",
+ agent=video_researcher,
+)
+
+# Run the task
+crew = Crew(agents=[video_researcher], tasks=[research_task])
+result = crew.kickoff(inputs={"youtube_video_url": "https://youtube.com/watch?v=example"})
+```
+
+## تفاصيل التنفيذ
+
+أداة `YoutubeVideoSearchTool` مُنفّذة كفئة فرعية من `RagTool`، التي توفر الوظائف الأساسية للتوليد المعزز بالاسترجاع:
+
+```python Code
+class YoutubeVideoSearchTool(RagTool):
+ name: str = "Search a Youtube Video content"
+ description: str = "A tool that can be used to semantic search a query from a Youtube Video content."
+ args_schema: Type[BaseModel] = YoutubeVideoSearchToolSchema
+
+ def __init__(self, youtube_video_url: Optional[str] = None, **kwargs):
+ super().__init__(**kwargs)
+ if youtube_video_url is not None:
+ kwargs["data_type"] = DataType.YOUTUBE_VIDEO
+ self.add(youtube_video_url)
+ self.description = f"A tool that can be used to semantic search a query the {youtube_video_url} Youtube Video content."
+ self.args_schema = FixedYoutubeVideoSearchToolSchema
+ self._generate_description()
+```
+
+## الخلاصة
+
+توفر أداة `YoutubeVideoSearchTool` طريقة قوية للبحث واستخراج المعلومات من محتوى فيديو YouTube باستخدام تقنيات RAG. من خلال تمكين الوكلاء من البحث داخل محتوى الفيديو، تسهّل مهام استخراج المعلومات والتحليل التي قد يكون من الصعب تنفيذها بطريقة أخرى. هذه الأداة مفيدة بشكل خاص للبحث وتحليل المحتوى واستخراج المعرفة من مصادر الفيديو.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/tool-integrations/overview.mdx b/docs/v1.15.1/ar/tools/tool-integrations/overview.mdx
new file mode 100644
index 000000000..d9d86b6d8
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/tool-integrations/overview.mdx
@@ -0,0 +1,31 @@
+---
+title: نظرة عامة
+description: تكاملات لنشر وأتمتة الطواقم مع منصات خارجية
+icon: face-smile
+mode: "wide"
+---
+
+## التكاملات المتاحة
+
+
+
+ استدعاء Amazon Bedrock Agents من CrewAI لتنسيق الإجراءات عبر خدمات AWS.
+
+
+
+ أتمتة النشر والعمليات من خلال دمج CrewAI مع المنصات وسير العمل الخارجية.
+
+
+
+استخدم هذه التكاملات لربط CrewAI بالبنية التحتية وسير العمل الخاصة بك.
+
diff --git a/docs/v1.15.1/ar/tools/web-scraping/brightdata-tools.mdx b/docs/v1.15.1/ar/tools/web-scraping/brightdata-tools.mdx
new file mode 100644
index 000000000..5809945ea
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/brightdata-tools.mdx
@@ -0,0 +1,112 @@
+---
+title: أدوات Bright Data
+description: تكاملات Bright Data للبحث في SERP واستخراج البيانات عبر Web Unlocker وDataset API.
+icon: spider
+mode: "wide"
+---
+
+# أدوات Bright Data
+
+هذه المجموعة من الأدوات تدمج خدمات Bright Data لاستخراج البيانات من الويب.
+
+## التثبيت
+
+```shell
+uv add crewai-tools requests aiohttp
+```
+
+## متغيرات البيئة
+
+- `BRIGHT_DATA_API_KEY` (مطلوب)
+- `BRIGHT_DATA_ZONE` (لـ SERP/Web Unlocker)
+
+أنشئ بيانات الاعتماد على https://brightdata.com/ (سجّل، ثم أنشئ رمز API ومنطقة).
+راجع التوثيق: https://developers.brightdata.com/
+
+## الأدوات المضمنة
+
+- `BrightDataSearchTool`: بحث SERP (Google/Bing/Yandex) مع خيارات الموقع الجغرافي واللغة والجهاز.
+- `BrightDataWebUnlockerTool`: استخراج الصفحات مع تجاوز مكافحة الروبوتات والتصيير.
+- `BrightDataDatasetTool`: تشغيل مهام Dataset API وجلب النتائج.
+
+## أمثلة
+
+### بحث SERP
+
+```python Code
+from crewai_tools import BrightDataSearchTool
+
+tool = BrightDataSearchTool(
+ query="CrewAI",
+ country="us",
+)
+
+print(tool.run())
+```
+
+### Web Unlocker
+
+```python Code
+from crewai_tools import BrightDataWebUnlockerTool
+
+tool = BrightDataWebUnlockerTool(
+ url="https://example.com",
+ format="markdown",
+)
+
+print(tool.run(url="https://example.com"))
+```
+
+### Dataset API
+
+```python Code
+from crewai_tools import BrightDataDatasetTool
+
+tool = BrightDataDatasetTool(
+ dataset_type="ecommerce",
+ url="https://example.com/product",
+)
+
+print(tool.run())
+```
+
+## استكشاف الأخطاء وإصلاحها
+
+- 401/403: تحقق من `BRIGHT_DATA_API_KEY` و `BRIGHT_DATA_ZONE`.
+- محتوى فارغ/محظور: فعّل التصيير أو جرّب منطقة مختلفة.
+
+## مثال
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import BrightDataSearchTool
+
+tool = BrightDataSearchTool(
+ query="CrewAI",
+ country="us",
+)
+
+agent = Agent(
+ role="Web Researcher",
+ goal="Search with Bright Data",
+ backstory="Finds reliable results",
+ tools=[tool],
+ verbose=True,
+)
+
+task = Task(
+ description="Search for CrewAI and summarize top results",
+ expected_output="Short summary with links",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+)
+
+result = crew.kickoff()
+```
+
+
diff --git a/docs/v1.15.1/ar/tools/web-scraping/browserbaseloadtool.mdx b/docs/v1.15.1/ar/tools/web-scraping/browserbaseloadtool.mdx
new file mode 100644
index 000000000..0899dbd9f
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/browserbaseloadtool.mdx
@@ -0,0 +1,51 @@
+---
+title: أداة تحميل Browserbase
+description: Browserbase هي منصة للمطورين لتشغيل وإدارة ومراقبة المتصفحات بدون واجهة بشكل موثوق.
+icon: browser
+mode: "wide"
+---
+
+# `BrowserbaseLoadTool`
+
+## الوصف
+
+[Browserbase](https://browserbase.com) هي منصة للمطورين لتشغيل وإدارة ومراقبة المتصفحات بدون واجهة بشكل موثوق.
+
+عزّز عمليات استرجاع بيانات الذكاء الاصطناعي الخاصة بك بـ:
+
+ - [بنية تحتية بدون خادم](https://docs.browserbase.com/under-the-hood) توفر متصفحات موثوقة لاستخراج البيانات من واجهات المستخدم المعقدة
+ - [وضع التخفي](https://docs.browserbase.com/features/stealth-mode) مع تكتيكات البصمة المضمنة وحل CAPTCHA التلقائي
+ - [مصحح الجلسات](https://docs.browserbase.com/features/sessions) لفحص جلسة المتصفح مع الجدول الزمني للشبكة والسجلات
+ - [التصحيح المباشر](https://docs.browserbase.com/guides/session-debug-connection/browser-remote-control) لتصحيح الأتمتة بسرعة
+
+## التثبيت
+
+- احصل على مفتاح API ومعرّف المشروع من [browserbase.com](https://browserbase.com) وعيّنهما في متغيرات البيئة (`BROWSERBASE_API_KEY`، `BROWSERBASE_PROJECT_ID`).
+- ثبّت [Browserbase SDK](http://github.com/browserbase/python-sdk) مع حزمة `crewai[tools]`:
+
+```shell
+pip install browserbase 'crewai[tools]'
+```
+
+## مثال
+
+استخدم BrowserbaseLoadTool كما يلي للسماح لوكيلك بتحميل المواقع:
+
+```python Code
+from crewai_tools import BrowserbaseLoadTool
+
+# Initialize the tool with the Browserbase API key and Project ID
+tool = BrowserbaseLoadTool()
+```
+
+## المعاملات
+
+يمكن استخدام المعاملات التالية لتخصيص سلوك `BrowserbaseLoadTool`:
+
+| المعامل | النوع | الوصف |
+|:---------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------|
+| **api_key** | `string` | _اختياري_. مفتاح Browserbase API. الافتراضي هو متغير البيئة `BROWSERBASE_API_KEY`. |
+| **project_id** | `string` | _اختياري_. معرّف مشروع Browserbase. الافتراضي هو متغير البيئة `BROWSERBASE_PROJECT_ID`. |
+| **text_content** | `bool` | _اختياري_. استرجاع المحتوى النصي فقط. الافتراضي هو `False`. |
+| **session_id** | `string` | _اختياري_. تقديم معرّف جلسة موجود. |
+| **proxy** | `bool` | _اختياري_. تفعيل/تعطيل البروكسيات. الافتراضي هو `False`. |
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/firecrawlcrawlwebsitetool.mdx b/docs/v1.15.1/ar/tools/web-scraping/firecrawlcrawlwebsitetool.mdx
new file mode 100644
index 000000000..47c0a2111
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/firecrawlcrawlwebsitetool.mdx
@@ -0,0 +1,48 @@
+---
+title: زحف المواقع باستخدام Firecrawl
+description: أداة `FirecrawlCrawlWebsiteTool` مصممة لزحف المواقع وتحويلها إلى markdown نظيف أو بيانات منظمة.
+icon: fire-flame
+mode: "wide"
+---
+
+# `FirecrawlCrawlWebsiteTool`
+
+## الوصف
+
+[Firecrawl](https://firecrawl.dev) هي منصة لزحف وتحويل أي موقع إلى markdown نظيف أو بيانات منظمة.
+
+## التثبيت
+
+- احصل على مفتاح API من [firecrawl.dev](https://firecrawl.dev) وعيّنه في متغيرات البيئة (`FIRECRAWL_API_KEY`).
+- ثبّت [Firecrawl SDK](https://github.com/mendableai/firecrawl) مع حزمة `crewai[tools]`:
+
+```shell
+pip install firecrawl-py 'crewai[tools]'
+```
+
+## مثال
+
+استخدم FirecrawlScrapeFromWebsiteTool كما يلي للسماح لوكيلك بتحميل المواقع:
+
+```python Code
+from crewai_tools import FirecrawlCrawlWebsiteTool
+
+tool = FirecrawlCrawlWebsiteTool(url='firecrawl.dev')
+```
+
+## المعاملات
+
+- `api_key`: اختياري. يحدد مفتاح Firecrawl API. الافتراضي هو متغير البيئة `FIRECRAWL_API_KEY`.
+- `url`: عنوان URL الأساسي لبدء الزحف منه.
+- `page_options`: اختياري.
+ - `onlyMainContent`: اختياري. إرجاع المحتوى الرئيسي فقط للصفحة باستثناء الرؤوس وأشرطة التنقل والتذييلات وغيرها.
+ - `includeHtml`: اختياري. تضمين محتوى HTML الخام للصفحة. سيُخرج مفتاح html في الاستجابة.
+- `crawler_options`: اختياري. خيارات للتحكم في سلوك الزحف.
+ - `includes`: اختياري. أنماط URL لتضمينها في الزحف.
+ - `exclude`: اختياري. أنماط URL لاستبعادها من الزحف.
+ - `generateImgAltText`: اختياري. توليد نص بديل للصور باستخدام LLMs (يتطلب خطة مدفوعة).
+ - `returnOnlyUrls`: اختياري. إذا كان true، يُرجع عناوين URL فقط كقائمة في حالة الزحف. ملاحظة: ستكون الاستجابة قائمة عناوين URL داخل البيانات، وليست قائمة مستندات.
+ - `maxDepth`: اختياري. الحد الأقصى لعمق الزحف. العمق 1 هو عنوان URL الأساسي، والعمق 2 يشمل عنوان URL الأساسي وأبنائه المباشرين، وهكذا.
+ - `mode`: اختياري. وضع الزحف المستخدم. الوضع السريع يزحف أسرع 4 مرات على المواقع بدون خريطة موقع ولكنه قد لا يكون دقيقاً ولا يجب استخدامه على المواقع التي تعتمد بشكل كبير على JavaScript.
+ - `limit`: اختياري. الحد الأقصى لعدد الصفحات للزحف.
+ - `timeout`: اختياري. المهلة بالملي ثانية لعملية الزحف.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/firecrawlscrapewebsitetool.mdx b/docs/v1.15.1/ar/tools/web-scraping/firecrawlscrapewebsitetool.mdx
new file mode 100644
index 000000000..1bbc4a3b4
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/firecrawlscrapewebsitetool.mdx
@@ -0,0 +1,44 @@
+---
+title: استخراج المواقع باستخدام Firecrawl
+description: أداة `FirecrawlScrapeWebsiteTool` مصممة لاستخراج المواقع وتحويلها إلى markdown نظيف أو بيانات منظمة.
+icon: fire-flame
+mode: "wide"
+---
+
+# `FirecrawlScrapeWebsiteTool`
+
+## الوصف
+
+[Firecrawl](https://firecrawl.dev) هي منصة لزحف وتحويل أي موقع إلى markdown نظيف أو بيانات منظمة.
+
+## التثبيت
+
+- احصل على مفتاح API من [firecrawl.dev](https://firecrawl.dev) وعيّنه في متغيرات البيئة (`FIRECRAWL_API_KEY`).
+- ثبّت [Firecrawl SDK](https://github.com/mendableai/firecrawl) مع حزمة `crewai[tools]`:
+
+```shell
+pip install firecrawl-py 'crewai[tools]'
+```
+
+## مثال
+
+استخدم FirecrawlScrapeWebsiteTool كما يلي للسماح لوكيلك بتحميل المواقع:
+
+```python Code
+from crewai_tools import FirecrawlScrapeWebsiteTool
+
+tool = FirecrawlScrapeWebsiteTool(url='firecrawl.dev')
+```
+
+## المعاملات
+
+- `api_key`: اختياري. يحدد مفتاح Firecrawl API. الافتراضي هو متغير البيئة `FIRECRAWL_API_KEY`.
+- `url`: عنوان URL المراد استخراجه.
+- `page_options`: اختياري.
+ - `onlyMainContent`: اختياري. إرجاع المحتوى الرئيسي فقط للصفحة باستثناء الرؤوس وأشرطة التنقل والتذييلات وغيرها.
+ - `includeHtml`: اختياري. تضمين محتوى HTML الخام للصفحة. سيُخرج مفتاح html في الاستجابة.
+- `extractor_options`: اختياري. خيارات لاستخراج المعلومات المنظمة من محتوى الصفحة باستخدام LLM
+ - `mode`: وضع الاستخراج المستخدم، يدعم حالياً 'llm-extraction'
+ - `extractionPrompt`: اختياري. موجّه يصف المعلومات المراد استخراجها من الصفحة
+ - `extractionSchema`: اختياري. المخطط للبيانات المراد استخراجها
+- `timeout`: اختياري. المهلة بالملي ثانية للطلب
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/firecrawlsearchtool.mdx b/docs/v1.15.1/ar/tools/web-scraping/firecrawlsearchtool.mdx
new file mode 100644
index 000000000..7427336f6
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/firecrawlsearchtool.mdx
@@ -0,0 +1,42 @@
+---
+title: بحث Firecrawl
+description: أداة `FirecrawlSearchTool` مصممة للبحث في المواقع وتحويلها إلى markdown نظيف أو بيانات منظمة.
+icon: fire-flame
+mode: "wide"
+---
+
+# `FirecrawlSearchTool`
+
+## الوصف
+
+[Firecrawl](https://firecrawl.dev) هي منصة لزحف وتحويل أي موقع إلى markdown نظيف أو بيانات منظمة.
+
+## التثبيت
+
+- احصل على مفتاح API من [firecrawl.dev](https://firecrawl.dev) وعيّنه في متغيرات البيئة (`FIRECRAWL_API_KEY`).
+- ثبّت [Firecrawl SDK](https://github.com/mendableai/firecrawl) مع حزمة `crewai[tools]`:
+
+```shell
+pip install firecrawl-py 'crewai[tools]'
+```
+
+## مثال
+
+استخدم FirecrawlSearchTool كما يلي للسماح لوكيلك بتحميل المواقع:
+
+```python Code
+from crewai_tools import FirecrawlSearchTool
+
+tool = FirecrawlSearchTool(query='what is firecrawl?')
+```
+
+## المعاملات
+
+- `api_key`: اختياري. يحدد مفتاح Firecrawl API. الافتراضي هو متغير البيئة `FIRECRAWL_API_KEY`.
+- `query`: سلسلة استعلام البحث المستخدمة للبحث.
+- `page_options`: اختياري. خيارات لتنسيق النتائج.
+ - `onlyMainContent`: اختياري. إرجاع المحتوى الرئيسي فقط للصفحة باستثناء الرؤوس وأشرطة التنقل والتذييلات وغيرها.
+ - `includeHtml`: اختياري. تضمين محتوى HTML الخام للصفحة. سيُخرج مفتاح html في الاستجابة.
+ - `fetchPageContent`: اختياري. جلب المحتوى الكامل للصفحة.
+- `search_options`: اختياري. خيارات للتحكم في سلوك الزحف.
+ - `limit`: اختياري. الحد الأقصى لعدد الصفحات للزحف.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/hyperbrowserloadtool.mdx b/docs/v1.15.1/ar/tools/web-scraping/hyperbrowserloadtool.mdx
new file mode 100644
index 000000000..103042379
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/hyperbrowserloadtool.mdx
@@ -0,0 +1,87 @@
+---
+title: أداة تحميل Hyperbrowser
+description: أداة `HyperbrowserLoadTool` تتيح استخراج البيانات من الويب والزحف باستخدام Hyperbrowser.
+icon: globe
+mode: "wide"
+---
+
+# `HyperbrowserLoadTool`
+
+## الوصف
+
+تتيح أداة `HyperbrowserLoadTool` استخراج البيانات من الويب والزحف باستخدام [Hyperbrowser](https://hyperbrowser.ai)، وهي منصة لتشغيل وتوسيع المتصفحات بدون واجهة. تسمح لك هذه الأداة باستخراج صفحة واحدة أو زحف موقع كامل، مع إرجاع المحتوى بتنسيق markdown أو HTML منسّق بشكل صحيح.
+
+الميزات الرئيسية:
+- قابلية توسع فورية - تشغيل مئات جلسات المتصفح في ثوانٍ دون متاعب البنية التحتية
+- تكامل بسيط - يعمل بسلاسة مع الأدوات الشائعة مثل Puppeteer و Playwright
+- واجهات API قوية - واجهات سهلة الاستخدام لاستخراج/زحف أي موقع
+- تجاوز إجراءات مكافحة الروبوتات - وضع التخفي المدمج وحظر الإعلانات وحل CAPTCHA التلقائي والبروكسيات الدوّارة
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت Hyperbrowser SDK:
+
+```shell
+uv add hyperbrowser
+```
+
+## خطوات البدء
+
+لاستخدام `HyperbrowserLoadTool` بفعالية، اتبع هذه الخطوات:
+
+1. **التسجيل**: توجه إلى [Hyperbrowser](https://app.hyperbrowser.ai/) للتسجيل وتوليد مفتاح API.
+2. **مفتاح API**: عيّن متغير البيئة `HYPERBROWSER_API_KEY` أو مرّره مباشرة إلى مُنشئ الأداة.
+3. **تثبيت SDK**: ثبّت Hyperbrowser SDK باستخدام الأمر أعلاه.
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة واستخدامها لاستخراج بيانات من موقع:
+
+```python Code
+from crewai_tools import HyperbrowserLoadTool
+from crewai import Agent
+
+# Initialize the tool with your API key
+tool = HyperbrowserLoadTool(api_key="your_api_key") # Or use environment variable
+
+# Define an agent that uses the tool
+@agent
+def web_researcher(self) -> Agent:
+ '''
+ This agent uses the HyperbrowserLoadTool to scrape websites
+ and extract information.
+ '''
+ return Agent(
+ config=self.agents_config["web_researcher"],
+ tools=[tool]
+ )
+```
+
+## المعاملات
+
+تقبل أداة `HyperbrowserLoadTool` المعاملات التالية:
+
+### معاملات المُنشئ
+- **api_key**: اختياري. مفتاح Hyperbrowser API الخاص بك. إذا لم يتم تقديمه، سيتم قراءته من متغير البيئة `HYPERBROWSER_API_KEY`.
+
+### معاملات التشغيل
+- **url**: مطلوب. عنوان URL للموقع المراد استخراجه أو زحفه.
+- **operation**: اختياري. العملية المراد تنفيذها على الموقع. إما 'scrape' أو 'crawl'. الافتراضي هو 'scrape'.
+- **params**: اختياري. معاملات إضافية لعملية الاستخراج أو الزحف.
+
+## المعاملات المدعومة
+
+للحصول على معلومات مفصلة حول جميع المعاملات المدعومة، قم بزيارة:
+- [معاملات الاستخراج](https://docs.hyperbrowser.ai/reference/sdks/python/scrape#start-scrape-job-and-wait)
+- [معاملات الزحف](https://docs.hyperbrowser.ai/reference/sdks/python/crawl#start-crawl-job-and-wait)
+
+## تنسيق الإرجاع
+
+تُرجع الأداة المحتوى بالتنسيق التالي:
+
+- لعمليات **الاستخراج**: محتوى الصفحة بتنسيق markdown أو HTML.
+- لعمليات **الزحف**: محتوى كل صفحة مفصولاً بفواصل، مع تضمين عنوان URL لكل صفحة.
+
+## الخلاصة
+
+توفر أداة `HyperbrowserLoadTool` طريقة قوية لاستخراج البيانات من المواقع وزحفها، مع التعامل مع السيناريوهات المعقدة مثل إجراءات مكافحة الروبوتات و CAPTCHA وغيرها. من خلال الاستفادة من منصة Hyperbrowser، تتيح هذه الأداة للوكلاء الوصول إلى محتوى الويب واستخراجه بكفاءة.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/overview.mdx b/docs/v1.15.1/ar/tools/web-scraping/overview.mdx
new file mode 100644
index 000000000..3ba3b500e
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/overview.mdx
@@ -0,0 +1,112 @@
+---
+title: "نظرة عامة"
+description: "استخراج البيانات من المواقع وأتمتة تفاعلات المتصفح باستخدام أدوات استخراج قوية"
+icon: "face-smile"
+mode: "wide"
+---
+
+تتيح هذه الأدوات لوكلائك التفاعل مع الويب واستخراج البيانات من المواقع وأتمتة المهام المعتمدة على المتصفح. من الاستخراج البسيط من الويب إلى أتمتة المتصفح المعقدة، تغطي هذه الأدوات جميع احتياجات التفاعل مع الويب.
+
+## **الأدوات المتاحة**
+
+
+
+ أداة استخراج بيانات من الويب متعددة الأغراض لاستخراج المحتوى من أي موقع.
+
+
+
+ استهداف عناصر محددة في صفحات الويب بقدرات استخراج دقيقة.
+
+
+
+ زحف مواقع كاملة بشكل منهجي باستخدام محرك Firecrawl القوي.
+
+
+
+ استخراج بيانات عالي الأداء من الويب مع قدرات Firecrawl المتقدمة.
+
+
+
+ البحث واستخراج محتوى محدد باستخدام ميزات بحث Firecrawl.
+
+
+
+ أتمتة المتصفح والاستخراج باستخدام قدرات Selenium WebDriver.
+
+
+
+ استخراج احترافي من الويب مع خدمة ScrapFly المتميزة.
+
+
+
+ استخراج بيانات من الويب قائم على الرسوم البيانية لعلاقات البيانات المعقدة.
+
+
+
+ قدرات شاملة للزحف واستخراج البيانات من الويب.
+
+
+
+ أتمتة المتصفح السحابية مع بنية BrowserBase التحتية.
+
+
+
+ تفاعلات متصفح سريعة مع محرك HyperBrowser المُحسّن.
+
+
+
+ أتمتة متصفح ذكية باستخدام أوامر اللغة الطبيعية.
+
+
+
+ الوصول إلى بيانات الويب على نطاق واسع مع Oxylabs.
+
+
+
+ تكاملات بحث SERP و Web Unlocker و Dataset API.
+
+
+
+## **حالات الاستخدام الشائعة**
+
+- **استخراج البيانات**: استخراج معلومات المنتجات والأسعار والمراجعات
+- **مراقبة المحتوى**: تتبع التغييرات على المواقع ومصادر الأخبار
+- **توليد العملاء المحتملين**: استخراج معلومات الاتصال وبيانات الأعمال
+- **أبحاث السوق**: جمع المعلومات الاستخباراتية التنافسية وبيانات السوق
+- **الاختبار وضمان الجودة**: أتمتة اختبار المتصفح وسير عمل التحقق
+- **وسائل التواصل الاجتماعي**: استخراج المنشورات والتعليقات وتحليلات وسائل التواصل الاجتماعي
+
+## **مثال سريع للبدء**
+
+```python
+from crewai_tools import ScrapeWebsiteTool, FirecrawlScrapeWebsiteTool, SeleniumScrapingTool
+
+# Create scraping tools
+simple_scraper = ScrapeWebsiteTool()
+advanced_scraper = FirecrawlScrapeWebsiteTool()
+browser_automation = SeleniumScrapingTool()
+
+# Add to your agent
+agent = Agent(
+ role="Web Research Specialist",
+ tools=[simple_scraper, advanced_scraper, browser_automation],
+ goal="Extract and analyze web data efficiently"
+)
+```
+
+## **أفضل ممارسات الاستخراج**
+
+- **احترام robots.txt**: تحقق دائماً واتبع سياسات استخراج المواقع
+- **تحديد المعدل**: نفّذ تأخيرات بين الطلبات لتجنب إرهاق الخوادم
+- **وكيل المستخدم**: استخدم سلاسل وكيل مستخدم مناسبة لتعريف الروبوت الخاص بك
+- **الامتثال القانوني**: تأكد من أن أنشطة الاستخراج تتوافق مع شروط الخدمة
+- **معالجة الأخطاء**: نفّذ معالجة أخطاء قوية لمشاكل الشبكة والطلبات المحظورة
+- **جودة البيانات**: تحقق من صحة البيانات المستخرجة ونظّفها قبل المعالجة
+
+## **دليل اختيار الأداة**
+
+- **المهام البسيطة**: استخدم `ScrapeWebsiteTool` لاستخراج المحتوى الأساسي
+- **المواقع كثيفة JavaScript**: استخدم `SeleniumScrapingTool` للمحتوى الديناميكي
+- **التوسع والأداء**: استخدم `FirecrawlScrapeWebsiteTool` للاستخراج بكميات كبيرة
+- **البنية التحتية السحابية**: استخدم `BrowserBaseLoadTool` لأتمتة المتصفح القابلة للتوسع
+- **سير العمل المعقدة**: استخدم `StagehandTool` لتفاعلات المتصفح الذكية
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/oxylabsscraperstool.mdx b/docs/v1.15.1/ar/tools/web-scraping/oxylabsscraperstool.mdx
new file mode 100644
index 000000000..b83ba8b33
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/oxylabsscraperstool.mdx
@@ -0,0 +1,237 @@
+---
+title: أدوات استخراج Oxylabs
+description: >
+ تتيح أدوات استخراج Oxylabs الوصول بسهولة إلى المعلومات من المصادر المعنية. يرجى الاطلاع على قائمة المصادر المتاحة أدناه:
+ - `Amazon Product`
+ - `Amazon Search`
+ - `Google Seach`
+ - `Universal`
+icon: globe
+mode: "wide"
+---
+
+## التثبيت
+
+احصل على بيانات الاعتماد بإنشاء حساب Oxylabs [هنا](https://oxylabs.io).
+```shell
+pip install 'crewai[tools]' oxylabs
+```
+راجع [توثيق Oxylabs](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets) للحصول على مزيد من المعلومات حول معاملات API.
+
+# `OxylabsAmazonProductScraperTool`
+
+### مثال
+
+```python
+from crewai_tools import OxylabsAmazonProductScraperTool
+
+# make sure OXYLABS_USERNAME and OXYLABS_PASSWORD variables are set
+tool = OxylabsAmazonProductScraperTool()
+
+result = tool.run(query="AAAAABBBBCC")
+
+print(result)
+```
+
+### المعاملات
+
+- `query` - رمز ASIN المكون من 10 رموز.
+- `domain` - توطين النطاق لـ Amazon.
+- `geo_location` - موقع _التوصيل إلى_.
+- `user_agent_type` - نوع الجهاز والمتصفح.
+- `render` - يفعّل تصيير JavaScript عند التعيين إلى `html`.
+- `callback_url` - عنوان URL لنقطة نهاية الاستدعاء الخاصة بك.
+- `context` - إعدادات وضوابط متقدمة إضافية للمتطلبات المتخصصة.
+- `parse` - يُرجع بيانات مُحلّلة عند التعيين إلى true.
+- `parsing_instructions` - حدد منطق التحليل وتحويل البيانات الخاص بك الذي سيُنفّذ على نتيجة استخراج HTML.
+
+### مثال متقدم
+
+```python
+from crewai_tools import OxylabsAmazonProductScraperTool
+
+# make sure OXYLABS_USERNAME and OXYLABS_PASSWORD variables are set
+tool = OxylabsAmazonProductScraperTool(
+ config={
+ "domain": "com",
+ "parse": True,
+ "context": [
+ {
+ "key": "autoselect_variant",
+ "value": True
+ }
+ ]
+ }
+)
+
+result = tool.run(query="AAAAABBBBCC")
+
+print(result)
+```
+
+# `OxylabsAmazonSearchScraperTool`
+
+### مثال
+
+```python
+from crewai_tools import OxylabsAmazonSearchScraperTool
+
+# make sure OXYLABS_USERNAME and OXYLABS_PASSWORD variables are set
+tool = OxylabsAmazonSearchScraperTool()
+
+result = tool.run(query="headsets")
+
+print(result)
+```
+
+### المعاملات
+
+- `query` - مصطلح بحث Amazon.
+- `domain` - توطين النطاق لـ Bestbuy.
+- `start_page` - رقم صفحة البداية.
+- `pages` - عدد الصفحات المراد استرجاعها.
+- `geo_location` - موقع _التوصيل إلى_.
+- `user_agent_type` - نوع الجهاز والمتصفح.
+- `render` - يفعّل تصيير JavaScript عند التعيين إلى `html`.
+- `callback_url` - عنوان URL لنقطة نهاية الاستدعاء الخاصة بك.
+- `context` - إعدادات وضوابط متقدمة إضافية للمتطلبات المتخصصة.
+- `parse` - يُرجع بيانات مُحلّلة عند التعيين إلى true.
+- `parsing_instructions` - حدد منطق التحليل وتحويل البيانات الخاص بك الذي سيُنفّذ على نتيجة استخراج HTML.
+
+### مثال متقدم
+
+```python
+from crewai_tools import OxylabsAmazonSearchScraperTool
+
+# make sure OXYLABS_USERNAME and OXYLABS_PASSWORD variables are set
+tool = OxylabsAmazonSearchScraperTool(
+ config={
+ "domain": 'nl',
+ "start_page": 2,
+ "pages": 2,
+ "parse": True,
+ "context": [
+ {'key': 'category_id', 'value': 16391693031}
+ ],
+ }
+)
+
+result = tool.run(query='nirvana tshirt')
+
+print(result)
+```
+
+# `OxylabsGoogleSearchScraperTool`
+
+### مثال
+
+```python
+from crewai_tools import OxylabsGoogleSearchScraperTool
+
+# make sure OXYLABS_USERNAME and OXYLABS_PASSWORD variables are set
+tool = OxylabsGoogleSearchScraperTool()
+
+result = tool.run(query="iPhone 16")
+
+print(result)
+```
+
+### المعاملات
+
+- `query` - كلمة البحث المفتاحية.
+- `domain` - توطين النطاق لـ Google.
+- `start_page` - رقم صفحة البداية.
+- `pages` - عدد الصفحات المراد استرجاعها.
+- `limit` - عدد النتائج المراد استرجاعها في كل صفحة.
+- `locale` - قيمة رأس `Accept-Language` التي تغيّر لغة واجهة صفحة بحث Google.
+- `geo_location` - الموقع الجغرافي الذي يجب تكييف النتيجة له. استخدام هذا المعامل بشكل صحيح مهم للغاية للحصول على البيانات الصحيحة.
+- `user_agent_type` - نوع الجهاز والمتصفح.
+- `render` - يفعّل تصيير JavaScript عند التعيين إلى `html`.
+- `callback_url` - عنوان URL لنقطة نهاية الاستدعاء الخاصة بك.
+- `context` - إعدادات وضوابط متقدمة إضافية للمتطلبات المتخصصة.
+- `parse` - يُرجع بيانات مُحلّلة عند التعيين إلى true.
+- `parsing_instructions` - حدد منطق التحليل وتحويل البيانات الخاص بك الذي سيُنفّذ على نتيجة استخراج HTML.
+
+### مثال متقدم
+
+```python
+from crewai_tools import OxylabsGoogleSearchScraperTool
+
+# make sure OXYLABS_USERNAME and OXYLABS_PASSWORD variables are set
+tool = OxylabsGoogleSearchScraperTool(
+ config={
+ "parse": True,
+ "geo_location": "Paris, France",
+ "user_agent_type": "tablet",
+ }
+)
+
+result = tool.run(query="iPhone 16")
+
+print(result)
+```
+
+# `OxylabsUniversalScraperTool`
+
+### مثال
+
+```python
+from crewai_tools import OxylabsUniversalScraperTool
+
+# make sure OXYLABS_USERNAME and OXYLABS_PASSWORD variables are set
+tool = OxylabsUniversalScraperTool()
+
+result = tool.run(url="https://ip.oxylabs.io")
+
+print(result)
+```
+
+### المعاملات
+
+- `url` - عنوان URL للموقع المراد استخراجه.
+- `user_agent_type` - نوع الجهاز والمتصفح.
+- `geo_location` - يعيّن الموقع الجغرافي للبروكسي لاسترجاع البيانات.
+- `render` - يفعّل تصيير JavaScript عند التعيين إلى `html`.
+- `callback_url` - عنوان URL لنقطة نهاية الاستدعاء الخاصة بك.
+- `context` - إعدادات وضوابط متقدمة إضافية للمتطلبات المتخصصة.
+- `parse` - يُرجع بيانات مُحلّلة عند التعيين إلى `true`، طالما يوجد مُحلّل مخصص لنوع صفحة عنوان URL المقدم.
+- `parsing_instructions` - حدد منطق التحليل وتحويل البيانات الخاص بك الذي سيُنفّذ على نتيجة استخراج HTML.
+
+
+### مثال متقدم
+
+```python
+from crewai_tools import OxylabsUniversalScraperTool
+
+# make sure OXYLABS_USERNAME and OXYLABS_PASSWORD variables are set
+tool = OxylabsUniversalScraperTool(
+ config={
+ "render": "html",
+ "user_agent_type": "mobile",
+ "context": [
+ {"key": "force_headers", "value": True},
+ {"key": "force_cookies", "value": True},
+ {
+ "key": "headers",
+ "value": {
+ "Custom-Header-Name": "custom header content",
+ },
+ },
+ {
+ "key": "cookies",
+ "value": [
+ {"key": "NID", "value": "1234567890"},
+ {"key": "1P JAR", "value": "0987654321"},
+ ],
+ },
+ {"key": "http_method", "value": "get"},
+ {"key": "follow_redirects", "value": True},
+ {"key": "successful_status_codes", "value": [808, 909]},
+ ],
+ }
+)
+
+result = tool.run(url="https://ip.oxylabs.io")
+
+print(result)
+```
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/scrapeelementfromwebsitetool.mdx b/docs/v1.15.1/ar/tools/web-scraping/scrapeelementfromwebsitetool.mdx
new file mode 100644
index 000000000..f84ed8a7d
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/scrapeelementfromwebsitetool.mdx
@@ -0,0 +1,140 @@
+---
+title: أداة استخراج عنصر من موقع
+description: أداة `ScrapeElementFromWebsiteTool` تتيح لوكلاء CrewAI استخراج عناصر محددة من المواقع باستخدام محددات CSS.
+icon: code
+mode: "wide"
+---
+
+# `ScrapeElementFromWebsiteTool`
+
+## الوصف
+
+أداة `ScrapeElementFromWebsiteTool` مصممة لاستخراج عناصر محددة من المواقع باستخدام محددات CSS. تسمح هذه الأداة لوكلاء CrewAI باستخراج محتوى مستهدف من صفحات الويب، مما يجعلها مفيدة لمهام استخراج البيانات حيث تكون أجزاء محددة فقط من صفحة الويب مطلوبة.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت التبعيات المطلوبة:
+
+```shell
+uv add requests beautifulsoup4
+```
+
+## خطوات البدء
+
+لاستخدام `ScrapeElementFromWebsiteTool` بفعالية، اتبع هذه الخطوات:
+
+1. **تثبيت التبعيات**: ثبّت الحزم المطلوبة باستخدام الأمر أعلاه.
+2. **تحديد محددات CSS**: حدد محددات CSS للعناصر التي تريد استخراجها من الموقع.
+3. **تهيئة الأداة**: أنشئ نسخة من الأداة بالمعاملات اللازمة.
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `ScrapeElementFromWebsiteTool` لاستخراج عناصر محددة من موقع:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import ScrapeElementFromWebsiteTool
+
+# Initialize the tool
+scrape_tool = ScrapeElementFromWebsiteTool()
+
+# Define an agent that uses the tool
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract specific information from websites",
+ backstory="An expert in web scraping who can extract targeted content from web pages.",
+ tools=[scrape_tool],
+ verbose=True,
+)
+
+# Example task to extract headlines from a news website
+scrape_task = Task(
+ description="Extract the main headlines from the CNN homepage. Use the CSS selector '.headline' to target the headline elements.",
+ expected_output="A list of the main headlines from CNN.",
+ agent=web_scraper_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[web_scraper_agent], tasks=[scrape_task])
+result = crew.kickoff()
+```
+
+يمكنك أيضاً تهيئة الأداة بمعاملات محددة مسبقاً:
+
+```python Code
+# Initialize the tool with predefined parameters
+scrape_tool = ScrapeElementFromWebsiteTool(
+ website_url="https://www.example.com",
+ css_element=".main-content"
+)
+```
+
+## المعاملات
+
+تقبل أداة `ScrapeElementFromWebsiteTool` المعاملات التالية أثناء التهيئة:
+
+- **website_url**: اختياري. عنوان URL للموقع المراد استخراجه. إذا تم تقديمه أثناء التهيئة، لن يحتاج الوكيل إلى تحديده عند استخدام الأداة.
+- **css_element**: اختياري. محدد CSS للعناصر المراد استخراجها. إذا تم تقديمه أثناء التهيئة، لن يحتاج الوكيل إلى تحديده عند استخدام الأداة.
+- **cookies**: اختياري. قاموس يحتوي على ملفات تعريف الارتباط لإرسالها مع الطلب. يمكن أن يكون مفيداً للمواقع التي تتطلب مصادقة.
+
+## الاستخدام
+
+عند استخدام `ScrapeElementFromWebsiteTool` مع وكيل، سيحتاج الوكيل إلى تقديم المعاملات التالية (ما لم يتم تحديدها أثناء التهيئة):
+
+- **website_url**: عنوان URL للموقع المراد استخراجه.
+- **css_element**: محدد CSS للعناصر المراد استخراجها.
+
+ستُرجع الأداة المحتوى النصي لجميع العناصر المطابقة لمحدد CSS، مفصولة بأسطر جديدة.
+
+```python Code
+# Example of using the tool with an agent
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract specific elements from websites",
+ backstory="An expert in web scraping who can extract targeted content using CSS selectors.",
+ tools=[scrape_tool],
+ verbose=True,
+)
+
+# Create a task for the agent to extract specific elements
+extract_task = Task(
+ description="""
+ Extract all product titles from the featured products section on example.com.
+ Use the CSS selector '.product-title' to target the title elements.
+ """,
+ expected_output="A list of product titles from the website",
+ agent=web_scraper_agent,
+)
+
+# Run the task through a crew
+crew = Crew(agents=[web_scraper_agent], tasks=[extract_task])
+result = crew.kickoff()
+```
+
+## تفاصيل التنفيذ
+
+تستخدم أداة `ScrapeElementFromWebsiteTool` مكتبة `requests` لجلب صفحة الويب و `BeautifulSoup` لتحليل HTML واستخراج العناصر المحددة:
+
+```python Code
+class ScrapeElementFromWebsiteTool(BaseTool):
+ name: str = "Read a website content"
+ description: str = "A tool that can be used to read a website content."
+
+ # Implementation details...
+
+ def _run(self, **kwargs: Any) -> Any:
+ website_url = kwargs.get("website_url", self.website_url)
+ css_element = kwargs.get("css_element", self.css_element)
+ page = requests.get(
+ website_url,
+ headers=self.headers,
+ cookies=self.cookies if self.cookies else {},
+ )
+ parsed = BeautifulSoup(page.content, "html.parser")
+ elements = parsed.select(css_element)
+ return "\n".join([element.get_text() for element in elements])
+```
+
+## الخلاصة
+
+توفر أداة `ScrapeElementFromWebsiteTool` طريقة قوية لاستخراج عناصر محددة من المواقع باستخدام محددات CSS. من خلال تمكين الوكلاء من استهداف المحتوى الذي يحتاجونه فقط، تجعل مهام استخراج البيانات من الويب أكثر كفاءة وتركيزاً. هذه الأداة مفيدة بشكل خاص لاستخراج البيانات ومراقبة المحتوى ومهام البحث حيث تحتاج معلومات محددة إلى استخراجها من صفحات الويب.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/scrapegraphscrapetool.mdx b/docs/v1.15.1/ar/tools/web-scraping/scrapegraphscrapetool.mdx
new file mode 100644
index 000000000..7e9e4ff08
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/scrapegraphscrapetool.mdx
@@ -0,0 +1,197 @@
+---
+title: أداة استخراج Scrapegraph
+description: أداة `ScrapegraphScrapeTool` تستفيد من SmartScraper API من Scrapegraph AI لاستخراج المحتوى من المواقع بذكاء.
+icon: chart-area
+mode: "wide"
+---
+
+# `ScrapegraphScrapeTool`
+
+## الوصف
+
+أداة `ScrapegraphScrapeTool` مصممة للاستفادة من SmartScraper API من Scrapegraph AI لاستخراج المحتوى من المواقع بذكاء. توفر هذه الأداة قدرات متقدمة لاستخراج البيانات من الويب مع استخراج محتوى مدعوم بالذكاء الاصطناعي، مما يجعلها مثالية لمهام جمع البيانات المستهدفة وتحليل المحتوى. على عكس أدوات الاستخراج التقليدية، يمكنها فهم سياق وبنية صفحات الويب لاستخراج المعلومات الأكثر صلة بناءً على موجّهات اللغة الطبيعية.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت عميل Scrapegraph لـ Python:
+
+```shell
+uv add scrapegraph-py
+```
+
+ستحتاج أيضاً إلى إعداد مفتاح Scrapegraph API كمتغير بيئة:
+
+```shell
+export SCRAPEGRAPH_API_KEY="your_api_key"
+```
+
+يمكنك الحصول على مفتاح API من [Scrapegraph AI](https://scrapegraphai.com).
+
+## خطوات البدء
+
+لاستخدام `ScrapegraphScrapeTool` بفعالية، اتبع هذه الخطوات:
+
+1. **تثبيت التبعيات**: ثبّت الحزمة المطلوبة باستخدام الأمر أعلاه.
+2. **إعداد مفتاح API**: عيّن مفتاح Scrapegraph API كمتغير بيئة أو قدمه أثناء التهيئة.
+3. **تهيئة الأداة**: أنشئ نسخة من الأداة بالمعاملات اللازمة.
+4. **تحديد موجّهات الاستخراج**: أنشئ موجّهات بلغة طبيعية لتوجيه استخراج محتوى محدد.
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `ScrapegraphScrapeTool` لاستخراج المحتوى من موقع:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import ScrapegraphScrapeTool
+
+# Initialize the tool
+scrape_tool = ScrapegraphScrapeTool(api_key="your_api_key")
+
+# Define an agent that uses the tool
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract specific information from websites",
+ backstory="An expert in web scraping who can extract targeted content from web pages.",
+ tools=[scrape_tool],
+ verbose=True,
+)
+
+# Example task to extract product information from an e-commerce site
+scrape_task = Task(
+ description="Extract product names, prices, and descriptions from the featured products section of example.com.",
+ expected_output="A structured list of product information including names, prices, and descriptions.",
+ agent=web_scraper_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[web_scraper_agent], tasks=[scrape_task])
+result = crew.kickoff()
+```
+
+يمكنك أيضاً تهيئة الأداة بمعاملات محددة مسبقاً:
+
+```python Code
+# Initialize the tool with predefined parameters
+scrape_tool = ScrapegraphScrapeTool(
+ website_url="https://www.example.com",
+ user_prompt="Extract all product prices and descriptions",
+ api_key="your_api_key"
+)
+```
+
+## المعاملات
+
+تقبل أداة `ScrapegraphScrapeTool` المعاملات التالية أثناء التهيئة:
+
+- **api_key**: اختياري. مفتاح Scrapegraph API الخاص بك. إذا لم يتم تقديمه، سيبحث عن متغير البيئة `SCRAPEGRAPH_API_KEY`.
+- **website_url**: اختياري. عنوان URL للموقع المراد استخراجه. إذا تم تقديمه أثناء التهيئة، لن يحتاج الوكيل إلى تحديده عند استخدام الأداة.
+- **user_prompt**: اختياري. تعليمات مخصصة لاستخراج المحتوى. إذا تم تقديمه أثناء التهيئة، لن يحتاج الوكيل إلى تحديده عند استخدام الأداة.
+- **enable_logging**: اختياري. ما إذا كان يجب تفعيل التسجيل لعميل Scrapegraph. الافتراضي هو `False`.
+
+## الاستخدام
+
+عند استخدام `ScrapegraphScrapeTool` مع وكيل، سيحتاج الوكيل إلى تقديم المعاملات التالية (ما لم يتم تحديدها أثناء التهيئة):
+
+- **website_url**: عنوان URL للموقع المراد استخراجه.
+- **user_prompt**: اختياري. تعليمات مخصصة لاستخراج المحتوى. الافتراضي هو "Extract the main content of the webpage".
+
+ستُرجع الأداة المحتوى المستخرج بناءً على الموجّه المقدم.
+
+```python Code
+# Example of using the tool with an agent
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract specific information from websites",
+ backstory="An expert in web scraping who can extract targeted content from web pages.",
+ tools=[scrape_tool],
+ verbose=True,
+)
+
+# Create a task for the agent to extract specific content
+extract_task = Task(
+ description="Extract the main heading and summary from example.com",
+ expected_output="The main heading and summary from the website",
+ agent=web_scraper_agent,
+)
+
+# Run the task
+crew = Crew(agents=[web_scraper_agent], tasks=[extract_task])
+result = crew.kickoff()
+```
+
+## معالجة الأخطاء
+
+قد تُثير أداة `ScrapegraphScrapeTool` الاستثناءات التالية:
+
+- **ValueError**: عندما يكون مفتاح API مفقوداً أو تنسيق URL غير صالح.
+- **RateLimitError**: عند تجاوز حدود معدل API.
+- **RuntimeError**: عند فشل عملية الاستخراج (مشاكل شبكة، أخطاء API).
+
+يُوصى بتوجيه الوكلاء للتعامل مع الأخطاء المحتملة بسلاسة:
+
+```python Code
+# Create a task that includes error handling instructions
+robust_extract_task = Task(
+ description="""
+ Extract the main heading from example.com.
+ Be aware that you might encounter errors such as:
+ - Invalid URL format
+ - Missing API key
+ - Rate limit exceeded
+ - Network or API errors
+
+ If you encounter any errors, provide a clear explanation of what went wrong
+ and suggest possible solutions.
+ """,
+ expected_output="Either the extracted heading or a clear error explanation",
+ agent=web_scraper_agent,
+)
+```
+
+## تحديد المعدل
+
+لدى Scrapegraph API حدود معدل تختلف حسب خطة اشتراكك. ضع في الاعتبار أفضل الممارسات التالية:
+
+- نفّذ تأخيرات مناسبة بين الطلبات عند معالجة عناوين URL متعددة.
+- تعامل مع أخطاء تحديد المعدل بسلاسة في تطبيقك.
+- تحقق من حدود خطة API الخاصة بك على لوحة تحكم Scrapegraph.
+
+## تفاصيل التنفيذ
+
+تستخدم أداة `ScrapegraphScrapeTool` عميل Scrapegraph لـ Python للتفاعل مع SmartScraper API:
+
+```python Code
+class ScrapegraphScrapeTool(BaseTool):
+ """
+ A tool that uses Scrapegraph AI to intelligently scrape website content.
+ """
+
+ # Implementation details...
+
+ def _run(self, **kwargs: Any) -> Any:
+ website_url = kwargs.get("website_url", self.website_url)
+ user_prompt = (
+ kwargs.get("user_prompt", self.user_prompt)
+ or "Extract the main content of the webpage"
+ )
+
+ if not website_url:
+ raise ValueError("website_url is required")
+
+ # Validate URL format
+ self._validate_url(website_url)
+
+ try:
+ # Make the SmartScraper request
+ response = self._client.smartscraper(
+ website_url=website_url,
+ user_prompt=user_prompt,
+ )
+
+ return response
+ # Error handling...
+```
+
+## الخلاصة
+
+توفر أداة `ScrapegraphScrapeTool` طريقة قوية لاستخراج المحتوى من المواقع باستخدام فهم مدعوم بالذكاء الاصطناعي لبنية صفحات الويب. من خلال تمكين الوكلاء من استهداف معلومات محددة باستخدام موجّهات اللغة الطبيعية، تجعل مهام استخراج البيانات من الويب أكثر كفاءة وتركيزاً. هذه الأداة مفيدة بشكل خاص لاستخراج البيانات ومراقبة المحتوى ومهام البحث حيث تحتاج معلومات محددة إلى استخراجها من صفحات الويب.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/scrapewebsitetool.mdx b/docs/v1.15.1/ar/tools/web-scraping/scrapewebsitetool.mdx
new file mode 100644
index 000000000..de8402e4a
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/scrapewebsitetool.mdx
@@ -0,0 +1,48 @@
+---
+title: استخراج الموقع
+description: أداة `ScrapeWebsiteTool` مصممة لاستخراج وقراءة محتوى موقع محدد.
+icon: magnifying-glass-location
+mode: "wide"
+---
+
+# `ScrapeWebsiteTool`
+
+
+ لا نزال نعمل على تحسين الأدوات، لذا قد يحدث سلوك غير متوقع أو تغييرات في المستقبل.
+
+
+## الوصف
+
+أداة مصممة لاستخراج وقراءة محتوى موقع محدد. قادرة على التعامل مع أنواع مختلفة من صفحات الويب عن طريق إجراء طلبات HTTP وتحليل محتوى HTML المستلم.
+يمكن أن تكون هذه الأداة مفيدة بشكل خاص لمهام استخراج البيانات من الويب وجمع البيانات أو استخراج معلومات محددة من المواقع.
+
+## التثبيت
+
+ثبّت حزمة crewai_tools
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+```python
+from crewai_tools import ScrapeWebsiteTool
+
+# To enable scrapping any website it finds during it's execution
+tool = ScrapeWebsiteTool()
+
+# Initialize the tool with the website URL,
+# so the agent can only scrap the content of the specified website
+tool = ScrapeWebsiteTool(website_url='https://www.example.com')
+
+# Extract the text from the site
+text = tool.run()
+print(text)
+```
+
+## المعاملات
+
+| المعامل | النوع | الوصف |
+|:---------------|:---------|:-------------------------------------------------------------------------------------------------------------------------------------|
+| **website_url** | `string` | **إلزامي** عنوان URL للموقع لقراءة الملف. هذا هو المدخل الأساسي للأداة، يحدد محتوى أي موقع يجب استخراجه وقراءته. |
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/scrapflyscrapetool.mdx b/docs/v1.15.1/ar/tools/web-scraping/scrapflyscrapetool.mdx
new file mode 100644
index 000000000..1f17ae63e
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/scrapflyscrapetool.mdx
@@ -0,0 +1,221 @@
+---
+title: أداة استخراج مواقع Scrapfly
+description: أداة `ScrapflyScrapeWebsiteTool` تستفيد من Scrapfly web scraping API لاستخراج المحتوى من المواقع بتنسيقات مختلفة.
+icon: spider
+mode: "wide"
+---
+
+# `ScrapflyScrapeWebsiteTool`
+
+## الوصف
+
+أداة `ScrapflyScrapeWebsiteTool` مصممة للاستفادة من [Scrapfly](https://scrapfly.io/) web scraping API لاستخراج المحتوى من المواقع. توفر هذه الأداة قدرات متقدمة لاستخراج البيانات من الويب مع دعم المتصفح بدون واجهة والبروكسيات وميزات تجاوز مكافحة الروبوتات. تسمح باستخراج بيانات صفحات الويب بتنسيقات متعددة، بما في ذلك HTML الخام و markdown والنص العادي، مما يجعلها مثالية لمجموعة واسعة من مهام استخراج البيانات من الويب.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت Scrapfly SDK:
+
+```shell
+uv add scrapfly-sdk
+```
+
+ستحتاج أيضاً إلى الحصول على مفتاح Scrapfly API بالتسجيل في [scrapfly.io/register](https://www.scrapfly.io/register/).
+
+## خطوات البدء
+
+لاستخدام `ScrapflyScrapeWebsiteTool` بفعالية، اتبع هذه الخطوات:
+
+1. **تثبيت التبعيات**: ثبّت Scrapfly SDK باستخدام الأمر أعلاه.
+2. **الحصول على مفتاح API**: سجّل في Scrapfly للحصول على مفتاح API الخاص بك.
+3. **تهيئة الأداة**: أنشئ نسخة من الأداة بمفتاح API الخاص بك.
+4. **تكوين معاملات الاستخراج**: خصص معاملات الاستخراج بناءً على احتياجاتك.
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `ScrapflyScrapeWebsiteTool` لاستخراج المحتوى من موقع:
+
+```python Code
+from crewai import Agent, Task, Crew
+from crewai_tools import ScrapflyScrapeWebsiteTool
+
+# Initialize the tool
+scrape_tool = ScrapflyScrapeWebsiteTool(api_key="your_scrapfly_api_key")
+
+# Define an agent that uses the tool
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract information from websites",
+ backstory="An expert in web scraping who can extract content from any website.",
+ tools=[scrape_tool],
+ verbose=True,
+)
+
+# Example task to extract content from a website
+scrape_task = Task(
+ description="Extract the main content from the product page at https://web-scraping.dev/products and summarize the available products.",
+ expected_output="A summary of the products available on the website.",
+ agent=web_scraper_agent,
+)
+
+# Create and run the crew
+crew = Crew(agents=[web_scraper_agent], tasks=[scrape_task])
+result = crew.kickoff()
+```
+
+يمكنك أيضاً تخصيص معاملات الاستخراج:
+
+```python Code
+# Example with custom scraping parameters
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract information from websites with custom parameters",
+ backstory="An expert in web scraping who can extract content from any website.",
+ tools=[scrape_tool],
+ verbose=True,
+)
+
+# The agent will use the tool with parameters like:
+# url="https://web-scraping.dev/products"
+# scrape_format="markdown"
+# ignore_scrape_failures=True
+# scrape_config={
+# "asp": True, # Bypass scraping blocking solutions, like Cloudflare
+# "render_js": True, # Enable JavaScript rendering with a cloud headless browser
+# "proxy_pool": "public_residential_pool", # Select a proxy pool
+# "country": "us", # Select a proxy location
+# "auto_scroll": True, # Auto scroll the page
+# }
+
+scrape_task = Task(
+ description="Extract the main content from the product page at https://web-scraping.dev/products using advanced scraping options including JavaScript rendering and proxy settings.",
+ expected_output="A detailed summary of the products with all available information.",
+ agent=web_scraper_agent,
+)
+```
+
+## المعاملات
+
+تقبل أداة `ScrapflyScrapeWebsiteTool` المعاملات التالية:
+
+### معاملات التهيئة
+
+- **api_key**: مطلوب. مفتاح Scrapfly API الخاص بك.
+
+### معاملات التشغيل
+
+- **url**: مطلوب. عنوان URL للموقع المراد استخراجه.
+- **scrape_format**: اختياري. التنسيق الذي يتم استخراج محتوى صفحة الويب به. الخيارات هي "raw" (HTML) أو "markdown" أو "text". الافتراضي هو "markdown".
+- **scrape_config**: اختياري. قاموس يحتوي على خيارات تكوين استخراج Scrapfly إضافية.
+- **ignore_scrape_failures**: اختياري. ما إذا كان يجب تجاهل الفشل أثناء الاستخراج. إذا تم التعيين إلى `True`، ستُرجع الأداة `None` بدلاً من إثارة استثناء عند فشل الاستخراج.
+
+## خيارات تكوين Scrapfly
+
+يسمح معامل `scrape_config` بتخصيص سلوك الاستخراج بالخيارات التالية:
+
+- **asp**: تفعيل تجاوز حماية مكافحة الاستخراج.
+- **render_js**: تفعيل تصيير JavaScript مع متصفح سحابي بدون واجهة.
+- **proxy_pool**: اختيار مجموعة بروكسيات (مثل "public_residential_pool"، "datacenter").
+- **country**: اختيار موقع البروكسي (مثل "us"، "uk").
+- **auto_scroll**: التمرير التلقائي للصفحة لتحميل المحتوى المُحمّل كسولاً.
+- **js**: تنفيذ كود JavaScript مخصص بواسطة المتصفح بدون واجهة.
+
+للحصول على قائمة كاملة بخيارات التكوين، راجع [توثيق Scrapfly API](https://scrapfly.io/docs/scrape-api/getting-started).
+
+## الاستخدام
+
+عند استخدام `ScrapflyScrapeWebsiteTool` مع وكيل، سيحتاج الوكيل إلى تقديم عنوان URL للموقع المراد استخراجه ويمكنه اختيارياً تحديد التنسيق وخيارات التكوين الإضافية:
+
+```python Code
+# Example of using the tool with an agent
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract information from websites",
+ backstory="An expert in web scraping who can extract content from any website.",
+ tools=[scrape_tool],
+ verbose=True,
+)
+
+# Create a task for the agent
+scrape_task = Task(
+ description="Extract the main content from example.com in markdown format.",
+ expected_output="The main content of example.com in markdown format.",
+ agent=web_scraper_agent,
+)
+
+# Run the task
+crew = Crew(agents=[web_scraper_agent], tasks=[scrape_task])
+result = crew.kickoff()
+```
+
+للاستخدام المتقدم مع تكوين مخصص:
+
+```python Code
+# Create a task with more specific instructions
+advanced_scrape_task = Task(
+ description="""
+ Extract content from example.com with the following requirements:
+ - Convert the content to plain text format
+ - Enable JavaScript rendering
+ - Use a US-based proxy
+ - Handle any scraping failures gracefully
+ """,
+ expected_output="The extracted content from example.com",
+ agent=web_scraper_agent,
+)
+```
+
+## معالجة الأخطاء
+
+بشكل افتراضي، ستُثير أداة `ScrapflyScrapeWebsiteTool` استثناء إذا فشل الاستخراج. يمكن توجيه الوكلاء للتعامل مع الفشل بسلاسة عن طريق تحديد معامل `ignore_scrape_failures`:
+
+```python Code
+# Create a task that instructs the agent to handle errors
+error_handling_task = Task(
+ description="""
+ Extract content from a potentially problematic website and make sure to handle any
+ scraping failures gracefully by setting ignore_scrape_failures to True.
+ """,
+ expected_output="Either the extracted content or a graceful error message",
+ agent=web_scraper_agent,
+)
+```
+
+## تفاصيل التنفيذ
+
+تستخدم أداة `ScrapflyScrapeWebsiteTool` Scrapfly SDK للتفاعل مع Scrapfly API:
+
+```python Code
+class ScrapflyScrapeWebsiteTool(BaseTool):
+ name: str = "Scrapfly web scraping API tool"
+ description: str = (
+ "Scrape a webpage url using Scrapfly and return its content as markdown or text"
+ )
+
+ # Implementation details...
+
+ def _run(
+ self,
+ url: str,
+ scrape_format: str = "markdown",
+ scrape_config: Optional[Dict[str, Any]] = None,
+ ignore_scrape_failures: Optional[bool] = None,
+ ):
+ from scrapfly import ScrapeApiResponse, ScrapeConfig
+
+ scrape_config = scrape_config if scrape_config is not None else {}
+ try:
+ response: ScrapeApiResponse = self.scrapfly.scrape(
+ ScrapeConfig(url, format=scrape_format, **scrape_config)
+ )
+ return response.scrape_result["content"]
+ except Exception as e:
+ if ignore_scrape_failures:
+ logger.error(f"Error fetching data from {url}, exception: {e}")
+ return None
+ else:
+ raise e
+```
+
+## الخلاصة
+
+توفر أداة `ScrapflyScrapeWebsiteTool` طريقة قوية لاستخراج المحتوى من المواقع باستخدام قدرات Scrapfly المتقدمة لاستخراج البيانات من الويب. مع ميزات مثل دعم المتصفح بدون واجهة والبروكسيات وتجاوز مكافحة الروبوتات، يمكنها التعامل مع المواقع المعقدة واستخراج المحتوى بتنسيقات مختلفة. هذه الأداة مفيدة بشكل خاص لاستخراج البيانات ومراقبة المحتوى ومهام البحث حيث يكون استخراج البيانات الموثوق من الويب مطلوباً.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/seleniumscrapingtool.mdx b/docs/v1.15.1/ar/tools/web-scraping/seleniumscrapingtool.mdx
new file mode 100644
index 000000000..f9d0148a7
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/seleniumscrapingtool.mdx
@@ -0,0 +1,196 @@
+---
+title: أداة استخراج Selenium
+description: أداة `SeleniumScrapingTool` مصممة لاستخراج وقراءة محتوى موقع محدد باستخدام Selenium.
+icon: clipboard-user
+mode: "wide"
+---
+
+# `SeleniumScrapingTool`
+
+
+ هذه الأداة حالياً قيد التطوير. أثناء تحسين قدراتها، قد يواجه المستخدمون سلوكاً غير متوقع.
+ ملاحظاتكم لا تقدر بثمن لإجراء التحسينات.
+
+
+## الوصف
+
+أداة `SeleniumScrapingTool` مصنوعة لمهام استخراج البيانات من الويب عالية الكفاءة.
+تسمح بالاستخراج الدقيق للمحتوى من صفحات الويب باستخدام محددات CSS لاستهداف عناصر محددة.
+تصميمها يخدم مجموعة واسعة من احتياجات الاستخراج، مع توفير المرونة للعمل مع أي عنوان URL مقدم.
+
+## التثبيت
+
+لاستخدام هذه الأداة، تحتاج إلى تثبيت حزمة أدوات CrewAI و Selenium:
+
+```shell
+pip install 'crewai[tools]'
+uv add selenium webdriver-manager
+```
+
+ستحتاج أيضاً إلى تثبيت Chrome على نظامك، حيث تستخدم الأداة Chrome WebDriver لأتمتة المتصفح.
+
+## مثال
+
+يوضح المثال التالي كيفية استخدام `SeleniumScrapingTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import SeleniumScrapingTool
+
+# Initialize the tool
+selenium_tool = SeleniumScrapingTool()
+
+# Define an agent that uses the tool
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract information from websites using Selenium",
+ backstory="An expert web scraper who can extract content from dynamic websites.",
+ tools=[selenium_tool],
+ verbose=True,
+)
+
+# Example task to scrape content from a website
+scrape_task = Task(
+ description="Extract the main content from the homepage of example.com. Use the CSS selector 'main' to target the main content area.",
+ expected_output="The main content from example.com's homepage.",
+ agent=web_scraper_agent,
+)
+
+# Create and run the crew
+crew = Crew(
+ agents=[web_scraper_agent],
+ tasks=[scrape_task],
+ verbose=True,
+ process=Process.sequential,
+)
+result = crew.kickoff()
+```
+
+يمكنك أيضاً تهيئة الأداة بمعاملات محددة مسبقاً:
+
+```python Code
+# Initialize the tool with predefined parameters
+selenium_tool = SeleniumScrapingTool(
+ website_url='https://example.com',
+ css_element='.main-content',
+ wait_time=5
+)
+
+# Define an agent that uses the tool
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract information from websites using Selenium",
+ backstory="An expert web scraper who can extract content from dynamic websites.",
+ tools=[selenium_tool],
+ verbose=True,
+)
+```
+
+## المعاملات
+
+تقبل أداة `SeleniumScrapingTool` المعاملات التالية أثناء التهيئة:
+
+- **website_url**: اختياري. عنوان URL للموقع المراد استخراجه. إذا تم تقديمه أثناء التهيئة، لن يحتاج الوكيل إلى تحديده عند استخدام الأداة.
+- **css_element**: اختياري. محدد CSS للعناصر المراد استخراجها. إذا تم تقديمه أثناء التهيئة، لن يحتاج الوكيل إلى تحديده عند استخدام الأداة.
+- **cookie**: اختياري. قاموس يحتوي على معلومات ملفات تعريف الارتباط، مفيد لمحاكاة جلسة تسجيل دخول للوصول إلى محتوى مقيد.
+- **wait_time**: اختياري. يحدد التأخير (بالثواني) قبل الاستخراج، مما يسمح للموقع وأي محتوى ديناميكي بالتحميل الكامل. الافتراضي هو `3` ثوانٍ.
+- **return_html**: اختياري. ما إذا كان يجب إرجاع محتوى HTML بدلاً من النص فقط. الافتراضي هو `False`.
+
+عند استخدام الأداة مع وكيل، سيحتاج الوكيل إلى تقديم المعاملات التالية (ما لم يتم تحديدها أثناء التهيئة):
+
+- **website_url**: مطلوب. عنوان URL للموقع المراد استخراجه.
+- **css_element**: مطلوب. محدد CSS للعناصر المراد استخراجها.
+
+## مثال على التكامل مع الوكيل
+
+إليك مثالاً أكثر تفصيلاً لكيفية دمج `SeleniumScrapingTool` مع وكيل CrewAI:
+
+```python Code
+from crewai import Agent, Task, Crew, Process
+from crewai_tools import SeleniumScrapingTool
+
+# Initialize the tool
+selenium_tool = SeleniumScrapingTool()
+
+# Define an agent that uses the tool
+web_scraper_agent = Agent(
+ role="Web Scraper",
+ goal="Extract and analyze information from dynamic websites",
+ backstory="""You are an expert web scraper who specializes in extracting
+ content from dynamic websites that require browser automation. You have
+ extensive knowledge of CSS selectors and can identify the right selectors
+ to target specific content on any website.""",
+ tools=[selenium_tool],
+ verbose=True,
+)
+
+# Create a task for the agent
+scrape_task = Task(
+ description="""
+ Extract the following information from the news website at {website_url}:
+
+ 1. The headlines of all featured articles (CSS selector: '.headline')
+ 2. The publication dates of these articles (CSS selector: '.pub-date')
+ 3. The author names where available (CSS selector: '.author')
+
+ Compile this information into a structured format with each article's details grouped together.
+ """,
+ expected_output="A structured list of articles with their headlines, publication dates, and authors.",
+ agent=web_scraper_agent,
+)
+
+# Run the task
+crew = Crew(
+ agents=[web_scraper_agent],
+ tasks=[scrape_task],
+ verbose=True,
+ process=Process.sequential,
+)
+result = crew.kickoff(inputs={"website_url": "https://news-example.com"})
+```
+
+## تفاصيل التنفيذ
+
+تستخدم أداة `SeleniumScrapingTool` Selenium WebDriver لأتمتة تفاعلات المتصفح:
+
+```python Code
+class SeleniumScrapingTool(BaseTool):
+ name: str = "Read a website content"
+ description: str = "A tool that can be used to read a website content."
+ args_schema: Type[BaseModel] = SeleniumScrapingToolSchema
+
+ def _run(self, **kwargs: Any) -> Any:
+ website_url = kwargs.get("website_url", self.website_url)
+ css_element = kwargs.get("css_element", self.css_element)
+ return_html = kwargs.get("return_html", self.return_html)
+ driver = self._create_driver(website_url, self.cookie, self.wait_time)
+
+ content = self._get_content(driver, css_element, return_html)
+ driver.close()
+
+ return "\n".join(content)
+```
+
+تنفذ الأداة الخطوات التالية:
+1. إنشاء نسخة متصفح Chrome بدون واجهة
+2. التنقل إلى عنوان URL المحدد
+3. الانتظار للمدة المحددة للسماح بتحميل الصفحة
+4. إضافة أي ملفات تعريف ارتباط إذا تم تقديمها
+5. استخراج المحتوى بناءً على محدد CSS
+6. إرجاع المحتوى المستخرج كنص أو HTML
+7. إغلاق نسخة المتصفح
+
+## التعامل مع المحتوى الديناميكي
+
+أداة `SeleniumScrapingTool` مفيدة بشكل خاص لاستخراج المواقع ذات المحتوى الديناميكي المُحمّل عبر JavaScript. باستخدام نسخة متصفح حقيقية، يمكنها:
+
+1. تنفيذ JavaScript على الصفحة
+2. انتظار تحميل المحتوى الديناميكي
+3. التفاعل مع العناصر عند الحاجة
+4. استخراج المحتوى الذي لن يكون متاحاً مع طلبات HTTP البسيطة
+
+يمكنك ضبط معامل `wait_time` لضمان تحميل جميع المحتوى الديناميكي قبل الاستخراج.
+
+## الخلاصة
+
+توفر أداة `SeleniumScrapingTool` طريقة قوية لاستخراج المحتوى من المواقع باستخدام أتمتة المتصفح. من خلال تمكين الوكلاء من التفاعل مع المواقع كما يفعل المستخدم الحقيقي، تسهّل استخراج المحتوى الديناميكي الذي يكون صعباً أو مستحيلاً باستخدام طرق أبسط. هذه الأداة مفيدة بشكل خاص للبحث وجمع البيانات ومهام المراقبة التي تتضمن تطبيقات ويب حديثة ذات محتوى مُصيّر بـ JavaScript.
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/serperscrapewebsitetool.mdx b/docs/v1.15.1/ar/tools/web-scraping/serperscrapewebsitetool.mdx
new file mode 100644
index 000000000..04dc7ae2a
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/serperscrapewebsitetool.mdx
@@ -0,0 +1,101 @@
+---
+title: استخراج المواقع عبر Serper
+description: أداة `SerperScrapeWebsiteTool` مصممة لاستخراج المواقع واستخلاص محتوى نظيف وقابل للقراءة باستخدام Serper scraping API.
+icon: globe
+mode: "wide"
+---
+
+# `SerperScrapeWebsiteTool`
+
+## الوصف
+
+هذه الأداة مصممة لاستخراج محتوى المواقع واستخلاص نص نظيف وقابل للقراءة من أي عنوان URL. تستخدم [serper.dev](https://serper.dev) scraping API لجلب ومعالجة صفحات الويب، مع تضمين اختياري لتنسيق markdown لبنية وقابلية قراءة أفضل.
+
+## التثبيت
+
+لاستخدام `SerperScrapeWebsiteTool` بفعالية، اتبع هذه الخطوات:
+
+1. **تثبيت الحزمة**: تأكد من تثبيت حزمة `crewai[tools]` في بيئة Python الخاصة بك.
+2. **الحصول على مفتاح API**: احصل على مفتاح `serper.dev` API بالتسجيل للحصول على حساب في `serper.dev`.
+3. **تكوين البيئة**: خزّن مفتاح API الذي حصلت عليه في متغير بيئة باسم `SERPER_API_KEY` لتسهيل استخدامه بواسطة الأداة.
+
+لدمج هذه الأداة في مشروعك، اتبع تعليمات التثبيت أدناه:
+
+```shell
+pip install 'crewai[tools]'
+```
+
+## مثال
+
+يوضح المثال التالي كيفية تهيئة الأداة واستخراج بيانات من موقع:
+
+```python Code
+from crewai_tools import SerperScrapeWebsiteTool
+
+# Initialize the tool for website scraping capabilities
+tool = SerperScrapeWebsiteTool()
+
+# Scrape a website with markdown formatting
+result = tool.run(url="https://example.com", include_markdown=True)
+```
+
+## المعاملات
+
+تقبل أداة `SerperScrapeWebsiteTool` المعاملات التالية:
+
+- **url**: مطلوب. عنوان URL للموقع المراد استخراجه.
+- **include_markdown**: اختياري. ما إذا كان يجب تضمين تنسيق markdown في المحتوى المستخرج. الافتراضي هو `True`.
+
+## مثال مع المعاملات
+
+إليك مثالاً يوضح كيفية استخدام الأداة مع معاملات مختلفة:
+
+```python Code
+from crewai_tools import SerperScrapeWebsiteTool
+
+tool = SerperScrapeWebsiteTool()
+
+# Scrape with markdown formatting (default)
+markdown_result = tool.run(
+ url="https://docs.crewai.com",
+ include_markdown=True
+)
+
+# Scrape without markdown formatting for plain text
+plain_result = tool.run(
+ url="https://docs.crewai.com",
+ include_markdown=False
+)
+
+print("Markdown formatted content:")
+print(markdown_result)
+
+print("\nPlain text content:")
+print(plain_result)
+```
+
+## حالات الاستخدام
+
+أداة `SerperScrapeWebsiteTool` مفيدة بشكل خاص لـ:
+
+- **تحليل المحتوى**: استخراج وتحليل محتوى المواقع لأغراض البحث
+- **جمع البيانات**: جمع معلومات منظمة من صفحات الويب
+- **معالجة التوثيق**: تحويل التوثيق المبني على الويب إلى تنسيقات قابلة للقراءة
+- **التحليل التنافسي**: استخراج بيانات مواقع المنافسين لأبحاث السوق
+- **ترحيل المحتوى**: استخراج المحتوى من المواقع الحالية لأغراض الترحيل
+
+## معالجة الأخطاء
+
+تتضمن الأداة معالجة شاملة للأخطاء لـ:
+
+- **مشاكل الشبكة**: التعامل بسلاسة مع مهلات الاتصال وأخطاء الشبكة
+- **أخطاء API**: توفير رسائل خطأ مفصلة للمشاكل المتعلقة بـ API
+- **عناوين URL غير صالحة**: التحقق من المشاكل المتعلقة بعناوين URL المشوّهة والإبلاغ عنها
+- **المصادقة**: رسائل خطأ واضحة لمفاتيح API المفقودة أو غير الصالحة
+
+## اعتبارات الأمان
+
+- خزّن دائماً `SERPER_API_KEY` في متغيرات البيئة، ولا تضعه مباشرة في كودك المصدري
+- انتبه لحدود المعدل المفروضة من Serper API
+- احترم robots.txt وشروط خدمة المواقع عند استخراج المحتوى
+- فكر في تنفيذ تأخيرات بين الطلبات لعمليات الاستخراج واسعة النطاق
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/spidertool.mdx b/docs/v1.15.1/ar/tools/web-scraping/spidertool.mdx
new file mode 100644
index 000000000..5d98ccd53
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/spidertool.mdx
@@ -0,0 +1,93 @@
+---
+title: أداة استخراج Spider
+description: أداة `SpiderTool` مصممة لاستخراج وقراءة محتوى موقع محدد باستخدام Spider.
+icon: spider-web
+mode: "wide"
+---
+
+# `SpiderTool`
+
+## الوصف
+
+[Spider](https://spider.cloud/?ref=crewai) هي [الأسرع](https://github.com/spider-rs/spider/blob/main/benches/BENCHMARKS.md#benchmark-results)
+أداة استخراج وزحف مفتوحة المصدر تُرجع بيانات جاهزة لـ LLM.
+تحوّل أي موقع إلى HTML نقي أو markdown أو بيانات وصفية أو نص مع تمكين الزحف بإجراءات مخصصة باستخدام الذكاء الاصطناعي.
+
+## التثبيت
+
+لاستخدام `SpiderTool` تحتاج إلى تنزيل [Spider SDK](https://pypi.org/project/spider-client/)
+وحزمة `crewai[tools]` SDK أيضاً:
+
+```shell
+pip install spider-client 'crewai[tools]'
+```
+
+## مثال
+
+يوضح هذا المثال كيفية استخدام `SpiderTool` لتمكين وكيلك من استخراج المواقع وزحفها.
+البيانات المُرجعة من Spider API جاهزة بالفعل لـ LLM، لذا لا حاجة لأي تنظيف.
+
+```python Code
+from crewai_tools import SpiderTool
+
+def main():
+ spider_tool = SpiderTool()
+
+ searcher = Agent(
+ role="Web Research Expert",
+ goal="Find related information from specific URL's",
+ backstory="An expert web researcher that uses the web extremely well",
+ tools=[spider_tool],
+ verbose=True,
+ )
+
+ return_metadata = Task(
+ description="Scrape https://spider.cloud with a limit of 1 and enable metadata",
+ expected_output="Metadata and 10 word summary of spider.cloud",
+ agent=searcher
+ )
+
+ crew = Crew(
+ agents=[searcher],
+ tasks=[
+ return_metadata,
+ ],
+ verbose=2
+ )
+
+ crew.kickoff()
+
+if __name__ == "__main__":
+ main()
+```
+
+## المعاملات
+| المعامل | النوع | الوصف |
+|:------------------|:---------|:-----------------------------------------------------------------------------------------------------------------------------------------------------|
+| **api_key** | `string` | يحدد مفتاح Spider API. إذا لم يتم تحديده، يبحث عن `SPIDER_API_KEY` في متغيرات البيئة. |
+| **params** | `object` | معاملات اختيارية للطلب. الافتراضي هو `{"return_format": "markdown"}` لتحسين المحتوى لـ LLMs. |
+| **request** | `string` | نوع الطلب المراد تنفيذه (`http`، `chrome`، `smart`). `smart` يستخدم HTTP افتراضياً، مع التبديل إلى تصيير JavaScript عند الحاجة. |
+| **limit** | `int` | الحد الأقصى لعدد الصفحات للزحف لكل موقع. عيّن إلى `0` أو اتركه للزحف غير المحدود. |
+| **depth** | `int` | الحد الأقصى لعمق الزحف. عيّن إلى `0` بدون حد. |
+| **cache** | `bool` | يفعّل التخزين المؤقت لـ HTTP لتسريع التشغيلات المتكررة. الافتراضي هو `true`. |
+| **budget** | `object` | يعيّن حدوداً على أساس المسار للصفحات المزحوفة، مثل `{"*":1}` لصفحة الجذر فقط. |
+| **locale** | `string` | اللغة المحلية للطلب، مثل `en-US`. |
+| **cookies** | `string` | ملفات تعريف ارتباط HTTP للطلب. |
+| **stealth** | `bool` | يفعّل وضع التخفي لطلبات Chrome لتجنب الاكتشاف. الافتراضي هو `true`. |
+| **headers** | `object` | رؤوس HTTP كخريطة من أزواج مفتاح-قيمة لجميع الطلبات. |
+| **metadata** | `bool` | يخزّن البيانات الوصفية حول الصفحات والمحتوى، مما يساعد على التوافق مع الذكاء الاصطناعي. الافتراضي هو `false`. |
+| **viewport** | `object` | يعيّن أبعاد نافذة العرض لـ Chrome. الافتراضي هو `800x600`. |
+| **encoding** | `string` | يحدد نوع الترميز، مثل `UTF-8`، `SHIFT_JIS`. |
+| **subdomains** | `bool` | يتضمن النطاقات الفرعية في الزحف. الافتراضي هو `false`. |
+| **user_agent** | `string` | وكيل مستخدم HTTP مخصص. الافتراضي هو وكيل عشوائي. |
+| **store_data** | `bool` | يفعّل تخزين البيانات للطلب. يتجاوز `storageless` عند التعيين. الافتراضي هو `false`. |
+| **gpt_config** | `object` | يسمح للذكاء الاصطناعي بتوليد إجراءات الزحف، مع خطوات تسلسل اختيارية عبر مصفوفة لـ `"prompt"`. |
+| **fingerprint** | `bool` | يفعّل البصمة المتقدمة لـ Chrome. |
+| **storageless** | `bool` | يمنع جميع عمليات تخزين البيانات، بما في ذلك تضمينات الذكاء الاصطناعي. الافتراضي هو `false`. |
+| **readability** | `bool` | يُعالج المحتوى مسبقاً للقراءة عبر [أداة القراءة من Mozilla](https://github.com/mozilla/readability). يحسّن المحتوى لـ LLMs. |
+| **return_format** | `string` | التنسيق لإرجاع البيانات: `markdown`، `raw`، `text`، `html2text`. استخدم `raw` لتنسيق الصفحة الافتراضي. |
+| **proxy_enabled** | `bool` | يفعّل بروكسيات عالية الأداء لتجنب الحظر على مستوى الشبكة. |
+| **query_selector** | `string` | محدد CSS لاستخراج المحتوى من الترميز. |
+| **full_resources** | `bool` | يُنزّل جميع الموارد المرتبطة بالموقع. |
+| **request_timeout** | `int` | المهلة بالثواني للطلبات (5-60). الافتراضي هو `30`. |
+| **run_in_background** | `bool` | يشغّل الطلب في الخلفية، مفيد لتخزين البيانات وتشغيل زحف لوحة التحكم. لا تأثير إذا تم تعيين `storageless`. |
\ No newline at end of file
diff --git a/docs/v1.15.1/ar/tools/web-scraping/stagehandtool.mdx b/docs/v1.15.1/ar/tools/web-scraping/stagehandtool.mdx
new file mode 100644
index 000000000..338cc7105
--- /dev/null
+++ b/docs/v1.15.1/ar/tools/web-scraping/stagehandtool.mdx
@@ -0,0 +1,245 @@
+---
+title: أداة Stagehand
+description: أداة أتمتة الويب التي تدمج Stagehand مع CrewAI للتفاعل مع المتصفح وأتمتة المهام
+icon: hand
+mode: "wide"
+---
+
+
+# نظرة عامة
+
+تدمج أداة `StagehandTool` إطار عمل [Stagehand](https://docs.stagehand.dev/get_started/introduction) مع CrewAI، مما يتيح للوكلاء التفاعل مع المواقع الإلكترونية وأتمتة مهام المتصفح باستخدام تعليمات بلغة طبيعية.
+
+## نظرة عامة
+
+Stagehand هو إطار عمل قوي لأتمتة المتصفح تم تطويره بواسطة Browserbase ويتيح لوكلاء الذكاء الاصطناعي:
+
+- التنقل إلى المواقع الإلكترونية
+- النقر على الأزرار والروابط والعناصر الأخرى
+- ملء النماذج
+- استخراج البيانات من صفحات الويب
+- مراقبة العناصر وتحديدها
+- تنفيذ سير عمل معقدة
+
+تغلف أداة StagehandTool حزمة Stagehand Python SDK لتزويد وكلاء CrewAI بإمكانيات التحكم في المتصفح من خلال ثلاثة عمليات أساسية:
+
+1. **Act**: تنفيذ إجراءات مثل النقر والكتابة والتنقل
+2. **Extract**: استخراج بيانات منظمة من صفحات الويب
+3. **Observe**: تحديد العناصر وتحليلها في الصفحة
+
+## المتطلبات الأساسية
+
+قبل استخدام هذه الأداة، تأكد من توفر ما يلي:
+
+1. حساب على [Browserbase](https://www.browserbase.com/) مع مفتاح API ومعرف المشروع
+2. مفتاح API لنموذج لغوي كبير (OpenAI أو Anthropic Claude)
+3. تثبيت حزمة Stagehand Python SDK
+
+قم بتثبيت التبعية المطلوبة:
+
+```bash
+pip install stagehand-py
+```
+
+## الاستخدام
+
+### التنفيذ الأساسي
+
+يمكن تنفيذ أداة StagehandTool بطريقتين:
+
+#### 1. استخدام مدير السياق (موصى به)
+
+ يُوصى باستخدام مدير السياق لأنه يضمن التنظيف السليم للموارد حتى في حالة حدوث استثناءات.
+
+
+```python
+from crewai import Agent, Task, Crew
+from crewai_tools import StagehandTool
+from stagehand.schemas import AvailableModel
+
+# Initialize the tool with your API keys using a context manager
+with StagehandTool(
+ api_key="your-browserbase-api-key",
+ project_id="your-browserbase-project-id",
+ model_api_key="your-llm-api-key", # OpenAI or Anthropic API key
+ model_name=AvailableModel.CLAUDE_3_7_SONNET_LATEST, # Optional: specify which model to use
+) as stagehand_tool:
+ # Create an agent with the tool
+ researcher = Agent(
+ role="Web Researcher",
+ goal="Find and summarize information from websites",
+ backstory="I'm an expert at finding information online.",
+ verbose=True,
+ tools=[stagehand_tool],
+ )
+
+ # Create a task that uses the tool
+ research_task = Task(
+ description="Go to https://www.example.com and tell me what you see on the homepage.",
+ agent=researcher,
+ )
+
+ # Run the crew
+ crew = Crew(
+ agents=[researcher],
+ tasks=[research_task],
+ verbose=True,
+ )
+
+ result = crew.kickoff()
+ print(result)
+```
+
+#### 2. إدارة الموارد يدوياً
+
+```python
+from crewai import Agent, Task, Crew
+from crewai_tools import StagehandTool
+from stagehand.schemas import AvailableModel
+
+# Initialize the tool with your API keys
+stagehand_tool = StagehandTool(
+ api_key="your-browserbase-api-key",
+ project_id="your-browserbase-project-id",
+ model_api_key="your-llm-api-key",
+ model_name=AvailableModel.CLAUDE_3_7_SONNET_LATEST,
+)
+
+try:
+ # Create an agent with the tool
+ researcher = Agent(
+ role="Web Researcher",
+ goal="Find and summarize information from websites",
+ backstory="I'm an expert at finding information online.",
+ verbose=True,
+ tools=[stagehand_tool],
+ )
+
+ # Create a task that uses the tool
+ research_task = Task(
+ description="Go to https://www.example.com and tell me what you see on the homepage.",
+ agent=researcher,
+ )
+
+ # Run the crew
+ crew = Crew(
+ agents=[researcher],
+ tasks=[research_task],
+ verbose=True,
+ )
+
+ result = crew.kickoff()
+ print(result)
+finally:
+ # Explicitly clean up resources
+ stagehand_tool.close()
+```
+
+## أنواع الأوامر
+
+تدعم أداة StagehandTool ثلاثة أنواع مختلفة من الأوامر لمهام أتمتة الويب المحددة:
+
+### 1. أمر Act
+
+يتيح نوع الأمر `act` (الافتراضي) التفاعل مع صفحات الويب مثل النقر على الأزرار وملء النماذج والتنقل.
+
+```python
+# Perform an action (default behavior)
+result = stagehand_tool.run(
+ instruction="Click the login button",
+ url="https://example.com",
+ command_type="act" # Default, so can be omitted
+)
+
+# Fill out a form
+result = stagehand_tool.run(
+ instruction="Fill the contact form with name 'John Doe', email 'john@example.com', and message 'Hello world'",
+ url="https://example.com/contact"
+)
+```
+
+### 2. أمر Extract
+
+يسترجع نوع الأمر `extract` بيانات منظمة من صفحات الويب.
+
+```python
+# Extract all product information
+result = stagehand_tool.run(
+ instruction="Extract all product names, prices, and descriptions",
+ url="https://example.com/products",
+ command_type="extract"
+)
+
+# Extract specific information with a selector
+result = stagehand_tool.run(
+ instruction="Extract the main article title and content",
+ url="https://example.com/blog/article",
+ command_type="extract",
+ selector=".article-container" # Optional CSS selector
+)
+```
+
+### 3. أمر Observe
+
+يحدد نوع الأمر `observe` عناصر صفحات الويب ويحللها.
+
+```python
+# Find interactive elements
+result = stagehand_tool.run(
+ instruction="Find all interactive elements in the navigation menu",
+ url="https://example.com",
+ command_type="observe"
+)
+
+# Identify form fields
+result = stagehand_tool.run(
+ instruction="Identify all the input fields in the registration form",
+ url="https://example.com/register",
+ command_type="observe",
+ selector="#registration-form"
+)
+```
+
+## خيارات الإعداد
+
+يمكنك تخصيص سلوك أداة StagehandTool باستخدام المعاملات التالية:
+
+```python
+stagehand_tool = StagehandTool(
+ api_key="your-browserbase-api-key",
+ project_id="your-browserbase-project-id",
+ model_api_key="your-llm-api-key",
+ model_name=AvailableModel.CLAUDE_3_7_SONNET_LATEST,
+ dom_settle_timeout_ms=5000, # Wait longer for DOM to settle
+ headless=True, # Run browser in headless mode
+ self_heal=True, # Attempt to recover from errors
+ wait_for_captcha_solves=True, # Wait for CAPTCHA solving
+ verbose=1, # Control logging verbosity (0-3)
+)
+```
+
+## أفضل الممارسات
+
+1. **كن محدداً**: قدم تعليمات مفصلة للحصول على نتائج أفضل
+2. **اختر نوع الأمر المناسب**: حدد نوع الأمر الصحيح لمهمتك
+3. **استخدم المحددات**: استفد من محددات CSS لتحسين الدقة
+4. **قسّم المهام المعقدة**: قسّم سير العمل المعقدة إلى عدة استدعاءات للأداة
+5. **طبّق معالجة الأخطاء**: أضف معالجة الأخطاء للمشكلات المحتملة
+
+## استكشاف الأخطاء وإصلاحها
+
+
+المشكلات الشائعة وحلولها:
+
+- **مشكلات الجلسة**: تحقق من مفاتيح API لكل من Browserbase ومزود النموذج اللغوي
+- **العنصر غير موجود**: قم بزيادة قيمة `dom_settle_timeout_ms` للصفحات البطيئة
+- **فشل الإجراء**: استخدم `observe` لتحديد العناصر الصحيحة أولاً
+- **بيانات غير مكتملة**: حسّن التعليمات أو قدم محددات محددة
+
+
+## موارد إضافية
+
+للأسئلة حول تكامل CrewAI:
+- انضم إلى مجتمع Stagehand على [Slack](https://stagehand.dev/slack)
+- افتح مشكلة في [مستودع Stagehand](https://github.com/browserbase/stagehand)
+- قم بزيارة [وثائق Stagehand](https://docs.stagehand.dev/)
diff --git a/docs/v1.15.1/en/api-reference/inputs.mdx b/docs/v1.15.1/en/api-reference/inputs.mdx
new file mode 100644
index 000000000..7cb02d83f
--- /dev/null
+++ b/docs/v1.15.1/en/api-reference/inputs.mdx
@@ -0,0 +1,8 @@
+---
+title: "GET /inputs"
+description: "Get required inputs for your crew"
+openapi: "/v1.15.1/enterprise-api.en.yaml GET /inputs"
+mode: "wide"
+---
+
+
diff --git a/docs/v1.15.1/en/api-reference/introduction.mdx b/docs/v1.15.1/en/api-reference/introduction.mdx
new file mode 100644
index 000000000..0874af7d2
--- /dev/null
+++ b/docs/v1.15.1/en/api-reference/introduction.mdx
@@ -0,0 +1,135 @@
+---
+title: "Introduction"
+description: "Complete reference for the CrewAI AMP REST API"
+icon: "code"
+mode: "wide"
+---
+
+# CrewAI AMP API
+
+Welcome to the CrewAI AMP API reference. This API allows you to programmatically interact with your deployed crews, enabling integration with your applications, workflows, and services.
+
+## Quick Start
+
+
+
+ Navigate to your crew's detail page in the CrewAI AMP dashboard and copy your Bearer Token from the Status tab.
+
+
+
+ Use the `GET /inputs` endpoint to see what parameters your crew expects.
+
+
+
+ Call `POST /kickoff` with your inputs to start the crew execution and receive
+ a `kickoff_id`.
+
+
+
+ Use `GET /status/{kickoff_id}` to check execution status and retrieve results.
+
+
+
+## Authentication
+
+All API requests require authentication using a Bearer token. Include your token in the `Authorization` header:
+
+```bash
+curl -H "Authorization: Bearer YOUR_CREW_TOKEN" \
+ https://your-crew-url.crewai.com/inputs
+```
+
+### Token Types
+
+| Token Type | Scope | Use Case |
+| :-------------------- | :------------------------ | :----------------------------------------------------------- |
+| **Bearer Token** | Organization-level access | Full crew operations, ideal for server-to-server integration |
+| **User Bearer Token** | User-scoped access | Limited permissions, suitable for user-specific operations |
+
+
+ You can find both token types in the Status tab of your crew's detail page in
+ the CrewAI AMP dashboard.
+
+
+## Base URL
+
+Each deployed crew has its own unique API endpoint:
+
+```
+https://your-crew-name.crewai.com
+```
+
+Replace `your-crew-name` with your actual crew's URL from the dashboard.
+
+## Typical Workflow
+
+1. **Discovery**: Call `GET /inputs` to understand what your crew needs
+2. **Execution**: Submit inputs via `POST /kickoff` to start processing
+3. **Monitoring**: Poll `GET /status/{kickoff_id}` until completion
+4. **Results**: Extract the final output from the completed response
+
+## Error Handling
+
+The API uses standard HTTP status codes:
+
+| Code | Meaning |
+| ----- | :----------------------------------------- |
+| `200` | Success |
+| `400` | Bad Request - Invalid input format |
+| `401` | Unauthorized - Invalid bearer token |
+| `404` | Not Found - Resource doesn't exist |
+| `422` | Validation Error - Missing required inputs |
+| `500` | Server Error - Contact support |
+
+## Interactive Testing
+
+
+ **Why no "Send" button?** Since each CrewAI AMP user has their own unique crew
+ URL, we use **reference mode** instead of an interactive playground to avoid
+ confusion. This shows you exactly what the requests should look like without
+ non-functional send buttons.
+
+
+Each endpoint page shows you:
+
+- ✅ **Exact request format** with all parameters
+- ✅ **Response examples** for success and error cases
+- ✅ **Code samples** in multiple languages (cURL, Python, JavaScript, etc.)
+- ✅ **Authentication examples** with proper Bearer token format
+
+### **To Test Your Actual API:**
+
+
+
+ Copy the cURL examples and replace the URL + token with your real values
+
+
+ Import the examples into your preferred API testing tool
+
+
+
+**Example workflow:**
+
+1. **Copy this cURL example** from any endpoint page
+2. **Replace `your-actual-crew-name.crewai.com`** with your real crew URL
+3. **Replace the Bearer token** with your real token from the dashboard
+4. **Run the request** in your terminal or API client
+
+## Need Help?
+
+
+
+ Get help with API integration and troubleshooting
+
+
+ Manage your crews and view execution logs
+
+
diff --git a/docs/v1.15.1/en/api-reference/kickoff.mdx b/docs/v1.15.1/en/api-reference/kickoff.mdx
new file mode 100644
index 000000000..4215e2be9
--- /dev/null
+++ b/docs/v1.15.1/en/api-reference/kickoff.mdx
@@ -0,0 +1,8 @@
+---
+title: "POST /kickoff"
+description: "Start a crew execution"
+openapi: "/v1.15.1/enterprise-api.en.yaml POST /kickoff"
+mode: "wide"
+---
+
+
diff --git a/docs/v1.15.1/en/api-reference/resume.mdx b/docs/v1.15.1/en/api-reference/resume.mdx
new file mode 100644
index 000000000..43e89c87c
--- /dev/null
+++ b/docs/v1.15.1/en/api-reference/resume.mdx
@@ -0,0 +1,6 @@
+---
+title: "POST /resume"
+description: "Resume crew execution with human feedback"
+openapi: "/v1.15.1/enterprise-api.en.yaml POST /resume"
+mode: "wide"
+---
diff --git a/docs/v1.15.1/en/api-reference/status.mdx b/docs/v1.15.1/en/api-reference/status.mdx
new file mode 100644
index 000000000..cf957a9b8
--- /dev/null
+++ b/docs/v1.15.1/en/api-reference/status.mdx
@@ -0,0 +1,6 @@
+---
+title: "GET /status/{kickoff_id}"
+description: "Get execution status"
+openapi: "/v1.15.1/enterprise-api.en.yaml GET /status/{kickoff_id}"
+mode: "wide"
+---
diff --git a/docs/v1.15.1/en/changelog.mdx b/docs/v1.15.1/en/changelog.mdx
new file mode 100644
index 000000000..8291887d6
--- /dev/null
+++ b/docs/v1.15.1/en/changelog.mdx
@@ -0,0 +1,4508 @@
+---
+title: "Changelog"
+description: "Product updates, improvements, and bug fixes for CrewAI"
+icon: "clock"
+mode: "wide"
+---
+
+ ## v1.15.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1)
+
+ ## What's Changed
+
+ ### Features
+ - Initialize Git repositories for generated projects (#6364)
+ - Require explicit CrewAI project definitions (#6358)
+ - Open deployment page after CLI deploy (#6343)
+
+ ### Bug Fixes
+ - Fix deployment page link ID resolution (#6365)
+ - Fix JSON crew template rendering (#6359)
+ - Fix JSON crew version pin (#6342)
+ - Fix SSRF redirect bypass in scraping fetches (#6331)
+
+ ### Documentation
+ - Improve open source positioning in README (#6363)
+ - Improve coding agent setup call-to-action (#6344)
+ - Add snapshot and changelog for version 1.15.1a1 (#6362)
+
+ ## Contributors
+
+ @joaomdmoura, @lorenzejay, @oalami, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.15.1a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.1a1)
+
+ ## What's Changed
+
+ ### Features
+ - Track TUI button telemetry
+ - Require explicit CrewAI project definitions
+ - Open deployment page after CLI deploy
+
+ ### Bug Fixes
+ - Fix JSON crew template rendering
+ - Fix JSON crew version pin
+ - Fix SSRF redirect bypass in scraping fetches
+
+ ### Documentation
+ - Improve coding agent setup CTA
+ - Snapshot and changelog for v1.15.0
+
+ ## Contributors
+
+ @joaomdmoura, @lorenzejay, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.15.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.15.0)
+
+ ## What's Changed
+
+ ### Features
+ - Track conversational flow turn usage in telemetry
+ - Support conversational flows in the CLI TUI
+ - Add unified declarative flow loading
+ - Add declarative Flow CLI support
+ - Add optional if expression to each.do steps
+ - Add single agent action to Flow definitions
+ - Add crew actions to FlowDefinition
+ - Add inline crew definition loading
+ - Add `each` composite action to FlowDefinition
+ - Implement DMN mode support in crew creation and execution
+
+ ### Bug Fixes
+ - Fix owner-only permissions enforcement on credential files
+ - Fix JSON schema flow state kickoff inputs
+ - Fix symlink path traversal in skill archive extraction
+ - Aggregate token usage across all LLM calls
+ - Remove duplicated Exa tool
+ - Resolve JSON crew issues
+ - Fix JSON crew handling and enhance memory reset functionality
+
+ ### Documentation
+ - Update installation and quickstart documentation for JSON-first crew projects
+ - Add Datadog integration guide with importable operations dashboard
+ - Add "One Card per Step" Studio page
+ - Add snapshots and changelogs for previous versions leading to v1.15.0
+
+ ### Performance
+ - Improve crewai run startup UX
+ - Keep flow method progress visible for nested crews
+
+ ### Refactoring
+ - Remove `StateProxy` from flow state access
+ - Consolidate `crewai run` and `crewai flow kickoff`
+ - Discriminate FlowDefinition state types
+ - Wire config and persistence from FlowDefinition into the runtime
+
+ ## Contributors
+
+ @gabemilani, @github-code-quality[bot], @greysonlalonde, @iris-clawd, @jessemiller, @joaomdmoura, @lorenzejay, @lucasgomide, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.14.8a5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a5)
+
+ ## What's Changed
+
+ ### Features
+ - Make declarative refs work across flows and crews (#6326)
+
+ ### Bug Fixes
+ - Fix JSON schema flow state kickoff inputs (#6325)
+
+ ### Documentation
+ - Nest One Card per Step under Crew Studio and drop rollout banner (AGE-107) (#6317)
+ - Update snapshot and changelog for v1.14.8a4 (#6319)
+
+ ### Refactoring
+ - Remove `StateProxy` from flow state access (#6327)
+
+ ## Contributors
+
+ @jessemiller, @vinibrsl
+
+
+
+
+ ## v1.14.8a4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a4)
+
+ ## What's Changed
+
+ ### Features
+ - Support conversational flows in the CLI TUI.
+
+ ### Bug Fixes
+ - Fix symlink path traversal in skill archive extraction.
+ - Validate declarative flow definition paths.
+
+ ### Documentation
+ - Update snapshot and changelog for v1.14.8a3.
+
+ ## Contributors
+
+ @lorenzejay, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.14.8a3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a3)
+
+ ## What's Changed
+
+ ### Features
+ - Add unified declarative flow loading
+ - Improve crewai run startup UX
+ - Consolidate `crewai run` and `crewai flow kickoff`
+ - Keep flow method progress visible for nested crews
+ - Add declarative Flow CLI support
+ - Allow `@router()` as start method of a flow
+ - Add typed output schemas for CrewAI tools
+
+ ### Bug Fixes
+ - Pin opentelemetry to ~=1.42.0
+
+ ### Documentation
+ - Add "One Card per Step" Studio page
+
+ ## Contributors
+
+ @jessemiller, @joaomdmoura, @lucasgomide, @vinibrsl
+
+
+
+
+ ## v1.14.8a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a2)
+
+ ## What's Changed
+
+ ### Features
+ - Add single agent action to Flow definitions
+ - Validate flow CEL expressions at definition load time
+
+ ### Documentation
+ - Add Datadog integration guide with importable operations dashboard
+ - Update snapshot and changelog for v1.14.8a1
+
+ ## Contributors
+
+ @joaomdmoura, @lucasgomide, @vinibrsl
+
+
+
+
+ ## v1.14.8a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a1)
+
+ ## What's Changed
+
+ ### Features
+ - Add optional if expression to each.do steps
+
+ ### Bug Fixes
+ - Fix JSON crew issues
+
+ ### Documentation
+ - Update snapshot and changelog for v1.14.8a
+
+ ## Contributors
+
+ @joaomdmoura, @vinibrsl
+
+
+
+
+ ## v1.14.8a
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.8a)
+
+ ## What's Changed
+
+ ### Features
+ - Add script/code block action to FlowDefinition
+ - Add crew actions to FlowDefinition
+ - Add `each` composite action to FlowDefinition
+ - Implement DMN mode support in crew creation and execution
+ - Enhance memory reset functionality and JSON crew handling
+ - Add expressions to FlowDefinition actions
+ - Implement Flow definition run tools without Python code
+ - Drive human feedback from the flow definition
+ - Wire config and persistence from FlowDefinition into the runtime
+ - Add `crewai run --definition` for declarative flows
+ - Support ZIP deployment fallback and JSON crew project env runs
+ - Introduce JSON first crews
+
+ ### Bug Fixes
+ - Fix duplicated Exa tool
+ - Fix aggregate token usage across all LLM calls
+ - Resolve issues with crew loading and validation logic
+
+ ### Documentation
+ - Document FlowDefinition fields in the JSON schema
+ - Update installation and quickstart documentation for JSON-first crew projects
+ - Update changelog and version for v1.14.7
+
+ ## Contributors
+
+ @gabemilani, @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay, @lucasgomide, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.14.7
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7)
+
+ ## What's Changed
+
+ ### Features
+ - Add pluggable default backends for memory, knowledge, rag, and flow.
+ - Surface real finish_reason, sampling params, and response.id on LLM events.
+ - Type DSL triggers as route-aware decorators.
+ - Add chat API for conversational flows.
+ - Make locking backend overridable.
+ - Build FlowDefinition from Flow DSL metadata.
+ - Add native Snowflake Cortex LLM provider.
+ - Add crew trained agents file support.
+
+ ### Bug Fixes
+ - Fix checkpoint to rebuild custom BaseLLM as concrete LLM on restore.
+ - Gate restore on a flag to prevent live snapshots from replaying as resume.
+ - Scope runtime state per run to bound growth and isolate concurrent runs.
+ - Fix telemetry setup on crewai-login.
+ - Respect suppress_flow_events for method-execution events.
+ - Restore [project.scripts] in crewai package for uv tool install.
+ - Resolve pip-audit CVEs for aiohttp, docling, and docling-core.
+ - Fix file input not working reliably.
+ - Fix Snowflake Claude incomplete tool result histories.
+
+ ### Documentation
+ - Update changelog and version for v1.14.7.
+ - Update OpenTelemetry collector documentation.
+ - Update NVIDIA Nemotron LLM guide.
+ - Add Databricks integration guide.
+ - Add Snowflake integration guide.
+
+ ### Performance
+ - Improve crewai import speed by lazy-loading docling imports.
+
+ ### Refactoring
+ - Simplify flow condition evaluation to be stateless per event.
+ - Decouple convo logic from runtime and add a conversational_definition.
+ - Split `flow.py` into DSL, definition, and runtime.
+
+ ## Contributors
+
+ @Luzk, @alex-clawd, @devin-ai-integration[bot], @greysonlalonde, @gvieira, @jessemiller, @lorenzejay, @lucasgomide, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.14.7rc2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7rc2)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Gate restore on a flag to prevent live snapshots from replaying as resume
+
+ ### Documentation
+ - Update changelog and version for v1.14.7rc1
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.7rc1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7rc1)
+
+ ## What's Changed
+
+ ### Features
+ - Add `reset_runtime_state` to release accumulated bus state
+ - Handle supporting both custom prompts
+ - Decouple conversation logic from runtime and add a `conversational_definition`
+
+ ### Bug Fixes
+ - Fix scope of runtime state per run to bound growth and isolate concurrent runs
+ - Fix telemetry setup on `crewai-login`
+ - Fix respect for `suppress_flow_events` for method-execution events
+
+ ### Documentation
+ - Update OpenTelemetry images
+ - Update documentation to reflect new state of OpenTelemetry collector
+ - Update changelog and version for v1.14.7a4
+
+ ### Refactoring
+ - Simplify flow condition evaluation to be stateless per event
+ - Improve conversation routing cycle with one less route
+
+ ## Contributors
+
+ @greysonlalonde, @lorenzejay, @lucasgomide, @vinibrsl
+
+
+
+
+ ## v1.14.7a4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7a4)
+
+ ## What's Changed
+
+ ### Features
+ - Migrate @listen/@router runtime to read from FlowDefinition
+ - Add pluggable default backends for memory, knowledge, rag, and flow
+
+ ### Documentation
+ - Update changelog and version for v1.14.7a3
+
+ ## Contributors
+
+ @greysonlalonde, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.14.7a3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7a3)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix exposure of `ask_for_human_input` on experimental `AgentExecutor`
+ - Resolve pip-audit CVEs for `aiohttp`, `docling`, `docling-core`, and `pip`
+
+ ### Refactoring
+ - Migrate `@start` to read from `FlowDefinition`
+
+ ### Documentation
+ - Update changelog and version for v1.14.7a2
+
+ ## Contributors
+
+ @greysonlalonde, @lorenzejay, @vinibrsl
+
+
+
+
+ ## v1.14.7a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7a2)
+
+ ## What's Changed
+
+ ### Features
+ - Add conversational flow traces support.
+ - Update conversational flow documentation to utilize `handle_turn`.
+ - Surface real `finish_reason`, sampling parameters, and `response.id` in LLM events.
+ - Type DSL triggers as route-aware decorators.
+ - Implement chat API for conversational flows.
+ - Make locking backend overridable in lock store.
+ - Split flow DSL monolith into focused decorator modules.
+ - Flatten LiteLLM cache/reasoning usage sub-counts in `_usage_to_dict`.
+ - Build `FlowDefinition` from Flow DSL metadata.
+
+ ### Documentation
+ - Add NVIDIA Nemotron LLM guide.
+ - Document monorepo deployments.
+ - Update changelog and version for v1.14.7a1.
+
+ ## Contributors
+
+ @alex-clawd, @gvieira, @lorenzejay, @lucasgomide, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.14.7a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.7a1)
+
+ ## What's Changed
+
+ ### Features
+ - Add crew trained agents file support
+ - Add native Snowflake Cortex LLM provider
+ - Add Databricks integration guide
+ - Add Snowflake integration guide
+
+ ### Bug Fixes
+ - Fix CLI by restoring `[project.scripts]` in crewai package for UV tool install
+ - Resolve file input reliability issues
+ - Fix incomplete tool result histories in Snowflake Claude
+ - Handle stringified tool calls for Snowflake Claude
+ - Re-arm multi-source `or_` listeners across router-driven cycles
+
+ ### Performance
+ - Improve crewai import speed by lazy-loading docling imports
+
+ ### Refactoring
+ - Split `flow.py` into DSL, definition, and runtime
+
+ ## Contributors
+
+ @Luzk, @alex-clawd, @devin-ai-integration[bot], @greysonlalonde, @jessemiller, @lorenzejay, @vinibrsl
+
+
+
+
+ ## v1.14.6
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.6)
+
+ ## What's Changed
+
+ ### Features
+ - Enhance StdioTransport to prevent environment variable leakage
+ - Enhance planning configuration and observation handling
+ - Declare env_vars on DatabricksQueryTool
+ - Add Agent Control Plane docs
+
+ ### Bug Fixes
+ - Fix structured output leaks in tool-calling loops
+ - Drop unroundtrippable callbacks and adapter state in checkpoint
+ - Serialize type[BaseModel] fields as JSON schema in checkpoint
+ - Avoid orphan task_started on resume scope restore
+ - Allow AgentExecutor to restore from checkpoint
+ - Correct mongodb typo to pymongo in package_dependencies
+
+ ### Documentation
+ - Add ACP (Beta) docs navigation block to Agent Control Plane pages
+ - Remove consensual process references from processes page
+ - Restructure checkpointing page
+ - Document one-time admin package install step
+ - Migrate Secrets Manager / Workload Identity from replicated-config
+ - Remove `{" "}` JSX expressions breaking `` render
+
+ ### Refactoring
+ - Move Skills Repository to experimental + CREWAI_EXPERIMENTAL gate
+
+ ## Contributors
+
+ @akaKuruma, @alex-clawd, @github-actions[bot], @greysonlalonde, @heitorado, @iris-clawd, @lorenzejay, @lucasgomide, @mattatcha, @thiagomoretto, @vinibrsl
+
+
+
+
+ ## v1.14.6a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.6a2)
+
+ ## What's Changed
+
+ ### Features
+ - Enhance `StdioTransport` to prevent environment variable leakage
+ - Enhance planning configuration and observation handling
+ - Declare `env_vars` on `DatabricksQueryTool`
+ - Add Agent Control Plane documentation
+
+ ### Bug Fixes
+ - Fix structured output leaks in tool-calling loops
+ - Drop unroundtrippable callbacks and adapter state in checkpointing
+ - Serialize `type[BaseModel]` fields as JSON schema in checkpointing
+ - Avoid orphan `task_started` on resume scope restore
+ - Allow `AgentExecutor` to restore from checkpoint
+ - Correct MongoDB typo to `pymongo` in package dependencies
+
+ ### Documentation
+ - Restructure checkpointing page
+ - Document one-time admin package install step
+ - Migrate Secrets Manager / Workload Identity from replicated-config
+ - Remove Skills Repository entry from changelog
+
+ ## Contributors
+
+ @github-actions[bot], @greysonlalonde, @heitorado, @iris-clawd, @lorenzejay, @lucasgomide, @mattatcha, @thiagomoretto, @vinibrsl
+
+
+
+
+ ## v1.14.6a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.6a1)
+
+ ## What's Changed
+
+ ### Features
+ - Generate categorized release notes for enterprise
+
+ ### Bug Fixes
+ - Harden RuntimeState serialization across entity fields
+ - Bump idna to 3.15 to address security issue GHSA-65pc-fj4g-8rjx
+ - Remove `{" "}` JSX expressions breaking `` render
+
+ ### Documentation
+ - Update changelog and version for v1.14.5
+
+ ## Contributors
+
+ @akaKuruma, @alex-clawd, @greysonlalonde
+
+
+
+
+ ## v1.14.5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5)
+
+ ## What's Changed
+
+ ### Features
+ - Deprecate `CrewAgentExecutor`, default Crew agents to `AgentExecutor`
+ - Improve Daytona sandbox tools
+ - Add `restore_from_state_id` kickoff parameter
+ - Add highlights to `ExaSearchTool`, rename from `EXASearchTool`
+
+ ### Bug Fixes
+ - Fix memory leak in `git.py` by using `cached_property`
+ - Surface streamed tool calls when `available_functions` is absent
+ - Ensure `skills` loading events for traces
+ - Correct status endpoint path from `/{kickoff_id}/status` to `/status/{kickoff_id}`
+ - Restore missing code block in pt-BR first-flow guide
+ - Prevent `result_as_answer` from returning hook-block or error messages as final answer
+ - Preserve task outputs across async batch flush
+ - Always restore `task.output_pydantic` in finally block
+ - Handle `BaseModel` input in `convert_to_model`
+
+ ### Documentation
+ - Update changelog and version for v1.14.5
+ - Add OSS upgrade & crew-to-flow migration guide
+ - Document additional env vars for devtools
+ - Add docs for `TavilyGetResearch`
+
+ ### Refactoring
+ - Extract CLI into standalone `crewai-cli` package
+
+ ## Contributors
+
+ @NIK-TIGER-BILL, @akaKuruma, @cgoeppinger, @github-actions[bot], @greysonlalonde, @heitorado, @irfaan101, @iris-clawd, @lorenzejay, @manisrinivasan2k1, @minasami-pr, @mislavivanda, @theCyberTech, @theishangoswami, @wishhyt
+
+
+
+
+ ## v1.14.5a7
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a7)
+
+ ## What's Changed
+
+ ### Documentation
+ - Update changelog and version for v1.14.5a6
+
+ ### Breaking Changes
+ - Deprecate function_calling_llm field
+
+ ## Contributors
+
+ @greysonlalonde, @heitorado
+
+
+
+
+ ## v1.14.5a6
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a6)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix streamed tool calls when available_functions is absent
+ - Bump langsmith dependency to version >=0.8.0 to address GHSA-3644-q5cj-c5c7
+ - Resolve untranslated code block placeholders in Brazilian Portuguese documentation
+
+ ### Documentation
+ - Add documentation for TavilyGetResearch
+ - Update changelog and version for v1.14.5a5
+
+ ## Contributors
+
+ @greysonlalonde, @heitorado, @iris-clawd, @lorenzejay, @manisrinivasan2k1
+
+
+
+
+ ## v1.14.5a5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a5)
+
+ ## What's Changed
+
+ ### Features
+ - Deprecate CrewAgentExecutor, default Crew agents to AgentExecutor
+ - Improve Daytona sandbox tools
+
+ ### Bug Fixes
+ - Fix missing code block in pt-BR first-flow guide
+ - Log HITL pre-review and distillation failures, add learn_strict
+ - Patch urllib3 for security vulnerabilities
+ - Patch gitpython and langchain-core; ignore unpatched paramiko CVE
+ - Refresh all published workspace packages on uv lock/sync
+
+ ### Documentation
+ - Add migration guide for `inputs.id` to `restoreFromStateId`
+ - Add OSS upgrade and crew-to-flow migration guide
+ - Update changelog and version for v1.14.5a4
+
+ ## Contributors
+
+ @akaKuruma, @greysonlalonde, @iris-clawd, @lorenzejay, @mislavivanda
+
+
+
+
+ ## v1.14.5a4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a4)
+
+ ## What's Changed
+
+ ### Features
+ - Update LLM listings
+
+ ### Bug Fixes
+ - Fix dependency issue by moving `textual` to `crewai-cli` and adding `certifi`
+
+ ### Documentation
+ - Update changelog and version for v1.14.5a3
+
+ ## Contributors
+
+ @cgoeppinger, @greysonlalonde
+
+
+
+
+ ## v1.14.5a3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a3)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix status endpoint path from /{kickoff_id}/status to /status/{kickoff_id}
+ - Bump gitpython dependency to version >=3.1.47 for security compliance
+
+ ### Refactoring
+ - Extract CLI into standalone crewai-cli package
+
+ ### Documentation
+ - Update changelog and version for v1.14.5a2
+
+ ## Contributors
+
+ @greysonlalonde, @iris-clawd
+
+
+
+
+ ## v1.14.5a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a2)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix task output restoration in finally block
+ - Include `thoughts_token_count` in completion tokens
+ - Preserve task outputs across async batch flush
+ - Forward kwargs to loader calls in `CrewAIRagAdapter`
+ - Prevent `result_as_answer` from returning hook-block message as final answer
+ - Prevent `result_as_answer` from returning error as final answer
+ - Use `acall` for output conversion in async paths
+ - Prevent shared LLM stop words mutation across agents
+ - Handle `BaseModel` input in `convert_to_model`
+
+ ### Documentation
+ - Document additional environment variables
+ - Update changelog and version for v1.14.5a1
+
+ ## Contributors
+
+ @NIK-TIGER-BILL, @greysonlalonde, @lorenzejay, @minasami-pr, @theCyberTech, @wishhyt
+
+
+
+
+ ## v1.14.5a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.5a1)
+
+ ## What's Changed
+
+ ### Features
+ - Add `restore_from_state_id` kickoff parameter
+ - Add highlights to ExaSearchTool and rename from EXASearchTool
+
+ ### Bug Fixes
+ - Fix missing crewai pin sites in release flow
+ - Ensure skills loading events for traces
+
+ ### Documentation
+ - Update changelog and version for v1.14.4
+
+ ## Contributors
+
+ @akaKuruma, @github-actions[bot], @greysonlalonde, @lorenzejay, @theishangoswami
+
+
+
+
+ ## v1.14.4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.4)
+
+ ## What's Changed
+
+ ### Features
+ - Add support for custom persistence key in @persist
+ - Add Responses API support for Azure OpenAI provider
+ - Forward credential_scopes to Azure AI Inference client
+ - Add Vertex AI workload identity setup guide
+ - Add Tavily Research and get Research
+ - Add You.com MCP tools for search, research, and content extraction
+
+ ### Bug Fixes
+ - Fix fall through when JSON regex match isn't valid JSON
+ - Fix to preserve tool_calls when response also contains text
+ - Fix to forward base_url and api_key to instructor.from_provider
+ - Fix to warn and return empty when native MCP server returns no tools
+ - Fix to use validated messages variable in non-streaming handlers
+ - Fix to guard crew chat description helpers against LLM failures
+ - Fix to reset messages and iterations between invocations
+ - Fix to forward trained-agents file through replay and test
+ - Fix to honor custom trained-agents file at inference
+ - Fix to bind task-only agents to crew for multimodal input_files
+ - Fix to serialize guardrail callables as null for JSON checkpointing
+ - Fix renaming of force_final_answer to avoid self-referential router
+ - Fix bump of litellm for SSTI fix; ignore unfixable pip CVE
+
+ ### Documentation
+ - Update changelog and version for v1.14.4a1
+ - Add E2B Sandbox Tools page
+ - Add Daytona sandbox tools documentation
+
+ ## Contributors
+
+ @EdwardIrby, @dependabot[bot], @factory-droid-oss, @factory-droid[bot], @greysonlalonde, @kunalk16, @lorenzejay, @lucasgomide, @manisrinivasan2k1, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.14.4a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.4a1)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix crew chat description helpers against LLM failures.
+ - Reset messages and iterations between invocations in executor.
+ - Forward trained-agents file through replay and test in CLI.
+ - Honor custom trained-agents file at inference in agent.
+ - Bind task-only agents to crew to ensure multimodal input_files reach the LLM.
+ - Serialize guardrail callables as null for JSON checkpointing.
+ - Rename `force_final_answer` in agent_executor to avoid self-referential router.
+ - Bump `litellm` for SSTI fix and ignore unfixable pip CVE.
+
+ ### Documentation
+ - Add E2B Sandbox Tools page.
+ - Add Daytona sandbox tools documentation.
+ - Add Vertex AI workload identity setup guide.
+ - Add You.com MCP tools for search, research, and content extraction.
+ - Update changelog and version for v1.14.3.
+
+ ## Contributors
+
+ @EdwardIrby, @dependabot[bot], @factory-droid-oss, @factory-droid[bot], @greysonlalonde, @lorenzejay, @manisrinivasan2k1, @mattatcha
+
+
+
+
+ ## v1.14.3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.3)
+
+ ## What's Changed
+
+ ### Features
+ - Add lifecycle events for checkpoint operations
+ - Add support for e2b
+ - Fall back to DefaultAzureCredential when no API key is provided in Azure integration
+ - Add Bedrock V4 support
+ - Add Daytona sandbox tools for enhanced functionality
+ - Add checkpoint and fork support to standalone agents
+
+ ### Bug Fixes
+ - Fix execution_id to be separate from state.id
+ - Resolve replay of recorded method events on checkpoint resume
+ - Fix serialization of initial_state class references as JSON schema
+ - Preserve metadata-only agent skills
+ - Propagate implicit @CrewBase names to crew events
+ - Merge execution metadata on duplicate batch initialization
+ - Fix serialization of Task class-reference fields for checkpointing
+ - Handle BaseModel result in guardrail retry loop
+ - Preserve thought_signature in Gemini streaming tool calls
+ - Emit task_started on fork resume and redesign checkpoint TUI
+ - Use future dates in checkpoint prune tests to prevent time-dependent failures
+ - Fix dry-run order and handle checked-out stale branch in devtools release
+ - Upgrade lxml to >=6.1.0 for security patch
+ - Bump python-dotenv to >=1.2.2 for security patch
+
+ ### Documentation
+ - Update changelog and version for v1.14.3
+ - Add 'Build with AI' page and update navigation for all languages
+ - Remove pricing FAQ from build-with-ai page across all locales
+
+ ### Performance
+ - Optimize MCP SDK and event types to reduce cold start by ~29%
+
+ ### Refactoring
+ - Refactor checkpoint helpers to eliminate duplication and tighten state type hints
+
+ ## Contributors
+
+ @MatthiasHowellYopp, @akaKuruma, @alex-clawd, @github-actions[bot], @github-advanced-security[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @mattatcha, @renatonitta
+
+
+
+
+ ## v1.14.3a3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.3a3)
+
+ ## What's Changed
+
+ ### Features
+ - Add support for e2b
+ - Implement fallback to DefaultAzureCredential when no API key is provided
+
+ ### Bug Fixes
+ - Upgrade lxml to >=6.1.0 to address security issue GHSA-vfmq-68hx-4jfw
+
+ ### Documentation
+ - Remove pricing FAQ from build-with-ai page across all locales
+
+ ### Performance
+ - Improve cold start time by ~29% through lazy-loading of MCP SDK and event types
+
+ ## Contributors
+
+ @alex-clawd, @github-advanced-security[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @mattatcha
+
+
+
+
+ ## v1.14.3a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.3a2)
+
+ ## What's Changed
+
+ ### Features
+ - Add support for bedrock V4
+ - Add Daytona sandbox tools for enhanced functionality
+ - Add 'Build with AI' page — AI-native docs for coding agents
+ - Add Build with AI to Get Started navigation and page files for all languages (en, ko, pt-BR, ar)
+
+ ### Bug Fixes
+ - Fix propagation of implicit @CrewBase names to crew events
+ - Resolve issue with duplicate batch initialization in execution metadata merge
+ - Fix serialization of Task class-reference fields for checkpointing
+ - Handle BaseModel result in guardrail retry loop
+ - Bump python-dotenv to version >=1.2.2 for security compliance
+
+ ### Documentation
+ - Update changelog and version for v1.14.3a1
+ - Update descriptions and apply actual translations
+
+ ## Contributors
+
+ @MatthiasHowellYopp, @github-actions[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @renatonitta
+
+
+
+
+ ## v1.14.3a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.3a1)
+
+ ## What's Changed
+
+ ### Features
+ - Add checkpoint and fork support to standalone agents
+
+ ### Bug Fixes
+ - Preserve thought_signature in Gemini streaming tool calls
+ - Emit task_started on fork resume and redesign checkpoint TUI
+ - Correct dry-run order and handle checked-out stale branch in devtools release
+ - Use future dates in checkpoint prune tests to prevent time-dependent failures (#5543)
+
+ ### Documentation
+ - Update changelog and version for v1.14.2
+
+ ## Contributors
+
+ @alex-clawd, @greysonlalonde
+
+
+
+
+ ## v1.14.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2)
+
+ ## What's Changed
+
+ ### Features
+ - Add checkpoint resume, diff, and prune commands with improved discoverability.
+ - Add `from_checkpoint` parameter to `Agent.kickoff` and related methods.
+ - Add template management commands for project templates.
+ - Add resume hints to devtools release on failure.
+ - Add deploy validation CLI and enhance LLM initialization ergonomics.
+ - Add checkpoint forking with lineage tracking.
+ - Enrich LLM token tracking with reasoning tokens and cache creation tokens.
+
+ ### Bug Fixes
+ - Fix prompt on stale branch conflicts in devtools release.
+ - Patch vulnerabilities in `authlib`, `langchain-text-splitters`, and `pypdf`.
+ - Scope streaming handlers to prevent cross-run chunk contamination.
+ - Dispatch Flow checkpoints through Flow APIs in TUI.
+ - Use recursive glob for JSON checkpoint discovery.
+ - Handle cyclic JSON schemas in MCP tool resolution.
+ - Preserve Bedrock tool call arguments by removing truthy default.
+ - Emit flow_finished event after HITL resume.
+ - Fix various vulnerabilities by updating dependencies, including `requests`, `cryptography`, and `pytest`.
+ - Fix to stop forwarding strict mode to Bedrock Converse API.
+
+ ### Documentation
+ - Document missing parameters and add Checkpointing section.
+ - Update changelog and version for v1.14.2 and previous release candidates.
+ - Add enterprise A2A feature documentation and update OSS A2A docs.
+
+ ## Contributors
+
+ @Yanhu007, @alex-clawd, @github-actions[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @lucasgomide
+
+
+
+
+ ## v1.14.2rc1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2rc1)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix handling of cyclic JSON schemas in MCP tool resolution
+ - Fix vulnerability by bumping python-multipart to 0.0.26
+ - Fix vulnerability by bumping pypdf to 6.10.1
+
+ ### Documentation
+ - Update changelog and version for v1.14.2a5
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.2a5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a5)
+
+ ## What's Changed
+
+ ### Documentation
+ - Update changelog and version for v1.14.2a4
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.2a4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a4)
+
+ ## What's Changed
+
+ ### Features
+ - Add resume hints to devtools release on failure
+
+ ### Bug Fixes
+ - Fix strict mode forwarding to Bedrock Converse API
+ - Fix pytest version to 9.0.3 for security vulnerability GHSA-6w46-j5rx-g56g
+ - Bump OpenAI lower bound to >=2.0.0
+
+ ### Documentation
+ - Update changelog and version for v1.14.2a3
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.2a3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a3)
+
+ ## What's Changed
+
+ ### Features
+ - Add deploy validation CLI
+ - Improve LLM initialization ergonomics
+
+ ### Bug Fixes
+ - Override pypdf and uv to patched versions for CVE-2026-40260 and GHSA-pjjw-68hj-v9mw
+ - Upgrade requests to >=2.33.0 for CVE temp file vulnerability
+ - Preserve Bedrock tool call arguments by removing truthy default
+ - Sanitize tool schemas for strict mode
+ - Deflake MemoryRecord embedding serialization test
+
+ ### Documentation
+ - Clean up enterprise A2A language
+ - Add enterprise A2A feature documentation
+ - Update OSS A2A documentation
+ - Update changelog and version for v1.14.2a2
+
+ ## Contributors
+
+ @Yanhu007, @greysonlalonde
+
+
+
+
+ ## v1.14.2a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a2)
+
+ ## What's Changed
+
+ ### Features
+ - Add checkpoint TUI with tree view, fork support, and editable inputs/outputs
+ - Enrich LLM token tracking with reasoning tokens and cache creation tokens
+ - Add `from_checkpoint` parameter to kickoff methods
+ - Embed `crewai_version` in checkpoints with migration framework
+ - Add checkpoint forking with lineage tracking
+
+ ### Bug Fixes
+ - Fix strict mode forwarding to Anthropic and Bedrock providers
+ - Harden NL2SQLTool with read-only default, query validation, and parameterized queries
+
+ ### Documentation
+ - Update changelog and version for v1.14.2a1
+
+ ## Contributors
+
+ @alex-clawd, @github-actions[bot], @greysonlalonde, @lucasgomide
+
+
+
+
+ ## v1.14.2a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.2a1)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix emission of flow_finished event after HITL resume
+ - Fix cryptography version to 46.0.7 to address CVE-2026-39892
+
+ ### Refactoring
+ - Refactor to use shared I18N_DEFAULT singleton
+
+ ### Documentation
+ - Update changelog and version for v1.14.1
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.14.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.1)
+
+ ## What's Changed
+
+ ### Features
+ - Add async checkpoint TUI browser
+ - Add aclose()/close() and async context manager to streaming outputs
+
+ ### Bug Fixes
+ - Fix regex for template pyproject.toml version bumps
+ - Sanitize tool names in hook decorator filters
+ - Fix checkpoint handlers registration when CheckpointConfig is created
+ - Bump transformers to 5.5.0 to resolve CVE-2026-1839
+ - Remove FilteredStream stdout/stderr wrapper
+
+ ### Documentation
+ - Update changelog and version for v1.14.1rc1
+
+ ### Refactoring
+ - Replace hardcoded denylist with dynamic BaseTool field exclusion in spec gen
+ - Replace regex with tomlkit in devtools CLI
+ - Use shared PRINTER singleton
+ - Make BaseProvider a BaseModel with provider_type discriminator
+
+ ## Contributors
+
+ @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay
+
+
+
+
+ ## v1.14.1rc1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.1rc1)
+
+ ## What's Changed
+
+ ### Features
+ - Add async checkpoint TUI browser
+ - Add aclose()/close() and async context manager to streaming outputs
+
+ ### Bug Fixes
+ - Fix template pyproject.toml version bumps using regex
+ - Sanitize tool names in hook decorator filters
+ - Bump transformers to 5.5.0 to resolve CVE-2026-1839
+ - Register checkpoint handlers when CheckpointConfig is created
+
+ ### Refactoring
+ - Replace hardcoded denylist with dynamic BaseTool field exclusion in spec gen
+ - Replace regex with tomlkit in devtools CLI
+ - Use shared PRINTER singleton
+ - Make BaseProvider a BaseModel with provider_type discriminator
+ - Remove FilteredStream stdout/stderr wrapper
+ - Remove unused flow/config.py
+
+ ### Documentation
+ - Update changelog and version for v1.14.0
+
+ ## Contributors
+
+ @greysonlalonde, @iris-clawd, @joaomdmoura
+
+
+
+
+ ## v1.14.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add checkpoint list/info CLI commands
+ - Add guardrail_type and name to distinguish traces
+ - Add SqliteProvider for checkpoint storage
+ - Add CheckpointConfig for automatic checkpointing
+ - Implement runtime state checkpointing, event system, and executor refactor
+
+ ### Bug Fixes
+ - Add SSRF and path traversal protections
+ - Add path and URL validation to RAG tools
+ - Exclude embedding vectors from memory serialization to save tokens
+ - Ensure output directory exists before writing in flow template
+ - Bump litellm to >=1.83.0 to address CVE-2026-35030
+ - Remove SEO indexing field causing Arabic page rendering
+
+ ### Documentation
+ - Update changelog and version for v1.14.0
+ - Update quickstart and installation guides for improved clarity
+ - Add storage providers section, export JsonProvider
+ - Add AMP Training Tab guide
+
+ ### Refactoring
+ - Clean up checkpoint API
+ - Remove CodeInterpreterTool and deprecate code execution parameters
+
+ ## Contributors
+
+ @alex-clawd, @github-actions[bot], @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay, @lucasgomide
+
+
+
+
+ ## v1.14.0a4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.0a4)
+
+ ## What's Changed
+
+ ### Features
+ - Add guardrail_type and name to distinguish traces
+ - Add SqliteProvider for checkpoint storage
+ - Add CheckpointConfig for automatic checkpointing
+ - Implement runtime state checkpointing, event system, and executor refactor
+
+ ### Bug Fixes
+ - Exclude embedding vectors from memory serialization to save tokens
+ - Bump litellm to >=1.83.0 to address CVE-2026-35030
+
+ ### Documentation
+ - Update quickstart and installation guides for improved clarity
+ - Add storage providers section and export JsonProvider
+
+ ### Performance
+ - Use JSONB for checkpoint data column
+
+ ### Refactoring
+ - Remove CodeInterpreterTool and deprecate code execution params
+
+ ## Contributors
+
+ @alex-clawd, @github-actions[bot], @greysonlalonde, @joaomdmoura, @lorenzejay, @lucasgomide
+
+
+
+
+ ## v1.14.0a3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.0a3)
+
+ ## What's Changed
+
+ ### Documentation
+ - Update changelog and version for v1.14.0a2
+
+ ## Contributors
+
+ @joaomdmoura
+
+
+
+
+ ## v1.14.0a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.14.0a2)
+
+ Release 1.14.0a2
+
+
+
+
+ ## v1.13.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add RuntimeState RootModel for unified state serialization
+ - Enhance event listener with new telemetry spans for skill and memory events
+ - Add A2UI extension with v0.8/v0.9 support, schemas, and docs
+ - Emit token usage data in LLMCallCompletedEvent
+ - Auto-update deployment test repo during release
+ - Improve enterprise release resilience and UX
+
+ ### Bug Fixes
+ - Add tool repository credentials to crewai install
+ - Add tool repository credentials to uv build in tool publish
+ - Pass fingerprint metadata via config instead of tool args
+ - Handle GPT-5.x models not supporting the `stop` API parameter
+ - Add GPT-5 and o-series to multimodal vision prefixes
+ - Bust uv cache for freshly published packages in enterprise release
+ - Cap lancedb below 0.30.1 for Windows compatibility
+ - Fix RBAC permission levels to match actual UI options
+ - Fix inaccuracies in agent-capabilities across all languages
+
+ ### Documentation
+ - Add coding agent skills demo video to getting started pages
+ - Add comprehensive SSO configuration guide
+ - Add comprehensive RBAC permissions matrix and deployment guide
+ - Update changelog and version for v1.13.0
+
+ ### Performance
+ - Reduce framework overhead with lazy event bus, skip tracing when disabled
+
+ ### Refactoring
+ - Convert Flow to Pydantic BaseModel
+ - Convert LLM classes to Pydantic BaseModel
+ - Replace InstanceOf[T] with plain type annotations
+ - Remove unused third_party LLM directory
+
+ ## Contributors
+
+ @alex-clawd, @dependabot[bot], @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay, @lucasgomide, @thiagomoretto
+
+
+
+
+ ## v1.13.0a7
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a7)
+
+ ## What's Changed
+
+ ### Features
+ - Add A2UI extension with v0.8/v0.9 support, schemas, and docs
+
+ ### Bug Fixes
+ - Fix multimodal vision prefixes by adding GPT-5 and o-series
+
+ ### Documentation
+ - Update changelog and version for v1.13.0a6
+
+ ## Contributors
+
+ @alex-clawd, @greysonlalonde, @joaomdmoura
+
+
+
+
+ ## v1.13.0a6
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a6)
+
+ ## What's Changed
+
+ ### Documentation
+ - Fix RBAC permission levels to match actual UI options (#5210)
+ - Update changelog and version for v1.13.0a5 (#5200)
+
+ ### Performance
+ - Reduce framework overhead by implementing a lazy event bus and skipping tracing when disabled (#5187)
+
+ ## Contributors
+
+ @alex-clawd, @joaomdmoura, @lucasgomide
+
+
+
+
+ ## v1.13.0a5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a5)
+
+ ## What's Changed
+
+ ### Documentation
+ - Update changelog and version for v1.13.0a4
+
+ ## Contributors
+
+ @greysonlalonde, @joaomdmoura
+
+
+
+
+ ## v1.13.0a4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a4)
+
+ ## What's Changed
+
+ ### Documentation
+ - Update changelog and version for v1.13.0a3
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.13.0a3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a3)
+
+ ## What's Changed
+
+ ### Features
+ - Emit token usage data in LLMCallCompletedEvent
+ - Extract and publish tool metadata to AMP
+
+ ### Bug Fixes
+ - Handle GPT-5.x models not supporting the `stop` API parameter
+
+ ### Documentation
+ - Fix inaccuracies in agent-capabilities across all languages
+ - Add Agent Capabilities overview and improve Skills documentation
+ - Add comprehensive SSO configuration guide
+ - Update changelog and version for v1.13.0rc1
+
+ ### Refactoring
+ - Convert Flow to Pydantic BaseModel
+ - Convert LLM classes to Pydantic BaseModel
+ - Replace InstanceOf[T] with plain type annotations
+ - Remove unused methods
+
+ ## Contributors
+
+ @dependabot[bot], @greysonlalonde, @iris-clawd, @lorenzejay, @lucasgomide, @thiagomoretto
+
+
+
+
+ ## v1.13.0rc1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0rc1)
+
+ ## What's Changed
+
+ ### Documentation
+ - Update changelog and version for v1.13.0a2
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.13.0a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a2)
+
+ ## What's Changed
+
+ ### Features
+ - Auto-update deployment test repo during release
+ - Improve enterprise release resilience and UX
+
+ ### Documentation
+ - Update changelog and version for v1.13.0a1
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.13.0a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.13.0a1)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix broken links in documentation workflow by pinning Node to LTS 22
+ - Bust the uv cache for freshly published packages in enterprise release
+
+ ### Documentation
+ - Add comprehensive RBAC permissions matrix and deployment guide
+ - Update changelog and version for v1.12.2
+
+ ## Contributors
+
+ @greysonlalonde, @iris-clawd, @joaomdmoura
+
+
+
+
+ ## v1.12.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.2)
+
+ ## What's Changed
+
+ ### Features
+ - Add enterprise release phase to devtools release
+
+ ### Bug Fixes
+ - Preserve method return value as flow output for @human_feedback with emit
+
+ ### Documentation
+ - Update changelog and version for v1.12.1
+ - Revise security policy and reporting instructions
+
+ ## Contributors
+
+ @alex-clawd, @greysonlalonde, @joaomdmoura, @theCyberTech
+
+
+
+
+ ## v1.12.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.1)
+
+ ## What's Changed
+
+ ### Features
+ - Add request_id to HumanFeedbackRequestedEvent
+ - Add Qdrant Edge storage backend for memory system
+ - Add docs-check command to analyze changes and generate docs with translations
+ - Add Arabic language support to changelog and release tooling
+ - Add modern standard Arabic translation of all documentation
+ - Add logout command in CLI
+ - Add agent skills
+ - Implement automatic root_scope for hierarchical memory isolation
+ - Implement native OpenAI-compatible providers (OpenRouter, DeepSeek, Ollama, vLLM, Cerebras, Dashscope)
+
+ ### Bug Fixes
+ - Fix bad credentials for traces batch push (404)
+ - Resolve multiple bugs in HITL flow system
+ - Fix agent memory saving
+ - Resolve all strict mypy errors across crewai package
+ - Fix use of __router_paths__ for listener+router methods in FlowMeta
+ - Fix value error on no file support
+ - Correct litellm quarantine wording in docs
+ - Fix all mypy errors in crewai-files and add all packages to CI type checks
+ - Pin litellm upper bound to last tested version (1.82.6)
+
+ ### Documentation
+ - Update changelog and version for v1.12.0
+ - Add CONTRIBUTING.md
+ - Add guide for using CrewAI without LiteLLM
+
+ ## Contributors
+
+ @akaKuruma, @alex-clawd, @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay, @lucasgomide, @nicoferdi96
+
+
+
+
+ ## v1.12.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add Qdrant Edge storage backend for memory system
+ - Add docs-check command to analyze changes and generate docs with translations
+ - Add Arabic language support to changelog and release tooling
+ - Add modern standard Arabic translation of all documentation
+ - Add logout command in CLI
+ - Implement agent skills
+ - Implement automatic root_scope for hierarchical memory isolation
+ - Implement native OpenAI-compatible providers (OpenRouter, DeepSeek, Ollama, vLLM, Cerebras, Dashscope)
+
+ ### Bug Fixes
+ - Fix bad credentials for traces batch push (404)
+ - Resolve multiple bugs in HITL flow system
+ - Resolve mypy errors in crewai-files and add all packages to CI type checks
+ - Resolve all strict mypy errors across crewai-tools package
+ - Resolve all mypy errors across crewai package
+ - Fix memory saving in agent
+ - Fix usage of __router_paths__ for listener+router methods in FlowMeta
+ - Raise value error on no file support
+ - Correct litellm quarantine wording in docs
+ - Use None check instead of isinstance for memory in human feedback learn
+ - Pin litellm upper bound to last tested version (1.82.6)
+
+ ### Documentation
+ - Update changelog and version for v1.12.0
+ - Add CONTRIBUTING.md
+ - Add guide for using CrewAI without LiteLLM
+
+ ### Refactoring
+ - Refactor to deduplicate sync/async task execution and kickoff in agent
+ - Simplify internal plumbing from litellm (token counting, callbacks, feature detection, errors)
+
+ ## Contributors
+
+ @akaKuruma, @alex-clawd, @greysonlalonde, @iris-clawd, @joaomdmoura, @lorenzejay, @nicoferdi96
+
+
+
+
+ ## v1.12.0a3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.0a3)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix bad credentials for traces batch push (404)
+ - Resolve multiple bugs in HITL flow system
+
+ ### Documentation
+ - Update changelog and version for v1.12.0a2
+
+ ## Contributors
+
+ @akaKuruma, @greysonlalonde
+
+
+
+
+ ## v1.12.0a2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.0a2)
+
+ ## What's Changed
+
+ ### Features
+ - Add Qdrant Edge storage backend for memory system
+
+ ### Documentation
+ - Update changelog and version for v1.12.0a1
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.12.0a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.12.0a1)
+
+ ## What's Changed
+
+ ### Features
+ - Add docs-check command to analyze changes and generate docs with translations
+ - Add Arabic language support to changelog and release tooling
+ - Add modern standard Arabic translation of all documentation
+ - Add native OpenAI-compatible providers (OpenRouter, DeepSeek, Ollama, vLLM, Cerebras, Dashscope)
+ - Add agent skills
+ - Add logout command in CLI
+ - Implement automatic root_scope for hierarchical memory isolation
+
+ ### Bug Fixes
+ - Fix agent memory saving
+ - Resolve mypy errors in crewai-files and add all packages to CI type checks
+ - Resolve all strict mypy errors across crewai-tools package
+ - Resolve all mypy errors across crewai package
+ - Fix usage of __router_paths__ for listener+router methods in FlowMeta
+ - Pin litellm upper bound to last tested version (1.82.6)
+ - Raise value error on no file support
+ - Correct litellm quarantine wording in docs
+
+ ### Documentation
+ - Add CONTRIBUTING.md
+ - Add guide for using CrewAI without LiteLLM
+ - Update changelog and version for v1.11.1
+
+ ### Refactoring
+ - Refactor to deduplicate sync/async task execution and kickoff in agent
+ - Decouple internal plumbing from litellm (token counting, callbacks, feature detection, errors)
+
+ ## Contributors
+
+ @alex-clawd, @greysonlalonde, @iris-clawd, @lorenzejay, @nicoferdi96
+
+
+
+
+ ## v1.11.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.11.1)
+
+ ## What's Changed
+
+ ### Features
+ - Add flow_structure() serializer for Flow class introspection.
+
+ ### Bug Fixes
+ - Fix security vulnerabilities by bumping pypdf, tinytag, and langchain-core.
+ - Preserve full LLM config across HITL resume for non-OpenAI providers.
+ - Prevent path traversal in FileWriterTool.
+ - Fix lock_store crash when redis package is not installed.
+ - Pass cache_function from BaseTool to CrewStructuredTool.
+
+ ### Documentation
+ - Add publish custom tools guide with translations.
+ - Update changelog and version for v1.11.0.
+ - Add missing event listeners documentation.
+
+ ### Refactoring
+ - Replace urllib with requests in pdf loader.
+ - Replace Any-typed callback and model fields with serializable types.
+
+ ## Contributors
+
+ @alex-clawd, @danielfsbarreto, @dependabot[bot], @greysonlalonde, @lorenzejay, @lucasgomide, @mattatcha, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.11.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.11.0)
+
+ ## What's Changed
+
+ ### Documentation
+ - Update changelog and version for v1.11.0rc2
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.11.0rc2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.11.0rc2)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Enhance LLM response handling and serialization.
+ - Upgrade vulnerable transitive dependencies (authlib, PyJWT, snowflake-connector-python).
+ - Replace `os.system` with `subprocess.run` in unsafe mode pip install.
+
+ ### Documentation
+ - Update Exa Search Tool page with improved naming, description, and configuration options.
+ - Add Custom MCP Servers in How-To Guide.
+ - Update OTEL collectors documentation.
+ - Update MCP documentation.
+ - Update changelog and version for v1.11.0rc1.
+
+ ## Contributors
+
+ @10ishq, @greysonlalonde, @joaomdmoura, @lucasgomide, @mattatcha, @theCyberTech, @vinibrsl
+
+
+
+
+ ## v1.11.0rc1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.11.0rc1)
+
+ ## What's Changed
+
+ ### Features
+ - Add Plus API token authentication in a2a
+ - Implement plan execute pattern
+
+ ### Bug Fixes
+ - Resolve code interpreter sandbox escape issue
+
+ ### Documentation
+ - Update changelog and version for v1.10.2rc2
+
+ ## Contributors
+
+ @Copilot, @greysonlalonde, @lorenzejay, @theCyberTech
+
+
+
+
+ ## v1.10.2rc2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.2rc2)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Remove exclusive locks from read-only storage operations
+
+ ### Documentation
+ - Update changelog and version for v1.10.2rc1
+
+ ## Contributors
+
+ @greysonlalonde
+
+
+
+
+ ## v1.10.2rc1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.2rc1)
+
+ ## What's Changed
+
+ ### Features
+ - Add release command and trigger PyPI publish
+
+ ### Bug Fixes
+ - Fix cross-process and thread-safe locking to unprotected I/O
+ - Propagate contextvars across all thread and executor boundaries
+ - Propagate ContextVars into async task threads
+
+ ### Documentation
+ - Update changelog and version for v1.10.2a1
+
+ ## Contributors
+
+ @danglies007, @greysonlalonde
+
+
+
+
+ ## v1.10.2a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.2a1)
+
+ ## What's Changed
+
+ ### Features
+ - Add support for tool search, saving tokens, and dynamically injecting appropriate tools during execution for Anthropics.
+ - Introduce more Brave Search tools.
+ - Create action for nightly releases.
+
+ ### Bug Fixes
+ - Fix LockException under concurrent multi-process execution.
+ - Resolve issues with grouping parallel tool results in a single user message.
+ - Address MCP tools resolutions and eliminate all shared mutable connections.
+ - Update LLM parameter handling in the human_feedback function.
+ - Add missing list/dict methods to LockedListProxy and LockedDictProxy.
+ - Propagate contextvars context to parallel tool call threads.
+ - Bump gitpython dependency to >=3.1.41 to resolve CVE path traversal vulnerability.
+
+ ### Refactoring
+ - Refactor memory classes to be serializable.
+
+ ### Documentation
+ - Update changelog and version for v1.10.1.
+
+ ## Contributors
+
+ @akaKuruma, @github-actions[bot], @giulio-leone, @greysonlalonde, @joaomdmoura, @jonathansampson, @lorenzejay, @lucasgomide, @mattatcha
+
+
+
+
+ ## v1.10.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.1)
+
+ ## What's Changed
+
+ ### Features
+ - Upgrade Gemini GenAI
+
+ ### Bug Fixes
+ - Adjust executor listener value to avoid recursion
+ - Group parallel function response parts in a single Content object in Gemini
+ - Surface thought output from thinking models in Gemini
+ - Load MCP and platform tools when agent tools are None
+ - Support Jupyter environments with running event loops in A2A
+ - Use anonymous ID for ephemeral traces
+ - Conditionally pass plus header
+ - Skip signal handler registration in non-main threads for telemetry
+ - Inject tool errors as observations and resolve name collisions
+ - Upgrade pypdf from 4.x to 6.7.4 to resolve Dependabot alerts
+ - Resolve critical and high Dependabot security alerts
+
+ ### Documentation
+ - Sync Composio tool documentation across locales
+
+ ## Contributors
+
+ @giulio-leone, @greysonlalonde, @haxzie, @joaomdmoura, @lorenzejay, @mattatcha, @mplachta, @nicoferdi96
+
+
+
+
+ ## v1.10.1a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.1a1)
+
+ ## What's Changed
+
+ ### Features
+ - Implement asynchronous invocation support in step callback methods
+ - Implement lazy loading for heavy dependencies in Memory module
+
+ ### Documentation
+ - Update changelog and version for v1.10.0
+
+ ### Refactoring
+ - Refactor step callback methods to support asynchronous invocation
+ - Refactor to implement lazy loading for heavy dependencies in Memory module
+
+ ### Bug Fixes
+ - Fix branch for release notes
+
+ ## Contributors
+
+ @greysonlalonde, @joaomdmoura
+
+
+
+
+ ## v1.10.1a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.1a1)
+
+ ## What's Changed
+
+ ### Refactoring
+ - Refactor step callback methods to support asynchronous invocation
+ - Implement lazy loading for heavy dependencies in Memory module
+
+ ### Documentation
+ - Update changelog and version for v1.10.0
+
+ ### Bug Fixes
+ - Make branch for release notes
+
+ ## Contributors
+
+ @greysonlalonde, @joaomdmoura
+
+
+
+
+ ## v1.10.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.10.0)
+
+ ## What's Changed
+
+ ### Features
+ - Enhance MCP tool resolution and related events
+ - Update lancedb version and add lance-namespace packages
+ - Enhance JSON argument parsing and validation in CrewAgentExecutor and BaseTool
+ - Migrate CLI HTTP client from requests to httpx
+ - Add versioned documentation
+ - Add yanked detection for version notes
+ - Implement user input handling in Flows
+ - Enhance HITL self-loop functionality in human feedback integration tests
+ - Add started_event_id and set in eventbus
+ - Auto update tools.specs
+
+ ### Bug Fixes
+ - Validate tool kwargs even when empty to prevent cryptic TypeError
+ - Preserve null types in tool parameter schemas for LLM
+ - Map output_pydantic/output_json to native structured output
+ - Ensure callbacks are ran/awaited if promise
+ - Capture method name in exception context
+ - Preserve enum type in router result; improve types
+ - Fix cyclic flows silently breaking when persistence ID is passed in inputs
+ - Correct CLI flag format from --skip-provider to --skip_provider
+ - Ensure OpenAI tool call stream is finalized
+ - Resolve complex schema $ref pointers in MCP tools
+ - Enforce additionalProperties=false in schemas
+ - Reject reserved script names for crew folders
+ - Resolve race condition in guardrail event emission test
+
+ ### Documentation
+ - Add litellm dependency note for non-native LLM providers
+ - Clarify NL2SQL security model and hardening guidance
+ - Add 96 missing actions across 9 integrations
+
+ ### Refactoring
+ - Refactor crew to provider
+ - Extract HITL to provider pattern
+ - Improve hook typing and registration
+
+ ## Contributors
+
+ @dependabot[bot], @github-actions[bot], @github-code-quality[bot], @greysonlalonde, @heitorado, @hobostay, @joaomdmoura, @johnvan7, @jonathansampson, @lorenzejay, @lucasgomide, @mattatcha, @mplachta, @nicoferdi96, @theCyberTech, @thiagomoretto, @vinibrsl
+
+
+
+
+ ## v1.9.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.9.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add structured outputs and response_format support across providers
+ - Add response ID to streaming responses
+ - Add event ordering with parent-child hierarchies
+ - Add Keycloak SSO authentication support
+ - Add multimodal file handling capabilities
+ - Add native OpenAI responses API support
+ - Add A2A task execution utilities
+ - Add A2A server configuration and agent card generation
+ - Enhance event system and expand transport options
+ - Improve tool calling mechanisms
+
+ ### Bug Fixes
+ - Enhance file store with fallback memory cache when aiocache is not available
+ - Ensure document list is not empty
+ - Handle Bedrock stop sequences properly
+ - Add Google Vertex API key support
+ - Enhance Azure model stop word detection
+ - Improve error handling for HumanFeedbackPending in flow execution
+ - Fix execution span task unlinking
+
+ ### Documentation
+ - Add native file handling documentation
+ - Add OpenAI responses API documentation
+ - Add agent card implementation guidance
+ - Refine A2A documentation
+ - Update changelog for v1.8.0
+
+ ### Contributors
+ @Anaisdg, @GininDenis, @Vidit-Ostwal, @greysonlalonde, @heitorado, @joaomdmoura, @koushiv777, @lorenzejay, @nicoferdi96, @vinibrsl
+
+
+
+
+ ## v1.8.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.8.1)
+
+ ## What's Changed
+
+ ### Features
+ - Add A2A task execution utilities
+ - Add A2A server configuration and agent card generation
+ - Add additional transport mechanisms
+ - Add Galileo integration support
+
+ ### Bug Fixes
+ - Improve Azure model compatibility
+ - Expand frame inspection depth to detect parent_flow
+ - Resolve task execution span management issues
+ - Enhance error handling for human feedback scenarios during flow execution
+
+ ### Documentation
+ - Add A2A agent card documentation
+ - Add PII redaction feature documentation
+
+ ### Contributors
+ @Anaisdg, @GininDenis, @greysonlalonde, @joaomdmoura, @koushiv777, @lorenzejay, @vinibrsl
+
+
+
+
+ ## v1.8.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.8.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add native async chain for a2a
+ - Add a2a update mechanisms (poll/stream/push) with handlers and config
+ - Introduce global flow configuration for human-in-the-loop feedback
+ - Add streaming tool call events and fix provider ID tracking
+ - Introduce production-ready Flows and Crews architecture
+ - Add HITL for Flows
+ - Improve EventListener and TraceCollectionListener for enhanced event handling
+
+ ### Bug Fixes
+ - Handle missing a2a dependency as optional
+ - Correct error fetching for WorkOS login polling
+ - Fix wrong trigger name in sample documentation
+
+ ### Documentation
+ - Update webhook-streaming documentation
+ - Adjust AOP to AMP documentation language
+
+ ### Contributors
+ @Vidit-Ostwal, @greysonlalonde, @heitorado, @joaomdmoura, @lorenzejay, @lucasgomide, @mplachta
+
+
+
+
+ ## v1.7.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.7.2)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Resolve connection issues
+
+ ### Documentation
+ - Update api-reference/status docs page
+
+ ### Contributors
+ @greysonlalonde, @heitorado, @lorenzejay, @lucasgomide
+
+
+
+
+ ## v1.7.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.7.1)
+
+ ## What's Changed
+
+ ### Improvements
+ - Add `--no-commit` flag to bump command
+ - Use JSON schema for tool argument serialization
+
+ ### Bug Fixes
+ - Fix error message display from response when tool repository login fails
+ - Fix graceful termination of future when executing a task asynchronously
+ - Fix task ordering by adding index
+ - Fix platform compatibility checks for Windows signals
+ - Fix RPM controller timer to prevent process hang
+ - Fix token usage recording and validate response model on stream
+
+ ### Documentation
+ - Add translated documentation for async
+ - Add documentation for AOP Deploy API
+ - Add documentation for the agent handler connector
+ - Add documentation on native async
+
+ ### Contributors
+ @Llamrei, @dragosmc, @gilfeig, @greysonlalonde, @heitorado, @lorenzejay, @mattatcha, @vinibrsl
+
+
+
+
+ ## v1.7.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.7.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add async flow kickoff
+ - Add async crew support
+ - Add async task support
+ - Add async knowledge support
+ - Add async memory support
+ - Add async support for tools and agent executor; improve typing and docs
+ - Implement a2a extensions API and async agent card caching; fix task propagation & streaming
+ - Add native async tool support
+ - Add async llm support
+ - Create sys event types and handler
+
+ ### Bug Fixes
+ - Fix issue to ensure nonetypes are not passed to otel
+ - Fix deadlock in token store file operations
+ - Fix to ensure otel span is closed
+ - Use HuggingFaceEmbeddingFunction for embeddings, update keys and add tests
+ - Fix to ensure supports_tools is true for all supported anthropic models
+ - Ensure hooks work with lite agents flows
+
+ ### Contributors
+ @greysonlalonde, @lorenzejay
+
+
+
+
+ ## v1.6.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.6.1)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix ChatCompletionsClient call to ensure proper functionality
+ - Ensure async methods are executable for annotations
+ - Fix parameters in RagTool.add, add typing, and tests
+ - Remove invalid parameter from SSE client
+ - Erase 'oauth2_extra' setting on 'crewai config reset' command
+
+ ### Refactoring
+ - Enhance model validation and provider inference in LLM class
+
+ ### Contributors
+ @Vidit-Ostwal, @greysonlalonde, @heitorado, @lorenzejay
+
+
+
+
+ ## v1.6.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.6.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add streaming result support to flows and crews
+ - Add gemini-3-pro-preview
+ - Support CLI login with Entra ID
+ - Add Merge Agent Handler tool
+ - Enhance flow event state management
+
+ ### Bug Fixes
+ - Ensure custom rag store persist path is set if passed
+ - Ensure fuzzy returns are more strict and show type warning
+ - Re-add openai response_format parameter and add test
+ - Fix rag tool embeddings configuration
+ - Ensure flow execution start panel is not shown on plot
+
+ ### Documentation
+ - Update references from AMP to AOP in documentation
+ - Update AMP to AOP
+
+ ### Contributors
+ @Vidit-Ostwal, @gilfeig, @greysonlalonde, @heitorado, @joaomdmoura, @lorenzejay, @markmcd
+
+
+
+
+ ## v0.203.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.203.2)
+
+ ## What's Changed
+
+ - Hotfix version bump from 0.203.1 to 0.203.2
+
+
+
+
+ ## v1.5.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.5.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add a2a trust remote completion status flag
+ - Fetch and store more data about Okta authorization server
+ - Implement before and after LLM call hooks in CrewAgentExecutor
+ - Expose messages to TaskOutput and LiteAgentOutputs
+ - Enhance schema description of QdrantVectorSearchTool
+
+ ### Bug Fixes
+ - Ensure tracing instrumentation flags are correctly applied
+ - Fix custom tool documentation links and add Mintlify broken links action
+
+ ### Documentation
+ - Enhance task guardrail documentation with LLM-based validation support
+
+ ### Contributors
+ @danielfsbarreto, @greysonlalonde, @heitorado, @lorenzejay, @theCyberTech
+
+
+
+
+ ## v1.4.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.4.1)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Fix handling of agent max iterations
+ - Resolve routing issues for LLM model syntax to respected providers
+
+ ### Contributors
+ @greysonlalonde
+
+
+
+
+ ## v1.4.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.4.0)
+
+ ## What's Changed
+
+ ### Features
+ - Add support for non-AST plot routes
+ - Implement first-class support for MCP
+ - Add Pydantic validation dunder to BaseInterceptor
+ - Add support for LLM message interceptor hooks
+ - Cache i18n prompts for efficient use
+ - Enhance QdrantVectorSearchTool
+
+ ### Bug Fixes
+ - Fix issues with keeping stopwords updated
+ - Resolve unpickleable values in flow state
+ - Ensure lite agents course-correct on validation errors
+ - Fix callback argument hashing to ensure caching works
+ - Allow adding RAG source content from valid URLs
+ - Make plot node selection smoother
+ - Fix duplicating document IDs for knowledge
+
+ ### Refactoring
+ - Improve MCP tool execution handling with concurrent futures
+ - Simplify flow handling, typing, and logging; update UI and tests
+ - Refactor stop word management to a property
+
+ ### Documentation
+ - Migrate embedder to embedding_model and require vectordb across tool docs; add provider examples (en/ko/pt-BR)
+
+ ### Contributors
+ @danielfsbarreto, @greysonlalonde, @lorenzejay, @lucasgomide, @tonykipkemboi
+
+
+
+
+ ## v1.3.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.3.0)
+
+ ## What's Changed
+
+ ### Features
+ - Refactor flow handling, typing, and logging
+ - Enhance QdrantVectorSearchTool
+
+ ### Bug Fixes
+ - Fix Firecrawl tools and add tests
+ - Refactor use_stop_words to property and add check for stop words
+
+ ### Documentation
+ - Migrate embedder to embedding_model and require vectordb across tool docs
+ - Add provider examples in English, Korean, and Portuguese
+
+ ### Refactoring
+ - Improve flow handling and UI updates
+
+ ### Contributors
+ @danielfsbarreto, @greysonlalonde, @lorenzejay, @lucasgomide, @tonykipkemboi
+
+
+
+
+ ## v1.2.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.2.1)
+
+ ## What's Changed
+
+ ### Features
+ - Add support for Datadog integration
+ - Support apps and mcps in liteagent
+
+ ### Documentation
+ - Describe mandatory environment variable for calling Platform tools for each integration
+ - Add Datadog integration documentation
+
+ ### Contributors
+ @barieom, @lorenzejay, @lucasgomide, @sabrenner
+
+
+
+
+ ## v1.2.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.2.0)
+
+ ## What's Changed
+
+ ### Bug Fixes
+ - Update default LLM model and improve error logging in LLM utilities
+ - Change flow visualization directory and method inspection
+
+ ### Dropping Unused
+ - Remove aisuite
+
+ ### Contributors
+ @greysonlalonde, @lorenzejay
+
+
+
+
+ ## v1.1.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.1.0)
+
+ ## What's Changed
+
+ ### Features
+ - Enhance InternalInstructor to support multiple LLM providers
+ - Implement mypy plugin base
+ - Improve QdrantVectorSearchTool
+
+ ### Bug Fixes
+ - Correct broken integration documentation links
+ - Fix double trace call and add types
+ - Pin template versions to latest
+
+ ### Documentation
+ - Update LLM integration details and examples
+
+ ### Refactoring
+ - Improve CrewBase typing
+
+ ### Contributors
+ @cwarre33, @danielfsbarreto, @greysonlalonde, @lorenzejay
+
+
+
+
+ ## v1.0.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.0.0)
+
+ ## What's Changed
+
+ ### Features
+ - Bump versions to 1.0.0
+ - Enhance knowledge and guardrail event handling in Agent class
+ - Inject tool repository credentials in crewai run command
+
+ ### Bug Fixes
+ - Preserve nested condition structure in Flow decorators
+ - Add standard print parameters to Printer.print method
+ - Fix errors when there is no input() available
+ - Add a leeway of 10s when decoding JWT
+ - Revert bad cron schedule
+ - Correct cron schedule to run every 5 days at specific dates
+ - Use system PATH for Docker binary instead of hardcoded path
+ - Add CodeQL configuration to properly exclude template directories
+
+ ### Documentation
+ - Update security policy for vulnerability reporting
+ - Add guide for capturing telemetry logs in CrewAI AMP
+ - Add missing /resume files
+ - Clarify webhook URL parameter in HITL workflows
+
+ ### Contributors
+ @Vidit-Ostwal, @greysonlalonde, @heitorado, @joaomdmoura, @lorenzejay, @lucasgomide, @mplachta, @theCyberTech
+
+
+
+
+ ## v1.0.0b3 (Pre-release)
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.0.0b3)
+
+ ## What's Changed
+
+ ### Features
+ - Enhance task guardrail functionality and validation
+ - Improve support for importing native SDK
+ - Add Azure native tests
+ - Enhance BedrockCompletion class with advanced features
+ - Enhance GeminiCompletion class with client parameter support
+ - Enhance AnthropicCompletion class with additional client parameters
+
+ ### Bug Fixes
+ - Preserve nested condition structure in Flow decorators
+ - Add standard print parameters to Printer.print method
+ - Remove stdout prints and improve test determinism
+
+ ### Refactoring
+ - Convert project module to metaclass with full typing
+
+ ### Contributors
+ @greysonlalonde, @lorenzejay
+
+
+
+
+ ## v1.0.0b2 (Pre-release)
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.0.0b2)
+
+ ## What's Changed
+
+ ### Features
+ - Enhance OpenAICompletion class with additional client parameters
+ - Improve event bus thread safety and async support
+ - Inject tool repository credentials in crewai run command
+
+ ### Bug Fixes
+ - Fix issue where it errors out if there is no input() available
+ - Add a leeway of 10s when decoding JWT
+ - Fix copying and adding NOT_SPECIFIED check in task.py
+
+ ### Documentation
+ - Ensure CREWAI_PLATFORM_INTEGRATION_TOKEN is mentioned in documentation
+ - Update triggers documentation
+
+ ### Contributors
+ @Vidit-Ostwal, @greysonlalonde, @heitorado, @joaomdmoura, @lorenzejay, @lucasgomide
+
+
+
+
+ ## v1.0.0b1 (Pre-release)
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.0.0b1)
+
+ ## What's Changed
+
+ ### Features
+ - Enhance OpenAICompletion class with additional client parameters
+ - Improve event bus thread safety and async support
+ - Implement Bedrock LLM integration
+
+ ### Bug Fixes
+ - Fix issue with missing input() availability
+ - Resolve JWT decoding error by adding a leeway of 10 seconds
+ - Inject tool repository credentials in crewai run command
+ - Fix copy and add NOT_SPECIFIED check in task.py
+
+ ### Documentation
+ - Ensure CREWAI_PLATFORM_INTEGRATION_TOKEN is mentioned in documentation
+ - Update triggers documentation
+
+ ### Contributors
+ @Vidit-Ostwal, @greysonlalonde, @heitorado, @joaomdmoura, @lorenzejay, @lucasgomide
+
+
+
+
+ ## v0.203.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.203.1)
+
+ ## What's Changed
+
+ ### Core Improvements & Fixes
+ - Fixed injection of tool repository credentials into the `crewai run` command
+ - Added a 10-second leeway when decoding JWTs to reduce token validation errors
+ - Corrected (then reverted) cron schedule fix intended to run jobs every 5 days at specific dates
+
+ ### Documentation & Guides
+ - Updated security policy to clarify the process for vulnerability reporting
+
+
+
+
+ ## v1.0.0a4 (Pre-release)
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.0.0a4)
+
+ ## What's Changed
+
+ ### Features
+ - Enhance knowledge and guardrail event handling in Agent class
+ - Introduce trigger listing and execution commands for local development
+ - Update documentation with new approach to consume Platform Actions
+ - Add guide for capturing telemetry logs in CrewAI AMP
+
+ ### Bug Fixes
+ - Revert bad cron schedule
+ - Correct cron schedule to run every 5 days at specific dates
+ - Remove duplicate line and add explicit environment variable
+ - Resolve linting errors across the codebase
+ - Replace print statements with logger in agent and memory handling
+ - Use system PATH for Docker binary instead of hardcoded path
+ - Allow failed PyPI publish
+ - Match tag and release title, ignore devtools build for PyPI
+
+ ### Documentation
+ - Update security policy for vulnerability reporting
+ - Add missing /resume files
+ - Clarify webhook URL parameter in HITL workflows
+
+ ### Contributors
+ @Vidit-Ostwal, @greysonlalonde, @lorenzejay, @lucasgomide, @theCyberTech
+
+
+
+
+ ## v1.0.0a1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/1.0.0a1)
+
+ ## What's Changed
+
+ ### Core Improvements & Fixes
+ - Fixed permission handling for `actions` in agent configuration
+ - Updated CI workflows and release publishing to support the new monorepo structure
+ - Bumped Python support to 3.13 and refreshed workspace metadata
+
+ ### New Features & Enhancements
+ - Added `apps` and `actions` attributes to `Agent` for richer runtime control
+ - Merged the `crewai-tools` repository into the main workspace (monorepo)
+ - Bumped all packages to 1.0.0a1 to mark the alpha milestone
+
+ ### Cleanup & Infrastructure
+ - Delivered a new CI pipeline with version pinning and publishing strategy
+ - Unified internal code to manage multiple packages coherently
+
+
+
+
+ ## v0.201.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.201.1)
+
+ ## What's Changed
+
+ ### Core Improvements & Fixes
+ - Renamed Watson embedding provider to `watsonx` and refreshed environment variable prefixes
+ - Added ChromaDB compatibility for `watsonx` and `voyageai` embedding providers
+
+ ### Cleanup & Deprecations
+ - Standardized environment variable prefixes for all embedding providers
+ - Bumped CrewAI to 0.201.1 and updated internal dependencies
+
+
+
+
+ ## v0.201.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.201.0)
+
+ ## What's Changed
+
+ ### Core Improvements & Fixes
+ - Made the `ready` parameter optional in `_create_reasoning_plan`
+ - Fixed nested config handling for embedder configuration
+ - Added `batch_size` support to avoid token limit errors
+ - Corrected Quickstart documentation directory naming
+ - Resolved test duration cache issues and event exports
+ - Added fallback logic to crew settings
+
+ ### New Features & Enhancements
+ - Introduced thread-safe platform context management
+ - Added `crewai uv` wrapper command to run `uv` from the CLI
+ - Enabled marking traces as failed for observability workflows
+ - Added custom embedding types and provider migration support
+ - Upgraded ChromaDB to v1.1.0 with compatibility fixes and type improvements
+ - Added Pydantic-compatible import validation and reorganized dependency groups
+
+ ### Documentation & Guides
+ - Updated changelog coverage for recent releases (0.193.x series)
+ - Documented metadata support for LLM Guardrail events
+ - Added guidance for fallback behavior and configuration visibility
+
+ ### Cleanup & Deprecations
+ - Resolved Ruff and MyPy issues across modules
+ - Improved type annotations and consolidated utilities
+ - Deprecated legacy utilities in favor of Pydantic-compatible imports
+
+ ### Contributors
+ - @qizwiz (first contribution)
+
+
+
+
+
+ ## v0.193.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.193.2)
+
+ ## What's Changed
+
+ - Updated pyproject templates to use the right version
+
+
+
+
+ ## v0.193.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.193.1)
+
+ ## What's Changed
+
+ - Series of minor fixes and linter improvements
+
+
+
+
+ ## v0.193.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.193.0)
+
+ ## Core Improvements & Fixes
+
+ - Fixed handling of the `model` parameter during OpenAI adapter initialization
+ - Resolved test duration cache issues in CI workflows
+ - Fixed flaky test related to repeated tool usage by agents
+ - Added missing event exports to `__init__.py` for consistent module behavior
+ - Dropped message storage from metadata in Mem0 to reduce bloat
+ - Fixed L2 distance metric support for backward compatibility in vector search
+
+ ## New Features & Enhancements
+
+ - Introduced thread-safe platform context management
+ - Added test duration caching for optimized `pytest-split` runs
+ - Added ephemeral trace improvements for better trace control
+ - Made search parameters for RAG, knowledge, and memory fully configurable
+ - Enabled ChromaDB to use OpenAI API for embedding functions
+ - Added deeper observability tools for user-level insights
+ - Unified RAG storage system with instance-specific client support
+
+ ## Documentation & Guides
+
+ - Updated `RagTool` references to reflect CrewAI native RAG implementation
+ - Improved internal docs for `langgraph` and `openai` agent adapters with type annotations and docstrings
+
+
+
+
+ ## v0.186.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.186.1)
+
+ ## What's Changed
+
+ - Fixed version not being found and silently failing reversion
+ - Bumped CrewAI version to 0.186.1 and updated dependencies in the CLI
+
+
+
+
+ ## v0.186.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.186.0)
+
+ ## What's Changed
+
+ - Refer to the GitHub release notes for detailed changes
+
+
+
+
+ ## v0.177.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.177.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Achieved parity between `rag` package and current implementation
+ - Enhanced LLM event handling with task and agent metadata
+ - Fixed mutable default arguments by replacing them with `None`
+ - Suppressed Pydantic deprecation warnings during initialization
+ - Fixed broken example link in `README.md`
+ - Removed Python 3.12+ only Ruff rules for compatibility
+ - Migrated CI workflows to use `uv` and updated dev tooling
+
+ ## New Features & Enhancements
+
+ - Added tracing improvements and cleanup
+ - Centralized event logic by moving `events` module to `crewai.events`
+
+ ## Documentation & Guides
+
+ - Updated Enterprise Action Auth Token section documentation
+ - Published documentation updates for `v0.175.0` release
+
+ ## Cleanup & Refactoring
+
+ - Refactored parser into modular functions for better structure
+
+
+
+
+ ## v0.175.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.175.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Fixed migration of the `tool` section during `crewai update`
+ - Reverted OpenAI pin: now requires `openai >=1.13.3` due to fixed import issues
+ - Fixed flaky tests and improved test stability
+ - Improved `Flow` listener resumability for HITL and cyclic flows
+ - Enhanced timeout handling in `PlusAPI` and `TraceBatchManager`
+ - Batched entity memory items to reduce redundant operations
+
+ ## New Features & Enhancements
+
+ - Added support for additional parameters in `Flow.start()` methods
+ - Displayed task names in verbose CLI output
+ - Added centralized embedding types and introduced a base embedding client
+ - Introduced generic clients for ChromaDB and Qdrant
+ - Added support for `crewai config reset` to clear tokens
+ - Enabled `crewai_trigger_payload` auto-injection
+ - Simplified RAG client initialization and introduced RAG configuration system
+ - Added Qdrant RAG provider support
+ - Improved tracing with better event data
+ - Added support to remove Auth0 and email entry on `crewai login`
+
+ ## Documentation & Guides
+
+ - Added documentation for automation triggers
+ - Fixed API Reference OpenAPI sources and redirects
+ - Added hybrid search alpha parameter to the docs
+
+ ## Cleanup & Deprecations
+
+ - Added deprecation notice for `Task.max_retries`
+ - Removed Auth0 dependency from login flow
+
+
+
+
+ ## v0.165.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.165.1)
+
+
+ ## Core Improvements & Fixes
+
+ - Fixed compatibility in `XMLSearchTool` by converting config values to strings for `configparser`
+ - Fixed flaky Pytest test involving `PytestUnraisableExceptionWarning`
+ - Mocked telemetry in test suite for more stable CI runs
+ - Moved Chroma lockfile handling to `db_storage_path`
+ - Ignored deprecation warnings from `chromadb`
+ - Pinned OpenAI version `<1.100.0` due to `ResponseTextConfigParam` import issue
+
+ ## New Features & Enhancements
+
+ - Included exchanged agent messages into `ExternalMemory` metadata
+ - Automatically injected `crewai_trigger_payload`
+ - Renamed internal flag `inject_trigger_input` to `allow_crewai_trigger_context`
+ - Continued tracing improvements and ephemeral tracing logic
+ - Consolidated tracing logic conditions
+ - Added support for `agent_id`-linked memory entries in `Mem0`
+
+ ## Documentation & Guides
+
+ - Added example to Tool Repository docs
+ - Updated Mem0 documentation for Short-Term and Entity Memory integration
+ - Revised Korean translations and improved sentence structures
+
+ ## Cleanup & Chores
+
+ - Removed deprecated AgentOps integration
+
+
+
+
+ ## v0.165.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.165.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Fixed compatibility in `XMLSearchTool` by converting config values to strings for `configparser`
+ - Fixed flaky Pytest test involving `PytestUnraisableExceptionWarning`
+ - Mocked telemetry in test suite for more stable CI runs
+ - Moved Chroma lockfile handling to `db_storage_path`
+ - Ignored deprecation warnings from `chromadb`
+ - Pinned OpenAI version `<1.100.0` due to `ResponseTextConfigParam` import issue
+
+ ## New Features & Enhancements
+
+ - Included exchanged agent messages into `ExternalMemory` metadata
+ - Automatically injected `crewai_trigger_payload`
+ - Renamed internal flag `inject_trigger_input` to `allow_crewai_trigger_context`
+ - Continued tracing improvements and ephemeral tracing logic
+ - Consolidated tracing logic conditions
+ - Added support for `agent_id`-linked memory entries in `Mem0`
+
+ ## Documentation & Guides
+
+ - Added example to Tool Repository docs
+ - Updated Mem0 documentation for Short-Term and Entity Memory integration
+ - Revised Korean translations and improved sentence structures
+
+ ## Cleanup & Chores
+
+ - Removed deprecated AgentOps integration
+
+
+
+
+ ## v0.159.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.159.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Improved LLM message formatting performance for better runtime efficiency
+ - Fixed use of incorrect endpoint in enterprise configuration auth/parameters
+ - Commented out listener resumability check for stability during partial flow resumption
+
+ ## New Features & Enhancements
+
+ - Added `enterprise configure` command to CLI for streamlined enterprise setup
+ - Introduced partial flow resumability support
+
+ ## Documentation & Guides
+
+ - Added documentation for new tools
+ - Added Korean translations
+ - Updated documentation with TrueFoundry integration details
+ - Added RBAC documentation and general cleanup
+ - Fixed API reference and revamped examples/cookbooks across EN, PT-BR, and KO
+
+
+
+
+ ## v0.157.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.157.0)
+
+ ## v0.157.0 What's Changed
+
+ ## Core Improvements & Fixes
+
+ - Enabled word wrapping for long input tool
+ - Allowed persisting Flow state with `BaseModel` entries
+ - Optimized string operations using `partition()` for performance
+ - Dropped support for deprecated User Memory system
+ - Bumped LiteLLM version to `1.74.9`
+ - Fixed CLI to show missing modules more clearly during import
+ - Supported device authorization with Okta
+
+ ## New Features & Enhancements
+
+ - Added `crewai config` CLI command group with tests
+ - Added default value support for `crew.name`
+ - Introduced initial tracing capabilities
+ - Added support for LangDB integration
+ - Added support for CLI configuration documentation
+
+ ## Documentation & Guides
+
+ - Updated MCP documentation with `connect_timeout` attribute
+ - Added LangDB integration documentation
+ - Added CLI config documentation
+ - General feature doc updates and cleanup
+
+
+
+
+ ## v0.152.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.152.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Removed `crewai signup` references and replaced them with `crewai login`
+ - Fixed support for adding memories to Mem0 using `agent_id`
+ - Changed the default value in Mem0 configuration
+ - Updated import error to show missing module files clearly
+ - Added timezone support to event timestamps
+
+ ## New Features & Enhancements
+
+ - Enhanced `Flow` class to support custom flow names
+ - Refactored RAG components into a dedicated top-level module
+
+ ## Documentation & Guides
+
+ - Fixed incorrect model naming in Google Vertex AI documentation
+
+
+
+
+ ## v0.150.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.150.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Used file lock around Chroma client initialization
+ - Removed workaround related to SQLite without FTS5
+ - Dropped unsupported `stop` parameter for LLM models automatically
+ - Fixed `save` method and updated related test cases
+ - Fixed message handling for Ollama models when last message is from assistant
+ - Removed duplicate print on LLM call error
+ - Added deprecation notice to `UserMemory`
+ - Upgraded LiteLLM to version 1.74.3
+
+ ## New Features & Enhancements
+
+ - Added support for ad-hoc tool calling via internal LLM class
+ - Updated Mem0 Storage from v1.1 to v2
+
+ ## Documentation & Guides
+
+ - Fixed neatlogs documentation
+ - Added Tavily Search & Extractor tools to the Search-Research suite
+ - Added documentation for `SerperScrapeWebsiteTool` and reorganized Serper section
+ - General documentation updates and improvements
+
+ ## crewai-tools v0.58.0
+ ### New Tools / Enhancements
+ - **SerperScrapeWebsiteTool**: Added a tool for extracting clean content from URLs
+ - **Bedrock AgentCore**: Integrated browser and code interpreter toolkits for Bedrock agents
+ - **Stagehand Update**: Refactored and updated Stagehand integration
+
+ ### Fixes & Cleanup
+ - **FTS5 Support**: Enabled SQLite FTS5 for improved text search in test workflows
+ - **Test Speedups**: Parallelized GitHub Actions test suite for faster CI runs
+ - **Cleanup**: Removed SQLite workaround due to FTS5 support being available
+ **MongoDBVectorSearchTool**: Fixed serialization and schema handling
+
+
+
+
+ ## v0.148.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.148.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Used production WorkOS environment ID
+ - Added SQLite FTS5 support to test workflow
+ - Fixed agent knowledge handling
+ - Compared using `BaseLLM` class instead of `LLM`
+ - Fixed missing `create_directory` parameter in `Task` class
+
+ ## New Features & Enhancements
+
+ - Introduced Agent evaluation functionality
+ - Added Evaluator experiment and regression testing methods
+ - Implemented thread-safe `AgentEvaluator`
+ - Enabled event emission for Agent evaluation
+ - Supported evaluation of single `Agent` and `LiteAgent`
+ - Added integration with `neatlogs`
+ - Added crew context tracking for LLM guardrail events
+
+ ## Documentation & Guides
+
+ - Added documentation for `guardrail` attributes and usage examples
+ - Added integration guide for `neatlogs`
+ - Updated documentation for Agent repository and `Agent.kickoff` usage
+
+
+
+
+ ## v0.141.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.141.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Sped up GitHub Actions tests through parallelization
+
+ ## New Features & Enhancements
+
+ - Added crew context tracking for LLM guardrail events
+
+ ## Documentation & Guides
+
+ - Added documentation for Agent repository usage
+ - Added documentation for `Agent.kickoff` method
+
+
+
+ ## v0.140.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.140.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Fixed typo in test prompts
+ - Fixed project name normalization by stripping trailing slashes during crew creation
+ - Ensured environment variables are written in uppercase
+ - Updated LiteLLM dependency
+ - Refactored collection handling in `RAGStorage`
+ - Implemented PEP 621 dynamic versioning
+
+ ## New Features & Enhancements
+
+ - Added capability to track LLM calls by task and agent
+ - Introduced `MemoryEvents` to monitor memory usage
+ - Added console logging for memory system and LLM guardrail events
+ - Improved data training support for models up to 7B parameters
+ - Added Scarf and Reo.dev analytics tracking
+ - CLI workos login
+
+ ## Documentation & Guides
+
+ - Updated CLI LLM documentation
+ - Added Nebius integration to the docs
+ - Corrected typos in installation and pt-BR documentation
+ - Added docs about `MemoryEvents`
+ - Implemented docs redirects and included development tools
+
+
+
+ ## v0.134.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.134.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Fixed tools parameter syntax
+ - Fixed type annotation in `Task`
+ - Fixed SSL error when retrieving LLM data from GitHub
+ - Ensured compatibility with Pydantic 2.7.x
+ - Removed `mkdocs` from project dependencies
+ - Upgraded Langfuse code examples to use Python SDK v3
+ - Added sanitize role feature in `mem0` storage
+ - Improved Crew search during memory reset
+ - Improved console printer output
+
+ ## New Features & Enhancements
+
+ - Added support for initializing a tool from defined `Tool` attributes
+ - Added official way to use MCP Tools within a `CrewBase`
+ - Enhanced MCP tools support to allow selecting multiple tools per agent in `CrewBase`
+ - Added Oxylabs Web Scraping tools
+
+ ## Documentation & Guides
+
+ - Updated `quickstart.mdx`
+ - Added docs on `LLMGuardrail` events
+ - Updated documentation with comprehensive service integration details
+ - Updated recommendation filters for MCP and Enterprise tools
+ - Updated docs for Maxim observability
+ - Added pt-BR documentation translation
+ - General documentation improvements
+
+
+
+ ## v0.130.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.130.0)
+
+
+ ## Core Improvements & Fixes
+
+ - Removed duplicated message related to Tool result output
+ - Fixed missing `manager_agent` tokens in `usage_metrics` from kickoff
+ - Fixed telemetry singleton to respect dynamic environment variables
+ - Fixed issue where Flow status logs could hide human input
+ - Increased default X-axis spacing for flow plotting
+
+ ## New Features & Enhancements
+
+ - Added support for multi-org actions in the CLI
+ - Enabled async tool executions for more efficient workflows
+ - Introduced `LiteAgent` with Guardrail integration
+ - Upgraded `LiteLLM` to support latest OpenAI version
+
+ ## Documentation & Guides
+
+ - Documented minimum `UV` version for Tool repository
+ - Improved examples for Hallucination Guardrail
+ - Updated planning docs for LLM usage
+ - Added documentation for Maxim support in Agent observability
+ - Expanded integrations documentation with images for enterprise features
+ - Fixed guide on persistence
+ - Updated Python version support to support python 3.13.x
+
+
+
+ ## v0.126.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.126.0)
+
+ ### What’s Changed
+
+ #### Core Improvements & Fixes
+
+ - Added support for Python 3.13
+ - Fixed agent knowledge sources issue
+ - Persisted available tools from a Tool repository
+ - Enabled tools to be loaded from Agent repository via their own module
+ - Logged usage of tools when called by an LLM
+
+ #### New Features & Enhancements
+
+ - Added streamable-http transport support in MCP integration
+ - Added support for community analytics
+ - Expanded OpenAI-compatible section with a Gemini example
+ - Introduced transparency features for prompts and memory systems
+ - Minor enhancements for Tool publishing
+
+ #### Documentation & Guides
+
+ - Major restructuring of docs for better navigation
+ - Expanded MCP integration documentation
+ - Updated memory docs and README visuals
+ - Fixed missing await keywords in async kickoff examples
+ - Updated Portkey and Azure embeddings documentation
+ - Added enterprise testing image to the LLM guide
+ - General updates to the README
+
+
+
+ ## v0.121.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.121.1)
+
+ Bug fixes and better docs
+
+
+
+ ## v0.121.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.121.0)
+
+ # What’s Changed
+
+ ## Core Improvements & Fixes
+
+ - Fixed encoding error when creating tools
+ - Fixed failing llama test
+ - Updated logging configuration for consistency
+ - Enhanced telemetry initialization and event handling
+
+ ## New Features & Enhancements
+
+ - Added markdown attribute to the Task class
+ - Added reasoning attribute to the Agent class
+ - Added inject_date flag to Agent for automatic date injection
+ - Implemented HallucinationGuardrail (no-op with test coverage)
+
+ ## Documentation & Guides
+
+ - Added documentation for StagehandTool and improved MDX structure
+ - Added documentation for MCP integration and updated enterprise docs
+ - Documented knowledge events and updated reasoning docs
+ - Added stop parameter documentation
+ - Fixed import references in doc examples (before_kickoff, after_kickoff)
+ - General docs updates and restructuring for clarity
+
+
+
+ ## v0.120.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.120.1)
+
+ ## Whats New
+
+ * Fixes Interpolation with hyphens
+
+
+
+ ## v0.120.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.120.0)
+
+
+ ### Core Improvements & Fixes
+ • Enabled full Ruff rule set by default for stricter linting
+ • Addressed race condition in FilteredStream using context managers
+ • Fixed agent knowledge reset issue
+ • Refactored agent fetching logic into utility module
+
+ ### New Features & Enhancements
+ • Added support for loading an Agent directly from a repository
+ • Enabled setting an empty context for Task
+ • Enhanced Agent repository feedback and fixed Tool auto-import behavior
+ • Introduced direct initialization of knowledge (bypassing knowledge_sources)
+
+ ### Documentation & Guides
+ • Updated security.md for current security practices
+ • Cleaned up Google setup section for clarity
+ • Added link to AI Studio when entering Gemini key
+ • Updated Arize Phoenix observability guide
+ • Refreshed flow documentation
+
+
+
+
+ ## v0.119.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.119.0)
+
+ What’s Changed
+
+ ## Core Improvements & Fixes
+
+ - Improved test reliability by enhancing pytest handling for flaky tests
+ - Fixed memory reset crash when embedding dimensions mismatch
+ - Enabled parent flow identification for Crew and LiteAgent
+ - Prevented telemetry-related crashes when unavailable
+ - Upgraded LiteLLM version for better compatibility
+ - Fixed llama converter tests by removing skip_external_api
+
+ ## New Features & Enhancements
+
+ - Introduced knowledge retrieval prompt re-writting in Agent for improved tracking and debugging
+ - Made LLM setup and quickstart guides model-agnostic
+
+ ## Documentation & Guides
+
+ - Added advanced configuration docs for the RAG tool
+ - Updated Windows troubleshooting guide
+ - Refined documentation examples for better clarity
+ - Fixed typos across docs and config files
+
+
+
+ ## v0.118.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.118.0)
+
+
+ ### Core Improvements & Fixes
+
+ - Fixed issues with missing prompt or system templates.
+ - Removed global logging configuration to avoid unintended overrides.
+ - Renamed TaskGuardrail to LLMGuardrail for improved clarity.
+ - Downgraded litellm to version 1.167.1 for compatibility.
+ - Added missing __init__.py files to ensure proper module initialization.
+
+ ### New Features & Enhancements
+
+ - Added support for no-code Guardrail creation to simplify AI behavior controls.
+
+ ### Documentation & Guides
+
+ - Removed CrewStructuredTool from public documentation to reflect internal usage.
+ - Updated enterprise documentation and YouTube embed for improved onboarding experience.
+
+
+
+ ## v0.117.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.117.1)
+
+ * build: upgrade crewai-tools
+ * upgrade liteLLM to latest version
+ * Fix Mem0 OSS
+
+
+
+
+ ## v0.117.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.117.0)
+
+ # What's Changed
+
+ ## New Features & Enhancements
+
+ - Added `result_as_answer` parameter support in `@tool` decorator.
+ - Introduced support for new language models: GPT-4.1, Gemini-2.0, and Gemini-2.5 Pro.
+ - Enhanced knowledge management capabilities.
+ - Added Huggingface provider option in CLI.
+ - Improved compatibility and CI support for Python 3.10+.
+
+ ## Core Improvements & Fixes
+
+ - Fixed issues with incorrect template parameters and missing inputs.
+ - Improved asynchronous flow handling with coroutine condition checks.
+ - Enhanced memory management with isolated configuration and correct memory object copying.
+ - Fixed initialization of lite agents with correct references.
+ - Addressed Python type hint issues and removed redundant imports.
+ - Updated event placement for improved tool usage tracking.
+ - Raised explicit exceptions when flows fail.
+ - Removed unused code and redundant comments from various modules.
+ - Updated GitHub App token action to v2.
+
+ ## Documentation & Guides
+
+ - Enhanced documentation structure, including enterprise deployment instructions.
+ - Automatically create output folders for documentation generation.
+ - Fixed broken link in `WeaviateVectorSearchTool` documentation.
+ - Fixed guardrail documentation usage and import paths for JSON search tools.
+ - Updated documentation for `CodeInterpreterTool`.
+ - Improved SEO, contextual navigation, and error handling for documentation pages.
+
+
+
+
+ ## v0.114.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.114.0)
+
+ # What's Changed
+
+ ## New Features & Enhancements
+
+ - Agents as an atomic unit. (`Agent(...).kickoff()`)
+ - Support to Custom LLM implementations.
+ - Integrated External Memory and Opik observability.
+ - Enhanced YAML extraction.
+ - Multimodal agent validation.
+ - Added Secure fingerprints for agents and crews.
+
+ ## Core Improvements & Fixes
+
+ - Improved serialization, agent copying, and Python compatibility.
+ - Added wildcard support to emit()
+ - Added support for additional router calls and context window adjustments.
+ - Fixed typing issues, validation, and import statements.
+ - Improved method performance.
+ - Enhanced agent task handling, event emissions, and memory management.
+ - Fixed CLI issues, conditional tasks, cloning behavior, and tool outputs.
+
+ ## Documentation & Guides
+
+ - Improved documentation structure, theme, and organization.
+ - Added guides for Local NVIDIA NIM with WSL2, W&B Weave, and Arize Phoenix.
+ - Updated tool configuration examples, prompts, and observability docs.
+ - Guide on using singular agents within Flows
+
+
+
+ ## v0.108.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.108.0)
+
+ # Features
+
+ - Converted tabs to spaces in crew.py template in PR #2190
+ - Enhanced LLM Streaming Response Handling and Event System in PR #2266
+ - Included model_name in PR #2310
+ - Enhanced Event Listener with rich visualization and improved logging in PR #2321
+ - Added fingerprints in PR #2332
+
+ # Bug Fixes
+
+ - Fixed Mistral issues in PR #2308
+ - Fixed a bug in documentation in PR #2370
+ - Fixed type check error in fingerprint property in PR #2369
+
+ # Documentation Updates
+
+ - Improved tool documentation in PR #2259
+ - Updated installation guide for the uv tool package in PR #2196
+ - Added instructions for upgrading crewAI with the uv tool in PR #2363
+ - Added documentation for ApifyActorsTool in PR #2254
+
+
+
+ ## v0.105.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.105.0)
+
+ **Core Improvements & Fixes**
+ - Fixed issues with missing template variables and user memory configuration.
+ - Improved async flow support and addressed agent response formatting.
+ - Enhanced memory reset functionality and fixed CLI memory commands.
+ - Fixed type issues, tool calling properties, and telemetry decoupling.
+
+ **New Features & Enhancements**
+ - Added Flow state export and improved state utilities.
+ - Enhanced agent knowledge setup with optional crew embedder.
+ - Introduced event emitter for better observability and LLM call tracking.
+ - Added support for Python 3.10 and ChatOllama from langchain_ollama.
+ - Integrated context window size support for the o3-mini model.
+ - Added support for multiple router calls.
+
+ **Documentation & Guides**
+ - Improved documentation layout and hierarchical structure.
+ - Added QdrantVectorSearchTool guide and clarified event listener usage.
+ - Fixed typos in prompts and updated Amazon Bedrock model listings.
+
+
+
+
+ ## v0.102.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.102.0)
+
+
+ ### Core Improvements & Fixes
+
+ - Enhanced LLM Support: Improved structured LLM output, parameter handling, and formatting for Anthropic models.
+ - Crew & Agent Stability: Fixed issues with cloning agents/crews using knowledge sources, multiple task outputs in conditional tasks, and ignored Crew task callbacks.
+ - Memory & Storage Fixes: Fixed short-term memory handling with Bedrock, ensured correct embedder initialization, and added a reset memories function in the crew class.
+ - Training & Execution Reliability: Fixed broken training and interpolation issues with dict and list input types.
+
+ ### New Features & Enhancements
+
+ - Advanced Knowledge Management: Improved naming conventions and enhanced embedding configuration with custom embedder support.
+ - Expanded Logging & Observability: Added JSON format support for logging and integrated MLflow tracing documentation.
+ - Data Handling Improvements: Updated excel_knowledge_source.py to process multi-tab files.
+ - General Performance & Codebase Clean-Up: Streamlined enterprise code alignment and resolved linting issues.
+ - Adding new tool QdrantVectorSearchTool
+
+ ### Documentation & Guides
+
+ - Updated AI & Memory Docs: Improved Bedrock, Google AI, and long-term memory documentation.
+ - Task & Workflow Clarity: Added "Human Input" row to Task Attributes, Langfuse guide, and FileWriterTool documentation.
+ - Fixed Various Typos & Formatting Issues.
+
+ ### Maintenance & Miscellaneous
+
+ - Refined Google Docs integrations and task handling for the current year.
+
+
+
+
+ ## v0.100.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.100.0)
+
+ * Feat: Add Composio docs
+ * Feat: Add SageMaker as a LLM provider
+ * Fix: Overall LLM connection issues
+ * Fix: Using safe accessors on training
+ * Fix: Add version check to crew_chat.py
+ * Docs: New docs for crewai chat
+ * Docs: Improve formatting and clarity in CLI and Composio Tool docs
+
+
+
+
+ ## v0.98.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.98.0)
+
+ * Feat: Conversation crew v1
+ * Feat: Add unique ID to flow states
+ * Feat: Add @persist decorator with FlowPersistence interface
+ * Integration: Add SambaNova integration
+ * Integration: Add NVIDIA NIM provider in cli
+ * Integration: Introducing VoyageAI
+ * Chore: Update date to current year in template
+ * Fix: Fix API Key Behavior and Entity Handling in Mem0 Integration
+ * Fix: Fixed core invoke loop logic and relevant tests
+ * Fix: Make tool inputs actual objects and not strings
+ * Fix: Add important missing parts to creating tools
+ * Fix: Drop litellm version to prevent windows issue
+ * Fix: Before kickoff if inputs are none
+ * Fix: TYPOS
+ * Fix: Nested pydantic model issue
+ * Fix: Docling issues
+ * Fix: union issue
+ * Docs updates
+
+
+
+
+ ## v0.95.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.95.0)
+
+ * Feat: Adding Multimodal Abilities to Crew
+ * Feat: Programatic Guardrails
+ * Feat: HITL multiple rounds
+ * Feat: Gemini 2.0 Support
+ * Feat: CrewAI Flows Improvements
+ * Feat: Add Workflow Permissions
+ * Feat: Add support for langfuse with litellm
+ * Feat: Portkey Integration with CrewAI
+ * Feat: Add interpolate_only method and improve error handling
+ * Feat: Docling Support
+ * Feat: Weviate Support
+ * Fix: output_file not respecting system path
+ * Fix disk I/O error when resetting short-term memory.
+ * Fix: CrewJSONEncoder now accepts enums
+ * Fix: Python max version
+ * Fix: Interpolation for output_file in Task
+ * Fix: Handle coworker role name case/whitespace properly
+ * Fix: Add tiktoken as explicit dependency and document Rust requirement
+ * Fix: Include agent knowledge in planning process
+ * Fix: Change storage initialization to None for KnowledgeStorage
+ * Fix: Fix optional storage checks
+ * Fix: include event emitter in flows
+ * Fix: Docstring, Error Handling, and Type Hints Improvements
+ * Fix: Suppressed userWarnings from litellm pydantic issues
+
+
+
+
+ ## v0.86.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.86.0)
+
+ * remove all references to pipeline and pipeline router
+ * docs: Add Nvidia NIM as provider in Custom LLM
+ * add knowledge demo + improve knowledge docs
+ * Brandon/cre 509 hitl multiple rounds of followup
+ * New docs about yaml crew with decorators. Simplify template crew
+
+
+
+ ## v0.85.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.85.0)
+
+ * Added knowledge to agent level
+ * Feat/remove langchain
+ * Improve typed task outputs
+ * Log in to Tool Repository on `crewai login`
+ * Fixes issues with result as answer not properly exiting LLM loop
+ * fix: missing key name when running with ollama provider
+ * fix spelling issue found
+ * Update readme for running mypy
+ * Add knowledge to mint.json
+ * Update Github actions
+ * Docs Update Agents docs to include two approaches for creating an agent
+ * Documentation Improvements: LLM Configuration and Usage
+
+
+
+ ## v0.83.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.83.0)
+
+ * New `before_kickoff` and `after_kickoff` crew callbacks
+ * Support to pre-seed agents with Knowledge
+ * Add support for retrieving user preferences and memories using Mem0
+ * Fix Async Execution
+ * Upgrade chroma and adjust embedder function generator
+ * Update CLI Watson supported models + docs
+ * Reduce level for Bandit
+ * Fixing all tests
+ * Update Docs
+
+
+
+ ## v0.80.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.80.0)
+
+ * Fixing Tokens callback replacement bug
+ * Fixing Step callback issue
+ * Add cached prompt tokens info on usage metrics
+ * Fix crew_train_success test
+
+
+
+ ## v0.79.4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.79.4)
+
+ Series of small bug fixes around llms support
+
+
+
+ ## v0.79.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.79.0)
+
+ * Add inputs to flows
+ * Enhance log storage to support more data types
+ * Add support to IBM memory
+ * Add Watson as an option in CLI
+ * Add security.md file
+ * Replace .netrc with uv environment variables
+ * Move BaseTool to main package and centralize tool description generation
+ * Raise an error if an LLM doesnt return a response
+ * Fix flows to support cycles and added in test
+ * Update how we name crews and fix missing config
+ * Update docs
+
+
+
+ ## v0.76.9
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.76.9)
+
+ * Update plot command for flow to crewai flow plot
+ * Add tomli so we can support 3.10
+ * Forward install command options to `uv sync`
+ * Improve tool text description and args
+ * Improve tooling and flow docs
+ * Update flows cli to allow you to easily add additional crews to a flow with crewai flow add-crew
+ * Fixed flows bug when using multiple start and listen(and_(..., ..., ...))
+
+
+
+ ## v0.76.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.76.2)
+
+ Updating crewai create commadn
+
+
+
+ ## v0.76.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.76.0)
+
+ * fix/fixed missing API prompt + CLI docs update
+ * chore(readme): fixing step for 'running tests' in the contribution
+ * support unsafe code execution. add in docker install and running checks
+ * Fix memory imports for embedding functions by
+
+
+
+ ## v0.75.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.75.1)
+
+ new `--provider` option on crewai crewat
+
+
+
+ ## v0.75.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.75.0)
+
+ * Fixing test post training
+ * Simplify flows
+ * Adapt `crewai tool install `
+ * Ensure original embedding config works
+ * Fix bugs
+ * Update docs - Including adding Cerebras LLM example configuration to LLM docs
+ * Drop unnecessary tests
+
+
+
+
+ ## v0.74.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.74.2)
+
+ * feat: add poetry.lock to uv migration
+ * fix tool calling issue
+
+
+
+ ## v0.74.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.74.0)
+
+ - UV migration
+ - Adapt Tools CLI to UV
+ - Add warning from Poetry -> UV
+ - CLI to allow for model selection & submitting API keys
+ - New Memory Base
+ - Fix Linting and Warnings
+ - Update Docs
+ - Bug fixesh
+
+
+
+ ## v0.70.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.70.1)
+
+ * New Flow feature
+ * Flow visualizer
+ * Create `crewai create flow` command
+ * Create `crewai tool create ` command
+ * Add Git validations for publishing tools
+ * fix: JSON encoding date objects
+ * New Docs
+ * Update README
+ * Bug fixes
+
+
+
+ ## v0.65.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.65.2)
+
+ - Adding experimental Flows feature
+ - Fixing order of tasks bug
+ - Updating templates
+
+
+
+ ## v0.64.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.64.0)
+
+ - Ordering tasks properly
+ - Fixing summarization logic
+ - Fixing stop words logic
+ - Increases default max iterations to 20
+ - Fix crew's key after input interpolation
+ - Fixing Training Feature
+ - Adding initial tools API
+ - TYPOS
+ - Updating Docs
+
+ Fixes: #1359 #1355 #1353 #1356 and others
+
+
+
+ ## v0.63.6
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.63.6)
+
+ - Updating projects templates
+
+
+
+ ## v0.63.5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.63.5)
+
+ - Bringing support to o1 family back, and any model that don't support stop words
+ - Updating dependencies
+ - Updating logs
+ - Updating docs
+
+
+
+ ## v0.63.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.63.2)
+
+ - Adding OPENAI_BASE_URL as fallback
+ - Adding proper LLM import
+ - Updating docs
+
+
+
+ ## v0.63.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.63.1)
+
+ - Small bug fix for support future CrewAI deploy
+
+
+
+ ## v0.63.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.63.0)
+
+ - New LLM class to interact with LLMs (leveraging LiteLLM)
+ - Adding support to custom memory interfaces
+ - Bringing GPT-4o-mini as the default model
+ - Updates Docs
+ - Updating dependencies
+ - Bug fixes
+ - Remove redundant task creation in `kickoff_for_each_async`
+
+
+
+ ## v0.61.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.61.0)
+
+ - Updating dependencies
+ - Printing max rpm message in different color
+ - Updating all cassettes for tests
+ - Always ending on a user message - to better support certain models like bedrock ones
+ - Overall small bug fixes
+
+
+
+ ## v0.60.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.60.0)
+
+ - Removing LangChain and Rebuilding Executor
+ - Get all of out tests back to green
+ - Adds the ability to not use system prompt use_system_prompt on the Agent
+ - Adds the ability to not use stop words (to support o1 models) use_stop_words on the Agent
+ - Sliding context window gets renamed to respect_context_window, and enable by default
+ - Delegation is now disabled by default
+ - Inner prompts were slightly changed as well
+ - Overall reliability and quality of results
+ - New support for:
+ - Number of max requests per minute
+ - A maximum number of iterations before giving a final answer
+ - Proper take advantage of system prompts
+ - Token calculation flow
+ - New logging of the crew and agent execution
+
+
+
+ ## v0.55.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.55.2)
+
+ * Adding ability for auto complete
+ * Add name and expected_output to TaskOutput
+ * New `crewai install` CLI
+ * New `crewai deploy` CLI
+ * Cleaning up of Pipeline feature
+ * Updated docs
+ * Dev experience improvements like bandit CI pipeline
+ * Fix bugs:
+ * Ability to use `planning_llm`
+ * Fix YAML based projects
+ * Fix Azure support
+ * Add support to Python 3.10
+ * Moving away from Pydantic v1
+
+
+
+
+
+ ## v0.51.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.51.0)
+
+ - crewAI Testing / Evaluation - https://docs.crewai.com/core-concepts/Testing/
+ - Adding new sliding context window
+ - Allowing all attributes on YAML - https://docs.crewai.com/getting-started/Start-a-New-CrewAI-Project-Template-Method/#customizing-your-project
+ - Adding initial Pipeline Structure - https://docs.crewai.com/core-concepts/Pipeline/
+ - Ability to set LLM for planning step - https://docs.crewai.com/core-concepts/Planning/
+ - New crew run command - https://docs.crewai.com/getting-started/Start-a-New-CrewAI-Project-Template-Method/#running-your-project
+ - Saving file now dumps dict into JSON - https://docs.crewai.com/core-concepts/Tasks/#creating-directories-when-saving-files
+ - Using verbose settings for tool outputs
+ - Added new Github Templates
+ - New Vision tool - https://docs.crewai.com/tools/VisionTool/
+ - New DALL-E Tool - https://docs.crewai.com/tools/DALL-ETool/
+ - New MySQL tool - https://docs.crewai.com/tools/MySQLTool/
+ - New NL2SQL Tool - https://docs.crewai.com/tools/NL2SQLTool.md
+ - Bug Fixes:
+ - Bug with planning feature output
+ - Async tasks for hierarchical process
+ - Better pydantic output for non OAI models
+ - JSON truncation issues
+ - Fix logging types
+ - Only import AgentOps if the Env Key is set
+ - Sanitize agent roles to ensure valid directory names (Windows)
+ - Tools name shouldn't contain space for OpenAI
+ - A bunch of minor issues
+
+
+
+ ## v0.41.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.41.1)
+
+ - Fix bug with planning feature
+
+
+
+ ## v0.41.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.41.0)
+
+ - **[Breaking Change]** Type Safe output
+ - All crews and tasks now return a proper object TaskOuput and CrewOutput
+ - **[Feature]** New planning feature for crews (plan before act)
+ - by adding planning=True to the Crew instance
+ - **[Feature]** Introduced Replay Feature
+ - New CLI that allow you to list the tasks from last run and replay from a specific one
+ - **[Feature]** Ability to reset memory
+ - You can clean your crew memory before running it again
+ - **[Feature]** Add retry feature for LLM calls
+ - You can retry llm calls and not stop the crew execution
+ - **[Feature]** Added ability to customize converter
+ - **[Tool]** Enhanced tools with type hinting and new attributes
+ - **[Tool]** Added MultiON Tool
+ - **[Tool]** Fixed filecrawl tools
+ - **[Tool]** Fixed bug in Scraping tool
+ - **[Tools]** Bumped crewAI-tools dependency to version
+ - **[Bugs]** General bug fixes and improvements
+ - **[Bugs]** Telemetry fixes
+ - **[Bugs]** Spell check corrections
+ - **[Docs]** Updated documentation
+
+
+
+ ## v0.36.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.36.0)
+
+ - Bug fix
+ - Updating Docs
+ - Updating native prompts
+ - Fixing TYPOs on the prompts
+ - Adding AgentOps native support
+ - Adding Firecrawl Tools
+ - Adding new ability to return a tool results as an agent result
+ - Improving coding Interpreter tool
+ - Adding new option to create your own corveter class (docs pending)
+
+
+
+ ## v0.35.8
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.35.8)
+
+ - fixing embechain dependency issue
+
+
+
+ ## v0.35.7
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.35.7)
+
+ - New @composiohq integration is out
+ - Documentation update
+ - Custom GPT Updated
+ - Adjusting manager verbosity level
+ - Bug fixes
+
+
+
+ ## v0.35.5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.35.5)
+
+ - Fix embedchain dependency
+
+
+
+ ## v0.35.4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.35.4)
+
+ - Updating crewai create CLI to use the new version
+
+
+
+ ## v0.35.3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.35.3)
+
+ - Code Execution Bug fixed
+ - Updating overall docs
+ - Bumping version of crewai-tools
+ - Bumping versions of many dependencies
+ - Overall bugfixes
+
+
+
+ ## v0.35.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.35.0)
+
+ - Your agents can now execute code
+ - Bring Any 3rd-party agent, LlamaIndex, LangChain and Autogen agents can all be part of your crew now!
+ - Train you crew before you execute it and get consistent results! New CLI `crewai train -n X`
+ - Bug fixes and docs updates (still missing some new docs updates coming soon)
+
+
+
+ ## v0.32.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.32.2)
+
+ - Updating `crewai create` CLI to use the new version
+ - Fixing delegation agent matching
+
+
+
+ ## v0.32.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.32.0)
+
+ - New `kickoff_for_each`, `kickoff_async` and `kickoff_for_each_async` methods for better control over the kickoff process
+ - Adding support for all LlamaIndex hub integrations
+ - Adding `usage_metrics` to full output or a crew
+ - Adding support to multiple crews on the new YAML format
+ - Updating dependencies
+ - Fixed Bugs and TYPOs
+ - Documentation updated
+ - Added search in docs
+ - Making gpt-4o the default model
+ - Adding new docs for LangTrace, Browserbase and Exa Search
+ - Adding timestamp to logging
+
+
+
+
+
+
+ ## v0.30.11
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.30.11)
+
+ - Updating project generation template
+
+
+
+ ## v0.30.8
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.30.8)
+
+ - Updating dependencies
+ - Small bug fixes on crewAI project structure
+ - Removing custom YAML parser for now
+
+
+
+ ## v0.30.5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.30.5)
+
+ - Making agent delegation more versatile for smaller models
+
+
+
+ ## v0.30.4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.30.4)
+
+ **Docs Update will follow** sorry about that and thank you for bearing with me, we are launching new docs soon!
+
+ ➿ Fixing task callback
+ 🧙 Ability to set a specific agent as manager instead of having crew create your one
+ 📄 Ability to set system, prompt and response templates, so it works more reliable with opensource models (works better with smaller models)
+ 👨💻 Improving json and pydantic output (works better with smaller models)
+ 🔎 Improving tool name recognition (works better with smaller models)
+ 🧰 Improvements for tool usage (works better with smaller models)
+ 📃 Initial support to bring your own prompts
+ 2️⃣ Fixing duplicating token calculator metrics
+ 🪚 Adding couple new tools, Browserbase and Exa Search
+ 📁 Ability to create directory when saving as file
+ 🔁 Updating dependencies - double check tools
+ 📄 Overall small documentation improvements
+ 🐛 Smaller bug fixes (typos and such)
+ 👬 Fixing co-worker / coworker issues
+ 👀 Smaller Readme Updates
+
+
+
+
+ ## v0.28.8
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.28.8)
+
+ - updating version used on crewai CLI
+
+
+
+ ## v0.28.7
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/0.28.7)
+
+ - Bug fixes
+ - Updating crewAI tool version with bug fixes
+
+
+
+ ## v0.28.5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.28.5)
+
+ - Major Long term memory interpolation issue
+ - Updating tools package dependency with fixes
+ - Removing unnecessary certificate
+
+
+
+ ## v0.28.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.28.2)
+
+ - Major long term memory fix
+
+
+
+ ## v0.28.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.28.1)
+
+ - Updating crewai-tools to 0.1.15
+
+
+
+ ## v0.28.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.28.0)
+
+ - Not overriding LLM callbacks
+ - Adding `max_execution_time` support
+ - Adding specific memory docs
+ - Moving tool usage logging color to purple from yellow
+ - Updating Docs
+
+
+
+ ## v0.27.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.27.0)
+
+ - 🧠 **Memory (shared crew memory)** - To enable it just add `memory=True` to your crew, it will work transparently and make outcomes better and more reliable, it's disable by default for now
+ - 🤚🏼 **Native Human Input Support:** [docs](https://docs.crewai.com/how-to/Human-Input-on-Execution/)
+ - 🌐 **Universal RAG Tools Support:** Any models, beyond just OpenAI. [Example](https://docs.crewai.com/tools/DirectorySearchTool/#custom-model-and-embeddings)
+ - 🔍 **Enhanced Cache Control:** Meet the ingenious cache_function attribute: [docs](https://docs.crewai.com/core-concepts/Tools/#custom-caching-mechanism)
+ - 🔁 **Updated crewai-tools Dependency:** Always in sync with the latest and greatest.
+ - ⛓️ **Cross Agent Delegation:** Smoother cooperation between agents.
+ - 💠 **Inner Prompt Improvements:** A finer conversational flow.
+ - 📝 **Improving tool usage with better parsing**
+ - 🔒 **Security improvements and updating dependencies**
+ - 📄 **Documentation improved**
+ - 🐛 **Bug fixes**
+
+
+
+ ## v0.22.5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.22.5)
+
+ - Other minor import issues on the new templates
+
+
+
+ ## v0.22.4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.22.4)
+
+ Fixing template issues
+
+
+
+ ## v0.22.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.22.2)
+
+ - Fixing bug on the new cli template
+ - Guaranteeing tasks order on new cli template
+
+
+
+ ## v0.22.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.22.0)
+
+ - Adding initial CLI `crewai create` command
+ - Adding ability to agents and tasks to be defined using dictionaries
+ - Adding more clear agent logging
+ - Fixing bug Exceed maximum recursion depth bug
+ - Fixing docs
+ - Updating README
+
+
+
+ ## v0.19.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.19.0)
+
+ - Efficiency in tool usage +1023.21%
+ - Mean tools used +276%
+ - Tool errors slashed by 67%, more reliable than ever.
+ - Delegation capabilities enhanced
+ - Ability to fallback to function calling by setting `function_calling_llm` to Agent or Crew
+ - Ability to get crew execution metrics after `kickoff` with `crew.usage_metrics`
+ - Adding ability for inputs being passed in kickoff now `crew.kickoff(inputs: {'key': 'value})`
+ - Updating Docs
+
+
+
+ ## v0.16.3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.16.3)
+
+ - Fixing overall bugs
+ - Making sure code is backwards compatible
+
+
+
+ ## v0.16.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.16.0)
+
+ - Removing lingering `crewai_tools` dependency
+ - Adding initial support for inputs interpolation (missing docs)
+ - Adding ability to track tools usage, tools error, formatting errors, tokens usage
+ - Updating README
+
+
+
+ ## v0.14.4
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.14.4)
+
+ - Updating timeouts
+ - Updating docs
+ - Removing crewai_tools as a mandatory
+ - Making agents memory-less by default for token count reduction (breaking change for people counting on this previously)
+
+
+
+ ## v0.14.3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.14.3)
+
+ - Fixing broken docs link
+ - Adding support for agents without tools
+ - Avoid empty task outputs
+
+
+
+ ## v0.14.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.14.0)
+
+ All improvements from the v0.14.0rc.
+ - Support to export json and pydantic from opensource models
+
+
+
+ ## v0.14.0rc
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.14.0rc0)
+
+ - Adding support to crewai-tools
+ - Adding support to format tasks output as Pydantic Objects Or JSON
+ - Adding support to save tasks ouput to a file
+ - Improved reliability for inter agent delegation
+ - Revamp tools usage logic to proper use function calling
+ - Updating internal prompts
+ - Supporting tools with no arguments
+ - Bug fixes
+
+
+
+ ## v0.11.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.11.2)
+
+ - Adding further error logging so users understand what is happening if a tool fails
+
+
+
+ ## v0.11.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.11.1)
+
+ - It fixes a bug on the tool usage logic that was early caching the result even if there was an error on the usage, preventing it from using the tool again.
+ - It will also print any error message in red allowing the user to understand what was the problem with the tool.
+
+
+
+ ## v0.11.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.11.0)
+
+ - Ability to set `function_calling_llm` on both the entire crew and individual agents
+ - Some early attempts on cost reduction
+ - Improving function calling for tools
+ - Updates docs
+
+
+
+ ## v0.10.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.10.0)
+
+ - Ability to get `full_ouput` from crew kickoff with all tasks outputs
+ - Ability to set `step_callback` function for both Agents and Crews so you can get all intermediate steps
+ - Remembering Agent of the expected format after certain number of tool usages.
+ - New tool usage internals now using json, unlocking tools with multiple arguments
+ - Refactoring overall delegation logic, now way more reliable
+ - Fixed `max_inter` bug now properly forcing llm to answer as it gets to that
+ - Rebuilt caching structure, making sure multiple agents can use the same cache
+ - Refactoring Task repeated usage prevention logic
+ - Removing now unnecessary `CrewAgentOutputParser`
+ - Opt-in to share complete crew related data with the crewAI team
+ - Overall Docs update
+
+
+
+ ## v0.5.5
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.5.5)
+
+ - Overall doc + readme improvements
+ - Fixing RPM controller being set unnecessarily
+ - Adding early stage anonymous telemetry for lib improvement
+
+
+
+ ## v0.5.3
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.5.3)
+
+ - quick Fix for hierarchical manager
+
+
+
+ ## v0.5.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.5.2)
+
+ - Adding `manager_llm` for hierarchical process
+ - Improving `max_inter` and `max_rpm` logic
+ - Updating README and Docs
+
+
+
+ ## v0.5.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.5.0)
+
+ This new version bring a lot of new features and improvements to the library.
+
+ ## Features
+ - Adding Task Callbacks.
+ - Adding support for Hierarchical process.
+ - Adding ability to references specific tasks in another task.
+ - Adding ability to parallel task execution.
+
+ ## Improvements
+ - Revamping Max Iterations and Max Requests per Minute.
+ - Developer experience improvements, docstrings and such.
+ - Small improvements and TYPOs.
+ - Fix static typing errors.
+ - Updated README and Docs.
+
+
+
+
+ ## v0.1.32
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.1.32)
+
+ - Moving to LangChain 0.1.0
+ - Improving Prompts
+ - Adding ability to limit maximum number of iterations for an agent
+ - Adding ability to Request Per Minute throttling for both Agents and Crews
+ - Adding initial support for translations
+ - Adding Greek translation
+ - Improve code readability
+ - Starting new documentation with mkdocs
+
+
+
+ ## v0.1.23
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.1.23)
+
+ - Many Reliability improvements
+ - Prompt changes
+ - Initial changes for supporting multiple languages
+ - Fixing bug on task repeated execution
+ - Better execution error handling
+ - Updating READMe
+
+
+
+ ## v0.1.14
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.1.14)
+
+ - Adding tool caching a loop execution prevention. (@joaomdmoura)
+ - Adding more guidelines for Agent delegation. (@joaomdmoura)
+ - Updating to use new openai lib version. (@joaomdmoura)
+ - Adding verbose levels to the logger. (@joaomdmoura)
+ - Removing WIP code. (@joaomdmoura)
+ - A lot of developer quality of life improvements (Special thanks to @greysonlalonde).
+ - Updating to pydantic v2 (Special thanks to @greysonlalonde as well).
+
+
+
+
+ ## v0.1.2
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.1.2)
+
+ - Adding ability to use other LLMs, not OpenAI
+
+
+
+ ## v0.1.1
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.1.1)
+
+ # CrewAI v0.1.1 Release Notes
+
+ ## What's New
+
+ - **Crew Verbose Mode**: Now allowing you to inspect a the tasks are being executed.
+
+ - **README and Docs Updates**: A series of minor updates on the docs
+
+
+
+ ## v0.1.0
+
+ [View release on GitHub](https://github.com/crewAIInc/crewAI/releases/tag/v0.1.0)
+
+ # CrewAI v0.1.0 Release Notes
+
+ We are thrilled to announce the initial release of CrewAI, version 0.1.0! CrewAI is a framework designed to facilitate the orchestration of autonomous AI agents capable of role-playing and collaboration to accomplish complex tasks more efficiently.
+
+ ## What's New
+
+ - **Initial Launch**: CrewAI is now officially in the wild! This foundational release lays the groundwork for AI agents to work in tandem, each with its own specialized role and objectives.
+
+ - **Role-Based Agent Design**: Define and customize agents with specific roles, goals, and the tools they need to succeed.
+
+ - **Inter-Agent Delegation**: Agents are now equipped to autonomously delegate tasks, enabling dynamic distribution of workload among the team.
+
+ - **Task Management**: Create and assign tasks dynamically with the flexibility to specify the tools needed for each task.
+
+ - **Sequential Processes**: Set up your agents to tackle tasks one after the other, ensuring organized and predictable workflows.
+
+ - **Documentation**: Start exploring CrewAI with our initial documentation that guides you through the setup and use of the framework.
+
+ ## Enhancements
+
+ - Detailed API documentation for the `Agent`, `Task`, `Crew`, and `Process` classes.
+ - Examples and tutorials to help you build your first CrewAI application.
+ - Basic setup for collaborative and delegation mechanisms among agents.
+
+ ## Known Issues
+
+ - As this is the first release, there may be undiscovered bugs and areas for optimization. We encourage the community to report any issues found during use.
+
+ ## Upcoming Features
+
+ - **Advanced Process Management**: In future releases, we will introduce more complex processes for task management including consensual and hierarchical workflows.
+
diff --git a/docs/v1.15.1/en/concepts/agent-capabilities.mdx b/docs/v1.15.1/en/concepts/agent-capabilities.mdx
new file mode 100644
index 000000000..7cfe8ff89
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/agent-capabilities.mdx
@@ -0,0 +1,147 @@
+---
+title: "Agent Capabilities"
+description: "Understand the five ways to extend CrewAI agents: Tools, MCPs, Apps, Skills, and Knowledge."
+icon: puzzle-piece
+mode: "wide"
+---
+
+## Overview
+
+CrewAI agents can be extended with **five distinct capability types**, each serving a different purpose. Understanding when to use each one — and how they work together — is key to building effective agents.
+
+
+
+ **Callable functions** — give agents the ability to take action. Web searches, file operations, API calls, code execution.
+
+
+ **Remote tool servers** — connect agents to external tool servers via the Model Context Protocol. Same effect as tools, but hosted externally.
+
+
+ **Platform integrations** — connect agents to SaaS apps (Gmail, Slack, Jira, Salesforce) via CrewAI's platform. Runs locally with a platform integration token.
+
+
+ **Domain expertise** — inject instructions, guidelines, and reference material into agent prompts. Skills tell agents *how to think*.
+
+
+ **Retrieved facts** — provide agents with data from documents, files, and URLs via semantic search (RAG). Knowledge gives agents *what to know*.
+
+
+
+---
+
+## The Key Distinction
+
+The most important thing to understand: **these capabilities fall into two categories**.
+
+### Action Capabilities (Tools, MCPs, Apps)
+
+These give agents the ability to **do things** — call APIs, read files, search the web, send emails. At execution time, all three resolve into the same internal format (`BaseTool` instances) and appear in a unified tool list the agent can call.
+
+```python
+from crewai import Agent
+from crewai_tools import SerperDevTool, FileReadTool
+
+agent = Agent(
+ role="Researcher",
+ goal="Find and compile market data",
+ backstory="Expert market analyst",
+ tools=[SerperDevTool(), FileReadTool()], # Local tools
+ mcps=["https://mcp.example.com/sse"], # Remote MCP server tools
+ apps=["gmail", "google_sheets"], # Platform integrations
+)
+```
+
+### Context Capabilities (Skills, Knowledge)
+
+These modify the agent's **prompt** — injecting expertise, instructions, or retrieved data before the agent starts reasoning. They don't give agents new actions; they shape how agents think and what information they have access to.
+
+```python
+from crewai import Agent
+
+agent = Agent(
+ role="Security Auditor",
+ goal="Audit cloud infrastructure for vulnerabilities",
+ backstory="Expert in cloud security with 10 years of experience",
+ skills=["./skills/security-audit"], # Domain instructions
+ knowledge_sources=[pdf_source, url_source], # Retrieved facts
+)
+```
+
+---
+
+## When to Use What
+
+| You need... | Use | Example |
+| :------------------------------------------------ | :---------------- | :--------------------------------------- |
+| Agent to search the web | **Tools** | `tools=[SerperDevTool()]` |
+| Agent to call a remote API via MCP | **MCPs** | `mcps=["https://api.example.com/sse"]` |
+| Agent to send emails via Gmail | **Apps** | `apps=["gmail"]` |
+| Agent to follow specific procedures | **Skills** | `skills=["./skills/code-review"]` |
+| Agent to reference company docs | **Knowledge** | `knowledge_sources=[pdf_source]` |
+| Agent to search the web AND follow review guidelines | **Tools + Skills** | Use both together |
+
+---
+
+## Combining Capabilities
+
+In practice, agents often use **multiple capability types together**. Here's a realistic example:
+
+```python
+from crewai import Agent
+from crewai_tools import SerperDevTool, FileReadTool, CodeInterpreterTool
+
+# A fully-equipped research agent
+researcher = Agent(
+ role="Senior Research Analyst",
+ goal="Produce comprehensive market analysis reports",
+ backstory="Expert analyst with deep industry knowledge",
+
+ # ACTION: What the agent can DO
+ tools=[
+ SerperDevTool(), # Search the web
+ FileReadTool(), # Read local files
+ CodeInterpreterTool(), # Run Python code for analysis
+ ],
+ mcps=["https://data-api.example.com/sse"], # Access remote data API
+ apps=["google_sheets"], # Write to Google Sheets
+
+ # CONTEXT: What the agent KNOWS
+ skills=["./skills/research-methodology"], # How to conduct research
+ knowledge_sources=[company_docs], # Company-specific data
+)
+```
+
+---
+
+## Comparison Table
+
+| Feature | Tools | MCPs | Apps | Skills | Knowledge |
+| :--- | :---: | :---: | :---: | :---: | :---: |
+| **Gives agent actions** | ✅ | ✅ | ✅ | ❌ | ❌ |
+| **Modifies prompt** | ❌ | ❌ | ❌ | ✅ | ✅ |
+| **Requires code** | Yes | Config only | Config only | Markdown only | Config only |
+| **Runs locally** | Yes | Depends | Yes (with env var) | N/A | Yes |
+| **Needs API keys** | Per tool | Per server | Integration token | No | Embedder only |
+| **Set on Agent** | `tools=[]` | `mcps=[]` | `apps=[]` | `skills=[]` | `knowledge_sources=[]` |
+| **Set on Crew** | ❌ | ❌ | ❌ | `skills=[]` | `knowledge_sources=[]` |
+
+---
+
+## Deep Dives
+
+Ready to learn more about each capability type?
+
+
+
+ Create custom tools, use the 75+ OSS catalog, configure caching and async execution.
+
+
+ Connect to MCP servers via stdio, SSE, or HTTP. Filter tools, configure auth.
+
+
+ Build skill packages with SKILL.md, inject domain expertise, use progressive disclosure.
+
+
+ Add knowledge from PDFs, CSVs, URLs, and more. Configure embedders and retrieval.
+
+
diff --git a/docs/v1.15.1/en/concepts/agents.mdx b/docs/v1.15.1/en/concepts/agents.mdx
new file mode 100644
index 000000000..98fffbf6e
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/agents.mdx
@@ -0,0 +1,720 @@
+---
+title: Agents
+description: Detailed guide on creating and managing agents within the CrewAI framework.
+icon: robot
+mode: "wide"
+---
+
+## Overview of an Agent
+
+In the CrewAI framework, an `Agent` is an autonomous unit that can:
+
+- Perform specific tasks
+- Make decisions based on its role and goal
+- Use tools to accomplish objectives
+- Communicate and collaborate with other agents
+- Maintain memory of interactions
+- Delegate tasks when allowed
+
+
+ Think of an agent as a specialized team member with specific skills,
+ expertise, and responsibilities. For example, a `Researcher` agent might excel
+ at gathering and analyzing information, while a `Writer` agent might be better
+ at creating content.
+
+
+
+CrewAI AMP includes a Visual Agent Builder that simplifies agent creation and configuration without writing code. Design your agents visually and test them in real-time.
+
+
+
+The Visual Agent Builder enables:
+
+- Intuitive agent configuration with form-based interfaces
+- Real-time testing and validation
+- Template library with pre-configured agent types
+- Easy customization of agent attributes and behaviors
+
+
+## Agent Attributes
+
+| Attribute | Parameter | Type | Description |
+| :-------------------------------------- | :----------------------- | :------------------------------------ | :------------------------------------------------------------------------------------------------------- |
+| **Role** | `role` | `str` | Defines the agent's function and expertise within the crew. |
+| **Goal** | `goal` | `str` | The individual objective that guides the agent's decision-making. |
+| **Backstory** | `backstory` | `str` | Provides context and personality to the agent, enriching interactions. |
+| **LLM** _(optional)_ | `llm` | `Union[str, LLM, Any]` | Language model that powers the agent. Defaults to the model specified in `OPENAI_MODEL_NAME` or "gpt-4". |
+| **Tools** _(optional)_ | `tools` | `List[BaseTool]` | Capabilities or functions available to the agent. Defaults to an empty list. |
+| **Function Calling LLM** _(optional)_ | `function_calling_llm` | `Optional[Any]` | Language model for tool calling, overrides crew's LLM if specified. |
+| **Max Iterations** _(optional)_ | `max_iter` | `int` | Maximum iterations before the agent must provide its best answer. Default is 20. |
+| **Max RPM** _(optional)_ | `max_rpm` | `Optional[int]` | Maximum requests per minute to avoid rate limits. |
+| **Max Execution Time** _(optional)_ | `max_execution_time` | `Optional[int]` | Maximum time (in seconds) for task execution. |
+| **Verbose** _(optional)_ | `verbose` | `bool` | Enable detailed execution logs for debugging. Default is False. |
+| **Allow Delegation** _(optional)_ | `allow_delegation` | `bool` | Allow the agent to delegate tasks to other agents. Default is False. |
+| **Step Callback** _(optional)_ | `step_callback` | `Optional[Any]` | Function called after each agent step, overrides crew callback. |
+| **Cache** _(optional)_ | `cache` | `bool` | Enable caching for tool usage. Default is True. |
+| **System Template** _(optional)_ | `system_template` | `Optional[str]` | Custom system prompt template for the agent. |
+| **Prompt Template** _(optional)_ | `prompt_template` | `Optional[str]` | Custom prompt template for the agent. |
+| **Response Template** _(optional)_ | `response_template` | `Optional[str]` | Custom response template for the agent. |
+| **Allow Code Execution** _(optional)_ | `allow_code_execution` | `Optional[bool]` | Enable code execution for the agent. Default is False. |
+| **Max Retry Limit** _(optional)_ | `max_retry_limit` | `int` | Maximum number of retries when an error occurs. Default is 2. |
+| **Respect Context Window** _(optional)_ | `respect_context_window` | `bool` | Keep messages under context window size by summarizing. Default is True. |
+| **Code Execution Mode** _(optional)_ | `code_execution_mode` | `Literal["safe", "unsafe"]` | Mode for code execution: 'safe' (using Docker) or 'unsafe' (direct). Default is 'safe'. |
+| **Multimodal** _(optional)_ | `multimodal` | `bool` | Whether the agent supports multimodal capabilities. Default is False. |
+| **Inject Date** _(optional)_ | `inject_date` | `bool` | Whether to automatically inject the current date into tasks. Default is False. |
+| **Date Format** _(optional)_ | `date_format` | `str` | Format string for date when inject_date is enabled. Default is "%Y-%m-%d" (ISO format). |
+| **Reasoning** _(optional)_ | `reasoning` | `bool` | Whether the agent should reflect and create a plan before executing a task. Default is False. |
+| **Max Reasoning Attempts** _(optional)_ | `max_reasoning_attempts` | `Optional[int]` | Maximum number of reasoning attempts before executing the task. If None, will try until ready. |
+| **Embedder** _(optional)_ | `embedder` | `Optional[Dict[str, Any]]` | Configuration for the embedder used by the agent. |
+| **Knowledge Sources** _(optional)_ | `knowledge_sources` | `Optional[List[BaseKnowledgeSource]]` | Knowledge sources available to the agent. |
+| **Use System Prompt** _(optional)_ | `use_system_prompt` | `Optional[bool]` | Whether to use system prompt (for o1 model support). Default is True. |
+
+## Creating Agents
+
+There are two common ways to create agents in CrewAI: using **JSONC project configuration (recommended for new crews)** or defining them **directly in code**.
+
+### JSONC Configuration (Recommended)
+
+New projects created with `crewai create crew ` use JSON-first configuration. Each agent is defined in `agents/.jsonc`, and `crew.jsonc` lists which agents are part of the crew.
+
+After creating your CrewAI project as outlined in the [Installation](/en/installation) section, edit the generated files in `agents/`.
+
+
+Use `{placeholder}` values in `role`, `goal`, or `backstory`. Put defaults in `crew.jsonc` under `inputs`; `crewai run` prompts for any missing values.
+
+
+Here's an example `agents/researcher.jsonc` file:
+
+```jsonc agents/researcher.jsonc
+{
+ "role": "{topic} Senior Data Researcher",
+ "goal": "Uncover cutting-edge developments in {topic}",
+ "backstory": "You find the most relevant information and present it clearly.",
+ "llm": "openai/gpt-4o",
+ "tools": ["SerperDevTool"],
+ "settings": {
+ "verbose": true,
+ "allow_delegation": false,
+ "max_iter": 20
+ }
+}
+```
+
+Then include that agent from `crew.jsonc`:
+
+```jsonc crew.jsonc
+{
+ "name": "Research Crew",
+ "agents": ["researcher"],
+ "tasks": [
+ {
+ "name": "research_task",
+ "description": "Research {topic}",
+ "expected_output": "A concise briefing about {topic}",
+ "agent": "researcher"
+ }
+ ],
+ "inputs": {
+ "topic": "AI Agents"
+ }
+}
+```
+
+Agent files support any public `Agent` field. Common fields include `role`, `goal`, `backstory`, `llm`, `tools`, `function_calling_llm`, `guardrail`, `step_callback`, and `settings`. Behavior options such as `verbose`, `allow_delegation`, `max_iter`, `max_rpm`, `memory`, `cache`, `planning_config`, and `use_system_prompt` can be placed at the top level or under `settings`; values in `settings` take precedence.
+
+
+ JSONC supports comments and trailing commas. If both `agents/.jsonc` and `agents/.json` exist, CrewAI uses the JSONC file.
+
+
+### Classic YAML Configuration
+
+Classic projects created with `crewai create crew --classic` use `config/agents.yaml` and a `@CrewBase` class in `crew.py`. This remains supported for teams that want Python decorators or existing YAML projects.
+
+### Direct Code Definition
+
+You can create agents directly in code by instantiating the `Agent` class. Here's a comprehensive example showing all available parameters:
+
+```python Code
+from crewai import Agent
+from crewai_tools import SerperDevTool
+
+# Create an agent with all available parameters
+agent = Agent(
+ role="Senior Data Scientist",
+ goal="Analyze and interpret complex datasets to provide actionable insights",
+ backstory="With over 10 years of experience in data science and machine learning, "
+ "you excel at finding patterns in complex datasets.",
+ llm="gpt-4", # Default: OPENAI_MODEL_NAME or "gpt-4"
+ function_calling_llm=None, # Optional: Separate LLM for tool calling
+ verbose=False, # Default: False
+ allow_delegation=False, # Default: False
+ max_iter=20, # Default: 20 iterations
+ max_rpm=None, # Optional: Rate limit for API calls
+ max_execution_time=None, # Optional: Maximum execution time in seconds
+ max_retry_limit=2, # Default: 2 retries on error
+ allow_code_execution=False, # Default: False
+ code_execution_mode="safe", # Default: "safe" (options: "safe", "unsafe")
+ respect_context_window=True, # Default: True
+ use_system_prompt=True, # Default: True
+ multimodal=False, # Default: False
+ inject_date=False, # Default: False
+ date_format="%Y-%m-%d", # Default: ISO format
+ reasoning=False, # Default: False
+ max_reasoning_attempts=None, # Default: None
+ tools=[SerperDevTool()], # Optional: List of tools
+ knowledge_sources=None, # Optional: List of knowledge sources
+ embedder=None, # Optional: Custom embedder configuration
+ system_template=None, # Optional: Custom system prompt template
+ prompt_template=None, # Optional: Custom prompt template
+ response_template=None, # Optional: Custom response template
+ step_callback=None, # Optional: Callback function for monitoring
+)
+```
+
+Let's break down some key parameter combinations for common use cases:
+
+#### Basic Research Agent
+
+```python Code
+research_agent = Agent(
+ role="Research Analyst",
+ goal="Find and summarize information about specific topics",
+ backstory="You are an experienced researcher with attention to detail",
+ tools=[SerperDevTool()],
+ verbose=True # Enable logging for debugging
+)
+```
+
+#### Code Development Agent
+
+```python Code
+dev_agent = Agent(
+ role="Senior Python Developer",
+ goal="Write and debug Python code",
+ backstory="Expert Python developer with 10 years of experience",
+ allow_code_execution=True,
+ code_execution_mode="safe", # Uses Docker for safety
+ max_execution_time=300, # 5-minute timeout
+ max_retry_limit=3 # More retries for complex code tasks
+)
+```
+
+#### Long-Running Analysis Agent
+
+```python Code
+analysis_agent = Agent(
+ role="Data Analyst",
+ goal="Perform deep analysis of large datasets",
+ backstory="Specialized in big data analysis and pattern recognition",
+ memory=True,
+ respect_context_window=True,
+ max_rpm=10, # Limit API calls
+ function_calling_llm="gpt-4o-mini" # Cheaper model for tool calls
+)
+```
+
+#### Custom Template Agent
+
+```python Code
+custom_agent = Agent(
+ role="Customer Service Representative",
+ goal="Assist customers with their inquiries",
+ backstory="Experienced in customer support with a focus on satisfaction",
+ system_template="""<|start_header_id|>system<|end_header_id|>
+ {{ .System }}<|eot_id|>""",
+ prompt_template="""<|start_header_id|>user<|end_header_id|>
+ {{ .Prompt }}<|eot_id|>""",
+ response_template="""<|start_header_id|>assistant<|end_header_id|>
+ {{ .Response }}<|eot_id|>""",
+)
+```
+
+#### Date-Aware Agent with Reasoning
+
+```python Code
+strategic_agent = Agent(
+ role="Market Analyst",
+ goal="Track market movements with precise date references and strategic planning",
+ backstory="Expert in time-sensitive financial analysis and strategic reporting",
+ inject_date=True, # Automatically inject current date into tasks
+ date_format="%B %d, %Y", # Format as "May 21, 2025"
+ reasoning=True, # Enable strategic planning
+ max_reasoning_attempts=2, # Limit planning iterations
+ verbose=True
+)
+```
+
+#### Reasoning Agent
+
+```python Code
+reasoning_agent = Agent(
+ role="Strategic Planner",
+ goal="Analyze complex problems and create detailed execution plans",
+ backstory="Expert strategic planner who methodically breaks down complex challenges",
+ reasoning=True, # Enable reasoning and planning
+ max_reasoning_attempts=3, # Limit reasoning attempts
+ max_iter=30, # Allow more iterations for complex planning
+ verbose=True
+)
+```
+
+#### Multimodal Agent
+
+```python Code
+multimodal_agent = Agent(
+ role="Visual Content Analyst",
+ goal="Analyze and process both text and visual content",
+ backstory="Specialized in multimodal analysis combining text and image understanding",
+ multimodal=True, # Enable multimodal capabilities
+ verbose=True
+)
+```
+
+### Parameter Details
+
+#### Critical Parameters
+
+- `role`, `goal`, and `backstory` are required and shape the agent's behavior
+- `llm` determines the language model used (default: OpenAI's GPT-4)
+
+#### Memory and Context
+
+- `memory`: Enable to maintain conversation history
+- `respect_context_window`: Prevents token limit issues
+- `knowledge_sources`: Add domain-specific knowledge bases
+
+#### Execution Control
+
+- `max_iter`: Maximum attempts before giving best answer
+- `max_execution_time`: Timeout in seconds
+- `max_rpm`: Rate limiting for API calls
+- `max_retry_limit`: Retries on error
+
+#### Code Execution
+
+
+ `allow_code_execution` and `code_execution_mode` are deprecated. `CodeInterpreterTool` has been removed from `crewai-tools`. Use a dedicated sandbox service such as [E2B](https://e2b.dev) or [Modal](https://modal.com) for secure code execution.
+
+
+- `allow_code_execution` _(deprecated)_: Previously enabled built-in code execution via `CodeInterpreterTool`.
+- `code_execution_mode` _(deprecated)_: Previously controlled execution mode (`"safe"` for Docker, `"unsafe"` for direct execution).
+
+#### Advanced Features
+
+- `multimodal`: Enable multimodal capabilities for processing text and visual content
+- `reasoning`: Enable agent to reflect and create plans before executing tasks
+- `inject_date`: Automatically inject current date into task descriptions
+
+#### Templates
+
+- `system_template`: Defines agent's core behavior
+- `prompt_template`: Structures input format
+- `response_template`: Formats agent responses
+
+
+ When using custom templates, ensure that both `system_template` and
+ `prompt_template` are defined. The `response_template` is optional but
+ recommended for consistent output formatting.
+
+
+
+ When using custom templates, you can use variables like `{role}`, `{goal}`,
+ and `{backstory}` in your templates. These will be automatically populated
+ during execution.
+
+
+## Agent Tools
+
+Agents can be equipped with various tools to enhance their capabilities. CrewAI supports tools from:
+
+- [CrewAI Toolkit](https://github.com/joaomdmoura/crewai-tools)
+- [LangChain Tools](https://python.langchain.com/docs/integrations/tools)
+
+Here's how to add tools to an agent:
+
+```python Code
+from crewai import Agent
+from crewai_tools import SerperDevTool, WikipediaTools
+
+# Create tools
+search_tool = SerperDevTool()
+wiki_tool = WikipediaTools()
+
+# Add tools to agent
+researcher = Agent(
+ role="AI Technology Researcher",
+ goal="Research the latest AI developments",
+ tools=[search_tool, wiki_tool],
+ verbose=True
+)
+```
+
+## Agent Memory and Context
+
+Agents can maintain memory of their interactions and use context from previous tasks. This is particularly useful for complex workflows where information needs to be retained across multiple tasks.
+
+```python Code
+from crewai import Agent
+
+analyst = Agent(
+ role="Data Analyst",
+ goal="Analyze and remember complex data patterns",
+ memory=True, # Enable memory
+ verbose=True
+)
+```
+
+
+ When `memory` is enabled, the agent will maintain context across multiple
+ interactions, improving its ability to handle complex, multi-step tasks.
+
+
+## Context Window Management
+
+CrewAI includes sophisticated automatic context window management to handle situations where conversations exceed the language model's token limits. This powerful feature is controlled by the `respect_context_window` parameter.
+
+### How Context Window Management Works
+
+When an agent's conversation history grows too large for the LLM's context window, CrewAI automatically detects this situation and can either:
+
+1. **Automatically summarize content** (when `respect_context_window=True`)
+2. **Stop execution with an error** (when `respect_context_window=False`)
+
+### Automatic Context Handling (`respect_context_window=True`)
+
+This is the **default and recommended setting** for most use cases. When enabled, CrewAI will:
+
+```python Code
+# Agent with automatic context management (default)
+smart_agent = Agent(
+ role="Research Analyst",
+ goal="Analyze large documents and datasets",
+ backstory="Expert at processing extensive information",
+ respect_context_window=True, # 🔑 Default: auto-handle context limits
+ verbose=True
+)
+```
+
+**What happens when context limits are exceeded:**
+
+- ⚠️ **Warning message**: `"Context length exceeded. Summarizing content to fit the model context window."`
+- 🔄 **Automatic summarization**: CrewAI intelligently summarizes the conversation history
+- ✅ **Continued execution**: Task execution continues seamlessly with the summarized context
+- 📝 **Preserved information**: Key information is retained while reducing token count
+
+### Strict Context Limits (`respect_context_window=False`)
+
+When you need precise control and prefer execution to stop rather than lose any information:
+
+```python Code
+# Agent with strict context limits
+strict_agent = Agent(
+ role="Legal Document Reviewer",
+ goal="Provide precise legal analysis without information loss",
+ backstory="Legal expert requiring complete context for accurate analysis",
+ respect_context_window=False, # ❌ Stop execution on context limit
+ verbose=True
+)
+```
+
+**What happens when context limits are exceeded:**
+
+- ❌ **Error message**: `"Context length exceeded. Consider using smaller text or RAG tools from crewai_tools."`
+- 🛑 **Execution stops**: Task execution halts immediately
+- 🔧 **Manual intervention required**: You need to modify your approach
+
+### Choosing the Right Setting
+
+#### Use `respect_context_window=True` (Default) when:
+
+- **Processing large documents** that might exceed context limits
+- **Long-running conversations** where some summarization is acceptable
+- **Research tasks** where general context is more important than exact details
+- **Prototyping and development** where you want robust execution
+
+```python Code
+# Perfect for document processing
+document_processor = Agent(
+ role="Document Analyst",
+ goal="Extract insights from large research papers",
+ backstory="Expert at analyzing extensive documentation",
+ respect_context_window=True, # Handle large documents gracefully
+ max_iter=50, # Allow more iterations for complex analysis
+ verbose=True
+)
+```
+
+#### Use `respect_context_window=False` when:
+
+- **Precision is critical** and information loss is unacceptable
+- **Legal or medical tasks** requiring complete context
+- **Code review** where missing details could introduce bugs
+- **Financial analysis** where accuracy is paramount
+
+```python Code
+# Perfect for precision tasks
+precision_agent = Agent(
+ role="Code Security Auditor",
+ goal="Identify security vulnerabilities in code",
+ backstory="Security expert requiring complete code context",
+ respect_context_window=False, # Prefer failure over incomplete analysis
+ max_retry_limit=1, # Fail fast on context issues
+ verbose=True
+)
+```
+
+### Alternative Approaches for Large Data
+
+When dealing with very large datasets, consider these strategies:
+
+#### 1. Use RAG Tools
+
+```python Code
+from crewai_tools import RagTool
+
+# Create RAG tool for large document processing
+rag_tool = RagTool()
+
+rag_agent = Agent(
+ role="Research Assistant",
+ goal="Query large knowledge bases efficiently",
+ backstory="Expert at using RAG tools for information retrieval",
+ tools=[rag_tool], # Use RAG instead of large context windows
+ respect_context_window=True,
+ verbose=True
+)
+```
+
+#### 2. Use Knowledge Sources
+
+```python Code
+# Use knowledge sources instead of large prompts
+knowledge_agent = Agent(
+ role="Knowledge Expert",
+ goal="Answer questions using curated knowledge",
+ backstory="Expert at leveraging structured knowledge sources",
+ knowledge_sources=[your_knowledge_sources], # Pre-processed knowledge
+ respect_context_window=True,
+ verbose=True
+)
+```
+
+### Context Window Best Practices
+
+1. **Monitor Context Usage**: Enable `verbose=True` to see context management in action
+2. **Design for Efficiency**: Structure tasks to minimize context accumulation
+3. **Use Appropriate Models**: Choose LLMs with context windows suitable for your tasks
+4. **Test Both Settings**: Try both `True` and `False` to see which works better for your use case
+5. **Combine with RAG**: Use RAG tools for very large datasets instead of relying solely on context windows
+
+### Troubleshooting Context Issues
+
+**If you're getting context limit errors:**
+
+```python Code
+# Quick fix: Enable automatic handling
+agent.respect_context_window = True
+
+# Better solution: Use RAG tools for large data
+from crewai_tools import RagTool
+agent.tools = [RagTool()]
+
+# Alternative: Break tasks into smaller pieces
+# Or use knowledge sources instead of large prompts
+```
+
+**If automatic summarization loses important information:**
+
+```python Code
+# Disable auto-summarization and use RAG instead
+agent = Agent(
+ role="Detailed Analyst",
+ goal="Maintain complete information accuracy",
+ backstory="Expert requiring full context",
+ respect_context_window=False, # No summarization
+ tools=[RagTool()], # Use RAG for large data
+ verbose=True
+)
+```
+
+
+ The context window management feature works automatically in the background.
+ You don't need to call any special functions - just set
+ `respect_context_window` to your preferred behavior and CrewAI handles the
+ rest!
+
+
+## Direct Agent Interaction with `kickoff()`
+
+Agents can be used directly without going through a task or crew workflow using the `kickoff()` method. This provides a simpler way to interact with an agent when you don't need the full crew orchestration capabilities.
+
+### How `kickoff()` Works
+
+The `kickoff()` method allows you to send messages directly to an agent and get a response, similar to how you would interact with an LLM but with all the agent's capabilities (tools, reasoning, etc.).
+
+```python Code
+from crewai import Agent
+from crewai_tools import SerperDevTool
+
+# Create an agent
+researcher = Agent(
+ role="AI Technology Researcher",
+ goal="Research the latest AI developments",
+ tools=[SerperDevTool()],
+ verbose=True
+)
+
+# Use kickoff() to interact directly with the agent
+result = researcher.kickoff("What are the latest developments in language models?")
+
+# Access the raw response
+print(result.raw)
+```
+
+### Parameters and Return Values
+
+| Parameter | Type | Description |
+| :---------------- | :--------------------------------- | :------------------------------------------------------------------------ |
+| `messages` | `Union[str, List[Dict[str, str]]]` | Either a string query or a list of message dictionaries with role/content |
+| `response_format` | `Optional[Type[Any]]` | Optional Pydantic model for structured output |
+
+The method returns a `LiteAgentOutput` object with the following properties:
+
+- `raw`: String containing the raw output text
+- `pydantic`: Parsed Pydantic model (if a `response_format` was provided)
+- `agent_role`: Role of the agent that produced the output
+- `usage_metrics`: Token usage metrics for the execution
+
+### Structured Output
+
+You can get structured output by providing a Pydantic model as the `response_format`:
+
+```python Code
+from pydantic import BaseModel
+from typing import List
+
+class ResearchFindings(BaseModel):
+ main_points: List[str]
+ key_technologies: List[str]
+ future_predictions: str
+
+# Get structured output
+result = researcher.kickoff(
+ "Summarize the latest developments in AI for 2025",
+ response_format=ResearchFindings
+)
+
+# Access structured data
+print(result.pydantic.main_points)
+print(result.pydantic.future_predictions)
+```
+
+### Multiple Messages
+
+You can also provide a conversation history as a list of message dictionaries:
+
+```python Code
+messages = [
+ {"role": "user", "content": "I need information about large language models"},
+ {"role": "assistant", "content": "I'd be happy to help with that! What specifically would you like to know?"},
+ {"role": "user", "content": "What are the latest developments in 2025?"}
+]
+
+result = researcher.kickoff(messages)
+```
+
+### Async Support
+
+An asynchronous version is available via `kickoff_async()` with the same parameters:
+
+```python Code
+import asyncio
+
+async def main():
+ result = await researcher.kickoff_async("What are the latest developments in AI?")
+ print(result.raw)
+
+asyncio.run(main())
+```
+
+
+ The `kickoff()` method uses a `LiteAgent` internally, which provides a simpler
+ execution flow while preserving all of the agent's configuration (role, goal,
+ backstory, tools, etc.).
+
+
+## Important Considerations and Best Practices
+
+### Security and Code Execution
+
+
+ `allow_code_execution` and `code_execution_mode` are deprecated and `CodeInterpreterTool` has been removed. Use a dedicated sandbox service such as [E2B](https://e2b.dev) or [Modal](https://modal.com) for secure code execution.
+
+
+### Performance Optimization
+
+- Use `respect_context_window: true` to prevent token limit issues
+- Set appropriate `max_rpm` to avoid rate limiting
+- Enable `cache: true` to improve performance for repetitive tasks
+- Adjust `max_iter` and `max_retry_limit` based on task complexity
+
+### Memory and Context Management
+
+- Leverage `knowledge_sources` for domain-specific information
+- Configure `embedder` when using custom embedding models
+- Use custom templates (`system_template`, `prompt_template`, `response_template`) for fine-grained control over agent behavior
+
+### Advanced Features
+
+- Enable `reasoning: true` for agents that need to plan and reflect before executing complex tasks
+- Set appropriate `max_reasoning_attempts` to control planning iterations (None for unlimited attempts)
+- Use `inject_date: true` to provide agents with current date awareness for time-sensitive tasks
+- Customize the date format with `date_format` using standard Python datetime format codes
+- Enable `multimodal: true` for agents that need to process both text and visual content
+
+### Agent Collaboration
+
+- Enable `allow_delegation: true` when agents need to work together
+- Use `step_callback` to monitor and log agent interactions
+- Consider using different LLMs for different purposes:
+ - Main `llm` for complex reasoning
+ - `function_calling_llm` for efficient tool usage
+
+### Date Awareness and Reasoning
+
+- Use `inject_date: true` to provide agents with current date awareness for time-sensitive tasks
+- Customize the date format with `date_format` using standard Python datetime format codes
+- Valid format codes include: %Y (year), %m (month), %d (day), %B (full month name), etc.
+- Invalid date formats will be logged as warnings and will not modify the task description
+- Enable `reasoning: true` for complex tasks that benefit from upfront planning and reflection
+
+### Model Compatibility
+
+- Set `use_system_prompt: false` for older models that don't support system messages
+- Ensure your chosen `llm` supports the features you need (like function calling)
+
+## Troubleshooting Common Issues
+
+1. **Rate Limiting**: If you're hitting API rate limits:
+
+ - Implement appropriate `max_rpm`
+ - Use caching for repetitive operations
+ - Consider batching requests
+
+2. **Context Window Errors**: If you're exceeding context limits:
+
+ - Enable `respect_context_window`
+ - Use more efficient prompts
+ - Clear agent memory periodically
+
+3. **Code Execution Issues**: If code execution fails:
+
+ - Verify Docker is installed for safe mode
+ - Check execution permissions
+ - Review code sandbox settings
+
+4. **Memory Issues**: If agent responses seem inconsistent:
+ - Check knowledge source configuration
+ - Review conversation history management
+
+Remember that agents are most effective when configured according to their specific use case. Take time to understand your requirements and adjust these parameters accordingly.
diff --git a/docs/v1.15.1/en/concepts/checkpointing.mdx b/docs/v1.15.1/en/concepts/checkpointing.mdx
new file mode 100644
index 000000000..1cc21b5b2
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/checkpointing.mdx
@@ -0,0 +1,423 @@
+---
+title: Checkpointing
+description: Automatically save execution state so crews, flows, and agents can resume after failures.
+icon: floppy-disk
+mode: "wide"
+---
+
+Checkpointing saves a snapshot of execution state during a run so a crew, flow, or agent can resume after a failure or be forked into an alternate branch.
+
+
+
+ How checkpointing works: events, storage, and inheritance.
+
+
+ A 5-minute walkthrough: run, interrupt, resume.
+
+
+ Task-focused recipes for common workflows.
+
+
+ `CheckpointConfig`, events, providers, and CLI.
+
+
+
+## Explanation
+
+### What a checkpoint is
+
+A checkpoint captures everything CrewAI needs to recreate a run mid-flight: the full state of the crew, flow, or agent — configuration, agent memory and knowledge sources, task progress, intermediate outputs, internal state and attributes — alongside the kickoff inputs, the event history up to that point, and a lineage ID that ties the checkpoint to the run it came from.
+
+Restoring rebuilds that state and continues. Completed tasks are skipped, memory and knowledge are rehydrated, and downstream work runs against the same outputs the original run produced. Forking does the same restore under a new lineage, so the new branch and the original run can write checkpoints side by side without overwriting each other.
+
+### When checkpoints are written
+
+Checkpointing is event-driven. The runtime subscribes to events you select via `on_events` and writes a checkpoint each time one fires. The default `task_completed` produces one checkpoint per finished task — a sensible tradeoff between granularity and disk use. Higher-frequency events like `llm_call_completed` are available for fine-grained recovery but write far more files.
+
+### Storage
+
+Two providers ship with CrewAI:
+
+- `JsonProvider` writes one file per checkpoint. Human-readable and easy to inspect.
+- `SqliteProvider` writes to a single SQLite database. Better for high-frequency checkpointing.
+
+Both prune oldest checkpoints when `max_checkpoints` is set.
+
+
+Auto-checkpoint writes (event-driven) are best-effort: a failed write is logged and the run continues. Manual `state.checkpoint()` and `state.acheckpoint()` calls re-raise on failure.
+
+
+### Inheritance model
+
+`Crew`, `Flow`, and `Agent` all accept a `checkpoint` argument. Children inherit from their parent unless they set their own value or pass `False` to opt out. Enable checkpointing once on the crew and every agent participates, or selectively exclude one agent.
+
+## Tutorial: Resume a failing crew
+
+This walkthrough takes ~5 minutes. You will run a two-task crew, kill it midway, and resume from the saved checkpoint.
+
+
+
+ ```python
+ from crewai import Agent, Crew, Task
+
+ researcher = Agent(role="Researcher", goal="Research", backstory="Expert")
+ writer = Agent(role="Writer", goal="Write", backstory="Expert")
+
+ crew = Crew(
+ agents=[researcher, writer],
+ tasks=[
+ Task(description="Research AI trends", agent=researcher, expected_output="bullets"),
+ Task(description="Write a summary", agent=writer, expected_output="paragraph"),
+ ],
+ checkpoint=True,
+ )
+ ```
+
+
+ ```python
+ result = crew.kickoff()
+ ```
+
+ Press `Ctrl+C` after the first task finishes. Look in `./.checkpoints/` — a file named `_.json` is the checkpoint.
+
+
+ ```python
+ from crewai import CheckpointConfig
+
+ result = crew.kickoff(
+ from_checkpoint=CheckpointConfig(
+ restore_from="./.checkpoints/_.json",
+ ),
+ )
+ ```
+
+ The research task is skipped, the writer runs against the saved research output, and the crew finishes.
+
+
+
+## How-to guides
+
+
+
+ ```python
+ crew = Crew(agents=[...], tasks=[...], checkpoint=True)
+ ```
+
+ Writes to `./.checkpoints/` on every `task_completed`.
+
+
+
+ ```python
+ from crewai import Crew, CheckpointConfig
+
+ crew = Crew(
+ agents=[...],
+ tasks=[...],
+ checkpoint=CheckpointConfig(
+ location="./my_checkpoints",
+ on_events=["task_completed", "crew_kickoff_completed"],
+ max_checkpoints=5,
+ ),
+ )
+ ```
+
+
+
+
+ ```python JsonProvider
+ from crewai import Crew, CheckpointConfig
+ from crewai.state import JsonProvider
+
+ crew = Crew(
+ agents=[...],
+ tasks=[...],
+ checkpoint=CheckpointConfig(
+ location="./my_checkpoints",
+ provider=JsonProvider(),
+ max_checkpoints=5,
+ ),
+ )
+ ```
+ ```python SqliteProvider
+ from crewai import Crew, CheckpointConfig
+ from crewai.state import SqliteProvider
+
+ crew = Crew(
+ agents=[...],
+ tasks=[...],
+ checkpoint=CheckpointConfig(
+ location="./.checkpoints.db",
+ provider=SqliteProvider(),
+ max_checkpoints=50,
+ ),
+ )
+ ```
+
+
+
+ SQLite enables WAL journal mode for concurrent reads. Prefer it for high-frequency checkpointing.
+
+
+
+
+ ```python
+ crew = Crew(
+ agents=[
+ Agent(role="Researcher", ...),
+ Agent(role="Writer", ..., checkpoint=False),
+ ],
+ tasks=[...],
+ checkpoint=True,
+ )
+ ```
+
+
+
+ `fork()` restores a checkpoint under a fresh lineage so the new run does not collide with the original.
+
+ ```python
+ config = CheckpointConfig(restore_from="./my_checkpoints/.json")
+ crew = Crew.fork(config, branch="experiment-a")
+ result = crew.kickoff(inputs={"strategy": "aggressive"})
+ ```
+
+ The `branch` label is optional; one is generated if omitted.
+
+
+
+
+
+ ```python
+ crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, write_task, review_task],
+ checkpoint=CheckpointConfig(location="./crew_cp"),
+ )
+ ```
+
+ Default trigger: `task_completed`.
+
+
+ ```python
+ from crewai.flow.flow import Flow, start, listen
+ from crewai import CheckpointConfig
+
+ class MyFlow(Flow):
+ @start()
+ def step_one(self):
+ return "data"
+
+ @listen(step_one)
+ def step_two(self, data):
+ return process(data)
+
+ flow = MyFlow(
+ checkpoint=CheckpointConfig(
+ location="./flow_cp",
+ on_events=["method_execution_finished"],
+ ),
+ )
+ result = flow.kickoff()
+ ```
+
+
+ ```python
+ agent = Agent(
+ role="Researcher",
+ goal="Research topics",
+ backstory="Expert researcher",
+ checkpoint=CheckpointConfig(
+ location="./agent_cp",
+ on_events=["lite_agent_execution_completed"],
+ ),
+ )
+ result = agent.kickoff(messages=[{"role": "user", "content": "Research AI trends"}])
+ ```
+
+
+
+
+
+ Register a handler on any event and call `state.checkpoint()`.
+
+
+ ```python Sync
+ from __future__ import annotations
+
+ from typing import TYPE_CHECKING, Any
+
+ from crewai.events.event_bus import crewai_event_bus
+ from crewai.events.types.llm_events import LLMCallCompletedEvent
+
+ if TYPE_CHECKING:
+ from crewai.state.runtime import RuntimeState
+
+
+ @crewai_event_bus.on(LLMCallCompletedEvent)
+ def on_llm_done(source: Any, event: LLMCallCompletedEvent, state: RuntimeState) -> None:
+ path = state.checkpoint("./my_checkpoints")
+ print(f"Saved checkpoint: {path}")
+ ```
+ ```python Async
+ from __future__ import annotations
+
+ from typing import TYPE_CHECKING, Any
+
+ from crewai.events.event_bus import crewai_event_bus
+ from crewai.events.types.llm_events import LLMCallCompletedEvent
+
+ if TYPE_CHECKING:
+ from crewai.state.runtime import RuntimeState
+
+
+ @crewai_event_bus.on(LLMCallCompletedEvent)
+ async def on_llm_done_async(source: Any, event: LLMCallCompletedEvent, state: RuntimeState) -> None:
+ path = await state.acheckpoint("./my_checkpoints")
+ print(f"Saved checkpoint: {path}")
+ ```
+
+
+ A `state` argument is supplied automatically when the handler takes three parameters. See [Event Listeners](/en/concepts/event-listener) for the full event catalog.
+
+
+
+ ```bash
+ crewai checkpoint
+ crewai checkpoint --location ./my_checkpoints
+ crewai checkpoint --location ./.checkpoints.db
+ ```
+
+
+
+
+
+ The left panel groups checkpoints by branch; forks nest under their parent. Selecting a checkpoint opens the detail panel with metadata, entity state, and task progress. **Resume** continues the run; **Fork** starts a new branch.
+
+
+
+
+
+ The detail panel exposes two editable areas:
+
+ - **Inputs** — original kickoff inputs, pre-filled and editable.
+
+
+
+
+
+ - **Task outputs** — outputs of completed tasks. Editing an output and hitting **Fork** invalidates downstream tasks so they re-run against the modified context.
+
+
+
+
+
+
+
+
+
+
+ Useful for "what if" exploration: fork, tweak, observe.
+
+
+
+
+ ```bash
+ crewai checkpoint list ./my_checkpoints
+ crewai checkpoint info ./my_checkpoints/.json
+ crewai checkpoint info ./.checkpoints.db
+ ```
+
+
+
+## Reference
+
+### `CheckpointConfig`
+
+
+ Storage destination. A directory for `JsonProvider`, a database file path for `SqliteProvider`.
+
+
+
+ Event types that trigger a checkpoint. `CheckpointEventType` is a `Literal` — your type checker will autocomplete and reject unsupported values. See [event types](#event-types) for the full list.
+
+
+
+ Storage backend. Either `JsonProvider` or `SqliteProvider`.
+
+
+
+ Maximum checkpoints to retain. Oldest are pruned after each write.
+
+
+
+ Checkpoint to restore from when passed via `from_checkpoint`.
+
+
+### `checkpoint` field values
+
+Accepted by `Crew`, `Flow`, and `Agent`.
+
+
+ Inherit from parent.
+
+
+
+ Enable with defaults.
+
+
+
+ Explicit opt-out. Stops inheritance.
+
+
+
+ Custom configuration.
+
+
+### Event types
+
+`on_events` accepts any combination of `CheckpointEventType` values. The default `["task_completed"]` writes one checkpoint per finished task; `["*"]` matches every event.
+
+
+`["*"]` and high-frequency events like `llm_call_completed` write many checkpoints and can degrade performance. Pair them with `max_checkpoints`.
+
+
+
+
+- **Task** — `task_started`, `task_completed`, `task_failed`, `task_evaluation`
+- **Crew** — `crew_kickoff_started`, `crew_kickoff_completed`, `crew_kickoff_failed`, `crew_train_started`, `crew_train_completed`, `crew_train_failed`, `crew_test_started`, `crew_test_completed`, `crew_test_failed`, `crew_test_result`
+- **Agent** — `agent_execution_started`, `agent_execution_completed`, `agent_execution_error`, `lite_agent_execution_started`, `lite_agent_execution_completed`, `lite_agent_execution_error`, `agent_evaluation_started`, `agent_evaluation_completed`, `agent_evaluation_failed`
+- **Flow** — `flow_created`, `flow_started`, `flow_finished`, `flow_paused`, `method_execution_started`, `method_execution_finished`, `method_execution_failed`, `method_execution_paused`, `human_feedback_requested`, `human_feedback_received`, `flow_input_requested`, `flow_input_received`
+- **LLM** — `llm_call_started`, `llm_call_completed`, `llm_call_failed`, `llm_stream_chunk`, `llm_thinking_chunk`
+- **LLM Guardrail** — `llm_guardrail_started`, `llm_guardrail_completed`, `llm_guardrail_failed`
+- **Tool** — `tool_usage_started`, `tool_usage_finished`, `tool_usage_error`, `tool_validate_input_error`, `tool_selection_error`, `tool_execution_error`
+- **Memory** — `memory_save_started`, `memory_save_completed`, `memory_save_failed`, `memory_query_started`, `memory_query_completed`, `memory_query_failed`, `memory_retrieval_started`, `memory_retrieval_completed`, `memory_retrieval_failed`
+- **Knowledge** — `knowledge_search_query_started`, `knowledge_search_query_completed`, `knowledge_query_started`, `knowledge_query_completed`, `knowledge_query_failed`, `knowledge_search_query_failed`
+- **Reasoning** — `agent_reasoning_started`, `agent_reasoning_completed`, `agent_reasoning_failed`
+- **MCP** — `mcp_connection_started`, `mcp_connection_completed`, `mcp_connection_failed`, `mcp_tool_execution_started`, `mcp_tool_execution_completed`, `mcp_tool_execution_failed`, `mcp_config_fetch_failed`
+- **Observation** — `step_observation_started`, `step_observation_completed`, `step_observation_failed`, `plan_refinement`, `plan_replan_triggered`, `goal_achieved_early`
+- **Skill** — `skill_discovery_started`, `skill_discovery_completed`, `skill_loaded`, `skill_activated`, `skill_load_failed`
+- **Logging** — `agent_logs_started`, `agent_logs_execution`
+- **A2A** — `a2a_delegation_started`, `a2a_delegation_completed`, `a2a_conversation_started`, `a2a_conversation_completed`, `a2a_message_sent`, `a2a_response_received`, `a2a_polling_started`, `a2a_polling_status`, `a2a_push_notification_registered`, `a2a_push_notification_received`, `a2a_push_notification_sent`, `a2a_push_notification_timeout`, `a2a_streaming_started`, `a2a_streaming_chunk`, `a2a_agent_card_fetched`, `a2a_authentication_failed`, `a2a_artifact_received`, `a2a_connection_error`, `a2a_server_task_started`, `a2a_server_task_completed`, `a2a_server_task_canceled`, `a2a_server_task_failed`, `a2a_parallel_delegation_started`, `a2a_parallel_delegation_completed`, `a2a_transport_negotiated`, `a2a_content_type_negotiated`, `a2a_context_created`, `a2a_context_expired`, `a2a_context_idle`, `a2a_context_completed`, `a2a_context_pruned`
+- **System signals** — `SIGTERM`, `SIGINT`, `SIGHUP`, `SIGTSTP`, `SIGCONT`
+- **Wildcard** — `"*"` matches every event.
+
+
+
+### Storage providers
+
+
+ One file per checkpoint, named `_.json` inside `location`.
+
+
+
+ Single database file at `location` with WAL journaling.
+
+
+### CLI
+
+| Command | Purpose |
+|:--------|:--------|
+| `crewai checkpoint` | Launch the TUI; auto-detect storage. |
+| `crewai checkpoint --location ` | Launch the TUI against a specific location. |
+| `crewai checkpoint list ` | List checkpoints. |
+| `crewai checkpoint info ` | Inspect a checkpoint file or the latest entry in a SQLite database. |
diff --git a/docs/v1.15.1/en/concepts/cli.mdx b/docs/v1.15.1/en/concepts/cli.mdx
new file mode 100644
index 000000000..367d34800
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/cli.mdx
@@ -0,0 +1,556 @@
+---
+title: CLI
+description: Learn how to use the CrewAI CLI to interact with CrewAI.
+icon: terminal
+mode: "wide"
+---
+
+
+ Since release 0.140.0, CrewAI AMP started a process of migrating their login
+ provider. As such, the authentication flow via CLI was updated. Users that use
+ Google to login, or that created their account after July 3rd, 2025 will be
+ unable to log in with older versions of the `crewai` library.
+
+
+## Overview
+
+The CrewAI CLI provides a set of commands to interact with CrewAI, allowing you to create, train, run, and manage crews & flows.
+
+## Installation
+
+To use the CrewAI CLI, make sure you have CrewAI installed:
+
+```shell Terminal
+pip install crewai
+```
+
+## Basic Usage
+
+The basic structure of a CrewAI CLI command is:
+
+```shell Terminal
+crewai [COMMAND] [OPTIONS] [ARGUMENTS]
+```
+
+## Available Commands
+
+### 1. Create
+
+Create a new crew or flow.
+
+```shell Terminal
+crewai create [OPTIONS] TYPE NAME
+```
+
+- `TYPE`: Choose between "crew" or "flow"
+- `NAME`: Name of the crew or flow
+
+Example:
+
+```shell Terminal
+crewai create crew my_new_crew
+crewai create flow my_new_flow
+```
+
+By default, `crewai create crew` creates a JSON-first crew project with `crew.jsonc` and `agents/*.jsonc`. Use `crewai create crew my_new_crew --classic` only when you want the older Python/YAML scaffold with `crew.py`, `config/agents.yaml`, and `config/tasks.yaml`.
+
+### 2. Version
+
+Show the installed version of CrewAI.
+
+```shell Terminal
+crewai version [OPTIONS]
+```
+
+- `--tools`: (Optional) Show the installed version of CrewAI tools
+
+Example:
+
+```shell Terminal
+crewai version
+crewai version --tools
+```
+
+### 3. Train
+
+Train the crew for a specified number of iterations.
+
+```shell Terminal
+crewai train [OPTIONS]
+```
+
+- `-n, --n_iterations INTEGER`: Number of iterations to train the crew (default: 5)
+- `-f, --filename TEXT`: Path to a custom file for training (default: "trained_agents_data.pkl")
+
+Example:
+
+```shell Terminal
+crewai train -n 10 -f my_training_data.pkl
+```
+
+### 4. Replay
+
+Replay the crew execution from a specific task.
+
+```shell Terminal
+crewai replay [OPTIONS]
+```
+
+- `-t, --task_id TEXT`: Replay the crew from this task ID, including all subsequent tasks
+
+Example:
+
+```shell Terminal
+crewai replay -t task_123456
+```
+
+### 5. Log-tasks-outputs
+
+Retrieve your latest crew.kickoff() task outputs.
+
+```shell Terminal
+crewai log-tasks-outputs
+```
+
+### 6. Reset-memories
+
+Reset the crew memories (long, short, entity, latest_crew_kickoff_outputs).
+
+```shell Terminal
+crewai reset-memories [OPTIONS]
+```
+
+- `-l, --long`: Reset LONG TERM memory
+- `-s, --short`: Reset SHORT TERM memory
+- `-e, --entities`: Reset ENTITIES memory
+- `-k, --kickoff-outputs`: Reset LATEST KICKOFF TASK OUTPUTS
+- `-kn, --knowledge`: Reset KNOWLEDGE storage
+- `-akn, --agent-knowledge`: Reset AGENT KNOWLEDGE storage
+- `-a, --all`: Reset ALL memories
+
+Example:
+
+```shell Terminal
+crewai reset-memories --long --short
+crewai reset-memories --all
+```
+
+### 7. Test
+
+Test the crew and evaluate the results.
+
+```shell Terminal
+crewai test [OPTIONS]
+```
+
+- `-n, --n_iterations INTEGER`: Number of iterations to test the crew (default: 3)
+- `-m, --model TEXT`: LLM Model to run the tests on the Crew (default: "gpt-4o-mini")
+
+Example:
+
+```shell Terminal
+crewai test -n 5 -m gpt-3.5-turbo
+```
+
+### 8. Run
+
+Run the crew or flow.
+
+```shell Terminal
+crewai run
+```
+
+
+ Starting from version 0.103.0, the `crewai run` command can be used to run
+ both standard crews and flows. For flows, it automatically detects the type
+ from pyproject.toml and runs the appropriate command. This is now the
+ recommended way to run both crews and flows.
+
+
+
+ Make sure to run these commands from the directory where your CrewAI project
+ is set up. Some commands may require additional configuration or setup within
+ your project structure.
+
+
+### 9. Chat
+
+Starting in version `0.98.0`, when you run the `crewai chat` command, you start an interactive session with your crew. The AI assistant will guide you by asking for necessary inputs to execute the crew. Once all inputs are provided, the crew will execute its tasks.
+
+After receiving the results, you can continue interacting with the assistant for further instructions or questions.
+
+```shell Terminal
+crewai chat
+```
+
+
+Ensure you execute these commands from your CrewAI project's root directory.
+
+
+IMPORTANT: Set the `chat_llm` property in your crew definition to enable this command.
+
+For JSON-first crews, add it to `crew.jsonc`:
+
+```jsonc
+{
+ "name": "My Crew",
+ "agents": ["researcher"],
+ "tasks": [],
+ "chat_llm": "openai/gpt-4o"
+}
+```
+
+For classic Python/YAML crews, set it in `crew.py`:
+
+```python
+@crew
+def crew(self) -> Crew:
+ return Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ verbose=True,
+ chat_llm="gpt-4o", # LLM for chat orchestration
+ )
+```
+
+
+
+### 10. Deploy
+
+Deploy the crew or flow to [CrewAI AMP](https://app.crewai.com).
+
+- **Authentication**: You need to be authenticated to deploy to CrewAI AMP.
+ You can login or create an account with:
+
+ ```shell Terminal
+ crewai login
+ ```
+
+- **Create a deployment**: Once you are authenticated, you can create a deployment for your crew or flow from the root of your localproject.
+ ```shell Terminal
+ crewai deploy create
+ ```
+ - Reads your local project configuration.
+ - Prompts you to confirm the environment variables (like `OPENAI_API_KEY`, `SERPER_API_KEY`) found locally. These will be securely stored with the deployment on the Enterprise platform. Ensure your sensitive keys are correctly configured locally (e.g., in a `.env` file) before running this.
+
+### 11. Organization Management
+
+Manage your CrewAI AMP organizations.
+
+```shell Terminal
+crewai org [COMMAND] [OPTIONS]
+```
+
+#### Commands:
+
+- `list`: List all organizations you belong to
+
+```shell Terminal
+crewai org list
+```
+
+- `current`: Display your currently active organization
+
+```shell Terminal
+crewai org current
+```
+
+- `switch`: Switch to a specific organization
+
+```shell Terminal
+crewai org switch
+```
+
+
+ You must be authenticated to CrewAI AMP to use these organization management
+ commands.
+
+
+- **Create a deployment** (continued):
+
+ - Links the deployment to the corresponding remote GitHub repository (it usually detects this automatically).
+
+- **Deploy the Crew**: Once you are authenticated, you can deploy your crew or flow to CrewAI AMP.
+
+ ```shell Terminal
+ crewai deploy push
+ ```
+
+ - Initiates the deployment process on the CrewAI AMP platform.
+ - Upon successful initiation, it will output the Deployment created successfully! message along with the Deployment Name and a unique Deployment ID (UUID).
+
+- **Deployment Status**: You can check the status of your deployment with:
+
+ ```shell Terminal
+ crewai deploy status
+ ```
+
+ This fetches the latest deployment status of your most recent deployment attempt (e.g., `Building Images for Crew`, `Deploy Enqueued`, `Online`).
+
+- **Deployment Logs**: You can check the logs of your deployment with:
+
+ ```shell Terminal
+ crewai deploy logs
+ ```
+
+ This streams the deployment logs to your terminal.
+
+- **List deployments**: You can list all your deployments with:
+
+ ```shell Terminal
+ crewai deploy list
+ ```
+
+ This lists all your deployments.
+
+- **Delete a deployment**: You can delete a deployment with:
+
+ ```shell Terminal
+ crewai deploy remove
+ ```
+
+ This deletes the deployment from the CrewAI AMP platform.
+
+- **Help Command**: You can get help with the CLI with:
+ ```shell Terminal
+ crewai deploy --help
+ ```
+ This shows the help message for the CrewAI Deploy CLI.
+
+Watch this video tutorial for a step-by-step demonstration of deploying your crew to [CrewAI AMP](http://app.crewai.com) using the CLI.
+
+
+
+### 11. Login
+
+Authenticate with CrewAI AMP 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
+
+### 12. API Keys
+
+When running the `crewai create crew` command, the CLI shows a list of available LLM providers, followed by model selection for your chosen provider. The selected model is saved in the generated `.env` file and each generated agent JSONC file can set its own `llm`.
+
+Once you've selected an LLM provider and model, you will be prompted for API keys.
+
+#### Available LLM Providers
+
+Here's a list of the most popular LLM providers suggested by the CLI:
+
+- OpenAI
+- Groq
+- Anthropic
+- Google Gemini
+- SambaNova
+
+When you select a provider, the CLI will then show you available models for that provider and prompt you to enter your API key.
+
+#### Other Options
+
+If you select "other", you will be able to select from a list of LiteLLM supported providers.
+
+When you select a provider, the CLI will prompt you to enter the Key name and the API key.
+
+See the following link for each provider's key name:
+
+- [LiteLLM Providers](https://docs.litellm.ai/docs/providers)
+
+### 13. Configuration Management
+
+Manage CLI configuration settings for CrewAI.
+
+```shell Terminal
+crewai config [COMMAND] [OPTIONS]
+```
+
+#### Commands:
+
+- `list`: Display all CLI configuration parameters
+
+```shell Terminal
+crewai config list
+```
+
+- `set`: Set a CLI configuration parameter
+
+```shell Terminal
+crewai config set
+```
+
+- `reset`: Reset all CLI configuration parameters to default values
+
+```shell Terminal
+crewai config reset
+```
+
+#### Available Configuration Parameters
+
+- `enterprise_base_url`: Base URL of the CrewAI AMP instance
+- `oauth2_provider`: OAuth2 provider used for authentication (e.g., workos, okta, auth0)
+- `oauth2_audience`: OAuth2 audience value, typically used to identify the target API or resource
+- `oauth2_client_id`: OAuth2 client ID issued by the provider, used during authentication requests
+- `oauth2_domain`: OAuth2 provider's domain (e.g., your-org.auth0.com) used for issuing tokens
+
+#### Examples
+
+Display current configuration:
+
+```shell Terminal
+crewai config list
+```
+
+Example output:
+| Setting | Value | Description |
+| :------------------ | :----------------------- | :---------------------------------------------------------- |
+| enterprise_base_url | https://app.crewai.com | Base URL of the CrewAI AMP instance |
+| org_name | Not set | Name of the currently active organization |
+| org_uuid | Not set | UUID of the currently active organization |
+| oauth2_provider | workos | OAuth2 provider (e.g., workos, okta, auth0) |
+| oauth2_audience | client_01YYY | Audience identifying the target API/resource |
+| oauth2_client_id | client_01XXX | OAuth2 client ID issued by the provider |
+| oauth2_domain | login.crewai.com | Provider domain (e.g., your-org.auth0.com) |
+
+Set the enterprise base URL:
+
+```shell Terminal
+crewai config set enterprise_base_url https://my-enterprise.crewai.com
+```
+
+Set OAuth2 provider:
+
+```shell Terminal
+crewai config set oauth2_provider auth0
+```
+
+Set OAuth2 domain:
+
+```shell Terminal
+crewai config set oauth2_domain my-company.auth0.com
+```
+
+Reset all configuration to defaults:
+
+```shell Terminal
+crewai config reset
+```
+
+
+ After resetting configuration, re-run `crewai login` to authenticate again.
+
+
+### 14. Trace Management
+
+Manage trace collection preferences for your Crew and Flow executions.
+
+```shell Terminal
+crewai traces [COMMAND]
+```
+
+#### Commands:
+
+- `enable`: Enable trace collection for crew/flow executions
+
+```shell Terminal
+crewai traces enable
+```
+
+- `disable`: Disable trace collection for crew/flow executions
+
+```shell Terminal
+crewai traces disable
+```
+
+- `status`: Show current trace collection status
+
+```shell Terminal
+crewai traces status
+```
+
+#### How Tracing Works
+
+Trace collection is controlled by checking three settings in priority order:
+
+1. **Explicit flag in code** (highest priority - can enable OR disable):
+
+ ```python
+ crew = Crew(agents=[...], tasks=[...], tracing=True) # Always enable
+ crew = Crew(agents=[...], tasks=[...], tracing=False) # Always disable
+ crew = Crew(agents=[...], tasks=[...]) # Check lower priorities (default)
+ ```
+
+ - `tracing=True` will **always enable** tracing (overrides everything)
+ - `tracing=False` will **always disable** tracing (overrides everything)
+ - `tracing=None` or omitted will check lower priority settings
+
+2. **Environment variable** (second priority):
+
+ ```env
+ CREWAI_TRACING_ENABLED=true
+ ```
+
+ - Checked only if `tracing` is not explicitly set to `True` or `False` in code
+ - Set to `true` or `1` to enable tracing
+
+3. **User preference** (lowest priority):
+ ```shell Terminal
+ crewai traces enable
+ ```
+ - Checked only if `tracing` is not set in code and `CREWAI_TRACING_ENABLED` is not set to `true`
+ - Running `crewai traces enable` is sufficient to enable tracing by itself
+
+
+**To enable tracing**, use any one of these methods:
+- Set `tracing=True` in your Crew/Flow code, OR
+- Add `CREWAI_TRACING_ENABLED=true` to your `.env` file, OR
+- Run `crewai traces enable`
+
+**To disable tracing**, use any ONE of these methods:
+
+- Set `tracing=False` in your Crew/Flow code (overrides everything), OR
+- Remove or set to `false` the `CREWAI_TRACING_ENABLED` env var, OR
+- Run `crewai traces disable`
+
+Higher priority settings override lower ones.
+
+
+
+
+ For more information about tracing, see the [Tracing
+ documentation](/observability/tracing).
+
+
+
+ CrewAI CLI handles authentication to the Tool Repository automatically when
+ adding packages to your project. Just append `crewai` before any `uv` command
+ to use it. E.g. `crewai uv add requests`. For more information, see [Tool
+ Repository](https://docs.crewai.com/enterprise/features/tool-repository) docs.
+
+
+
+ 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/v1.15.1/en/concepts/collaboration.mdx b/docs/v1.15.1/en/concepts/collaboration.mdx
new file mode 100644
index 000000000..867db5b33
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/collaboration.mdx
@@ -0,0 +1,363 @@
+---
+title: Collaboration
+description: How to enable agents to work together, delegate tasks, and communicate effectively within CrewAI teams.
+icon: screen-users
+mode: "wide"
+---
+
+## Overview
+
+Collaboration in CrewAI enables agents to work together as a team by delegating tasks and asking questions to leverage each other's expertise. When `allow_delegation=True`, agents automatically gain access to powerful collaboration tools.
+
+## Quick Start: Enable Collaboration
+
+```python
+from crewai import Agent, Crew, Task
+
+# Enable collaboration for agents
+researcher = Agent(
+ role="Research Specialist",
+ goal="Conduct thorough research on any topic",
+ backstory="Expert researcher with access to various sources",
+ allow_delegation=True, # 🔑 Key setting for collaboration
+ verbose=True
+)
+
+writer = Agent(
+ role="Content Writer",
+ goal="Create engaging content based on research",
+ backstory="Skilled writer who transforms research into compelling content",
+ allow_delegation=True, # 🔑 Enables asking questions to other agents
+ verbose=True
+)
+
+# Agents can now collaborate automatically
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[...],
+ verbose=True
+)
+```
+
+## How Agent Collaboration Works
+
+When `allow_delegation=True`, CrewAI automatically provides agents with two powerful tools:
+
+### 1. **Delegate Work Tool**
+Allows agents to assign tasks to teammates with specific expertise.
+
+```python
+# Agent automatically gets this tool:
+# Delegate work to coworker(task: str, context: str, coworker: str)
+```
+
+### 2. **Ask Question Tool**
+Enables agents to ask specific questions to gather information from colleagues.
+
+```python
+# Agent automatically gets this tool:
+# Ask question to coworker(question: str, context: str, coworker: str)
+```
+
+## Collaboration in Action
+
+Here's a complete example showing agents collaborating on a content creation task:
+
+```python
+from crewai import Agent, Crew, Task, Process
+
+# Create collaborative agents
+researcher = Agent(
+ role="Research Specialist",
+ goal="Find accurate, up-to-date information on any topic",
+ backstory="""You're a meticulous researcher with expertise in finding
+ reliable sources and fact-checking information across various domains.""",
+ allow_delegation=True,
+ verbose=True
+)
+
+writer = Agent(
+ role="Content Writer",
+ goal="Create engaging, well-structured content",
+ backstory="""You're a skilled content writer who excels at transforming
+ research into compelling, readable content for different audiences.""",
+ allow_delegation=True,
+ verbose=True
+)
+
+editor = Agent(
+ role="Content Editor",
+ goal="Ensure content quality and consistency",
+ backstory="""You're an experienced editor with an eye for detail,
+ ensuring content meets high standards for clarity and accuracy.""",
+ allow_delegation=True,
+ verbose=True
+)
+
+# Create a task that encourages collaboration
+article_task = Task(
+ description="""Write a comprehensive 1000-word article about 'The Future of AI in Healthcare'.
+
+ The article should include:
+ - Current AI applications in healthcare
+ - Emerging trends and technologies
+ - Potential challenges and ethical considerations
+ - Expert predictions for the next 5 years
+
+ Collaborate with your teammates to ensure accuracy and quality.""",
+ expected_output="A well-researched, engaging 1000-word article with proper structure and citations",
+ agent=writer # Writer leads, but can delegate research to researcher
+)
+
+# Create collaborative crew
+crew = Crew(
+ agents=[researcher, writer, editor],
+ tasks=[article_task],
+ process=Process.sequential,
+ verbose=True
+)
+
+result = crew.kickoff()
+```
+
+## Collaboration Patterns
+
+### Pattern 1: Research → Write → Edit
+```python
+research_task = Task(
+ description="Research the latest developments in quantum computing",
+ expected_output="Comprehensive research summary with key findings and sources",
+ agent=researcher
+)
+
+writing_task = Task(
+ description="Write an article based on the research findings",
+ expected_output="Engaging 800-word article about quantum computing",
+ agent=writer,
+ context=[research_task] # Gets research output as context
+)
+
+editing_task = Task(
+ description="Edit and polish the article for publication",
+ expected_output="Publication-ready article with improved clarity and flow",
+ agent=editor,
+ context=[writing_task] # Gets article draft as context
+)
+```
+
+### Pattern 2: Collaborative Single Task
+```python
+collaborative_task = Task(
+ description="""Create a marketing strategy for a new AI product.
+
+ Writer: Focus on messaging and content strategy
+ Researcher: Provide market analysis and competitor insights
+
+ Work together to create a comprehensive strategy.""",
+ expected_output="Complete marketing strategy with research backing",
+ agent=writer # Lead agent, but can delegate to researcher
+)
+```
+
+## Hierarchical Collaboration
+
+For complex projects, use a hierarchical process with a manager agent:
+
+```python
+from crewai import Agent, Crew, Task, Process
+
+# Manager agent coordinates the team
+manager = Agent(
+ role="Project Manager",
+ goal="Coordinate team efforts and ensure project success",
+ backstory="Experienced project manager skilled at delegation and quality control",
+ allow_delegation=True,
+ verbose=True
+)
+
+# Specialist agents
+researcher = Agent(
+ role="Researcher",
+ goal="Provide accurate research and analysis",
+ backstory="Expert researcher with deep analytical skills",
+ allow_delegation=False, # Specialists focus on their expertise
+ verbose=True
+)
+
+writer = Agent(
+ role="Writer",
+ goal="Create compelling content",
+ backstory="Skilled writer who creates engaging content",
+ allow_delegation=False,
+ verbose=True
+)
+
+# Manager-led task
+project_task = Task(
+ description="Create a comprehensive market analysis report with recommendations",
+ expected_output="Executive summary, detailed analysis, and strategic recommendations",
+ agent=manager # Manager will delegate to specialists
+)
+
+# Hierarchical crew
+crew = Crew(
+ agents=[manager, researcher, writer],
+ tasks=[project_task],
+ process=Process.hierarchical, # Manager coordinates everything
+ manager_llm="gpt-4o", # Specify LLM for manager
+ verbose=True
+)
+```
+
+## Best Practices for Collaboration
+
+### 1. **Clear Role Definition**
+```python
+# ✅ Good: Specific, complementary roles
+researcher = Agent(role="Market Research Analyst", ...)
+writer = Agent(role="Technical Content Writer", ...)
+
+# ❌ Avoid: Overlapping or vague roles
+agent1 = Agent(role="General Assistant", ...)
+agent2 = Agent(role="Helper", ...)
+```
+
+### 2. **Strategic Delegation Enabling**
+```python
+# ✅ Enable delegation for coordinators and generalists
+lead_agent = Agent(
+ role="Content Lead",
+ allow_delegation=True, # Can delegate to specialists
+ ...
+)
+
+# ✅ Disable for focused specialists (optional)
+specialist_agent = Agent(
+ role="Data Analyst",
+ allow_delegation=False, # Focuses on core expertise
+ ...
+)
+```
+
+### 3. **Context Sharing**
+```python
+# ✅ Use context parameter for task dependencies
+writing_task = Task(
+ description="Write article based on research",
+ agent=writer,
+ context=[research_task], # Shares research results
+ ...
+)
+```
+
+### 4. **Clear Task Descriptions**
+```python
+# ✅ Specific, actionable descriptions
+Task(
+ description="""Research competitors in the AI chatbot space.
+ Focus on: pricing models, key features, target markets.
+ Provide data in a structured format.""",
+ ...
+)
+
+# ❌ Vague descriptions that don't guide collaboration
+Task(description="Do some research about chatbots", ...)
+```
+
+## Troubleshooting Collaboration
+
+### Issue: Agents Not Collaborating
+**Symptoms:** Agents work in isolation, no delegation occurs
+```python
+# ✅ Solution: Ensure delegation is enabled
+agent = Agent(
+ role="...",
+ allow_delegation=True, # This is required!
+ ...
+)
+```
+
+### Issue: Too Much Back-and-Forth
+**Symptoms:** Agents ask excessive questions, slow progress
+```python
+# ✅ Solution: Provide better context and specific roles
+Task(
+ description="""Write a technical blog post about machine learning.
+
+ Context: Target audience is software developers with basic ML knowledge.
+ Length: 1200 words
+ Include: code examples, practical applications, best practices
+
+ If you need specific technical details, delegate research to the researcher.""",
+ ...
+)
+```
+
+### Issue: Delegation Loops
+**Symptoms:** Agents delegate back and forth indefinitely
+```python
+# ✅ Solution: Clear hierarchy and responsibilities
+manager = Agent(role="Manager", allow_delegation=True)
+specialist1 = Agent(role="Specialist A", allow_delegation=False) # No re-delegation
+specialist2 = Agent(role="Specialist B", allow_delegation=False)
+```
+
+## Advanced Collaboration Features
+
+### Custom Collaboration Rules
+```python
+# Set specific collaboration guidelines in agent backstory
+agent = Agent(
+ role="Senior Developer",
+ backstory="""You lead development projects and coordinate with team members.
+
+ Collaboration guidelines:
+ - Delegate research tasks to the Research Analyst
+ - Ask the Designer for UI/UX guidance
+ - Consult the QA Engineer for testing strategies
+ - Only escalate blocking issues to the Project Manager""",
+ allow_delegation=True
+)
+```
+
+### Monitoring Collaboration
+```python
+def track_collaboration(output):
+ """Track collaboration patterns"""
+ if "Delegate work to coworker" in output.raw:
+ print("🤝 Delegation occurred")
+ if "Ask question to coworker" in output.raw:
+ print("❓ Question asked")
+
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ step_callback=track_collaboration, # Monitor collaboration
+ verbose=True
+)
+```
+
+## Memory and Learning
+
+Enable agents to remember past collaborations:
+
+```python
+agent = Agent(
+ role="Content Lead",
+ memory=True, # Remembers past interactions
+ allow_delegation=True,
+ verbose=True
+)
+```
+
+With memory enabled, agents learn from previous collaborations and improve their delegation decisions over time.
+
+## Next Steps
+
+- **Try the examples**: Start with the basic collaboration example
+- **Experiment with roles**: Test different agent role combinations
+- **Monitor interactions**: Use `verbose=True` to see collaboration in action
+- **Optimize task descriptions**: Clear tasks lead to better collaboration
+- **Scale up**: Try hierarchical processes for complex projects
+
+Collaboration transforms individual AI agents into powerful teams that can tackle complex, multi-faceted challenges together.
diff --git a/docs/v1.15.1/en/concepts/crews.mdx b/docs/v1.15.1/en/concepts/crews.mdx
new file mode 100644
index 000000000..2c43b63c7
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/crews.mdx
@@ -0,0 +1,458 @@
+---
+title: Crews
+description: Understanding and utilizing crews in the crewAI framework with comprehensive attributes and functionalities.
+icon: people-group
+mode: "wide"
+---
+
+## Overview
+
+A crew in crewAI represents a collaborative group of agents working together to achieve a set of tasks. Each crew defines the strategy for task execution, agent collaboration, and the overall workflow.
+
+## Crew Attributes
+
+| Attribute | Parameters | Description |
+| :------------------------------------ | :--------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **Tasks** | `tasks` | A list of tasks assigned to the crew. |
+| **Agents** | `agents` | A list of agents that are part of the crew. |
+| **Process** _(optional)_ | `process` | The process flow (e.g., sequential, hierarchical) the crew follows. Default is `sequential`. |
+| **Verbose** _(optional)_ | `verbose` | The verbosity level for logging during execution. Defaults to `False`. |
+| **Manager LLM** _(optional)_ | `manager_llm` | The language model used by the manager agent in a hierarchical process. **Required when using a hierarchical process.** |
+| **Function Calling LLM** _(optional)_ | `function_calling_llm` | If passed, the crew will use this LLM to do function calling for tools for all agents in the crew. Each agent can have its own LLM, which overrides the crew's LLM for function calling. |
+| **Config** _(optional)_ | `config` | Optional configuration settings for the crew, in `Json` or `Dict[str, Any]` format. |
+| **Max RPM** _(optional)_ | `max_rpm` | Maximum requests per minute the crew adheres to during execution. Defaults to `None`. |
+| **Memory** _(optional)_ | `memory` | Utilized for storing execution memories (short-term, long-term, entity memory). | |
+| **Cache** _(optional)_ | `cache` | Specifies whether to use a cache for storing the results of tools' execution. Defaults to `True`. |
+| **Embedder** _(optional)_ | `embedder` | Configuration for the embedder to be used by the crew. Mostly used by memory for now. Default is `{"provider": "openai"}`. |
+| **Step Callback** _(optional)_ | `step_callback` | A function that is called after each step of every agent. This can be used to log the agent's actions or to perform other operations; it won't override the agent-specific `step_callback`. |
+| **Task Callback** _(optional)_ | `task_callback` | A function that is called after the completion of each task. Useful for monitoring or additional operations post-task execution. |
+| **Share Crew** _(optional)_ | `share_crew` | Whether you want to share the complete crew information and execution with the crewAI team to make the library better, and allow us to train models. |
+| **Output Log File** _(optional)_ | `output_log_file` | Set to True to save logs as logs.txt in the current directory or provide a file path. Logs will be in JSON format if the filename ends in .json, otherwise .txt. Defaults to `None`. |
+| **Manager Agent** _(optional)_ | `manager_agent` | `manager` sets a custom agent that will be used as a manager. |
+| **Prompt File** _(optional)_ | `prompt_file` | Path to the prompt JSON file to be used for the crew. |
+| **Planning** *(optional)* | `planning` | Adds planning ability to the Crew. When activated before each Crew iteration, all Crew data is sent to an AgentPlanner that will plan the tasks and this plan will be added to each task description. |
+| **Planning LLM** *(optional)* | `planning_llm` | The language model used by the AgentPlanner in a planning process. |
+| **Knowledge Sources** _(optional)_ | `knowledge_sources` | Knowledge sources available at the crew level, accessible to all the agents. |
+| **Stream** _(optional)_ | `stream` | Enable streaming output to receive real-time updates during crew execution. Returns a `CrewStreamingOutput` object that can be iterated for chunks. Defaults to `False`. |
+| **Chat LLM** _(optional)_ | `chat_llm` | The language model used to orchestrate `crewai chat` CLI interactions with the crew. Accepts a model name string or `LLM` instance. Defaults to `None`. |
+| **Before Kickoff Callbacks** _(optional)_ | `before_kickoff_callbacks` | A list of callable functions executed **before** the crew starts. Each callback receives and can modify the inputs dict. Distinct from the `@before_kickoff` decorator. Defaults to `[]`. |
+| **After Kickoff Callbacks** _(optional)_ | `after_kickoff_callbacks` | A list of callable functions executed **after** the crew finishes. Each callback receives and can modify the `CrewOutput`. Distinct from the `@after_kickoff` decorator. Defaults to `[]`. |
+| **Tracing** _(optional)_ | `tracing` | Controls OpenTelemetry tracing for the crew. `True` = always enable, `False` = always disable, `None` = inherit from environment / user settings. Defaults to `None`. |
+| **Skills** _(optional)_ | `skills` | A list of `Path` objects (skill search directories) or pre-loaded `Skill` objects applied to all agents in the crew. Defaults to `None`. |
+| **Security Config** _(optional)_ | `security_config` | A `SecurityConfig` instance managing crew fingerprinting and identity. Defaults to `SecurityConfig()`. |
+| **Checkpoint** _(optional)_ | `checkpoint` | Enables automatic checkpointing. Pass `True` for sensible defaults, a `CheckpointConfig` for full control, `False` to opt out, or `None` to inherit. See the [Checkpointing](#checkpointing) section below. Defaults to `None`. |
+
+
+**Crew Max RPM**: The `max_rpm` attribute sets the maximum number of requests per minute the crew can perform to avoid rate limits and will override individual agents' `max_rpm` settings if you set it.
+
+
+## Creating Crews
+
+There are two common ways to create crews in CrewAI: using **JSONC project configuration (recommended for new crews)** or defining them **directly in code**.
+
+### JSONC Configuration (Recommended)
+
+New projects created with `crewai create crew ` use `crew.jsonc` for crew-level settings and tasks, plus one file per agent in `agents/`.
+
+`crewai run` automatically detects `crew.jsonc` or `crew.json`, loads the referenced agents, prompts for missing placeholders, and kicks off the crew.
+
+#### Example `crew.jsonc`
+
+```jsonc crew.jsonc
+{
+ "name": "Market Research Crew",
+ "agents": ["researcher", "analyst"],
+ "tasks": [
+ {
+ "name": "research",
+ "description": "Research {topic} and collect the most relevant facts.",
+ "expected_output": "Structured research notes about {topic}.",
+ "agent": "researcher"
+ },
+ {
+ "name": "analysis",
+ "description": "Analyze the research and write a concise report.",
+ "expected_output": "A markdown report with findings and recommendations.",
+ "agent": "analyst",
+ "context": ["research"],
+ "output_file": "output/report.md"
+ }
+ ],
+ "process": "sequential",
+ "verbose": true,
+ "memory": true,
+ "inputs": {
+ "topic": "AI Agents"
+ }
+}
+```
+
+Each string in `agents` resolves to `agents/.jsonc` first, then `agents/.json`.
+
+```jsonc agents/researcher.jsonc
+{
+ "role": "{topic} Senior Researcher",
+ "goal": "Find accurate and current information about {topic}.",
+ "backstory": "You are a careful researcher who cites clear evidence.",
+ "llm": "openai/gpt-4o",
+ "tools": ["SerperDevTool"]
+}
+```
+
+
+Tasks run in the order they appear in `tasks` when `process` is `"sequential"`.
+
+
+For hierarchical crews, set `"process": "hierarchical"` and provide either `manager_llm` or `manager_agent`. A `manager_agent` can reference an `agents/.jsonc` file that is not included in the top-level `agents` list.
+
+JSON crew definitions support crew-level fields such as `process`, `verbose`, `memory`, `cache`, `max_rpm`, `planning`, `planning_llm`, `manager_llm`, `manager_agent`, `function_calling_llm`, `output_log_file`, `stream`, `tracing`, `before_kickoff_callbacks`, and `after_kickoff_callbacks`.
+
+Python callbacks and custom classes use `{"python": "module.attribute"}`. Custom tools use `"custom:"` and load `tools/.py` at runtime.
+
+
+Only run JSON crew projects from sources you trust. `custom:` tools and `{"python": "module.attribute"}` references execute local Python code when the crew loads.
+
+
+### Classic Python/YAML Configuration
+
+Classic projects created with `crewai create crew --classic` use `crew.py`, `config/agents.yaml`, `config/tasks.yaml`, and the `@CrewBase`, `@agent`, `@task`, and `@crew` decorators. That pattern remains supported and is documented in [Using Annotations](/en/learn/using-annotations).
+
+### Direct Code Definition (Alternative)
+
+Alternatively, you can define the crew directly in code without using YAML configuration files.
+
+```python code
+from crewai import Agent, Crew, Task, Process
+from crewai_tools import YourCustomTool
+
+class YourCrewName:
+ def agent_one(self) -> Agent:
+ return Agent(
+ role="Data Analyst",
+ goal="Analyze data trends in the market",
+ backstory="An experienced data analyst with a background in economics",
+ verbose=True,
+ tools=[YourCustomTool()]
+ )
+
+ def agent_two(self) -> Agent:
+ return Agent(
+ role="Market Researcher",
+ goal="Gather information on market dynamics",
+ backstory="A diligent researcher with a keen eye for detail",
+ verbose=True
+ )
+
+ def task_one(self) -> Task:
+ return Task(
+ description="Collect recent market data and identify trends.",
+ expected_output="A report summarizing key trends in the market.",
+ agent=self.agent_one()
+ )
+
+ def task_two(self) -> Task:
+ return Task(
+ description="Research factors affecting market dynamics.",
+ expected_output="An analysis of factors influencing the market.",
+ agent=self.agent_two()
+ )
+
+ def crew(self) -> Crew:
+ return Crew(
+ agents=[self.agent_one(), self.agent_two()],
+ tasks=[self.task_one(), self.task_two()],
+ process=Process.sequential,
+ verbose=True
+ )
+```
+How to run the above code:
+
+```python code
+YourCrewName().crew().kickoff(inputs={})
+```
+
+In this example:
+
+- Agents and tasks are defined directly within the class without decorators.
+- We manually create and manage the list of agents and tasks.
+- This approach provides more control but can be less maintainable for larger projects.
+
+## Crew Output
+
+The output of a crew in the CrewAI framework is encapsulated within the `CrewOutput` class.
+This class provides a structured way to access results of the crew's execution, including various formats such as raw strings, JSON, and Pydantic models.
+The `CrewOutput` includes the results from the final task output, token usage, and individual task outputs.
+
+### Crew Output Attributes
+
+| Attribute | Parameters | Type | Description |
+| :--------------- | :------------- | :------------------------- | :--------------------------------------------------------------------------------------------------- |
+| **Raw** | `raw` | `str` | The raw output of the crew. This is the default format for the output. |
+| **Pydantic** | `pydantic` | `Optional[BaseModel]` | A Pydantic model object representing the structured output of the crew. |
+| **JSON Dict** | `json_dict` | `Optional[Dict[str, Any]]` | A dictionary representing the JSON output of the crew. |
+| **Tasks Output** | `tasks_output` | `List[TaskOutput]` | A list of `TaskOutput` objects, each representing the output of a task in the crew. |
+| **Token Usage** | `token_usage` | `Dict[str, Any]` | A summary of token usage, providing insights into the language model's performance during execution. |
+
+### Crew Output Methods and Properties
+
+| Method/Property | Description |
+| :-------------- | :------------------------------------------------------------------------------------------------ |
+| **json** | Returns the JSON string representation of the crew output if the output format is JSON. |
+| **to_dict** | Converts the JSON and Pydantic outputs to a dictionary. |
+| \***\*str\*\*** | Returns the string representation of the crew output, prioritizing Pydantic, then JSON, then raw. |
+
+### Accessing Crew Outputs
+
+Once a crew has been executed, its output can be accessed through the `output` attribute of the `Crew` object. The `CrewOutput` class provides various ways to interact with and present this output.
+
+#### Example
+
+```python Code
+# Example crew execution
+crew = Crew(
+ agents=[research_agent, writer_agent],
+ tasks=[research_task, write_article_task],
+ verbose=True
+)
+
+crew_output = crew.kickoff()
+
+# Accessing the crew output
+print(f"Raw Output: {crew_output.raw}")
+if crew_output.json_dict:
+ print(f"JSON Output: {json.dumps(crew_output.json_dict, indent=2)}")
+if crew_output.pydantic:
+ print(f"Pydantic Output: {crew_output.pydantic}")
+print(f"Tasks Output: {crew_output.tasks_output}")
+print(f"Token Usage: {crew_output.token_usage}")
+```
+
+## Accessing Crew Logs
+
+You can see real time log of the crew execution, by setting `output_log_file` as a `True(Boolean)` or a `file_name(str)`. Supports logging of events as both `file_name.txt` and `file_name.json`.
+In case of `True(Boolean)` will save as `logs.txt`.
+
+In case of `output_log_file` is set as `False(Boolean)` or `None`, the logs will not be populated.
+
+```python Code
+# Save crew logs
+crew = Crew(output_log_file = True) # Logs will be saved as logs.txt
+crew = Crew(output_log_file = file_name) # Logs will be saved as file_name.txt
+crew = Crew(output_log_file = file_name.txt) # Logs will be saved as file_name.txt
+crew = Crew(output_log_file = file_name.json) # Logs will be saved as file_name.json
+```
+
+
+
+## Checkpointing
+
+Checkpointing lets a crew automatically save its state after key events (e.g. task completion) so that long-running or interrupted runs can be resumed exactly where they left off without re-executing completed tasks.
+
+### Quick Start
+
+Pass `checkpoint=True` to enable checkpointing with sensible defaults (saves to `.checkpoints/` after every task):
+
+```python Code
+from crewai import Crew, Process
+
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, write_task],
+ process=Process.sequential,
+ checkpoint=True, # saves to .checkpoints/ after every task
+)
+
+crew.kickoff(inputs={"topic": "AI trends"})
+```
+
+### Full Control with `CheckpointConfig`
+
+Use `CheckpointConfig` for fine-grained control over location, trigger events, storage backend, and retention:
+
+```python Code
+from crewai import Crew, Process
+from crewai.state.checkpoint_config import CheckpointConfig
+
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, write_task],
+ process=Process.sequential,
+ checkpoint=CheckpointConfig(
+ location="./.checkpoints", # directory for JSON files (default)
+ on_events=["task_completed"], # trigger after each task (default)
+ max_checkpoints=5, # keep only the 5 most recent checkpoints
+ ),
+)
+
+crew.kickoff(inputs={"topic": "AI trends"})
+```
+
+### Resuming from a Checkpoint
+
+Use `Crew.from_checkpoint()` to restore a crew from a saved checkpoint file, then call `kickoff()` to resume:
+
+```python Code
+# Resume from the most recent checkpoint
+crew = Crew.from_checkpoint(".checkpoints/latest.json")
+crew.kickoff()
+```
+
+
+When restoring from a checkpoint, `checkpoint_inputs`, `checkpoint_train`, and `checkpoint_kickoff_event_id` are automatically reconstructed — you do not need to set these manually.
+
+
+### `CheckpointConfig` Attributes
+
+| Attribute | Type | Default | Description |
+| :----------------- | :------------------------------------- | :------------------- | :-------------------------------------------------------------------------------------------- |
+| `location` | `str` | `"./.checkpoints"` | Storage destination. For `JsonProvider` this is a directory path; for `SqliteProvider` a database file path. |
+| `on_events` | `list[str]` | `["task_completed"]` | Event types that trigger a checkpoint write. Use `["*"]` to checkpoint on every event. |
+| `provider` | `JsonProvider \| SqliteProvider` | `JsonProvider()` | Storage backend. Defaults to `JsonProvider` (plain JSON files). |
+| `max_checkpoints` | `int \| None` | `None` | Maximum checkpoints to keep. Oldest are pruned after each write. `None` keeps all. |
+
+## Memory Utilization
+
+Crews can utilize memory (short-term, long-term, and entity memory) to enhance their execution and learning over time. This feature allows crews to store and recall execution memories, aiding in decision-making and task execution strategies.
+
+## Cache Utilization
+
+Caches can be employed to store the results of tools' execution, making the process more efficient by reducing the need to re-execute identical tasks.
+
+## Crew Usage Metrics
+
+After the crew execution, you can access the `usage_metrics` attribute to view the language model (LLM) usage metrics for all tasks executed by the crew. This provides insights into operational efficiency and areas for improvement.
+
+```python Code
+# Access the crew's usage metrics
+crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])
+crew.kickoff()
+print(crew.usage_metrics)
+```
+
+## Crew Execution Process
+
+- **Sequential Process**: Tasks are executed one after another, allowing for a linear flow of work.
+- **Hierarchical Process**: A manager agent coordinates the crew, delegating tasks and validating outcomes before proceeding. **Note**: A `manager_llm` or `manager_agent` is required for this process and it's essential for validating the process flow.
+
+### Kicking Off a Crew
+
+Once your crew is assembled, initiate the workflow with the `kickoff()` method. This starts the execution process according to the defined process flow.
+
+```python Code
+# Start the crew's task execution
+result = my_crew.kickoff()
+print(result)
+```
+
+### Different Ways to Kick Off a Crew
+
+Once your crew is assembled, initiate the workflow with the appropriate kickoff method. CrewAI provides several methods for better control over the kickoff process.
+
+#### Synchronous Methods
+
+- `kickoff()`: Starts the execution process according to the defined process flow.
+- `kickoff_for_each()`: Executes tasks sequentially for each provided input event or item in the collection.
+
+#### Asynchronous Methods
+
+CrewAI offers two approaches for async execution:
+
+| Method | Type | Description |
+|--------|------|-------------|
+| `akickoff()` | Native async | True async/await throughout the entire execution chain |
+| `akickoff_for_each()` | Native async | Native async execution for each input in a list |
+| `kickoff_async()` | Thread-based | Wraps synchronous execution in `asyncio.to_thread` |
+| `kickoff_for_each_async()` | Thread-based | Thread-based async for each input in a list |
+
+
+For high-concurrency workloads, `akickoff()` and `akickoff_for_each()` are recommended as they use native async for task execution, memory operations, and knowledge retrieval.
+
+
+```python Code
+# Start the crew's task execution
+result = my_crew.kickoff()
+print(result)
+
+# Example of using kickoff_for_each
+inputs_array = [{'topic': 'AI in healthcare'}, {'topic': 'AI in finance'}]
+results = my_crew.kickoff_for_each(inputs=inputs_array)
+for result in results:
+ print(result)
+
+# Example of using native async with akickoff
+inputs = {'topic': 'AI in healthcare'}
+async_result = await my_crew.akickoff(inputs=inputs)
+print(async_result)
+
+# Example of using native async with akickoff_for_each
+inputs_array = [{'topic': 'AI in healthcare'}, {'topic': 'AI in finance'}]
+async_results = await my_crew.akickoff_for_each(inputs=inputs_array)
+for async_result in async_results:
+ print(async_result)
+
+# Example of using thread-based kickoff_async
+inputs = {'topic': 'AI in healthcare'}
+async_result = await my_crew.kickoff_async(inputs=inputs)
+print(async_result)
+
+# Example of using thread-based kickoff_for_each_async
+inputs_array = [{'topic': 'AI in healthcare'}, {'topic': 'AI in finance'}]
+async_results = await my_crew.kickoff_for_each_async(inputs=inputs_array)
+for async_result in async_results:
+ print(async_result)
+```
+
+These methods provide flexibility in how you manage and execute tasks within your crew, allowing for both synchronous and asynchronous workflows tailored to your needs. For detailed async examples, see the [Kickoff Crew Asynchronously](/en/learn/kickoff-async) guide.
+
+### Streaming Crew Execution
+
+For real-time visibility into crew execution, you can enable streaming to receive output as it's generated:
+
+```python Code
+# Enable streaming
+crew = Crew(
+ agents=[researcher],
+ tasks=[task],
+ stream=True
+)
+
+# Iterate over streaming output
+streaming = crew.kickoff(inputs={"topic": "AI"})
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+# Access final result
+result = streaming.result
+```
+
+Learn more about streaming in the [Streaming Crew Execution](/en/learn/streaming-crew-execution) guide.
+
+### Replaying from a Specific Task
+
+You can now replay from a specific task using our CLI command `replay`.
+
+The replay feature in CrewAI allows you to replay from a specific task using the command-line interface (CLI). By running the command `crewai replay -t `, you can specify the `task_id` for the replay process.
+
+Kickoffs will now save the latest kickoffs returned task outputs locally for you to be able to replay from.
+
+### Replaying from a Specific Task Using the CLI
+
+To use the replay feature, follow these steps:
+
+1. Open your terminal or command prompt.
+2. Navigate to the directory where your CrewAI project is located.
+3. Run the following command:
+
+To view the latest kickoff task IDs, use:
+
+```shell
+crewai log-tasks-outputs
+```
+
+Then, to replay from a specific task, use:
+
+```shell
+crewai replay -t
+```
+
+These commands let you replay from your latest kickoff tasks, still retaining context from previously executed tasks.
diff --git a/docs/v1.15.1/en/concepts/event-listener.mdx b/docs/v1.15.1/en/concepts/event-listener.mdx
new file mode 100644
index 000000000..b3eb33e83
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/event-listener.mdx
@@ -0,0 +1,414 @@
+---
+title: "Event Listeners"
+description: "Tap into CrewAI events to build custom integrations and monitoring"
+icon: spinner
+mode: "wide"
+---
+
+## Overview
+
+CrewAI provides a powerful event system that allows you to listen for and react to various events that occur during the execution of your Crew. This feature enables you to build custom integrations, monitoring solutions, logging systems, or any other functionality that needs to be triggered based on CrewAI's internal events.
+
+## How It Works
+
+CrewAI uses an event bus architecture to emit events throughout the execution lifecycle. The event system is built on the following components:
+
+1. **CrewAIEventsBus**: A singleton event bus that manages event registration and emission
+2. **BaseEvent**: Base class for all events in the system
+3. **BaseEventListener**: Abstract base class for creating custom event listeners
+
+When specific actions occur in CrewAI (like a Crew starting execution, an Agent completing a task, or a tool being used), the system emits corresponding events. You can register handlers for these events to execute custom code when they occur.
+
+
+CrewAI AMP provides a built-in Prompt Tracing feature that leverages the event system to track, store, and visualize all prompts, completions, and associated metadata. This provides powerful debugging capabilities and transparency into your agent operations.
+
+
+
+With Prompt Tracing you can:
+
+- View the complete history of all prompts sent to your LLM
+- Track token usage and costs
+- Debug agent reasoning failures
+- Share prompt sequences with your team
+- Compare different prompt strategies
+- Export traces for compliance and auditing
+
+
+## Creating a Custom Event Listener
+
+To create a custom event listener, you need to:
+
+1. Create a class that inherits from `BaseEventListener`
+2. Implement the `setup_listeners` method
+3. Register handlers for the events you're interested in
+4. Create an instance of your listener in the appropriate file
+
+Here's a simple example of a custom event listener class:
+
+```python
+from crewai.events import (
+ CrewKickoffStartedEvent,
+ CrewKickoffCompletedEvent,
+ AgentExecutionCompletedEvent,
+)
+from crewai.events import BaseEventListener
+
+class MyCustomListener(BaseEventListener):
+ def __init__(self):
+ super().__init__()
+
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(CrewKickoffStartedEvent)
+ def on_crew_started(source, event):
+ print(f"Crew '{event.crew_name}' has started execution!")
+
+ @crewai_event_bus.on(CrewKickoffCompletedEvent)
+ def on_crew_completed(source, event):
+ print(f"Crew '{event.crew_name}' has completed execution!")
+ print(f"Output: {event.output}")
+
+ @crewai_event_bus.on(AgentExecutionCompletedEvent)
+ def on_agent_execution_completed(source, event):
+ print(f"Agent '{event.agent.role}' completed task")
+ print(f"Output: {event.output}")
+```
+
+## Properly Registering Your Listener
+
+Simply defining your listener class isn't enough. You need to create an instance of it and ensure it's imported in your application. This ensures that:
+
+1. The event handlers are registered with the event bus
+2. The listener instance remains in memory (not garbage collected)
+3. The listener is active when events are emitted
+
+### Option 1: Import and Instantiate in Your Crew or Flow Implementation
+
+The most important thing is to create an instance of your listener in the file where your Crew or Flow is defined and executed:
+
+#### For Crew-based Applications
+
+Create and import your listener at the top of your Crew implementation file:
+
+```python
+# In your crew.py file
+from crewai import Agent, Crew, Task
+from my_listeners import MyCustomListener
+
+# Create an instance of your listener
+my_listener = MyCustomListener()
+
+class MyCustomCrew:
+ # Your crew implementation...
+
+ def crew(self):
+ return Crew(
+ agents=[...],
+ tasks=[...],
+ # ...
+ )
+```
+
+#### For Flow-based Applications
+
+Create and import your listener at the top of your Flow implementation file:
+
+```python
+# In your main.py or flow.py file
+from crewai.flow import Flow, listen, start
+from my_listeners import MyCustomListener
+
+# Create an instance of your listener
+my_listener = MyCustomListener()
+
+class MyCustomFlow(Flow):
+ # Your flow implementation...
+
+ @start()
+ def first_step(self):
+ # ...
+```
+
+This ensures that your listener is loaded and active when your Crew or Flow is executed.
+
+### Option 2: Create a Package for Your Listeners
+
+For a more structured approach, especially if you have multiple listeners:
+
+1. Create a package for your listeners:
+
+```
+my_project/
+ ├── listeners/
+ │ ├── __init__.py
+ │ ├── my_custom_listener.py
+ │ └── another_listener.py
+```
+
+2. In `my_custom_listener.py`, define your listener class and create an instance:
+
+```python
+# my_custom_listener.py
+from crewai.events import BaseEventListener
+# ... import events ...
+
+class MyCustomListener(BaseEventListener):
+ # ... implementation ...
+
+# Create an instance of your listener
+my_custom_listener = MyCustomListener()
+```
+
+3. In `__init__.py`, import the listener instances to ensure they're loaded:
+
+```python
+# __init__.py
+from .my_custom_listener import my_custom_listener
+from .another_listener import another_listener
+
+# Optionally export them if you need to access them elsewhere
+__all__ = ['my_custom_listener', 'another_listener']
+```
+
+4. Import your listeners package in your Crew or Flow file:
+
+```python
+# In your crew.py or flow.py file
+import my_project.listeners # This loads all your listeners
+
+class MyCustomCrew:
+ # Your crew implementation...
+```
+
+This is how third-party event listeners are registered in the CrewAI codebase.
+
+## Available Event Types
+
+CrewAI provides a wide range of events that you can listen for:
+
+### Crew Events
+
+- **CrewKickoffStartedEvent**: Emitted when a Crew starts execution
+- **CrewKickoffCompletedEvent**: Emitted when a Crew completes execution
+- **CrewKickoffFailedEvent**: Emitted when a Crew fails to complete execution
+- **CrewTestStartedEvent**: Emitted when a Crew starts testing
+- **CrewTestCompletedEvent**: Emitted when a Crew completes testing
+- **CrewTestFailedEvent**: Emitted when a Crew fails to complete testing
+- **CrewTrainStartedEvent**: Emitted when a Crew starts training
+- **CrewTrainCompletedEvent**: Emitted when a Crew completes training
+- **CrewTrainFailedEvent**: Emitted when a Crew fails to complete training
+- **CrewTestResultEvent**: Emitted when a Crew test result is available. Contains the quality score, execution duration, and model used.
+
+### Agent Events
+
+- **AgentExecutionStartedEvent**: Emitted when an Agent starts executing a task
+- **AgentExecutionCompletedEvent**: Emitted when an Agent completes executing a task
+- **AgentExecutionErrorEvent**: Emitted when an Agent encounters an error during execution
+- **LiteAgentExecutionStartedEvent**: Emitted when a LiteAgent starts executing. Contains the agent info, tools, and messages.
+- **LiteAgentExecutionCompletedEvent**: Emitted when a LiteAgent completes execution. Contains the agent info and output.
+- **LiteAgentExecutionErrorEvent**: Emitted when a LiteAgent encounters an error during execution. Contains the agent info and error message.
+- **AgentEvaluationStartedEvent**: Emitted when an agent evaluation starts. Contains the agent ID, agent role, optional task ID, and iteration number.
+- **AgentEvaluationCompletedEvent**: Emitted when an agent evaluation completes. Contains the agent ID, agent role, optional task ID, iteration number, metric category, and score.
+- **AgentEvaluationFailedEvent**: Emitted when an agent evaluation fails. Contains the agent ID, agent role, optional task ID, iteration number, and error message.
+
+### Task Events
+
+- **TaskStartedEvent**: Emitted when a Task starts execution
+- **TaskCompletedEvent**: Emitted when a Task completes execution
+- **TaskFailedEvent**: Emitted when a Task fails to complete execution
+- **TaskEvaluationEvent**: Emitted when a Task is evaluated
+
+### Tool Usage Events
+
+- **ToolUsageStartedEvent**: Emitted when a tool execution is started
+- **ToolUsageFinishedEvent**: Emitted when a tool execution is completed
+- **ToolUsageErrorEvent**: Emitted when a tool execution encounters an error
+- **ToolValidateInputErrorEvent**: Emitted when a tool input validation encounters an error
+- **ToolExecutionErrorEvent**: Emitted when a tool execution encounters an error
+- **ToolSelectionErrorEvent**: Emitted when there's an error selecting a tool
+
+### MCP Events
+
+- **MCPConnectionStartedEvent**: Emitted when starting to connect to an MCP server. Contains the server name, URL, transport type, connection timeout, and whether it's a reconnection attempt.
+- **MCPConnectionCompletedEvent**: Emitted when successfully connected to an MCP server. Contains the server name, connection duration in milliseconds, and whether it was a reconnection.
+- **MCPConnectionFailedEvent**: Emitted when connection to an MCP server fails. Contains the server name, error message, and error type (`timeout`, `authentication`, `network`, etc.).
+- **MCPToolExecutionStartedEvent**: Emitted when starting to execute an MCP tool. Contains the server name, tool name, and tool arguments.
+- **MCPToolExecutionCompletedEvent**: Emitted when MCP tool execution completes successfully. Contains the server name, tool name, result, and execution duration in milliseconds.
+- **MCPToolExecutionFailedEvent**: Emitted when MCP tool execution fails. Contains the server name, tool name, error message, and error type (`timeout`, `validation`, `server_error`, etc.).
+- **MCPConfigFetchFailedEvent**: Emitted when fetching an MCP server configuration fails (e.g., the MCP is not connected in your account, API error, or connection failure after config was fetched). Contains the slug, error message, and error type (`not_connected`, `api_error`, `connection_failed`).
+
+### Knowledge Events
+
+- **KnowledgeRetrievalStartedEvent**: Emitted when a knowledge retrieval is started
+- **KnowledgeRetrievalCompletedEvent**: Emitted when a knowledge retrieval is completed
+- **KnowledgeQueryStartedEvent**: Emitted when a knowledge query is started
+- **KnowledgeQueryCompletedEvent**: Emitted when a knowledge query is completed
+- **KnowledgeQueryFailedEvent**: Emitted when a knowledge query fails
+- **KnowledgeSearchQueryFailedEvent**: Emitted when a knowledge search query fails
+
+### LLM Guardrail Events
+
+- **LLMGuardrailStartedEvent**: Emitted when a guardrail validation starts. Contains details about the guardrail being applied and retry count.
+- **LLMGuardrailCompletedEvent**: Emitted when a guardrail validation completes. Contains details about validation success/failure, results, and error messages if any.
+- **LLMGuardrailFailedEvent**: Emitted when a guardrail validation fails. Contains the error message and retry count.
+
+### Flow Events
+
+- **FlowCreatedEvent**: Emitted when a Flow is created
+- **FlowStartedEvent**: Emitted when a Flow starts execution
+- **FlowFinishedEvent**: Emitted when a Flow completes execution
+- **FlowPausedEvent**: Emitted when a Flow is paused waiting for human feedback. Contains the flow name, flow ID, method name, current state, message shown when requesting feedback, and optional list of possible outcomes for routing.
+- **FlowPlotEvent**: Emitted when a Flow is plotted
+- **MethodExecutionStartedEvent**: Emitted when a Flow method starts execution
+- **MethodExecutionFinishedEvent**: Emitted when a Flow method completes execution
+- **MethodExecutionFailedEvent**: Emitted when a Flow method fails to complete execution
+- **MethodExecutionPausedEvent**: Emitted when a Flow method is paused waiting for human feedback. Contains the flow name, method name, current state, flow ID, message shown when requesting feedback, and optional list of possible outcomes for routing.
+
+### Human In The Loop Events
+
+- **FlowInputRequestedEvent**: Emitted when a Flow requests user input via `Flow.ask()`. Contains the flow name, method name, the question or prompt being shown to the user, and optional metadata (e.g., user ID, channel, session context).
+- **FlowInputReceivedEvent**: Emitted when user input is received after `Flow.ask()`. Contains the flow name, method name, the original question, the user's response (or `None` if timed out), optional request metadata, and optional response metadata from the provider (e.g., who responded, thread ID, timestamps).
+- **HumanFeedbackRequestedEvent**: Emitted when a `@human_feedback` decorated method requires input from a human reviewer. Contains the flow name, method name, the method output shown to the human for review, the message displayed when requesting feedback, and optional list of possible outcomes for routing.
+- **HumanFeedbackReceivedEvent**: Emitted when a human provides feedback in response to a `@human_feedback` decorated method. Contains the flow name, method name, the raw text feedback provided by the human, and the collapsed outcome string (if emit was specified).
+
+### LLM Events
+
+- **LLMCallStartedEvent**: Emitted when an LLM call starts
+- **LLMCallCompletedEvent**: Emitted when an LLM call completes
+- **LLMCallFailedEvent**: Emitted when an LLM call fails
+- **LLMStreamChunkEvent**: Emitted for each chunk received during streaming LLM responses
+- **LLMThinkingChunkEvent**: Emitted when a thinking/reasoning chunk is received from a thinking model. Contains the chunk text and optional response ID.
+
+### Memory Events
+
+- **MemoryQueryStartedEvent**: Emitted when a memory query is started. Contains the query, limit, and optional score threshold.
+- **MemoryQueryCompletedEvent**: Emitted when a memory query is completed successfully. Contains the query, results, limit, score threshold, and query execution time.
+- **MemoryQueryFailedEvent**: Emitted when a memory query fails. Contains the query, limit, score threshold, and error message.
+- **MemorySaveStartedEvent**: Emitted when a memory save operation is started. Contains the value to be saved, metadata, and optional agent role.
+- **MemorySaveCompletedEvent**: Emitted when a memory save operation is completed successfully. Contains the saved value, metadata, agent role, and save execution time.
+- **MemorySaveFailedEvent**: Emitted when a memory save operation fails. Contains the value, metadata, agent role, and error message.
+- **MemoryRetrievalStartedEvent**: Emitted when memory retrieval for a task prompt starts. Contains the optional task ID.
+- **MemoryRetrievalCompletedEvent**: Emitted when memory retrieval for a task prompt completes successfully. Contains the task ID, memory content, and retrieval execution time.
+- **MemoryRetrievalFailedEvent**: Emitted when memory retrieval for a task prompt fails. Contains the optional task ID and error message.
+
+### Reasoning Events
+
+- **AgentReasoningStartedEvent**: Emitted when an agent starts reasoning about a task. Contains the agent role, task ID, and attempt number.
+- **AgentReasoningCompletedEvent**: Emitted when an agent finishes its reasoning process. Contains the agent role, task ID, the plan produced, and whether the agent is ready to proceed.
+- **AgentReasoningFailedEvent**: Emitted when the reasoning process fails. Contains the agent role, task ID, and error message.
+
+### Observation Events
+
+- **StepObservationStartedEvent**: Emitted when the Planner begins observing a step's result. Fires after every step execution, before the observation LLM call. Contains the agent role, step number, and step description.
+- **StepObservationCompletedEvent**: Emitted when the Planner finishes observing a step's result. Contains whether the step completed successfully, key information learned, whether the remaining plan is still valid, whether a full replan is needed, and suggested refinements.
+- **StepObservationFailedEvent**: Emitted when the observation LLM call itself fails. The system defaults to continuing the plan. Contains the error message.
+- **PlanRefinementEvent**: Emitted when the Planner refines upcoming step descriptions without a full replan. Contains the number of refined steps and the refinements applied.
+- **PlanReplanTriggeredEvent**: Emitted when the Planner triggers a full replan because the remaining plan was deemed fundamentally wrong. Contains the replan reason, replan count, and number of completed steps preserved.
+- **GoalAchievedEarlyEvent**: Emitted when the Planner detects the goal was achieved early and remaining steps will be skipped. Contains the number of steps remaining and steps completed.
+
+### A2A (Agent-to-Agent) Events
+
+#### Delegation Events
+
+- **A2ADelegationStartedEvent**: Emitted when A2A delegation starts. Contains the endpoint URL, task description, agent ID, context ID, whether it's multiturn, turn number, agent card metadata, protocol version, provider info, and optional skill ID.
+- **A2ADelegationCompletedEvent**: Emitted when A2A delegation completes. Contains the completion status (`completed`, `input_required`, `failed`, etc.), result, error message, context ID, and agent card metadata.
+- **A2AParallelDelegationStartedEvent**: Emitted when parallel delegation to multiple A2A agents begins. Contains the list of endpoints and the task description.
+- **A2AParallelDelegationCompletedEvent**: Emitted when parallel delegation to multiple A2A agents completes. Contains the list of endpoints, success count, failure count, and results summary.
+
+#### Conversation Events
+
+- **A2AConversationStartedEvent**: Emitted once at the beginning of a multiturn A2A conversation, before the first message exchange. Contains the agent ID, endpoint, context ID, agent card metadata, protocol version, and provider info.
+- **A2AMessageSentEvent**: Emitted when a message is sent to the A2A agent. Contains the message content, turn number, context ID, message ID, and whether it's multiturn.
+- **A2AResponseReceivedEvent**: Emitted when a response is received from the A2A agent. Contains the response content, turn number, context ID, message ID, status, and whether it's the final response.
+- **A2AConversationCompletedEvent**: Emitted once at the end of a multiturn A2A conversation. Contains the final status (`completed` or `failed`), final result, error message, context ID, and total number of turns.
+
+#### Streaming Events
+
+- **A2AStreamingStartedEvent**: Emitted when streaming mode begins for A2A delegation. Contains the task ID, context ID, endpoint, turn number, and whether it's multiturn.
+- **A2AStreamingChunkEvent**: Emitted when a streaming chunk is received. Contains the chunk text, chunk index, whether it's the final chunk, task ID, context ID, and turn number.
+
+#### Polling & Push Notification Events
+
+- **A2APollingStartedEvent**: Emitted when polling mode begins for A2A delegation. Contains the task ID, context ID, polling interval in seconds, and endpoint.
+- **A2APollingStatusEvent**: Emitted on each polling iteration. Contains the task ID, context ID, current task state, elapsed seconds, and poll count.
+- **A2APushNotificationRegisteredEvent**: Emitted when a push notification callback is registered. Contains the task ID, context ID, callback URL, and endpoint.
+- **A2APushNotificationReceivedEvent**: Emitted when a push notification is received from the remote A2A agent. Contains the task ID, context ID, and current state.
+- **A2APushNotificationSentEvent**: Emitted when a push notification is sent to a callback URL. Contains the task ID, context ID, callback URL, state, whether delivery succeeded, and optional error message.
+- **A2APushNotificationTimeoutEvent**: Emitted when push notification wait times out. Contains the task ID, context ID, and timeout duration in seconds.
+
+#### Connection & Authentication Events
+
+- **A2AAgentCardFetchedEvent**: Emitted when an agent card is successfully fetched. Contains the endpoint, agent name, agent card metadata, protocol version, provider info, whether it was cached, and fetch time in milliseconds.
+- **A2AAuthenticationFailedEvent**: Emitted when authentication to an A2A agent fails. Contains the endpoint, auth type attempted (e.g., `bearer`, `oauth2`, `api_key`), error message, and HTTP status code.
+- **A2AConnectionErrorEvent**: Emitted when a connection error occurs during A2A communication. Contains the endpoint, error message, error type (e.g., `timeout`, `connection_refused`, `dns_error`), HTTP status code, and the operation being attempted.
+- **A2ATransportNegotiatedEvent**: Emitted when transport protocol is negotiated with an A2A agent. Contains the negotiated transport, negotiated URL, selection source (`client_preferred`, `server_preferred`, `fallback`), and client/server supported transports.
+- **A2AContentTypeNegotiatedEvent**: Emitted when content types are negotiated with an A2A agent. Contains the client/server input/output modes, negotiated input/output modes, and whether negotiation succeeded.
+
+#### Artifact Events
+
+- **A2AArtifactReceivedEvent**: Emitted when an artifact is received from a remote A2A agent. Contains the task ID, artifact ID, artifact name, description, MIME type, size in bytes, and whether content should be appended.
+
+#### Server Task Events
+
+- **A2AServerTaskStartedEvent**: Emitted when an A2A server task execution starts. Contains the task ID and context ID.
+- **A2AServerTaskCompletedEvent**: Emitted when an A2A server task execution completes. Contains the task ID, context ID, and result.
+- **A2AServerTaskCanceledEvent**: Emitted when an A2A server task execution is canceled. Contains the task ID and context ID.
+- **A2AServerTaskFailedEvent**: Emitted when an A2A server task execution fails. Contains the task ID, context ID, and error message.
+
+#### Context Lifecycle Events
+
+- **A2AContextCreatedEvent**: Emitted when an A2A context is created. Contexts group related tasks in a conversation or workflow. Contains the context ID and creation timestamp.
+- **A2AContextExpiredEvent**: Emitted when an A2A context expires due to TTL. Contains the context ID, creation timestamp, age in seconds, and task count.
+- **A2AContextIdleEvent**: Emitted when an A2A context becomes idle (no activity for the configured threshold). Contains the context ID, idle time in seconds, and task count.
+- **A2AContextCompletedEvent**: Emitted when all tasks in an A2A context complete. Contains the context ID, total tasks, and duration in seconds.
+- **A2AContextPrunedEvent**: Emitted when an A2A context is pruned (deleted). Contains the context ID, task count, and age in seconds.
+
+## Event Handler Structure
+
+Each event handler receives two parameters:
+
+1. **source**: The object that emitted the event
+2. **event**: The event instance, containing event-specific data
+
+The structure of the event object depends on the event type, but all events inherit from `BaseEvent` and include:
+
+- **timestamp**: The time when the event was emitted
+- **type**: A string identifier for the event type
+
+Additional fields vary by event type. For example, `CrewKickoffCompletedEvent` includes `crew_name` and `output` fields.
+
+## Advanced Usage: Scoped Handlers
+
+For temporary event handling (useful for testing or specific operations), you can use the `scoped_handlers` context manager:
+
+```python
+from crewai.events import crewai_event_bus, CrewKickoffStartedEvent
+
+with crewai_event_bus.scoped_handlers():
+ @crewai_event_bus.on(CrewKickoffStartedEvent)
+ def temp_handler(source, event):
+ print("This handler only exists within this context")
+
+ # Do something that emits events
+
+# Outside the context, the temporary handler is removed
+```
+
+## Use Cases
+
+Event listeners can be used for a variety of purposes:
+
+1. **Logging and Monitoring**: Track the execution of your Crew and log important events
+2. **Analytics**: Collect data about your Crew's performance and behavior
+3. **Debugging**: Set up temporary listeners to debug specific issues
+4. **Integration**: Connect CrewAI with external systems like monitoring platforms, databases, or notification services
+5. **Custom Behavior**: Trigger custom actions based on specific events
+
+## Best Practices
+
+1. **Keep Handlers Light**: Event handlers should be lightweight and avoid blocking operations
+2. **Error Handling**: Include proper error handling in your event handlers to prevent exceptions from affecting the main execution
+3. **Cleanup**: If your listener allocates resources, ensure they're properly cleaned up
+4. **Selective Listening**: Only listen for events you actually need to handle
+5. **Testing**: Test your event listeners in isolation to ensure they behave as expected
+
+By leveraging CrewAI's event system, you can extend its functionality and integrate it seamlessly with your existing infrastructure.
diff --git a/docs/v1.15.1/en/concepts/files.mdx b/docs/v1.15.1/en/concepts/files.mdx
new file mode 100644
index 000000000..af86baabe
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/files.mdx
@@ -0,0 +1,267 @@
+---
+title: Files
+description: Pass images, PDFs, audio, video, and text files to your agents for multimodal processing.
+icon: file-image
+---
+
+## Overview
+
+CrewAI supports native multimodal file inputs, allowing you to pass images, PDFs, audio, video, and text files directly to your agents. Files are automatically formatted for each LLM provider's API requirements.
+
+
+File support requires the optional `crewai-files` package. Install it with:
+
+```bash
+uv add 'crewai[file-processing]'
+```
+
+
+
+The file processing API is currently in early access.
+
+
+## File Types
+
+CrewAI supports five specific file types plus a generic `File` class that auto-detects the type:
+
+| Type | Class | Use Cases |
+|:-----|:------|:----------|
+| **Image** | `ImageFile` | Photos, screenshots, diagrams, charts |
+| **PDF** | `PDFFile` | Documents, reports, papers |
+| **Audio** | `AudioFile` | Voice recordings, podcasts, meetings |
+| **Video** | `VideoFile` | Screen recordings, presentations |
+| **Text** | `TextFile` | Code files, logs, data files |
+| **Generic** | `File` | Auto-detect type from content |
+
+```python
+from crewai_files import File, ImageFile, PDFFile, AudioFile, VideoFile, TextFile
+
+image = ImageFile(source="screenshot.png")
+pdf = PDFFile(source="report.pdf")
+audio = AudioFile(source="meeting.mp3")
+video = VideoFile(source="demo.mp4")
+text = TextFile(source="data.csv")
+
+file = File(source="document.pdf")
+```
+
+## File Sources
+
+The `source` parameter accepts multiple input types and auto-detects the appropriate handler:
+
+### From Path
+
+```python
+from crewai_files import ImageFile
+
+image = ImageFile(source="./images/chart.png")
+```
+
+### From URL
+
+```python
+from crewai_files import ImageFile
+
+image = ImageFile(source="https://example.com/image.png")
+```
+
+### From Bytes
+
+```python
+from crewai_files import ImageFile, FileBytes
+
+image_bytes = download_image_from_api()
+image = ImageFile(source=FileBytes(data=image_bytes, filename="downloaded.png"))
+image = ImageFile(source=image_bytes)
+```
+
+## Using Files
+
+Files can be passed at multiple levels, with more specific levels taking precedence.
+
+### With Crews
+
+Pass files when kicking off a crew:
+
+```python
+from crewai import Crew
+from crewai_files import ImageFile
+
+crew = Crew(agents=[analyst], tasks=[analysis_task])
+
+result = crew.kickoff(
+ inputs={"topic": "Q4 Sales"},
+ input_files={
+ "chart": ImageFile(source="sales_chart.png"),
+ "report": PDFFile(source="quarterly_report.pdf"),
+ }
+)
+```
+
+### With Tasks
+
+Attach files to specific tasks:
+
+```python
+from crewai import Task
+from crewai_files import ImageFile
+
+task = Task(
+ description="Analyze the sales chart and identify trends in {chart}",
+ expected_output="A summary of key trends",
+ input_files={
+ "chart": ImageFile(source="sales_chart.png"),
+ }
+)
+```
+
+### With Flows
+
+Pass files to flows, which automatically inherit to crews:
+
+```python
+from crewai.flow.flow import Flow, start
+from crewai_files import ImageFile
+
+class AnalysisFlow(Flow):
+ @start()
+ def analyze(self):
+ return self.analysis_crew.kickoff()
+
+flow = AnalysisFlow()
+result = flow.kickoff(
+ input_files={"image": ImageFile(source="data.png")}
+)
+```
+
+### With Standalone Agents
+
+Pass files directly to agent kickoff:
+
+```python
+from crewai import Agent
+from crewai_files import ImageFile
+
+agent = Agent(
+ role="Image Analyst",
+ goal="Analyze images",
+ backstory="Expert at visual analysis",
+ llm="gpt-4o",
+)
+
+result = agent.kickoff(
+ messages="What's in this image?",
+ input_files={"photo": ImageFile(source="photo.jpg")},
+)
+```
+
+## File Precedence
+
+When files are passed at multiple levels, more specific levels override broader ones:
+
+```
+Flow input_files < Crew input_files < Task input_files
+```
+
+For example, if both Flow and Task define a file named `"chart"`, the Task's version is used.
+
+## Provider Support
+
+Different providers support different file types. CrewAI automatically formats files for each provider's API.
+
+| Provider | Image | PDF | Audio | Video | Text |
+|:---------|:-----:|:---:|:-----:|:-----:|:----:|
+| **OpenAI** (completions API) | ✓ | | | | |
+| **OpenAI** (responses API) | ✓ | ✓ | ✓ | | |
+| **Anthropic** (claude-3.x) | ✓ | ✓ | | | |
+| **Google Gemini** (gemini-1.5, 2.0, 2.5) | ✓ | ✓ | ✓ | ✓ | ✓ |
+| **AWS Bedrock** (claude-3) | ✓ | ✓ | | | |
+| **Azure OpenAI** (gpt-4o) | ✓ | | ✓ | | |
+
+
+Google Gemini models support all file types including video (up to 1 hour, 2GB). Use Gemini when you need to process video content.
+
+
+
+If you pass a file type that the provider doesn't support (e.g., video to OpenAI), you'll receive an `UnsupportedFileTypeError`. Choose your provider based on the file types you need to process.
+
+
+## How Files Are Sent
+
+CrewAI automatically chooses the optimal method to send files to each provider:
+
+| Method | Description | Used When |
+|:-------|:------------|:----------|
+| **Inline Base64** | File embedded directly in the request | Small files (< 5MB typically) |
+| **File Upload API** | File uploaded separately, referenced by ID | Large files that exceed threshold |
+| **URL Reference** | Direct URL passed to the model | File source is already a URL |
+
+### Provider Transmission Methods
+
+| Provider | Inline Base64 | File Upload API | URL References |
+|:---------|:-------------:|:---------------:|:--------------:|
+| **OpenAI** | ✓ | ✓ (> 5 MB) | ✓ |
+| **Anthropic** | ✓ | ✓ (> 5 MB) | ✓ |
+| **Google Gemini** | ✓ | ✓ (> 20 MB) | ✓ |
+| **AWS Bedrock** | ✓ | | ✓ (S3 URIs) |
+| **Azure OpenAI** | ✓ | | ✓ |
+
+
+You don't need to manage this yourself. CrewAI automatically uses the most efficient method based on file size and provider capabilities. Providers without file upload APIs use inline base64 for all files.
+
+
+## File Handling Modes
+
+Control how files are processed when they exceed provider limits:
+
+```python
+from crewai_files import ImageFile, PDFFile
+
+image = ImageFile(source="large.png", mode="strict")
+image = ImageFile(source="large.png", mode="auto")
+image = ImageFile(source="large.png", mode="warn")
+pdf = PDFFile(source="large.pdf", mode="chunk")
+```
+
+## Provider Constraints
+
+Each provider has specific limits for file sizes and dimensions:
+
+### OpenAI
+- **Images**: Max 20 MB, up to 10 images per request
+- **PDFs**: Max 32 MB, up to 100 pages
+- **Audio**: Max 25 MB, up to 25 minutes
+
+### Anthropic
+- **Images**: Max 5 MB, max 8000x8000 pixels, up to 100 images
+- **PDFs**: Max 32 MB, up to 100 pages
+
+### Google Gemini
+- **Images**: Max 100 MB
+- **PDFs**: Max 50 MB
+- **Audio**: Max 100 MB, up to 9.5 hours
+- **Video**: Max 2 GB, up to 1 hour
+
+### AWS Bedrock
+- **Images**: Max 4.5 MB, max 8000x8000 pixels
+- **PDFs**: Max 3.75 MB, up to 100 pages
+
+## Referencing Files in Prompts
+
+Use the file's key name in your task descriptions to reference files:
+
+```python
+task = Task(
+ description="""
+ Analyze the provided materials:
+ 1. Review the chart in {sales_chart}
+ 2. Cross-reference with data in {quarterly_report}
+ 3. Summarize key findings
+ """,
+ expected_output="Analysis summary with key insights",
+ input_files={
+ "sales_chart": ImageFile(source="chart.png"),
+ "quarterly_report": PDFFile(source="report.pdf"),
+ }
+)
+```
diff --git a/docs/v1.15.1/en/concepts/flows.mdx b/docs/v1.15.1/en/concepts/flows.mdx
new file mode 100644
index 000000000..647512545
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/flows.mdx
@@ -0,0 +1,1163 @@
+---
+title: Flows
+description: Learn how to create and manage AI workflows using CrewAI Flows.
+icon: arrow-progress
+mode: "wide"
+---
+
+## Overview
+
+CrewAI Flows is a powerful feature designed to streamline the creation and management of AI workflows. Flows allow developers to combine and coordinate coding tasks and Crews efficiently, providing a robust framework for building sophisticated AI automations.
+
+Flows allow you to create structured, event-driven workflows. They provide a seamless way to connect multiple tasks, manage state, and control the flow of execution in your AI applications. With Flows, you can easily design and implement multi-step processes that leverage the full potential of CrewAI's capabilities.
+
+1. **Simplified Workflow Creation**: Easily chain together multiple Crews and tasks to create complex AI workflows.
+
+2. **State Management**: Flows make it super easy to manage and share state between different tasks in your workflow.
+
+3. **Event-Driven Architecture**: Built on an event-driven model, allowing for dynamic and responsive workflows.
+
+4. **Flexible Control Flow**: Implement conditional logic, loops, and branching within your workflows.
+
+## Getting Started
+
+Let's create a simple Flow where you will use OpenAI to generate a random city in one task and then use that city to generate a fun fact in another task.
+
+```python Code
+
+from crewai.flow.flow import Flow, listen, start
+from dotenv import load_dotenv
+from litellm import completion
+
+load_dotenv()
+
+class ExampleFlow(Flow):
+ model = "gpt-4o-mini"
+
+ @start()
+ def generate_city(self):
+ print("Starting flow")
+ # Each flow state automatically gets a unique ID
+ print(f"Flow State ID: {self.state['id']}")
+
+ response = completion(
+ model=self.model,
+ messages=[
+ {
+ "role": "user",
+ "content": "Return the name of a random city in the world.",
+ },
+ ],
+ )
+
+ random_city = response["choices"][0]["message"]["content"]
+ # Store the city in our state
+ self.state["city"] = random_city
+ print(f"Random City: {random_city}")
+
+ return random_city
+
+ @listen(generate_city)
+ def generate_fun_fact(self, random_city):
+ response = completion(
+ model=self.model,
+ messages=[
+ {
+ "role": "user",
+ "content": f"Tell me a fun fact about {random_city}",
+ },
+ ],
+ )
+
+ fun_fact = response["choices"][0]["message"]["content"]
+ # Store the fun fact in our state
+ self.state["fun_fact"] = fun_fact
+ return fun_fact
+
+
+
+flow = ExampleFlow()
+flow.plot()
+result = flow.kickoff()
+
+print(f"Generated fun fact: {result}")
+```
+
+In the above example, we have created a simple Flow that generates a random city using OpenAI and then generates a fun fact about that city. The Flow consists of two tasks: `generate_city` and `generate_fun_fact`. The `generate_city` task is the starting point of the Flow, and the `generate_fun_fact` task listens for the output of the `generate_city` task.
+
+Each Flow instance automatically receives a unique identifier (UUID) in its state, which helps track and manage flow executions. The state can also store additional data (like the generated city and fun fact) that persists throughout the flow's execution.
+
+When you run the Flow, it will:
+1. Generate a unique ID for the flow state
+2. Generate a random city and store it in the state
+3. Generate a fun fact about that city and store it in the state
+4. Print the results to the console
+
+The state's unique ID and stored data can be useful for tracking flow executions and maintaining context between tasks.
+
+**Note:** Ensure you have set up your `.env` file to store your `OPENAI_API_KEY`. This key is necessary for authenticating requests to the OpenAI API.
+
+### @start()
+
+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()
+
+The `@listen()` decorator is used to mark a method as a listener for the output of another task in the Flow. The method decorated with `@listen()` will be executed when the specified task emits an output. The method can access the output of the task it is listening to as an argument.
+
+#### Usage
+
+The `@listen()` decorator can be used in several ways:
+
+1. **Listening to a Method by Name**: You can pass the name of the method you want to listen to as a string. When that method completes, the listener method will be triggered.
+
+ ```python Code
+ @listen("generate_city")
+ def generate_fun_fact(self, random_city):
+ # Implementation
+ ```
+
+2. **Listening to a Method Directly**: You can pass the method itself. When that method completes, the listener method will be triggered.
+ ```python Code
+ @listen(generate_city)
+ def generate_fun_fact(self, random_city):
+ # Implementation
+ ```
+
+### Flow Output
+
+Accessing and handling the output of a Flow is essential for integrating your AI workflows into larger applications or systems. CrewAI Flows provide straightforward mechanisms to retrieve the final output, access intermediate results, and manage the overall state of your Flow.
+
+#### Retrieving the Final Output
+
+When you run a Flow, the final output is determined by the last method that completes. The `kickoff()` method returns the output of this final method.
+
+Here's how you can access the final output:
+
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+
+class OutputExampleFlow(Flow):
+ @start()
+ def first_method(self):
+ return "Output from first_method"
+
+ @listen(first_method)
+ def second_method(self, first_output):
+ return f"Second method received: {first_output}"
+
+
+flow = OutputExampleFlow()
+flow.plot("my_flow_plot")
+final_output = flow.kickoff()
+
+print("---- Final Output ----")
+print(final_output)
+```
+
+```text Output
+---- Final Output ----
+Second method received: Output from first_method
+```
+
+
+
+
+In this example, the `second_method` is the last method to complete, so its output will be the final output of the Flow.
+The `kickoff()` method will return the final output, which is then printed to the console. The `plot()` method will generate the HTML file, which will help you understand the flow.
+
+#### Accessing and Updating State
+
+In addition to retrieving the final output, you can also access and update the state within your Flow. The state can be used to store and share data between different methods in the Flow. After the Flow has run, you can access the state to retrieve any information that was added or updated during the execution.
+
+Here's an example of how to update and access the state:
+
+
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+from pydantic import BaseModel
+
+class ExampleState(BaseModel):
+ counter: int = 0
+ message: str = ""
+
+class StateExampleFlow(Flow[ExampleState]):
+
+ @start()
+ def first_method(self):
+ self.state.message = "Hello from first_method"
+ self.state.counter += 1
+
+ @listen(first_method)
+ def second_method(self):
+ self.state.message += " - updated by second_method"
+ self.state.counter += 1
+ return self.state.message
+
+flow = StateExampleFlow()
+flow.plot("my_flow_plot")
+final_output = flow.kickoff()
+print(f"Final Output: {final_output}")
+print("Final State:")
+print(flow.state)
+```
+
+```text Output
+Final Output: Hello from first_method - updated by second_method
+Final State:
+counter=2 message='Hello from first_method - updated by second_method'
+```
+
+
+
+
+
+In this example, the state is updated by both `first_method` and `second_method`.
+After the Flow has run, you can access the final state to see the updates made by these methods.
+
+By ensuring that the final method's output is returned and providing access to the state, CrewAI Flows make it easy to integrate the results of your AI workflows into larger applications or systems,
+while also maintaining and accessing the state throughout the Flow's execution.
+
+## Flow Usage Metrics
+
+After a Flow execution completes, you can access the `usage_metrics` property to view aggregated token usage across **every LLM call** made during the run — including calls from every Crew the Flow orchestrated, calls inside Agent tools, and bare `LLM.call(...)` invocations from Flow methods. This is the SDK-side equivalent of the totals shown in the CrewAI Enterprise UI.
+
+```python Code
+from crewai import LLM
+from crewai.flow.flow import Flow, listen, start
+
+class UsageMetricsFlow(Flow):
+ @start()
+ def run_first_crew(self):
+ self.state.first_result = FirstCrew().crew().kickoff()
+
+ @listen(run_first_crew)
+ def call_llm_directly(self):
+ # Bare LLM call — still counted by flow.usage_metrics
+ llm = LLM(model="openai/gpt-4o-mini")
+ self.state.summary = llm.call("Summarize the key takeaways.")
+
+ @listen(call_llm_directly)
+ def run_second_crew(self):
+ self.state.second_result = SecondCrew().crew().kickoff()
+
+flow = UsageMetricsFlow()
+flow.kickoff()
+
+print(flow.usage_metrics)
+# UsageMetrics(total_tokens=8579, prompt_tokens=6210, completion_tokens=2369,
+# cached_prompt_tokens=0, reasoning_tokens=0,
+# cache_creation_tokens=0, successful_requests=5)
+```
+
+
+ `flow.usage_metrics` is **not** the same as `flow.kickoff().token_usage`. The
+ latter returns the `CrewOutput.token_usage` of the **last** `@listen` method
+ that returned a `CrewOutput`, which means it only reflects the final Crew and
+ ignores prior Crews and bare `LLM.call(...)` invocations entirely. Use
+ `flow.usage_metrics` whenever you need the **full** token rollup for the Flow
+ execution.
+
+
+Each entry in the returned [`UsageMetrics`](https://github.com/crewAIInc/crewAI/blob/main/lib/crewai/src/crewai/types/usage_metrics.py) is the sum across all LLM calls made within a single `flow.kickoff()` invocation. Counters reset on the next `kickoff()` call (or on each iteration of `kickoff_for_each`), so successive runs don't double-count. The property is safe to read at any point after `kickoff()` completes; reading it during execution returns the partial total accumulated so far.
+
+## Flow State Management
+
+Managing state effectively is crucial for building reliable and maintainable AI workflows. CrewAI Flows provides robust mechanisms for both unstructured and structured state management,
+allowing developers to choose the approach that best fits their application's needs.
+
+### Unstructured State Management
+
+In unstructured state management, all state is stored in the `state` attribute of the `Flow` class.
+This approach offers flexibility, enabling developers to add or modify state attributes on the fly without defining a strict schema.
+Even with unstructured states, CrewAI Flows automatically generates and maintains a unique identifier (UUID) for each state instance.
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+
+class UnstructuredExampleFlow(Flow):
+
+ @start()
+ def first_method(self):
+ # The state automatically includes an 'id' field
+ print(f"State ID: {self.state['id']}")
+ self.state['counter'] = 0
+ self.state['message'] = "Hello from structured flow"
+
+ @listen(first_method)
+ def second_method(self):
+ self.state['counter'] += 1
+ self.state['message'] += " - updated"
+
+ @listen(second_method)
+ def third_method(self):
+ self.state['counter'] += 1
+ self.state['message'] += " - updated again"
+
+ print(f"State after third_method: {self.state}")
+
+
+flow = UnstructuredExampleFlow()
+flow.plot("my_flow_plot")
+flow.kickoff()
+```
+
+
+
+**Note:** The `id` field is automatically generated and preserved throughout the flow's execution. You don't need to manage or set it manually, and it will be maintained even when updating the state with new data.
+
+**Key Points:**
+
+- **Flexibility:** You can dynamically add attributes to `self.state` without predefined constraints.
+- **Simplicity:** Ideal for straightforward workflows where state structure is minimal or varies significantly.
+
+### Structured State Management
+
+Structured state management leverages predefined schemas to ensure consistency and type safety across the workflow.
+By using models like Pydantic's `BaseModel`, developers can define the exact shape of the state, enabling better validation and auto-completion in development environments.
+
+Each state in CrewAI Flows automatically receives a unique identifier (UUID) to help track and manage state instances. This ID is automatically generated and managed by the Flow system.
+
+```python Code
+from crewai.flow.flow import Flow, listen, start
+from pydantic import BaseModel
+
+
+class ExampleState(BaseModel):
+ # Note: 'id' field is automatically added to all states
+ counter: int = 0
+ message: str = ""
+
+
+class StructuredExampleFlow(Flow[ExampleState]):
+
+ @start()
+ def first_method(self):
+ # Access the auto-generated ID if needed
+ print(f"State ID: {self.state.id}")
+ self.state.message = "Hello from structured flow"
+
+ @listen(first_method)
+ def second_method(self):
+ self.state.counter += 1
+ self.state.message += " - updated"
+
+ @listen(second_method)
+ def third_method(self):
+ self.state.counter += 1
+ self.state.message += " - updated again"
+
+ print(f"State after third_method: {self.state}")
+
+
+flow = StructuredExampleFlow()
+flow.kickoff()
+```
+
+
+
+**Key Points:**
+
+- **Defined Schema:** `ExampleState` clearly outlines the state structure, enhancing code readability and maintainability.
+- **Type Safety:** Leveraging Pydantic ensures that state attributes adhere to the specified types, reducing runtime errors.
+- **Auto-Completion:** IDEs can provide better auto-completion and error checking based on the defined state model.
+
+### Choosing Between Unstructured and Structured State Management
+
+- **Use Unstructured State Management when:**
+
+ - The workflow's state is simple or highly dynamic.
+ - Flexibility is prioritized over strict state definitions.
+ - Rapid prototyping is required without the overhead of defining schemas.
+
+- **Use Structured State Management when:**
+ - The workflow requires a well-defined and consistent state structure.
+ - Type safety and validation are important for your application's reliability.
+ - You want to leverage IDE features like auto-completion and type checking for better developer experience.
+
+By providing both unstructured and structured state management options, CrewAI Flows empowers developers to build AI workflows that are both flexible and robust, catering to a wide range of application requirements.
+
+## Flow Persistence
+
+The @persist decorator enables automatic state persistence in CrewAI Flows, allowing you to maintain flow state across restarts or different workflow executions. This decorator can be applied at either the class level or method level, providing flexibility in how you manage state persistence.
+
+### Class-Level Persistence
+
+When applied at the class level, the @persist decorator automatically persists all flow method states:
+
+```python
+@persist # Using SQLiteFlowPersistence by default
+class MyFlow(Flow[MyState]):
+ @start()
+ def initialize_flow(self):
+ # This method will automatically have its state persisted
+ self.state.counter = 1
+ print("Initialized flow. State ID:", self.state.id)
+
+ @listen(initialize_flow)
+ def next_step(self):
+ # The state (including self.state.id) is automatically reloaded
+ self.state.counter += 1
+ print("Flow state is persisted. Counter:", self.state.counter)
+```
+
+### Method-Level Persistence
+
+For more granular control, you can apply @persist to specific methods:
+
+```python
+class AnotherFlow(Flow[dict]):
+ @persist # Persists only this method's state
+ @start()
+ def begin(self):
+ if "runs" not in self.state:
+ self.state["runs"] = 0
+ self.state["runs"] += 1
+ print("Method-level persisted runs:", self.state["runs"])
+```
+
+### Forking Persisted State
+
+`@persist` supports two distinct hydration modes on `kickoff` / `kickoff_async`:
+
+- `kickoff(inputs={"id": })` — **resume**: load the latest snapshot for the supplied UUID and continue writing under the same `flow_uuid`. The history extends.
+- `kickoff(restore_from_state_id=)` — **fork**: load the latest snapshot for the supplied UUID, hydrate the new run's state from it, and assign a fresh `state.id` (auto-generated, or `inputs["id"]` if pinned). The new run's `@persist` writes land under the new `state.id`; the source flow's history is preserved.
+
+```python
+from crewai.flow.flow import Flow, start
+from crewai.flow.persistence import persist
+from pydantic import BaseModel
+
+class CounterState(BaseModel):
+ id: str = ""
+ counter: int = 0
+
+@persist
+class CounterFlow(Flow[CounterState]):
+ @start()
+ def step(self):
+ self.state.counter += 1
+ print(f"[id={self.state.id}] counter={self.state.counter}")
+
+# Run 1: fresh state, counter 0 -> 1, persisted under flow_1.state.id
+flow_1 = CounterFlow()
+flow_1.kickoff()
+
+# Fork: hydrate from flow_1's latest snapshot, but use a NEW state.id
+flow_2 = CounterFlow()
+flow_2.kickoff(restore_from_state_id=flow_1.state.id)
+# flow_2.state.counter starts at 1 (hydrated), then step() bumps it to 2.
+# flow_2.state.id != flow_1.state.id; flow_1's history is unchanged.
+```
+
+If the supplied `restore_from_state_id` does not match any persisted state, the kickoff falls back silently — same as the existing `inputs["id"]` resume not-found behavior. Combining `restore_from_state_id` with `from_checkpoint` raises a `ValueError`; pick one hydration source. Pinning `inputs["id"]` while forking shares a persistence key with another flow — usually you want only `restore_from_state_id`.
+
+### How It Works
+
+1. **Unique State Identification**
+ - Each flow state automatically receives a unique UUID
+ - The ID is preserved across state updates and method calls
+ - Supports both structured (Pydantic BaseModel) and unstructured (dictionary) states
+
+2. **Default SQLite Backend**
+ - SQLiteFlowPersistence is the default storage backend
+ - States are automatically saved to a local SQLite database
+ - Robust error handling ensures clear messages if database operations fail
+
+3. **Error Handling**
+ - Comprehensive error messages for database operations
+ - Automatic state validation during save and load
+ - Clear feedback when persistence operations encounter issues
+
+### Important Considerations
+
+- **State Types**: Both structured (Pydantic BaseModel) and unstructured (dictionary) states are supported
+- **Automatic ID**: The `id` field is automatically added if not present
+- **State Recovery**: Failed or restarted flows can automatically reload their previous state
+- **Custom Implementation**: You can provide your own FlowPersistence implementation for specialized storage needs
+
+### Technical Advantages
+
+1. **Precise Control Through Low-Level Access**
+ - Direct access to persistence operations for advanced use cases
+ - Fine-grained control via method-level persistence decorators
+ - Built-in state inspection and debugging capabilities
+ - Full visibility into state changes and persistence operations
+
+2. **Enhanced Reliability**
+ - Automatic state recovery after system failures or restarts
+ - Transaction-based state updates for data integrity
+ - Comprehensive error handling with clear error messages
+ - Robust validation during state save and load operations
+
+3. **Extensible Architecture**
+ - Customizable persistence backend through FlowPersistence interface
+ - Support for specialized storage solutions beyond SQLite
+ - Compatible with both structured (Pydantic) and unstructured (dict) states
+ - Seamless integration with existing CrewAI flow patterns
+
+The persistence system's architecture emphasizes technical precision and customization options, allowing developers to maintain full control over state management while benefiting from built-in reliability features.
+
+## Flow Control
+
+### Conditional Logic: `or`
+
+The `or_` function in Flows allows you to listen to multiple methods and trigger the listener method when any of the specified methods emit an output.
+
+
+
+```python Code
+from crewai.flow.flow import Flow, listen, or_, start
+
+class OrExampleFlow(Flow):
+
+ @start()
+ def start_method(self):
+ return "Hello from the start method"
+
+ @listen(start_method)
+ def second_method(self):
+ return "Hello from the second method"
+
+ @listen(or_(start_method, second_method))
+ def logger(self, result):
+ print(f"Logger: {result}")
+
+
+
+flow = OrExampleFlow()
+flow.plot("my_flow_plot")
+flow.kickoff()
+```
+
+```text Output
+Logger: Hello from the start method
+Logger: Hello from the second method
+```
+
+
+
+
+
+When you run this Flow, the `logger` method will be triggered by the output of either the `start_method` or the `second_method`.
+The `or_` function is used to listen to multiple methods and trigger the listener method when any of the specified methods emit an output.
+
+### Conditional Logic: `and`
+
+The `and_` function in Flows allows you to listen to multiple methods and trigger the listener method only when all the specified methods emit an output.
+
+
+
+```python Code
+from crewai.flow.flow import Flow, and_, listen, start
+
+class AndExampleFlow(Flow):
+
+ @start()
+ def start_method(self):
+ self.state["greeting"] = "Hello from the start method"
+
+ @listen(start_method)
+ def second_method(self):
+ self.state["joke"] = "What do computers eat? Microchips."
+
+ @listen(and_(start_method, second_method))
+ def logger(self):
+ print("---- Logger ----")
+ print(self.state)
+
+flow = AndExampleFlow()
+flow.plot()
+flow.kickoff()
+```
+
+```text Output
+---- Logger ----
+{'greeting': 'Hello from the start method', 'joke': 'What do computers eat? Microchips.'}
+```
+
+
+
+
+
+When you run this Flow, the `logger` method will be triggered only when both the `start_method` and the `second_method` emit an output.
+The `and_` function is used to listen to multiple methods and trigger the listener method only when all the specified methods emit an output.
+
+### Router
+
+The `@router()` decorator in Flows allows you to define conditional routing logic based on the output of a method.
+You can specify different routes based on the output of the method, allowing you to control the flow of execution dynamically.
+
+
+
+```python Code
+import random
+from crewai.flow.flow import Flow, listen, router, start
+from pydantic import BaseModel
+
+class ExampleState(BaseModel):
+ success_flag: bool = False
+
+class RouterFlow(Flow[ExampleState]):
+
+ @start()
+ def start_method(self):
+ print("Starting the structured flow")
+ random_boolean = random.choice([True, False])
+ self.state.success_flag = random_boolean
+
+ @router(start_method)
+ def second_method(self):
+ if self.state.success_flag:
+ return "success"
+ else:
+ return "failed"
+
+ @listen("success")
+ def third_method(self):
+ print("Third method running")
+
+ @listen("failed")
+ def fourth_method(self):
+ print("Fourth method running")
+
+
+flow = RouterFlow()
+flow.plot("my_flow_plot")
+flow.kickoff()
+```
+
+```text Output
+Starting the structured flow
+Third method running
+Fourth method running
+```
+
+
+
+
+
+In the above example, the `start_method` generates a random boolean value and sets it in the state.
+The `second_method` uses the `@router()` decorator to define conditional routing logic based on the value of the boolean.
+If the boolean is `True`, the method returns `"success"`, and if it is `False`, the method returns `"failed"`.
+The `third_method` and `fourth_method` listen to the output of the `second_method` and execute based on the returned value.
+
+When you run this Flow, the output will change based on the random boolean value generated by the `start_method`.
+
+### Human in the Loop (human feedback)
+
+
+The `@human_feedback` decorator requires **CrewAI version 1.8.0 or higher**.
+
+
+The `@human_feedback` decorator enables human-in-the-loop workflows by pausing flow execution to collect feedback from a human. This is useful for approval gates, quality review, and decision points that require human judgment.
+
+```python Code
+from crewai.flow.flow import Flow, start, listen
+from crewai.flow.human_feedback import human_feedback, HumanFeedbackResult
+
+class ReviewFlow(Flow):
+ @start()
+ @human_feedback(
+ message="Do you approve this content?",
+ emit=["approved", "rejected", "needs_revision"],
+ llm="gpt-4o-mini",
+ default_outcome="needs_revision",
+ )
+ def generate_content(self):
+ return "Content to be reviewed..."
+
+ @listen("approved")
+ def on_approval(self, result: HumanFeedbackResult):
+ print(f"Approved! Feedback: {result.feedback}")
+
+ @listen("rejected")
+ def on_rejection(self, result: HumanFeedbackResult):
+ print(f"Rejected. Reason: {result.feedback}")
+```
+
+When `emit` is specified, the human's free-form feedback is interpreted by an LLM and collapsed into one of the specified outcomes, which then triggers the corresponding `@listen` decorator.
+
+You can also use `@human_feedback` without routing to simply collect feedback:
+
+```python Code
+@start()
+@human_feedback(message="Any comments on this output?")
+def my_method(self):
+ return "Output for review"
+
+@listen(my_method)
+def next_step(self, result: HumanFeedbackResult):
+ # Access feedback via result.feedback
+ # Access original output via result.output
+ pass
+```
+
+Access all feedback collected during a flow via `self.last_human_feedback` (most recent) or `self.human_feedback_history` (all feedback as a list).
+
+For a complete guide on human feedback in flows, including **async/non-blocking feedback** with custom providers (Slack, webhooks, etc.), see [Human Feedback in Flows](/en/learn/human-feedback-in-flows).
+
+## Adding Agents to Flows
+
+Agents can be seamlessly integrated into your flows, providing a lightweight alternative to full Crews when you need simpler, focused task execution. Here's an example of how to use an Agent within a flow to perform market research:
+
+```python
+import asyncio
+from typing import Any, Dict, List
+
+from crewai_tools import SerperDevTool
+from pydantic import BaseModel, Field
+
+from crewai.agent import Agent
+from crewai.flow.flow import Flow, listen, start
+
+
+# Define a structured output format
+class MarketAnalysis(BaseModel):
+ key_trends: List[str] = Field(description="List of identified market trends")
+ market_size: str = Field(description="Estimated market size")
+ competitors: List[str] = Field(description="Major competitors in the space")
+
+
+# Define flow state
+class MarketResearchState(BaseModel):
+ product: str = ""
+ analysis: MarketAnalysis | None = None
+
+
+# Create a flow class
+class MarketResearchFlow(Flow[MarketResearchState]):
+ @start()
+ def initialize_research(self) -> Dict[str, Any]:
+ print(f"Starting market research for {self.state.product}")
+ return {"product": self.state.product}
+
+ @listen(initialize_research)
+ async def analyze_market(self) -> Dict[str, Any]:
+ # Create an Agent for market research
+ analyst = Agent(
+ role="Market Research Analyst",
+ goal=f"Analyze the market for {self.state.product}",
+ backstory="You are an experienced market analyst with expertise in "
+ "identifying market trends and opportunities.",
+ tools=[SerperDevTool()],
+ verbose=True,
+ )
+
+ # Define the research query
+ query = f"""
+ Research the market for {self.state.product}. Include:
+ 1. Key market trends
+ 2. Market size
+ 3. Major competitors
+
+ Format your response according to the specified structure.
+ """
+
+ # Execute the analysis with structured output format
+ result = await analyst.kickoff_async(query, response_format=MarketAnalysis)
+ if result.pydantic:
+ print("result", result.pydantic)
+ else:
+ print("result", result)
+
+ # Return the analysis to update the state
+ return {"analysis": result.pydantic}
+
+ @listen(analyze_market)
+ def present_results(self, analysis) -> None:
+ print("\nMarket Analysis Results")
+ print("=====================")
+
+ if isinstance(analysis, dict):
+ # If we got a dict with 'analysis' key, extract the actual analysis object
+ market_analysis = analysis.get("analysis")
+ else:
+ market_analysis = analysis
+
+ if market_analysis and isinstance(market_analysis, MarketAnalysis):
+ print("\nKey Market Trends:")
+ for trend in market_analysis.key_trends:
+ print(f"- {trend}")
+
+ print(f"\nMarket Size: {market_analysis.market_size}")
+
+ print("\nMajor Competitors:")
+ for competitor in market_analysis.competitors:
+ print(f"- {competitor}")
+ else:
+ print("No structured analysis data available.")
+ print("Raw analysis:", analysis)
+
+
+# Usage example
+async def run_flow():
+ flow = MarketResearchFlow()
+ flow.plot("MarketResearchFlowPlot")
+ result = await flow.kickoff_async(inputs={"product": "AI-powered chatbots"})
+ return result
+
+
+# Run the flow
+if __name__ == "__main__":
+ asyncio.run(run_flow())
+```
+
+
+
+This example demonstrates several key features of using Agents in flows:
+
+1. **Structured Output**: Using Pydantic models to define the expected output format (`MarketAnalysis`) ensures type safety and structured data throughout the flow.
+
+2. **State Management**: The flow state (`MarketResearchState`) maintains context between steps and stores both inputs and outputs.
+
+3. **Tool Integration**: Agents can use tools (like `WebsiteSearchTool`) to enhance their capabilities.
+
+## Adding Crews to Flows
+
+Creating a flow with multiple crews in CrewAI is straightforward.
+
+You can generate a new CrewAI project that includes all the scaffolding needed to create a flow with multiple crews by running the following command:
+
+```bash
+crewai create flow name_of_flow
+```
+
+This command will generate a new CrewAI project with the necessary folder structure. The generated project includes a prebuilt crew called `poem_crew` that is already working. The starter embedded crew uses the classic Python/YAML layout; new standalone crews created with `crewai create crew` use the JSON-first layout.
+
+### Folder Structure
+
+After running the `crewai create flow name_of_flow` command, you will see a folder structure similar to the following:
+
+| Directory/File | Description |
+| :--------------------- | :----------------------------------------------------------------- |
+| `name_of_flow/` | Root directory for the flow. |
+| ├── `crews/` | Contains directories for specific crews. |
+| │ └── `poem_crew/` | Directory for the "poem_crew" with its configurations and scripts. |
+| │ ├── `config/` | Configuration files directory for the "poem_crew". |
+| │ │ ├── `agents.yaml` | YAML file defining the agents for "poem_crew". |
+| │ │ └── `tasks.yaml` | YAML file defining the tasks for "poem_crew". |
+| │ ├── `poem_crew.py` | Script for "poem_crew" functionality. |
+| ├── `tools/` | Directory for additional tools used in the flow. |
+| │ └── `custom_tool.py` | Custom tool implementation. |
+| ├── `main.py` | Main script for running the flow. |
+| ├── `README.md` | Project description and instructions. |
+| ├── `pyproject.toml` | Configuration file for project dependencies and settings. |
+| └── `.gitignore` | Specifies files and directories to ignore in version control. |
+
+### Building Your Crews
+
+In the `crews` folder, you can define multiple crews. The generated `poem_crew` uses the classic embedded-crew structure:
+
+- `config/agents.yaml`: Defines the agents for the crew.
+- `config/tasks.yaml`: Defines the tasks for the crew.
+- `poem_crew.py`: Contains the crew definition, including agents, tasks, and the crew itself.
+
+You can copy, paste, and edit the `poem_crew` to create other classic embedded crews.
+
+For JSON-first embedded crews, use a folder with `crew.jsonc` and `agents/*.jsonc` instead:
+
+```text
+crews/
+└── research_crew/
+ ├── agents/
+ │ └── researcher.jsonc
+ └── crew.jsonc
+```
+
+Then load it from a Flow step:
+
+```python
+from pathlib import Path
+from crewai.project import load_crew
+
+crew, default_inputs = load_crew(
+ Path(__file__).parent / "crews" / "research_crew" / "crew.jsonc"
+)
+result = crew.kickoff(inputs={**default_inputs, "topic": "AI Agents"})
+```
+
+### Connecting Crews in `main.py`
+
+The `main.py` file is where you create your flow and connect the crews together. You can define your flow by using the `Flow` class and the decorators `@start` and `@listen` to specify the flow of execution.
+
+Here's an example of how you can connect the `poem_crew` in the `main.py` file:
+
+```python Code
+#!/usr/bin/env python
+from random import randint
+
+from pydantic import BaseModel
+from crewai.flow.flow import Flow, listen, start
+from .crews.poem_crew.poem_crew import PoemCrew
+
+class PoemState(BaseModel):
+ sentence_count: int = 1
+ poem: str = ""
+
+class PoemFlow(Flow[PoemState]):
+
+ @start()
+ def generate_sentence_count(self):
+ print("Generating sentence count")
+ self.state.sentence_count = randint(1, 5)
+
+ @listen(generate_sentence_count)
+ def generate_poem(self):
+ print("Generating poem")
+ result = PoemCrew().crew().kickoff(inputs={"sentence_count": self.state.sentence_count})
+
+ print("Poem generated", result.raw)
+ self.state.poem = result.raw
+
+ @listen(generate_poem)
+ def save_poem(self):
+ print("Saving poem")
+ with open("poem.txt", "w") as f:
+ f.write(self.state.poem)
+
+def kickoff():
+ poem_flow = PoemFlow()
+ poem_flow.kickoff()
+
+
+def plot():
+ poem_flow = PoemFlow()
+ poem_flow.plot("PoemFlowPlot")
+
+if __name__ == "__main__":
+ kickoff()
+ plot()
+```
+
+In this example, the `PoemFlow` class defines a flow that generates a sentence count, uses the `PoemCrew` to generate a poem, and then saves the poem to a file. The flow is kicked off by calling the `kickoff()` method. The PoemFlowPlot will be generated by `plot()` method.
+
+
+
+### Running the Flow
+
+(Optional) Before running the flow, you can install the dependencies by running:
+
+```bash
+crewai install
+```
+
+Once all of the dependencies are installed, you need to activate the virtual environment by running:
+
+```bash
+source .venv/bin/activate
+```
+
+After activating the virtual environment, you can run the flow with the CrewAI CLI:
+
+```bash
+crewai run
+```
+
+You can also run the project script directly:
+
+```bash
+uv run kickoff
+```
+
+The flow will execute, and you should see the output in the console.
+
+## Plot Flows
+
+Visualizing your AI workflows can provide valuable insights into the structure and execution paths of your flows. CrewAI offers a powerful visualization tool that allows you to generate interactive plots of your flows, making it easier to understand and optimize your AI workflows.
+
+### What are Plots?
+
+Plots in CrewAI are graphical representations of your AI workflows. They display the various tasks, their connections, and the flow of data between them. This visualization helps in understanding the sequence of operations, identifying bottlenecks, and ensuring that the workflow logic aligns with your expectations.
+
+### How to Generate a Plot
+
+CrewAI provides two convenient methods to generate plots of your flows:
+
+#### Option 1: Using the `plot()` Method
+
+If you are working directly with a flow instance, you can generate a plot by calling the `plot()` method on your flow object. This method will create an HTML file containing the interactive plot of your flow.
+
+```python Code
+# Assuming you have a flow instance
+flow.plot("my_flow_plot")
+```
+
+This will generate a file named `my_flow_plot.html` in your current directory. You can open this file in a web browser to view the interactive plot.
+
+#### Option 2: Using the Command Line
+
+If you are working within a structured CrewAI project, you can generate a plot using the command line. This is particularly useful for larger projects where you want to visualize the entire flow setup.
+
+```bash
+crewai flow plot
+```
+
+This command will generate an HTML file with the plot of your flow, similar to the `plot()` method. The file will be saved in your project directory, and you can open it in a web browser to explore the flow.
+
+### Understanding the Plot
+
+The generated plot will display nodes representing the tasks in your flow, with directed edges indicating the flow of execution. The plot is interactive, allowing you to zoom in and out, and hover over nodes to see additional details.
+
+By visualizing your flows, you can gain a clearer understanding of the workflow's structure, making it easier to debug, optimize, and communicate your AI processes to others.
+
+### Conclusion
+
+Plotting your flows is a powerful feature of CrewAI that enhances your ability to design and manage complex AI workflows. Whether you choose to use the `plot()` method or the command line, generating plots will provide you with a visual representation of your workflows, aiding in both development and presentation.
+
+## Next Steps
+
+If you're interested in exploring additional examples of flows, we have a variety of recommendations in our examples repository. Here are four specific flow examples, each showcasing unique use cases to help you match your current problem type to a specific example:
+
+1. **Email Auto Responder Flow**: This example demonstrates an infinite loop where a background job continually runs to automate email responses. It's a great use case for tasks that need to be performed repeatedly without manual intervention. [View Example](https://github.com/crewAIInc/crewAI-examples/tree/main/email_auto_responder_flow)
+
+2. **Lead Score Flow**: This flow showcases adding human-in-the-loop feedback and handling different conditional branches using the router. It's an excellent example of how to incorporate dynamic decision-making and human oversight into your workflows. [View Example](https://github.com/crewAIInc/crewAI-examples/tree/main/lead-score-flow)
+
+3. **Write a Book Flow**: This example excels at chaining multiple crews together, where the output of one crew is used by another. Specifically, one crew outlines an entire book, and another crew generates chapters based on the outline. Eventually, everything is connected to produce a complete book. This flow is perfect for complex, multi-step processes that require coordination between different tasks. [View Example](https://github.com/crewAIInc/crewAI-examples/tree/main/write_a_book_with_flows)
+
+4. **Meeting Assistant Flow**: This flow demonstrates how to broadcast one event to trigger multiple follow-up actions. For instance, after a meeting is completed, the flow can update a Trello board, send a Slack message, and save the results. It's a great example of handling multiple outcomes from a single event, making it ideal for comprehensive task management and notification systems. [View Example](https://github.com/crewAIInc/crewAI-examples/tree/main/meeting_assistant_flow)
+
+By exploring these examples, you can gain insights into how to leverage CrewAI Flows for various use cases, from automating repetitive tasks to managing complex, multi-step processes with dynamic decision-making and human feedback.
+
+Also, check out our YouTube video on how to use flows in CrewAI below!
+
+
+
+## Running Flows
+
+There are two ways to run a flow:
+
+### Using the Flow API
+
+You can run a flow programmatically by creating an instance of your flow class and calling the `kickoff()` method:
+
+```python
+flow = ExampleFlow()
+result = flow.kickoff()
+```
+
+### Streaming Flow Execution
+
+For real-time visibility into flow execution, you can enable streaming to receive output as it's generated:
+
+```python
+class StreamingFlow(Flow):
+ stream = True # Enable streaming
+
+ @start()
+ def research(self):
+ # Your flow implementation
+ pass
+
+# Iterate over streaming output
+flow = StreamingFlow()
+streaming = flow.kickoff()
+for chunk in streaming:
+ print(chunk.content, end="", flush=True)
+
+# Access final result
+result = streaming.result
+```
+
+Learn more about streaming in the [Streaming Flow Execution](/en/learn/streaming-flow-execution) guide.
+
+## Memory in Flows
+
+Every Flow automatically has access to CrewAI's unified [Memory](/concepts/memory) system. You can store, recall, and extract memories directly inside any flow method using three built-in convenience methods.
+
+### Built-in Methods
+
+| Method | Description |
+| :--- | :--- |
+| `self.remember(content, **kwargs)` | Store content in memory. Accepts optional `scope`, `categories`, `metadata`, `importance`. |
+| `self.recall(query, **kwargs)` | Retrieve relevant memories. Accepts optional `scope`, `categories`, `limit`, `depth`. |
+| `self.extract_memories(content)` | Break raw text into discrete, self-contained memory statements. |
+
+A default `Memory()` instance is created automatically when the Flow initializes. You can also pass a custom one:
+
+```python
+from crewai.flow.flow import Flow
+from crewai import Memory
+
+custom_memory = Memory(
+ recency_weight=0.5,
+ recency_half_life_days=7,
+ embedder={"provider": "ollama", "config": {"model_name": "mxbai-embed-large"}},
+)
+
+flow = MyFlow(memory=custom_memory)
+```
+
+### Example: Research and Analyze Flow
+
+```python
+from crewai.flow.flow import Flow, listen, start
+
+
+class ResearchAnalysisFlow(Flow):
+ @start()
+ def gather_data(self):
+ # Simulate research findings
+ findings = (
+ "PostgreSQL handles 10k concurrent connections with connection pooling. "
+ "MySQL caps at around 5k. MongoDB scales horizontally but adds complexity."
+ )
+
+ # Extract atomic facts and remember each one
+ memories = self.extract_memories(findings)
+ for mem in memories:
+ self.remember(mem, scope="/research/databases")
+
+ return findings
+
+ @listen(gather_data)
+ def analyze(self, raw_findings):
+ # Recall relevant past research (from this run or previous runs)
+ past = self.recall("database performance and scaling", limit=10, depth="shallow")
+
+ context_lines = [f"- {m.record.content}" for m in past]
+ context = "\n".join(context_lines) if context_lines else "No prior context."
+
+ return {
+ "new_findings": raw_findings,
+ "prior_context": context,
+ "total_memories": len(past),
+ }
+
+
+flow = ResearchAnalysisFlow()
+result = flow.kickoff()
+print(result)
+```
+
+Because memory persists across runs (backed by LanceDB on disk), the `analyze` step will recall findings from previous executions too -- enabling flows that learn and accumulate knowledge over time.
+
+See the [Memory documentation](/concepts/memory) for details on scopes, slices, composite scoring, embedder configuration, and more.
+
+### Using the CLI
+
+Starting from version 0.103.0, you can run flows using the `crewai run` command:
+
+```shell
+crewai run
+```
+
+This command automatically detects if your project is a flow (based on the `type = "flow"` setting in your pyproject.toml) and runs it accordingly. This is the recommended way to run flows from the command line.
+
+The legacy `crewai flow kickoff` command is deprecated. Use `crewai run` for both crews and flows.
diff --git a/docs/v1.15.1/en/concepts/knowledge.mdx b/docs/v1.15.1/en/concepts/knowledge.mdx
new file mode 100644
index 000000000..937cca1fd
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/knowledge.mdx
@@ -0,0 +1,1097 @@
+---
+title: Knowledge
+description: What is knowledge in CrewAI and how to use it.
+icon: book
+mode: "wide"
+---
+
+## Overview
+
+Knowledge in CrewAI is a powerful system that allows AI agents to access and utilize external information sources during their tasks.
+Think of it as giving your agents a reference library they can consult while working.
+
+
+ Key benefits of using Knowledge:
+ - Enhance agents with domain-specific information
+ - Support decisions with real-world data
+ - Maintain context across conversations
+ - Ground responses in factual information
+
+
+## Quickstart Examples
+
+
+For file-based Knowledge Sources, make sure to place your files in a `knowledge` directory at the root of your project.
+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
+from crewai import Agent, Task, Crew, Process, LLM
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Create a knowledge source
+content = "Users name is John. He is 30 years old and lives in San Francisco."
+string_source = StringKnowledgeSource(content=content)
+
+# Create an LLM with a temperature of 0 to ensure deterministic outputs
+llm = LLM(model="gpt-4o-mini", temperature=0)
+
+# Create an agent with the knowledge store
+agent = Agent(
+ role="About User",
+ goal="You know everything about the user.",
+ backstory="You are a master at understanding people and their preferences.",
+ verbose=True,
+ allow_delegation=False,
+ llm=llm,
+)
+
+task = Task(
+ description="Answer the following questions about the user: {question}",
+ expected_output="An answer to the question.",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+ process=Process.sequential,
+ knowledge_sources=[string_source], # Enable knowledge by adding the sources here
+)
+
+result = crew.kickoff(inputs={"question": "What city does John live in and how old is he?"})
+```
+
+### Web Content Knowledge Example
+
+
+ You need to install `docling` for the following example to work: `uv add docling`
+
+
+```python Code
+from crewai import LLM, Agent, Crew, Process, Task
+from crewai.knowledge.source.crew_docling_source import CrewDoclingSource
+
+# Create a knowledge source from web content
+content_source = CrewDoclingSource(
+ file_paths=[
+ "https://lilianweng.github.io/posts/2024-11-28-reward-hacking",
+ "https://lilianweng.github.io/posts/2024-07-07-hallucination",
+ ],
+)
+
+# Create an LLM with a temperature of 0 to ensure deterministic outputs
+llm = LLM(model="gpt-4o-mini", temperature=0)
+
+# Create an agent with the knowledge store
+agent = Agent(
+ role="About papers",
+ goal="You know everything about the papers.",
+ backstory="You are a master at understanding papers and their content.",
+ verbose=True,
+ allow_delegation=False,
+ llm=llm,
+)
+
+task = Task(
+ description="Answer the following questions about the papers: {question}",
+ expected_output="An answer to the question.",
+ agent=agent,
+)
+
+crew = Crew(
+ agents=[agent],
+ tasks=[task],
+ verbose=True,
+ process=Process.sequential,
+ knowledge_sources=[content_source],
+)
+
+result = crew.kickoff(
+ inputs={"question": "What is the reward hacking paper about? Be sure to provide sources."}
+)
+```
+
+## Supported Knowledge Sources
+
+CrewAI supports various types of knowledge sources out of the box:
+
+
+
+ - Raw strings
+ - Text files (.txt)
+ - PDF documents
+
+
+ - CSV files
+ - Excel spreadsheets
+ - JSON documents
+
+
+
+### Text File Knowledge Source
+```python
+from crewai.knowledge.source.text_file_knowledge_source import TextFileKnowledgeSource
+
+text_source = TextFileKnowledgeSource(
+ file_paths=["document.txt", "another.txt"]
+)
+```
+
+### PDF Knowledge Source
+```python
+from crewai.knowledge.source.pdf_knowledge_source import PDFKnowledgeSource
+
+pdf_source = PDFKnowledgeSource(
+ file_paths=["document.pdf", "another.pdf"]
+)
+```
+
+### CSV Knowledge Source
+```python
+from crewai.knowledge.source.csv_knowledge_source import CSVKnowledgeSource
+
+csv_source = CSVKnowledgeSource(
+ file_paths=["data.csv"]
+)
+```
+
+### Excel Knowledge Source
+```python
+from crewai.knowledge.source.excel_knowledge_source import ExcelKnowledgeSource
+
+excel_source = ExcelKnowledgeSource(
+ file_paths=["spreadsheet.xlsx"]
+)
+```
+
+### JSON Knowledge Source
+```python
+from crewai.knowledge.source.json_knowledge_source import JSONKnowledgeSource
+
+json_source = JSONKnowledgeSource(
+ file_paths=["data.json"]
+)
+```
+
+
+ Please ensure that you create the ./knowledge folder. All source files (e.g., .txt, .pdf, .xlsx, .json) should be placed in this folder for centralized management.
+
+
+## Agent vs Crew Knowledge: Complete Guide
+
+
+**Understanding Knowledge Levels**: CrewAI supports knowledge at both agent and crew levels. This section clarifies exactly how each works, when they're initialized, and addresses common misconceptions about dependencies.
+
+
+### How Knowledge Initialization Actually Works
+
+Here's exactly what happens when you use knowledge:
+
+#### Agent-Level Knowledge (Independent)
+```python
+from crewai import Agent, Task, Crew
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Agent with its own knowledge - NO crew knowledge needed
+specialist_knowledge = StringKnowledgeSource(
+ content="Specialized technical information for this agent only"
+)
+
+specialist_agent = Agent(
+ role="Technical Specialist",
+ goal="Provide technical expertise",
+ backstory="Expert in specialized technical domains",
+ knowledge_sources=[specialist_knowledge] # Agent-specific knowledge
+)
+
+task = Task(
+ description="Answer technical questions",
+ agent=specialist_agent,
+ expected_output="Technical answer"
+)
+
+# No crew-level knowledge required
+crew = Crew(
+ agents=[specialist_agent],
+ tasks=[task]
+)
+
+result = crew.kickoff() # Agent knowledge works independently
+```
+
+#### What Happens During `crew.kickoff()`
+
+When you call `crew.kickoff()`, here's the exact sequence:
+
+```python
+# During kickoff
+for agent in self.agents:
+ agent.crew = self # Agent gets reference to crew
+ agent.set_knowledge(crew_embedder=self.embedder) # Agent knowledge initialized
+ agent.create_agent_executor()
+```
+
+#### Storage Independence
+
+Each knowledge level uses independent storage collections:
+
+```python
+# Agent knowledge storage
+agent_collection_name = agent.role # e.g., "Technical Specialist"
+
+# Crew knowledge storage
+crew_collection_name = "crew"
+
+# Both stored in same ChromaDB instance but different collections
+# Path: ~/.local/share/CrewAI/{project}/knowledge/
+# ├── crew/ # Crew knowledge collection
+# ├── Technical Specialist/ # Agent knowledge collection
+# └── Another Agent Role/ # Another agent's collection
+```
+
+### Complete Working Examples
+
+#### Example 1: Agent-Only Knowledge
+```python
+from crewai import Agent, Task, Crew
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Agent-specific knowledge
+agent_knowledge = StringKnowledgeSource(
+ content="Agent-specific information that only this agent needs"
+)
+
+agent = Agent(
+ role="Specialist",
+ goal="Use specialized knowledge",
+ backstory="Expert with specific knowledge",
+ knowledge_sources=[agent_knowledge],
+ embedder={ # Agent can have its own embedder
+ "provider": "openai",
+ "config": {"model": "text-embedding-3-small"}
+ }
+)
+
+task = Task(
+ description="Answer using your specialized knowledge",
+ agent=agent,
+ expected_output="Answer based on agent knowledge"
+)
+
+# No crew knowledge needed
+crew = Crew(agents=[agent], tasks=[task])
+result = crew.kickoff() # Works perfectly
+```
+
+#### Example 2: Both Agent and Crew Knowledge
+```python
+# Crew-wide knowledge (shared by all agents)
+crew_knowledge = StringKnowledgeSource(
+ content="Company policies and general information for all agents"
+)
+
+# Agent-specific knowledge
+specialist_knowledge = StringKnowledgeSource(
+ content="Technical specifications only the specialist needs"
+)
+
+specialist = Agent(
+ role="Technical Specialist",
+ goal="Provide technical expertise",
+ backstory="Technical expert",
+ knowledge_sources=[specialist_knowledge] # Agent-specific
+)
+
+generalist = Agent(
+ role="General Assistant",
+ goal="Provide general assistance",
+ backstory="General helper"
+ # No agent-specific knowledge
+)
+
+crew = Crew(
+ agents=[specialist, generalist],
+ tasks=[...],
+ knowledge_sources=[crew_knowledge] # Crew-wide knowledge
+)
+
+# Result:
+# - specialist gets: crew_knowledge + specialist_knowledge
+# - generalist gets: crew_knowledge only
+```
+
+#### Example 3: Multiple Agents with Different Knowledge
+```python
+# Different knowledge for different agents
+sales_knowledge = StringKnowledgeSource(content="Sales procedures and pricing")
+tech_knowledge = StringKnowledgeSource(content="Technical documentation")
+support_knowledge = StringKnowledgeSource(content="Support procedures")
+
+sales_agent = Agent(
+ role="Sales Representative",
+ knowledge_sources=[sales_knowledge],
+ embedder={"provider": "openai", "config": {"model": "text-embedding-3-small"}}
+)
+
+tech_agent = Agent(
+ role="Technical Expert",
+ knowledge_sources=[tech_knowledge],
+ embedder={"provider": "ollama", "config": {"model": "mxbai-embed-large"}}
+)
+
+support_agent = Agent(
+ role="Support Specialist",
+ knowledge_sources=[support_knowledge]
+ # Will use crew embedder as fallback
+)
+
+crew = Crew(
+ agents=[sales_agent, tech_agent, support_agent],
+ tasks=[...],
+ embedder={ # Fallback embedder for agents without their own
+ "provider": "google-generativeai",
+ "config": {"model_name": "gemini-embedding-001"}
+ }
+)
+
+# Each agent gets only their specific knowledge
+# Each can use different embedding providers
+```
+
+
+Unlike retrieval from a vector database using a tool, agents preloaded with knowledge will not need a retrieval persona or task.
+Simply add the relevant knowledge sources your agent or crew needs to function.
+
+Knowledge sources can be added at the agent or crew level.
+Crew level knowledge sources will be used by **all agents** in the crew.
+Agent level knowledge sources will be used by the **specific agent** that is preloaded with the knowledge.
+
+
+## Knowledge Configuration
+
+You can configure the knowledge configuration for the crew or agent.
+
+```python Code
+from crewai.knowledge.knowledge_config import KnowledgeConfig
+
+knowledge_config = KnowledgeConfig(results_limit=10, score_threshold=0.5)
+
+agent = Agent(
+ ...
+ knowledge_config=knowledge_config
+)
+```
+
+
+ `results_limit`: is the number of relevant documents to return. Default is 3.
+ `score_threshold`: is the minimum score for a document to be considered relevant. Default is 0.35.
+
+
+## Supported Knowledge Parameters
+
+
+ List of knowledge sources that provide content to be stored and queried. Can include PDF, CSV, Excel, JSON, text files, or string content.
+
+
+ Name of the collection where the knowledge will be stored. Used to identify different sets of knowledge. Defaults to \"knowledge\" if not provided.
+
+
+Custom storage configuration for managing how the knowledge is stored and retrieved. If not provided, a default storage will be created.
+
+
+## Knowledge Storage Transparency
+
+
+**Understanding Knowledge Storage**: CrewAI automatically stores knowledge sources in platform-specific directories using ChromaDB for vector storage. Understanding these locations and defaults helps with production deployments, debugging, and storage management.
+
+
+### Where CrewAI Stores Knowledge Files
+
+By default, CrewAI uses the same storage system as memory, storing knowledge in platform-specific directories:
+
+#### Default Storage Locations by Platform
+
+**macOS:**
+```
+~/Library/Application Support/CrewAI/{project_name}/
+└── knowledge/ # Knowledge ChromaDB files
+ ├── chroma.sqlite3 # ChromaDB metadata
+ ├── {collection_id}/ # Vector embeddings
+ └── knowledge_{collection}/ # Named collections
+```
+
+**Linux:**
+```
+~/.local/share/CrewAI/{project_name}/
+└── knowledge/
+ ├── chroma.sqlite3
+ ├── {collection_id}/
+ └── knowledge_{collection}/
+```
+
+**Windows:**
+```
+C:\Users\{username}\AppData\Local\CrewAI\{project_name}\
+└── knowledge\
+ ├── chroma.sqlite3
+ ├── {collection_id}\
+ └── knowledge_{collection}\
+```
+
+### Finding Your Knowledge Storage Location
+
+To see exactly where CrewAI is storing your knowledge files:
+
+```python
+from crewai.utilities.paths import db_storage_path
+import os
+
+# Get the knowledge storage path
+knowledge_path = os.path.join(db_storage_path(), "knowledge")
+print(f"Knowledge storage location: {knowledge_path}")
+
+# List knowledge collections and files
+if os.path.exists(knowledge_path):
+ print("\nKnowledge storage contents:")
+ for item in os.listdir(knowledge_path):
+ item_path = os.path.join(knowledge_path, item)
+ if os.path.isdir(item_path):
+ print(f"📁 Collection: {item}/")
+ # Show collection contents
+ try:
+ for subitem in os.listdir(item_path):
+ print(f" └── {subitem}")
+ except PermissionError:
+ print(f" └── (permission denied)")
+ else:
+ print(f"📄 {item}")
+else:
+ print("No knowledge storage found yet.")
+```
+
+### Controlling Knowledge Storage Locations
+
+#### Option 1: Environment Variable (Recommended)
+```python
+import os
+from crewai import Crew
+
+# Set custom storage location for all CrewAI data
+os.environ["CREWAI_STORAGE_DIR"] = "./my_project_storage"
+
+# All knowledge will now be stored in ./my_project_storage/knowledge/
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ knowledge_sources=[...]
+)
+```
+
+#### Option 2: Custom Knowledge Storage
+```python
+from crewai.knowledge.storage.knowledge_storage import KnowledgeStorage
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Create custom storage with specific embedder
+custom_storage = KnowledgeStorage(
+ embedder={
+ "provider": "ollama",
+ "config": {"model": "mxbai-embed-large"}
+ },
+ collection_name="my_custom_knowledge"
+)
+
+# Use with knowledge sources
+knowledge_source = StringKnowledgeSource(
+ content="Your knowledge content here"
+)
+knowledge_source.storage = custom_storage
+```
+
+#### Option 3: Project-Specific Knowledge Storage
+```python
+import os
+from pathlib import Path
+
+# Store knowledge in project directory
+project_root = Path(__file__).parent
+knowledge_dir = project_root / "knowledge_storage"
+
+os.environ["CREWAI_STORAGE_DIR"] = str(knowledge_dir)
+
+# Now all knowledge will be stored in your project directory
+```
+
+### Default Embedding Provider Behavior
+
+
+**Default Embedding Provider**: CrewAI defaults to OpenAI embeddings (`text-embedding-3-small`) for knowledge storage, even when using different LLM providers. You can easily customize this to match your setup.
+
+
+#### Understanding Default Behavior
+```python
+from crewai import Agent, Crew, LLM
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# When using Claude as your LLM...
+agent = Agent(
+ role="Researcher",
+ goal="Research topics",
+ backstory="Expert researcher",
+ llm=LLM(provider="anthropic", model="claude-3-sonnet") # Using Claude
+)
+
+# CrewAI will still use OpenAI embeddings by default for knowledge
+# This ensures consistency but may not match your LLM provider preference
+knowledge_source = StringKnowledgeSource(content="Research data...")
+
+crew = Crew(
+ agents=[agent],
+ tasks=[...],
+ knowledge_sources=[knowledge_source]
+ # Default: Uses OpenAI embeddings even with Claude LLM
+)
+```
+
+#### Customizing Knowledge Embedding Providers
+```python
+# Option 1: Use Voyage AI (recommended by Anthropic for Claude users)
+crew = Crew(
+ agents=[agent],
+ tasks=[...],
+ knowledge_sources=[knowledge_source],
+ embedder={
+ "provider": "voyageai", # Recommended for Claude users
+ "config": {
+ "api_key": "your-voyage-api-key",
+ "model": "voyage-3" # or "voyage-3-large" for best quality
+ }
+ }
+)
+
+# Option 2: Use local embeddings (no external API calls)
+crew = Crew(
+ agents=[agent],
+ tasks=[...],
+ knowledge_sources=[knowledge_source],
+ embedder={
+ "provider": "ollama",
+ "config": {
+ "model": "mxbai-embed-large",
+ "url": "http://localhost:11434/api/embeddings"
+ }
+ }
+)
+
+# Option 3: Agent-level embedding customization
+agent = Agent(
+ role="Researcher",
+ goal="Research topics",
+ backstory="Expert researcher",
+ knowledge_sources=[knowledge_source],
+ embedder={
+ "provider": "google-generativeai",
+ "config": {
+ "model_name": "gemini-embedding-001",
+ "api_key": "your-google-key"
+ }
+ }
+)
+```
+
+#### Configuring Azure OpenAI Embeddings
+
+When using Azure OpenAI embeddings:
+1. Make sure you deploy the embedding model in Azure platform first
+2. Then you need to use the following configuration:
+
+```python
+agent = Agent(
+ role="Researcher",
+ goal="Research topics",
+ backstory="Expert researcher",
+ knowledge_sources=[knowledge_source],
+ embedder={
+ "provider": "azure",
+ "config": {
+ "api_key": "your-azure-api-key",
+ "model": "text-embedding-ada-002", # change to the model you are using and is deployed in Azure
+ "api_base": "https://your-azure-endpoint.openai.azure.com/",
+ "api_version": "2024-02-01"
+ }
+ }
+)
+```
+
+## Advanced Features
+
+### Query Rewriting
+
+CrewAI implements an intelligent query rewriting mechanism to optimize knowledge retrieval. When an agent needs to search through knowledge sources, the raw task prompt is automatically transformed into a more effective search query.
+
+#### How Query Rewriting Works
+
+1. When an agent executes a task with knowledge sources available, the `_get_knowledge_search_query` method is triggered
+2. The agent's LLM is used to transform the original task prompt into an optimized search query
+3. This optimized query is then used to retrieve relevant information from knowledge sources
+
+#### Benefits of Query Rewriting
+
+
+
+ By focusing on key concepts and removing irrelevant content, query rewriting helps retrieve more relevant information.
+
+
+ The rewritten queries are designed to be more specific and context-aware for vector database retrieval.
+
+
+
+#### Example
+
+```python
+# Original task prompt
+task_prompt = "Answer the following questions about the user's favorite movies: What movie did John watch last week? Format your answer in JSON."
+
+# Behind the scenes, this might be rewritten as:
+rewritten_query = "What movies did John watch last week?"
+```
+
+The rewritten query is more focused on the core information need and removes irrelevant instructions about output formatting.
+
+
+ This mechanism is fully automatic and requires no configuration from users. The agent's LLM is used to perform the query rewriting, so using a more capable LLM can improve the quality of rewritten queries.
+
+
+### Knowledge Events
+
+CrewAI emits events during the knowledge retrieval process that you can listen for using the event system. These events allow you to monitor, debug, and analyze how knowledge is being retrieved and used by your agents.
+
+#### Available Knowledge Events
+
+- **KnowledgeRetrievalStartedEvent**: Emitted when an agent starts retrieving knowledge from sources
+- **KnowledgeRetrievalCompletedEvent**: Emitted when knowledge retrieval is completed, including the query used and the retrieved content
+- **KnowledgeQueryStartedEvent**: Emitted when a query to knowledge sources begins
+- **KnowledgeQueryCompletedEvent**: Emitted when a query completes successfully
+- **KnowledgeQueryFailedEvent**: Emitted when a query to knowledge sources fails
+- **KnowledgeSearchQueryFailedEvent**: Emitted when a search query fails
+
+#### Example: Monitoring Knowledge Retrieval
+
+```python
+from crewai.events import (
+ KnowledgeRetrievalStartedEvent,
+ KnowledgeRetrievalCompletedEvent,
+ BaseEventListener,
+)
+
+class KnowledgeMonitorListener(BaseEventListener):
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(KnowledgeRetrievalStartedEvent)
+ def on_knowledge_retrieval_started(source, event):
+ print(f"Agent '{event.agent.role}' started retrieving knowledge")
+
+ @crewai_event_bus.on(KnowledgeRetrievalCompletedEvent)
+ def on_knowledge_retrieval_completed(source, event):
+ print(f"Agent '{event.agent.role}' completed knowledge retrieval")
+ print(f"Query: {event.query}")
+ print(f"Retrieved {len(event.retrieved_knowledge)} knowledge chunks")
+
+# Create an instance of your listener
+knowledge_monitor = KnowledgeMonitorListener()
+```
+
+For more information on using events, see the [Event Listeners](/en/concepts/event-listener) documentation.
+
+### Custom Knowledge Sources
+
+CrewAI allows you to create custom knowledge sources for any type of data by extending the `BaseKnowledgeSource` class. Let's create a practical example that fetches and processes space news articles.
+
+#### Space News Knowledge Source Example
+
+
+
+```python Code
+from crewai import Agent, Task, Crew, Process, LLM
+from crewai.knowledge.source.base_knowledge_source import BaseKnowledgeSource
+import requests
+from datetime import datetime
+from typing import Dict, Any
+from pydantic import BaseModel, Field
+
+class SpaceNewsKnowledgeSource(BaseKnowledgeSource):
+ """Knowledge source that fetches data from Space News API."""
+
+ api_endpoint: str = Field(description="API endpoint URL")
+ limit: int = Field(default=10, description="Number of articles to fetch")
+
+ def load_content(self) -> Dict[Any, str]:
+ """Fetch and format space news articles."""
+ try:
+ response = requests.get(
+ f"{self.api_endpoint}?limit={self.limit}"
+ )
+ response.raise_for_status()
+
+ data = response.json()
+ articles = data.get('results', [])
+
+ formatted_data = self.validate_content(articles)
+ return {self.api_endpoint: formatted_data}
+ except Exception as e:
+ raise ValueError(f"Failed to fetch space news: {str(e)}")
+
+ def validate_content(self, articles: list) -> str:
+ """Format articles into readable text."""
+ formatted = "Space News Articles:\n\n"
+ for article in articles:
+ formatted += f"""
+ Title: {article['title']}
+ Published: {article['published_at']}
+ Summary: {article['summary']}
+ News Site: {article['news_site']}
+ URL: {article['url']}
+ -------------------"""
+ return formatted
+
+ def add(self) -> None:
+ """Process and store the articles."""
+ content = self.load_content()
+ for _, text in content.items():
+ chunks = self._chunk_text(text)
+ self.chunks.extend(chunks)
+
+ self._save_documents()
+
+# Create knowledge source
+recent_news = SpaceNewsKnowledgeSource(
+ api_endpoint="https://api.spaceflightnewsapi.net/v4/articles",
+ limit=10,
+)
+
+# Create specialized agent
+space_analyst = Agent(
+ role="Space News Analyst",
+ goal="Answer questions about space news accurately and comprehensively",
+ backstory="""You are a space industry analyst with expertise in space exploration,
+ satellite technology, and space industry trends. You excel at answering questions
+ about space news and providing detailed, accurate information.""",
+ knowledge_sources=[recent_news],
+ llm=LLM(model="gpt-4", temperature=0.0)
+)
+
+# Create task that handles user questions
+analysis_task = Task(
+ description="Answer this question about space news: {user_question}",
+ expected_output="A detailed answer based on the recent space news articles",
+ agent=space_analyst
+)
+
+# Create and run the crew
+crew = Crew(
+ agents=[space_analyst],
+ tasks=[analysis_task],
+ verbose=True,
+ process=Process.sequential
+)
+
+# Example usage
+result = crew.kickoff(
+ inputs={"user_question": "What are the latest developments in space exploration?"}
+)
+```
+
+```output Output
+# Agent: Space News Analyst
+## Task: Answer this question about space news: What are the latest developments in space exploration?
+
+
+# Agent: Space News Analyst
+## Final Answer:
+The latest developments in space exploration, based on recent space news articles, include the following:
+
+1. SpaceX has received the final regulatory approvals to proceed with the second integrated Starship/Super Heavy launch, scheduled for as soon as the morning of Nov. 17, 2023. This is a significant step in SpaceX's ambitious plans for space exploration and colonization. [Source: SpaceNews](https://spacenews.com/starship-cleared-for-nov-17-launch/)
+
+2. SpaceX has also informed the US Federal Communications Commission (FCC) that it plans to begin launching its first next-generation Starlink Gen2 satellites. This represents a major upgrade to the Starlink satellite internet service, which aims to provide high-speed internet access worldwide. [Source: Teslarati](https://www.teslarati.com/spacex-first-starlink-gen2-satellite-launch-2022/)
+
+3. AI startup Synthetaic has raised $15 million in Series B funding. The company uses artificial intelligence to analyze data from space and air sensors, which could have significant applications in space exploration and satellite technology. [Source: SpaceNews](https://spacenews.com/ai-startup-synthetaic-raises-15-million-in-series-b-funding/)
+
+4. The Space Force has formally established a unit within the U.S. Indo-Pacific Command, marking a permanent presence in the Indo-Pacific region. This could have significant implications for space security and geopolitics. [Source: SpaceNews](https://spacenews.com/space-force-establishes-permanent-presence-in-indo-pacific-region/)
+
+5. Slingshot Aerospace, a space tracking and data analytics company, is expanding its network of ground-based optical telescopes to increase coverage of low Earth orbit. This could improve our ability to track and analyze objects in low Earth orbit, including satellites and space debris. [Source: SpaceNews](https://spacenews.com/slingshots-space-tracking-network-to-extend-coverage-of-low-earth-orbit/)
+
+6. The National Natural Science Foundation of China has outlined a five-year project for researchers to study the assembly of ultra-large spacecraft. This could lead to significant advancements in spacecraft technology and space exploration capabilities. [Source: SpaceNews](https://spacenews.com/china-researching-challenges-of-kilometer-scale-ultra-large-spacecraft/)
+
+7. The Center for AEroSpace Autonomy Research (CAESAR) at Stanford University is focusing on spacecraft autonomy. The center held a kickoff event on May 22, 2024, to highlight the industry, academia, and government collaboration it seeks to foster. This could lead to significant advancements in autonomous spacecraft technology. [Source: SpaceNews](https://spacenews.com/stanford-center-focuses-on-spacecraft-autonomy/)
+```
+
+
+
+## Debugging and Troubleshooting
+
+### Debugging Knowledge Issues
+
+#### Check Agent Knowledge Initialization
+```python
+from crewai import Agent, Crew, Task
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+knowledge_source = StringKnowledgeSource(content="Test knowledge")
+
+agent = Agent(
+ role="Test Agent",
+ goal="Test knowledge",
+ backstory="Testing",
+ knowledge_sources=[knowledge_source]
+)
+
+crew = Crew(agents=[agent], tasks=[Task(...)])
+
+# Before kickoff - knowledge not initialized
+print(f"Before kickoff - Agent knowledge: {getattr(agent, 'knowledge', None)}")
+
+crew.kickoff()
+
+# After kickoff - knowledge initialized
+print(f"After kickoff - Agent knowledge: {agent.knowledge}")
+print(f"Agent knowledge collection: {agent.knowledge.storage.collection_name}")
+print(f"Number of sources: {len(agent.knowledge.sources)}")
+```
+
+#### Verify Knowledge Storage Locations
+```python
+import os
+from crewai.utilities.paths import db_storage_path
+
+# Check storage structure
+storage_path = db_storage_path()
+knowledge_path = os.path.join(storage_path, "knowledge")
+
+if os.path.exists(knowledge_path):
+ print("Knowledge collections found:")
+ for collection in os.listdir(knowledge_path):
+ collection_path = os.path.join(knowledge_path, collection)
+ if os.path.isdir(collection_path):
+ print(f" - {collection}/")
+ # Show collection contents
+ for item in os.listdir(collection_path):
+ print(f" └── {item}")
+```
+
+#### Test Knowledge Retrieval
+```python
+# Test agent knowledge retrieval
+if hasattr(agent, 'knowledge') and agent.knowledge:
+ test_query = ["test query"]
+ results = agent.knowledge.query(test_query)
+ print(f"Agent knowledge results: {len(results)} documents found")
+
+ # Test crew knowledge retrieval (if exists)
+ if hasattr(crew, 'knowledge') and crew.knowledge:
+ crew_results = crew.query_knowledge(test_query)
+ print(f"Crew knowledge results: {len(crew_results)} documents found")
+```
+
+#### Inspect Knowledge Collections
+```python
+import chromadb
+from crewai.utilities.paths import db_storage_path
+import os
+
+# Connect to CrewAI's knowledge ChromaDB
+knowledge_path = os.path.join(db_storage_path(), "knowledge")
+
+if os.path.exists(knowledge_path):
+ client = chromadb.PersistentClient(path=knowledge_path)
+ collections = client.list_collections()
+
+ print("Knowledge Collections:")
+ for collection in collections:
+ print(f" - {collection.name}: {collection.count()} documents")
+
+ # Sample a few documents to verify content
+ if collection.count() > 0:
+ sample = collection.peek(limit=2)
+ print(f" Sample content: {sample['documents'][0][:100]}...")
+else:
+ print("No knowledge storage found")
+```
+
+#### Check Knowledge Processing
+```python
+from crewai.knowledge.source.string_knowledge_source import StringKnowledgeSource
+
+# Create a test knowledge source
+test_source = StringKnowledgeSource(
+ content="Test knowledge content for debugging",
+ chunk_size=100, # Small chunks for testing
+ chunk_overlap=20
+)
+
+# Check chunking behavior
+print(f"Original content length: {len(test_source.content)}")
+print(f"Chunk size: {test_source.chunk_size}")
+print(f"Chunk overlap: {test_source.chunk_overlap}")
+
+# Process and inspect chunks
+test_source.add()
+print(f"Number of chunks created: {len(test_source.chunks)}")
+for i, chunk in enumerate(test_source.chunks[:3]): # Show first 3 chunks
+ print(f"Chunk {i+1}: {chunk[:50]}...")
+```
+
+### Common Knowledge Storage Issues
+
+**"File not found" errors:**
+```python
+# Ensure files are in the correct location
+from crewai.utilities.constants import KNOWLEDGE_DIRECTORY
+import os
+
+knowledge_dir = KNOWLEDGE_DIRECTORY # Usually "knowledge"
+file_path = os.path.join(knowledge_dir, "your_file.pdf")
+
+if not os.path.exists(file_path):
+ print(f"File not found: {file_path}")
+ print(f"Current working directory: {os.getcwd()}")
+ print(f"Expected knowledge directory: {os.path.abspath(knowledge_dir)}")
+```
+
+**"Embedding dimension mismatch" errors:**
+```python
+# This happens when switching embedding providers
+# Reset knowledge storage to clear old embeddings
+crew.reset_memories(command_type='knowledge')
+
+# Or use consistent embedding providers
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ knowledge_sources=[...],
+ embedder={"provider": "openai", "config": {"model": "text-embedding-3-small"}}
+)
+```
+
+**"ChromaDB permission denied" errors:**
+```bash
+# Fix storage permissions
+chmod -R 755 ~/.local/share/CrewAI/
+```
+
+**Knowledge not persisting between runs:**
+```python
+# Verify storage location consistency
+import os
+from crewai.utilities.paths import db_storage_path
+
+print("CREWAI_STORAGE_DIR:", os.getenv("CREWAI_STORAGE_DIR"))
+print("Computed storage path:", db_storage_path())
+print("Knowledge path:", os.path.join(db_storage_path(), "knowledge"))
+```
+
+### Knowledge Reset Commands
+
+```python
+# Reset only agent-specific knowledge
+crew.reset_memories(command_type='agent_knowledge')
+
+# Reset both crew and agent knowledge
+crew.reset_memories(command_type='knowledge')
+
+# CLI commands
+# crewai reset-memories --agent-knowledge # Agent knowledge only
+# crewai reset-memories --knowledge # All knowledge
+```
+
+### Clearing Knowledge
+
+If you need to clear the knowledge stored in CrewAI, you can use the `crewai reset-memories` command with the `--knowledge` option.
+
+```bash Command
+crewai reset-memories --knowledge
+```
+
+This is useful when you've updated your knowledge sources and want to ensure that the agents are using the most recent information.
+
+## Best Practices
+
+
+
+ - Keep chunk sizes appropriate for your content type
+ - Consider content overlap for context preservation
+ - Organize related information into separate knowledge sources
+
+
+
+ - Adjust chunk sizes based on content complexity
+ - Configure appropriate embedding models
+ - Consider using local embedding providers for faster processing
+
+
+
+ - With the typical file structure provided by CrewAI, knowledge sources are embedded every time the kickoff is triggered.
+ - If the knowledge sources are large, this leads to inefficiency and increased latency, as the same data is embedded each time.
+ - To resolve this, directly initialize the knowledge parameter instead of the knowledge_sources parameter.
+ - Link to the issue to get complete idea [Github Issue](https://github.com/crewAIInc/crewAI/issues/2755)
+
+
+
+ - Use agent-level knowledge for role-specific information
+ - Use crew-level knowledge for shared information all agents need
+ - Set embedders at agent level if you need different embedding strategies
+ - Use consistent collection naming by keeping agent roles descriptive
+ - Test knowledge initialization by checking agent.knowledge after kickoff
+ - Monitor storage locations to understand where knowledge is stored
+ - Reset knowledge appropriately using the correct command types
+
+
+
+ - Set `CREWAI_STORAGE_DIR` to a known location in production
+ - Choose explicit embedding providers to match your LLM setup and avoid API key conflicts
+ - Monitor knowledge storage size as it grows with document additions
+ - Organize knowledge sources by domain or purpose using collection names
+ - Include knowledge directories in your backup and deployment strategies
+ - Set appropriate file permissions for knowledge files and storage directories
+ - Use environment variables for API keys and sensitive configuration
+
+
+
+
diff --git a/docs/v1.15.1/en/concepts/llms.mdx b/docs/v1.15.1/en/concepts/llms.mdx
new file mode 100644
index 000000000..85921b6ea
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/llms.mdx
@@ -0,0 +1,1635 @@
+---
+title: 'LLMs'
+description: 'A comprehensive guide to configuring and using Large Language Models (LLMs) in your CrewAI projects'
+icon: 'microchip-ai'
+mode: "wide"
+---
+
+## Overview
+
+CrewAI integrates with multiple LLM providers through providers native sdks, giving you the flexibility to choose the right model for your specific use case. This guide will help you understand how to configure and use different LLM providers in your CrewAI projects.
+
+
+## What are LLMs?
+
+Large Language Models (LLMs) are the core intelligence behind CrewAI agents. They enable agents to understand context, make decisions, and generate human-like responses. Here's what you need to know:
+
+
+
+ Large Language Models are AI systems trained on vast amounts of text data. They power the intelligence of your CrewAI agents, enabling them to understand and generate human-like text.
+
+
+ The context window determines how much text an LLM can process at once. Larger windows (e.g., 128K tokens) allow for more context but may be more expensive and slower.
+
+
+ Temperature (0.0 to 1.0) controls response randomness. Lower values (e.g., 0.2) produce more focused, deterministic outputs, while higher values (e.g., 0.8) increase creativity and variability.
+
+
+ Each LLM provider (e.g., OpenAI, Anthropic, Google) offers different models with varying capabilities, pricing, and features. Choose based on your needs for accuracy, speed, and cost.
+
+
+
+## Setting up your LLM
+
+There are different places in CrewAI code where you can specify the model to use. Once you specify the model you are using, you will need to provide the configuration (like an API key) for each of the model providers you use. See the [provider configuration examples](#provider-configuration-examples) section for your provider.
+
+
+
+ The simplest way to get started. Set the model in your environment directly, through an `.env` file or in your app code. If you used `crewai create` to bootstrap your project, it will be set already.
+
+ ```bash .env
+ MODEL=model-id # e.g. gpt-4o, gemini-2.0-flash, claude-3-sonnet-...
+
+ # Be sure to set your API keys here too. See the Provider
+ # section below.
+ ```
+
+
+ Never commit API keys to version control. Use environment files (.env) or your system's secret management.
+
+
+
+ Create a YAML file to define your agent configurations. This method is great for version control and team collaboration:
+
+ ```yaml agents.yaml {6}
+ researcher:
+ role: Research Specialist
+ goal: Conduct comprehensive research and analysis
+ backstory: A dedicated research professional with years of experience
+ verbose: true
+ llm: provider/model-id # e.g. openai/gpt-4o, google/gemini-2.0-flash, anthropic/claude...
+ # (see provider configuration examples below for more)
+ ```
+
+
+ The YAML configuration allows you to:
+ - Version control your agent settings
+ - Easily switch between different models
+ - Share configurations across team members
+ - Document model choices and their purposes
+
+
+
+ For maximum flexibility, configure LLMs directly in your Python code:
+
+ ```python {4,8}
+ from crewai import LLM
+
+ # Basic configuration
+ llm = LLM(model="model-id-here") # gpt-4o, gemini-2.0-flash, anthropic/claude...
+
+ # Advanced configuration with detailed parameters
+ llm = LLM(
+ model="model-id-here", # gpt-4o, gemini-2.0-flash, anthropic/claude...
+ temperature=0.7, # Higher for more creative outputs
+ timeout=120, # Seconds to wait for response
+ max_tokens=4000, # Maximum length of response
+ top_p=0.9, # Nucleus sampling parameter
+ frequency_penalty=0.1 , # Reduce repetition
+ presence_penalty=0.1, # Encourage topic diversity
+ response_format={"type": "json"}, # For structured outputs
+ seed=42 # For reproducible results
+ )
+ ```
+
+
+ Parameter explanations:
+ - `temperature`: Controls randomness (0.0-1.0)
+ - `timeout`: Maximum wait time for response
+ - `max_tokens`: Limits response length
+ - `top_p`: Alternative to temperature for sampling
+ - `frequency_penalty`: Reduces word repetition
+ - `presence_penalty`: Encourages new topics
+ - `response_format`: Specifies output structure
+ - `seed`: Ensures consistent outputs
+
+
+
+
+
+ CrewAI provides native SDK integrations for OpenAI, Anthropic, Google (Gemini API), Azure, AWS Bedrock, and Snowflake Cortex — no extra install needed beyond the provider-specific extras (e.g. `uv add "crewai[openai]"`).
+
+ All other providers are powered by **LiteLLM**. If you plan to use any of them, add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+## Provider Configuration Examples
+
+CrewAI supports a multitude of LLM providers, each offering unique features, authentication methods, and model capabilities.
+In this section, you'll find detailed examples that help you select, configure, and optimize the LLM that best fits your project's needs.
+
+
+
+ CrewAI provides native integration with OpenAI through the OpenAI Python SDK.
+
+ ```toml Code
+ # Required
+ OPENAI_API_KEY=sk-...
+
+ # Optional
+ OPENAI_BASE_URL=
+ ```
+
+ **Basic Usage:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="openai/gpt-4o",
+ api_key="your-api-key", # Or set OPENAI_API_KEY
+ temperature=0.7,
+ max_tokens=4000
+ )
+ ```
+
+ **Advanced Configuration:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="openai/gpt-4o",
+ api_key="your-api-key",
+ base_url="https://api.openai.com/v1", # Optional custom endpoint
+ organization="org-...", # Optional organization ID
+ project="proj_...", # Optional project ID
+ temperature=0.7,
+ max_tokens=4000,
+ max_completion_tokens=4000, # For newer models
+ top_p=0.9,
+ frequency_penalty=0.1,
+ presence_penalty=0.1,
+ stop=["END"],
+ seed=42, # For reproducible outputs
+ stream=True, # Enable streaming
+ timeout=60.0, # Request timeout in seconds
+ max_retries=3, # Maximum retry attempts
+ logprobs=True, # Return log probabilities
+ top_logprobs=5, # Number of most likely tokens
+ reasoning_effort="medium" # For o1 models: low, medium, high
+ )
+ ```
+
+ **Structured Outputs:**
+ ```python Code
+ from pydantic import BaseModel
+ from crewai import LLM
+
+ class ResponseFormat(BaseModel):
+ name: str
+ age: int
+ summary: str
+
+ llm = LLM(
+ model="openai/gpt-4o",
+ )
+ ```
+
+ **Supported Environment Variables:**
+ - `OPENAI_API_KEY`: Your OpenAI API key (required)
+ - `OPENAI_BASE_URL`: Custom base URL for OpenAI API (optional)
+
+ **Features:**
+ - Native function calling support (except o1 models)
+ - Structured outputs with JSON schema
+ - Streaming support for real-time responses
+ - Token usage tracking
+ - Stop sequences support (except o1 models)
+ - Log probabilities for token-level insights
+ - Reasoning effort control for o1 models
+
+ **Supported Models:**
+
+ | Model | Context Window | Best For |
+ |---------------------|------------------|-----------------------------------------------|
+ | gpt-4.1 | 1M tokens | Latest model with enhanced capabilities |
+ | gpt-4.1-mini | 1M tokens | Efficient version with large context |
+ | gpt-4.1-nano | 1M tokens | Ultra-efficient variant |
+ | gpt-4o | 128,000 tokens | Optimized for speed and intelligence |
+ | gpt-4o-mini | 200,000 tokens | Cost-effective with large context |
+ | gpt-4-turbo | 128,000 tokens | Long-form content, document analysis |
+ | gpt-4 | 8,192 tokens | High-accuracy tasks, complex reasoning |
+ | o1 | 200,000 tokens | Advanced reasoning, complex problem-solving |
+ | o1-preview | 128,000 tokens | Preview of reasoning capabilities |
+ | o1-mini | 128,000 tokens | Efficient reasoning model |
+ | o3-mini | 200,000 tokens | Lightweight reasoning model |
+ | o4-mini | 200,000 tokens | Next-gen efficient reasoning |
+
+ **Responses API:**
+
+ OpenAI offers two APIs: Chat Completions (default) and the newer Responses API. The Responses API was designed from the ground up with native multimodal support—text, images, audio, and function calls are all first-class citizens. It provides better performance with reasoning models and supports additional features like auto-chaining and built-in tools.
+
+ ```python Code
+ from crewai import LLM
+
+ # Use the Responses API instead of Chat Completions
+ llm = LLM(
+ model="openai/gpt-4o",
+ api="responses", # Enable Responses API
+ store=True, # Store responses for multi-turn (optional)
+ auto_chain=True, # Auto-chain for reasoning models (optional)
+ )
+ ```
+
+ **Responses API Parameters:**
+ - `api`: Set to `"responses"` to use the Responses API (default: `"completions"`)
+ - `instructions`: System-level instructions (Responses API only)
+ - `store`: Whether to store responses for multi-turn conversations
+ - `previous_response_id`: ID of previous response for multi-turn
+ - `include`: Additional data to include in response (e.g., `["reasoning.encrypted_content"]`)
+ - `builtin_tools`: List of OpenAI built-in tools: `"web_search"`, `"file_search"`, `"code_interpreter"`, `"computer_use"`
+ - `parse_tool_outputs`: Return structured `ResponsesAPIResult` with parsed built-in tool outputs
+ - `auto_chain`: Automatically track and use response IDs for multi-turn conversations
+ - `auto_chain_reasoning`: Track encrypted reasoning items for ZDR (Zero Data Retention) compliance
+
+
+ Use the Responses API for new projects, especially when working with reasoning models (o1, o3, o4) or when you need native multimodal support for [files](/en/concepts/files).
+
+
+ **Note:** To use OpenAI, install the required dependencies:
+ ```bash
+ uv add "crewai[openai]"
+ ```
+
+
+
+ Meta's Llama API provides access to Meta's family of large language models.
+ The API is available through the [Meta Llama API](https://llama.developer.meta.com?utm_source=partner-crewai&utm_medium=website).
+ Set the following environment variables in your `.env` file:
+
+ ```toml Code
+ # Meta Llama API Key Configuration
+ LLAMA_API_KEY=LLM|your_api_key_here
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ from crewai import LLM
+
+ # Initialize Meta Llama LLM
+ llm = LLM(
+ model="meta_llama/Llama-4-Scout-17B-16E-Instruct-FP8",
+ temperature=0.8,
+ stop=["END"],
+ seed=42
+ )
+ ```
+
+ All models listed here https://llama.developer.meta.com/docs/models/ are supported.
+
+ | Model ID | Input context length | Output context length | Input Modalities | Output Modalities |
+ | --- | --- | --- | --- | --- |
+ | `meta_llama/Llama-4-Scout-17B-16E-Instruct-FP8` | 128k | 4028 | Text, Image | Text |
+ | `meta_llama/Llama-4-Maverick-17B-128E-Instruct-FP8` | 128k | 4028 | Text, Image | Text |
+ | `meta_llama/Llama-3.3-70B-Instruct` | 128k | 4028 | Text | Text |
+ | `meta_llama/Llama-3.3-8B-Instruct` | 128k | 4028 | Text | Text |
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ CrewAI provides native integration with the Snowflake Cortex REST API through its OpenAI-compatible Chat Completions endpoint. This avoids LiteLLM fallback for `snowflake/...` models. Snowflake Cortex currently supports Chat Completions only in CrewAI, so use the default `api` mode and do not set `api="responses"`.
+
+ ```toml Code
+ # Required
+ SNOWFLAKE_PAT=
+ SNOWFLAKE_ACCOUNT_URL=https://.snowflakecomputing.com
+
+ # Alternative account configuration
+ SNOWFLAKE_ACCOUNT=
+ ```
+
+ **Basic Usage:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="snowflake/openai-gpt-4.1",
+ temperature=0.7,
+ max_completion_tokens=1024,
+ )
+ ```
+
+ **Claude Models on Cortex:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="snowflake/claude-sonnet-4-5",
+ max_completion_tokens=1024,
+ stream=True,
+ )
+ ```
+
+ **Supported Environment Variables:**
+ - `SNOWFLAKE_PAT`, `SNOWFLAKE_TOKEN`, or `SNOWFLAKE_JWT`: token used as the Bearer credential
+ - `SNOWFLAKE_ACCOUNT_URL`: full Snowflake account URL
+ - `SNOWFLAKE_ACCOUNT`, `SNOWFLAKE_ACCOUNT_ID`, or `SNOWFLAKE_ACCOUNT_IDENTIFIER`: account identifier used to build the account URL
+
+ Snowflake REST requests use the user's default Snowflake role. Make sure that role has `SNOWFLAKE.CORTEX_USER` or `SNOWFLAKE.CORTEX_REST_API_USER`. Database, schema, warehouse, and explicit role parameters are not required by the Cortex REST Chat Completions endpoint.
+
+ **Features:**
+ - Native provider selection with `model="snowflake/"`
+ - Streaming and non-streaming Chat Completions only; `api="responses"` is not supported
+ - Token usage tracking
+ - Function calling for Snowflake-hosted OpenAI and Claude models
+ - Automatic removal of invalid trailing assistant prefill for Snowflake Claude models
+
+
+
+ CrewAI provides native integration with Anthropic through the Anthropic Python SDK.
+
+ ```toml Code
+ # Required
+ ANTHROPIC_API_KEY=sk-ant-...
+ ```
+
+ **Basic Usage:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="anthropic/claude-3-5-sonnet-20241022",
+ api_key="your-api-key", # Or set ANTHROPIC_API_KEY
+ max_tokens=4096 # Required for Anthropic
+ )
+ ```
+
+ **Advanced Configuration:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="anthropic/claude-3-5-sonnet-20241022",
+ api_key="your-api-key",
+ base_url="https://api.anthropic.com", # Optional custom endpoint
+ temperature=0.7,
+ max_tokens=4096, # Required parameter
+ top_p=0.9,
+ stop_sequences=["END", "STOP"], # Anthropic uses stop_sequences
+ stream=True, # Enable streaming
+ timeout=60.0, # Request timeout in seconds
+ max_retries=3 # Maximum retry attempts
+ )
+ ```
+
+ **Extended Thinking (Claude Sonnet 4 and Beyond):**
+
+ CrewAI supports Anthropic's Extended Thinking feature, which allows Claude to think through problems in a more human-like way before responding. This is particularly useful for complex reasoning, analysis, and problem-solving tasks.
+
+ ```python Code
+ from crewai import LLM
+
+ # Enable extended thinking with default settings
+ llm = LLM(
+ model="anthropic/claude-sonnet-4",
+ thinking={"type": "enabled"},
+ max_tokens=10000
+ )
+
+ # Configure thinking with budget control
+ llm = LLM(
+ model="anthropic/claude-sonnet-4",
+ thinking={
+ "type": "enabled",
+ "budget_tokens": 5000 # Limit thinking tokens
+ },
+ max_tokens=10000
+ )
+ ```
+
+ **Thinking Configuration Options:**
+ - `type`: Set to `"enabled"` to activate extended thinking mode
+ - `budget_tokens` (optional): Maximum tokens to use for thinking (helps control costs)
+
+ **Models Supporting Extended Thinking:**
+ - `claude-sonnet-4` and newer models
+ - `claude-3-7-sonnet` (with extended thinking capabilities)
+
+ **When to Use Extended Thinking:**
+ - Complex reasoning and multi-step problem solving
+ - Mathematical calculations and proofs
+ - Code analysis and debugging
+ - Strategic planning and decision making
+ - Research and analytical tasks
+
+ **Note:** Extended thinking consumes additional tokens but can significantly improve response quality for complex tasks.
+
+ **Supported Environment Variables:**
+ - `ANTHROPIC_API_KEY`: Your Anthropic API key (required)
+
+ **Features:**
+ - Native tool use support for Claude 3+ models
+ - Extended Thinking support for Claude Sonnet 4+
+ - Streaming support for real-time responses
+ - Automatic system message handling
+ - Stop sequences for controlled output
+ - Token usage tracking
+ - Multi-turn tool use conversations
+
+ **Important Notes:**
+ - `max_tokens` is a **required** parameter for all Anthropic models
+ - Claude uses `stop_sequences` instead of `stop`
+ - System messages are handled separately from conversation messages
+ - First message must be from the user (automatically handled)
+ - Messages must alternate between user and assistant
+
+ **Supported Models:**
+
+ | Model | Context Window | Best For |
+ |------------------------------|----------------|-----------------------------------------------|
+ | claude-sonnet-4 | 200,000 tokens | Latest with extended thinking capabilities |
+ | claude-3-7-sonnet | 200,000 tokens | Advanced reasoning and agentic tasks |
+ | claude-3-5-sonnet-20241022 | 200,000 tokens | Latest Sonnet with best performance |
+ | claude-3-5-haiku | 200,000 tokens | Fast, compact model for quick responses |
+ | claude-3-opus | 200,000 tokens | Most capable for complex tasks |
+ | claude-3-sonnet | 200,000 tokens | Balanced intelligence and speed |
+ | claude-3-haiku | 200,000 tokens | Fastest for simple tasks |
+ | claude-2.1 | 200,000 tokens | Extended context, reduced hallucinations |
+ | claude-2 | 100,000 tokens | Versatile model for various tasks |
+ | claude-instant | 100,000 tokens | Fast, cost-effective for everyday tasks |
+
+ **Note:** To use Anthropic, install the required dependencies:
+ ```bash
+ uv add "crewai[anthropic]"
+ ```
+
+
+
+ CrewAI provides native integration with Google Gemini through the Google Gen AI Python SDK.
+
+ Set your API key in your `.env` file. If you need a key, check [AI Studio](https://aistudio.google.com/apikey).
+
+ ```toml .env
+ # Required (one of the following)
+ GOOGLE_API_KEY=
+ GEMINI_API_KEY=
+
+ # For Vertex AI Express mode (API key authentication)
+ GOOGLE_GENAI_USE_VERTEXAI=true
+ GOOGLE_API_KEY=
+
+ # For Vertex AI with service account
+ GOOGLE_CLOUD_PROJECT=
+ GOOGLE_CLOUD_LOCATION= # Defaults to us-central1
+ ```
+
+ **Basic Usage:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini/gemini-2.0-flash",
+ api_key="your-api-key", # Or set GOOGLE_API_KEY/GEMINI_API_KEY
+ temperature=0.7
+ )
+ ```
+
+ **Advanced Configuration:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini/gemini-2.5-flash",
+ api_key="your-api-key",
+ temperature=0.7,
+ top_p=0.9,
+ top_k=40, # Top-k sampling parameter
+ max_output_tokens=8192,
+ stop_sequences=["END", "STOP"],
+ stream=True, # Enable streaming
+ safety_settings={
+ "HARM_CATEGORY_HARASSMENT": "BLOCK_NONE",
+ "HARM_CATEGORY_HATE_SPEECH": "BLOCK_NONE"
+ }
+ )
+ ```
+
+ **Vertex AI Express Mode (API Key Authentication):**
+
+ Vertex AI Express mode allows you to use Vertex AI with simple API key authentication instead of service account credentials. This is the quickest way to get started with Vertex AI.
+
+ To enable Express mode, set both environment variables in your `.env` file:
+ ```toml .env
+ GOOGLE_GENAI_USE_VERTEXAI=true
+ GOOGLE_API_KEY=
+ ```
+
+ Then use the LLM as usual:
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini/gemini-2.0-flash",
+ temperature=0.7
+ )
+ ```
+
+
+ To get an Express mode API key:
+ - New Google Cloud users: Get an [express mode API key](https://cloud.google.com/vertex-ai/generative-ai/docs/start/quickstart?usertype=apikey)
+ - Existing Google Cloud users: Get a [Google Cloud API key bound to a service account](https://cloud.google.com/docs/authentication/api-keys)
+
+ For more details, see the [Vertex AI Express mode documentation](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/start/quickstart?usertype=apikey).
+
+
+ **Vertex AI Configuration (Service Account):**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini/gemini-1.5-pro",
+ project="your-gcp-project-id",
+ location="us-central1" # GCP region
+ )
+ ```
+
+ **Supported Environment Variables:**
+ - `GOOGLE_API_KEY` or `GEMINI_API_KEY`: Your Google API key (required for Gemini API and Vertex AI Express mode)
+ - `GOOGLE_GENAI_USE_VERTEXAI`: Set to `true` to use Vertex AI (required for Express mode)
+ - `GOOGLE_CLOUD_PROJECT`: Google Cloud project ID (for Vertex AI with service account)
+ - `GOOGLE_CLOUD_LOCATION`: GCP location (defaults to `us-central1`)
+
+ **Features:**
+ - Native function calling support for Gemini 1.5+ and 2.x models
+ - Streaming support for real-time responses
+ - Multimodal capabilities (text, images, video)
+ - Safety settings configuration
+ - Support for both Gemini API and Vertex AI
+ - Automatic system instruction handling
+ - Token usage tracking
+
+ **Gemini Models:**
+
+ Google offers a range of powerful models optimized for different use cases.
+
+ | Model | Context Window | Best For |
+ |--------------------------------|----------------|-------------------------------------------------------------------|
+ | gemini-2.5-flash | 1M tokens | Adaptive thinking, cost efficiency |
+ | gemini-2.5-pro | 1M tokens | Enhanced thinking and reasoning, multimodal understanding |
+ | gemini-2.0-flash | 1M tokens | Next generation features, speed, thinking |
+ | gemini-2.0-flash-thinking | 32,768 tokens | Advanced reasoning with thinking process |
+ | gemini-2.0-flash-lite | 1M tokens | Cost efficiency and low latency |
+ | gemini-1.5-pro | 2M tokens | Best performing, logical reasoning, coding |
+ | gemini-1.5-flash | 1M tokens | Balanced multimodal model, good for most tasks |
+ | gemini-1.5-flash-8b | 1M tokens | Fastest, most cost-efficient |
+ | gemini-1.0-pro | 32,768 tokens | Earlier generation model |
+
+ **Gemma Models:**
+
+ The Gemini API also supports [Gemma models](https://ai.google.dev/gemma/docs) hosted on Google infrastructure.
+
+ | Model | Context Window | Best For |
+ |----------------|----------------|------------------------------------|
+ | gemma-3-1b | 32,000 tokens | Ultra-lightweight tasks |
+ | gemma-3-4b | 128,000 tokens | Efficient general-purpose tasks |
+ | gemma-3-12b | 128,000 tokens | Balanced performance and efficiency|
+ | gemma-3-27b | 128,000 tokens | High-performance tasks |
+
+ **Note:** To use Google Gemini, install the required dependencies:
+ ```bash
+ uv add "crewai[google-genai]"
+ ```
+
+ The full list of models is available in the [Gemini model docs](https://ai.google.dev/gemini-api/docs/models).
+
+
+ Get credentials from your Google Cloud Console and save it to a JSON file, then load it with the following code:
+ ```python Code
+ import json
+
+ file_path = 'path/to/vertex_ai_service_account.json'
+
+ # Load the JSON file
+ with open(file_path, 'r') as file:
+ vertex_credentials = json.load(file)
+
+ # Convert the credentials to a JSON string
+ vertex_credentials_json = json.dumps(vertex_credentials)
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="gemini-1.5-pro-latest", # or vertex_ai/gemini-1.5-pro-latest
+ temperature=0.7,
+ vertex_credentials=vertex_credentials_json
+ )
+ ```
+
+ Google offers a range of powerful models optimized for different use cases:
+
+ | Model | Context Window | Best For |
+ |--------------------------------|----------------|-------------------------------------------------------------------|
+ | gemini-2.5-flash-preview-04-17 | 1M tokens | Adaptive thinking, cost efficiency |
+ | gemini-2.5-pro-preview-05-06 | 1M tokens | Enhanced thinking and reasoning, multimodal understanding, advanced coding, and more |
+ | gemini-2.0-flash | 1M tokens | Next generation features, speed, thinking, and realtime streaming |
+ | gemini-2.0-flash-lite | 1M tokens | Cost efficiency and low latency |
+ | gemini-1.5-flash | 1M tokens | Balanced multimodal model, good for most tasks |
+ | gemini-1.5-flash-8B | 1M tokens | Fastest, most cost-efficient, good for high-frequency tasks |
+ | gemini-1.5-pro | 2M tokens | Best performing, wide variety of reasoning tasks including logical reasoning, coding, and creative collaboration |
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ CrewAI provides native integration with Azure AI Inference and Azure OpenAI through the Azure AI Inference Python SDK.
+
+ ```toml Code
+ # Required
+ AZURE_API_KEY=
+ AZURE_ENDPOINT=
+
+ # Optional
+ AZURE_API_VERSION= # Defaults to 2024-06-01
+ ```
+
+ **Endpoint URL Formats:**
+
+ For Azure OpenAI deployments:
+ ```
+ https://.openai.azure.com/openai/deployments/
+ ```
+
+ For Azure AI Inference endpoints:
+ ```
+ https://.inference.azure.com
+ ```
+
+ **Basic Usage:**
+ ```python Code
+ llm = LLM(
+ model="azure/gpt-4",
+ api_key="", # Or set AZURE_API_KEY
+ endpoint="",
+ api_version="2024-06-01"
+ )
+ ```
+
+ **Advanced Configuration:**
+ ```python Code
+ llm = LLM(
+ model="azure/gpt-4o",
+ temperature=0.7,
+ max_tokens=4000,
+ top_p=0.9,
+ frequency_penalty=0.0,
+ presence_penalty=0.0,
+ stop=["END"],
+ stream=True,
+ timeout=60.0,
+ max_retries=3
+ )
+ ```
+
+ **Supported Environment Variables:**
+ - `AZURE_API_KEY`: Your Azure API key (required)
+ - `AZURE_ENDPOINT`: Your Azure endpoint URL (required, also checks `AZURE_OPENAI_ENDPOINT` and `AZURE_API_BASE`)
+ - `AZURE_API_VERSION`: API version (optional, defaults to `2024-06-01`)
+
+ **Features:**
+ - Native function calling support for Azure OpenAI models (gpt-4, gpt-4o, gpt-3.5-turbo, etc.)
+ - Streaming support for real-time responses
+ - Automatic endpoint URL validation and correction
+ - Comprehensive error handling with retry logic
+ - Token usage tracking
+
+ **Note:** To use Azure AI Inference, install the required dependencies:
+ ```bash
+ uv add "crewai[azure-ai-inference]"
+ ```
+
+
+
+ CrewAI provides native integration with AWS Bedrock through the boto3 SDK using the Converse API.
+
+ ```toml Code
+ # Required
+ AWS_ACCESS_KEY_ID=
+ AWS_SECRET_ACCESS_KEY=
+
+ # Optional
+ AWS_SESSION_TOKEN= # For temporary credentials
+ AWS_DEFAULT_REGION= # Defaults to us-east-1
+ AWS_REGION_NAME= # Alternative configuration for backwards compatibility with LiteLLM. Defaults to us-east-1
+ ```
+
+ **Basic Usage:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
+ region_name="us-east-1"
+ )
+ ```
+
+ **Advanced Configuration:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0",
+ aws_access_key_id="your-access-key", # Or set AWS_ACCESS_KEY_ID
+ aws_secret_access_key="your-secret-key", # Or set AWS_SECRET_ACCESS_KEY
+ aws_session_token="your-session-token", # For temporary credentials
+ region_name="us-east-1",
+ temperature=0.7,
+ max_tokens=4096,
+ top_p=0.9,
+ top_k=250, # For Claude models
+ stop_sequences=["END", "STOP"],
+ stream=True, # Enable streaming
+ guardrail_config={ # Optional content filtering
+ "guardrailIdentifier": "your-guardrail-id",
+ "guardrailVersion": "1"
+ },
+ additional_model_request_fields={ # Model-specific parameters
+ "top_k": 250
+ }
+ )
+ ```
+
+ **Supported Environment Variables:**
+ - `AWS_ACCESS_KEY_ID`: AWS access key (required)
+ - `AWS_SECRET_ACCESS_KEY`: AWS secret key (required)
+ - `AWS_SESSION_TOKEN`: AWS session token for temporary credentials (optional)
+ - `AWS_DEFAULT_REGION`: AWS region (defaults to `us-east-1`)
+ - `AWS_REGION_NAME`: AWS region (defaults to `us-east-1`). Alternative configuration for backwards compatibility with LiteLLM
+
+ **Features:**
+ - Native tool calling support via Converse API
+ - Streaming and non-streaming responses
+ - Comprehensive error handling with retry logic
+ - Guardrail configuration for content filtering
+ - Model-specific parameters via `additional_model_request_fields`
+ - Token usage tracking and stop reason logging
+ - Support for all Bedrock foundation models
+ - Automatic conversation format handling
+
+ **Important Notes:**
+ - Uses the modern Converse API for unified model access
+ - Automatic handling of model-specific conversation requirements
+ - System messages are handled separately from conversation
+ - First message must be from user (automatically handled)
+ - Some models (like Cohere) require conversation to end with user message
+
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) is a managed service that provides access to multiple foundation models from top AI companies through a unified API.
+
+ | Model | Context Window | Best For |
+ |-------------------------|----------------------|-------------------------------------------------------------------|
+ | Amazon Nova Pro | Up to 300k tokens | High-performance, model balancing accuracy, speed, and cost-effectiveness across diverse tasks. |
+ | Amazon Nova Micro | Up to 128k tokens | High-performance, cost-effective text-only model optimized for lowest latency responses. |
+ | Amazon Nova Lite | Up to 300k tokens | High-performance, affordable multimodal processing for images, video, and text with real-time capabilities. |
+ | Claude 3.7 Sonnet | Up to 128k tokens | High-performance, best for complex reasoning, coding & AI agents |
+ | Claude 3.5 Sonnet v2 | Up to 200k tokens | State-of-the-art model specialized in software engineering, agentic capabilities, and computer interaction at optimized cost. |
+ | Claude 3.5 Sonnet | Up to 200k tokens | High-performance model delivering superior intelligence and reasoning across diverse tasks with optimal speed-cost balance. |
+ | Claude 3.5 Haiku | Up to 200k tokens | Fast, compact multimodal model optimized for quick responses and seamless human-like interactions |
+ | Claude 3 Sonnet | Up to 200k tokens | Multimodal model balancing intelligence and speed for high-volume deployments. |
+ | Claude 3 Haiku | Up to 200k tokens | Compact, high-speed multimodal model optimized for quick responses and natural conversational interactions |
+ | Claude 3 Opus | Up to 200k tokens | Most advanced multimodal model exceling at complex tasks with human-like reasoning and superior contextual understanding. |
+ | Claude 2.1 | Up to 200k tokens | Enhanced version with expanded context window, improved reliability, and reduced hallucinations for long-form and RAG applications |
+ | Claude | Up to 100k tokens | Versatile model excelling in sophisticated dialogue, creative content, and precise instruction following. |
+ | Claude Instant | Up to 100k tokens | Fast, cost-effective model for everyday tasks like dialogue, analysis, summarization, and document Q&A |
+ | Llama 3.1 405B Instruct | Up to 128k tokens | Advanced LLM for synthetic data generation, distillation, and inference for chatbots, coding, and domain-specific tasks. |
+ | Llama 3.1 70B Instruct | Up to 128k tokens | Powers complex conversations with superior contextual understanding, reasoning and text generation. |
+ | Llama 3.1 8B Instruct | Up to 128k tokens | Advanced state-of-the-art model with language understanding, superior reasoning, and text generation. |
+ | Llama 3 70B Instruct | Up to 8k tokens | Powers complex conversations with superior contextual understanding, reasoning and text generation. |
+ | Llama 3 8B Instruct | Up to 8k tokens | Advanced state-of-the-art LLM with language understanding, superior reasoning, and text generation. |
+ | Titan Text G1 - Lite | Up to 4k tokens | Lightweight, cost-effective model optimized for English tasks and fine-tuning with focus on summarization and content generation. |
+ | Titan Text G1 - Express | Up to 8k tokens | Versatile model for general language tasks, chat, and RAG applications with support for English and 100+ languages. |
+ | Cohere Command | Up to 4k tokens | Model specialized in following user commands and delivering practical enterprise solutions. |
+ | Jurassic-2 Mid | Up to 8,191 tokens | Cost-effective model balancing quality and affordability for diverse language tasks like Q&A, summarization, and content generation. |
+ | Jurassic-2 Ultra | Up to 8,191 tokens | Model for advanced text generation and comprehension, excelling in complex tasks like analysis and content creation. |
+ | Jamba-Instruct | Up to 256k tokens | Model with extended context window optimized for cost-effective text generation, summarization, and Q&A. |
+ | Mistral 7B Instruct | Up to 32k tokens | This LLM follows instructions, completes requests, and generates creative text. |
+ | Mistral 8x7B Instruct | Up to 32k tokens | An MOE LLM that follows instructions, completes requests, and generates creative text. |
+ | DeepSeek R1 | 32,768 tokens | Advanced reasoning model |
+
+ **Note:** To use AWS Bedrock, install the required dependencies:
+ ```bash
+ uv add "crewai[bedrock]"
+ ```
+
+
+
+ ```toml Code
+ AWS_ACCESS_KEY_ID=
+ AWS_SECRET_ACCESS_KEY=
+ AWS_DEFAULT_REGION=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="sagemaker/"
+ )
+ ```
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ MISTRAL_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="mistral/mistral-large-latest",
+ temperature=0.7
+ )
+ ```
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ NVIDIA_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="nvidia_nim/meta/llama3-70b-instruct",
+ temperature=0.7
+ )
+ ```
+
+ Nvidia NIM provides a comprehensive suite of models for various use cases, from general-purpose tasks to specialized applications.
+
+ | Model | Context Window | Best For |
+ |-------------------------------------------------------------------------|----------------|-------------------------------------------------------------------|
+ | nvidia/mistral-nemo-minitron-8b-8k-instruct | 8,192 tokens | State-of-the-art small language model delivering superior accuracy for chatbot, virtual assistants, and content generation. |
+ | nvidia/nemotron-4-mini-hindi-4b-instruct | 4,096 tokens | A bilingual Hindi-English SLM for on-device inference, tailored specifically for Hindi Language. |
+ | nvidia/llama-3.1-nemotron-70b-instruct | 128k tokens | Customized for enhanced helpfulness in responses |
+ | nvidia/llama3-chatqa-1.5-8b | 128k tokens | Advanced LLM to generate high-quality, context-aware responses for chatbots and search engines. |
+ | nvidia/llama3-chatqa-1.5-70b | 128k tokens | Advanced LLM to generate high-quality, context-aware responses for chatbots and search engines. |
+ | nvidia/vila | 128k tokens | Multi-modal vision-language model that understands text/img/video and creates informative responses |
+ | nvidia/neva-22 | 4,096 tokens | Multi-modal vision-language model that understands text/images and generates informative responses |
+ | nvidia/nemotron-mini-4b-instruct | 8,192 tokens | General-purpose tasks |
+ | nvidia/usdcode-llama3-70b-instruct | 128k tokens | State-of-the-art LLM that answers OpenUSD knowledge queries and generates USD-Python code. |
+ | nvidia/nemotron-4-340b-instruct | 4,096 tokens | Creates diverse synthetic data that mimics the characteristics of real-world data. |
+ | meta/codellama-70b | 100k tokens | LLM capable of generating code from natural language and vice versa. |
+ | meta/llama2-70b | 4,096 tokens | Cutting-edge large language AI model capable of generating text and code in response to prompts. |
+ | meta/llama3-8b-instruct | 8,192 tokens | Advanced state-of-the-art LLM with language understanding, superior reasoning, and text generation. |
+ | meta/llama3-70b-instruct | 8,192 tokens | Powers complex conversations with superior contextual understanding, reasoning and text generation. |
+ | meta/llama-3.1-8b-instruct | 128k tokens | Advanced state-of-the-art model with language understanding, superior reasoning, and text generation. |
+ | meta/llama-3.1-70b-instruct | 128k tokens | Powers complex conversations with superior contextual understanding, reasoning and text generation. |
+ | meta/llama-3.1-405b-instruct | 128k tokens | Advanced LLM for synthetic data generation, distillation, and inference for chatbots, coding, and domain-specific tasks. |
+ | meta/llama-3.2-1b-instruct | 128k tokens | Advanced state-of-the-art small language model with language understanding, superior reasoning, and text generation. |
+ | meta/llama-3.2-3b-instruct | 128k tokens | Advanced state-of-the-art small language model with language understanding, superior reasoning, and text generation. |
+ | meta/llama-3.2-11b-vision-instruct | 128k tokens | Advanced state-of-the-art small language model with language understanding, superior reasoning, and text generation. |
+ | meta/llama-3.2-90b-vision-instruct | 128k tokens | Advanced state-of-the-art small language model with language understanding, superior reasoning, and text generation. |
+ | google/gemma-7b | 8,192 tokens | Cutting-edge text generation model text understanding, transformation, and code generation. |
+ | google/gemma-2b | 8,192 tokens | Cutting-edge text generation model text understanding, transformation, and code generation. |
+ | google/codegemma-7b | 8,192 tokens | Cutting-edge model built on Google's Gemma-7B specialized for code generation and code completion. |
+ | google/codegemma-1.1-7b | 8,192 tokens | Advanced programming model for code generation, completion, reasoning, and instruction following. |
+ | google/recurrentgemma-2b | 8,192 tokens | Novel recurrent architecture based language model for faster inference when generating long sequences. |
+ | google/gemma-2-9b-it | 8,192 tokens | Cutting-edge text generation model text understanding, transformation, and code generation. |
+ | google/gemma-2-27b-it | 8,192 tokens | Cutting-edge text generation model text understanding, transformation, and code generation. |
+ | google/gemma-2-2b-it | 8,192 tokens | Cutting-edge text generation model text understanding, transformation, and code generation. |
+ | google/deplot | 512 tokens | One-shot visual language understanding model that translates images of plots into tables. |
+ | google/paligemma | 8,192 tokens | Vision language model adept at comprehending text and visual inputs to produce informative responses. |
+ | mistralai/mistral-7b-instruct-v0.2 | 32k tokens | This LLM follows instructions, completes requests, and generates creative text. |
+ | mistralai/mixtral-8x7b-instruct-v0.1 | 8,192 tokens | An MOE LLM that follows instructions, completes requests, and generates creative text. |
+ | mistralai/mistral-large | 4,096 tokens | Creates diverse synthetic data that mimics the characteristics of real-world data. |
+ | mistralai/mixtral-8x22b-instruct-v0.1 | 8,192 tokens | Creates diverse synthetic data that mimics the characteristics of real-world data. |
+ | mistralai/mistral-7b-instruct-v0.3 | 32k tokens | This LLM follows instructions, completes requests, and generates creative text. |
+ | nv-mistralai/mistral-nemo-12b-instruct | 128k tokens | Most advanced language model for reasoning, code, multilingual tasks; runs on a single GPU. |
+ | mistralai/mamba-codestral-7b-v0.1 | 256k tokens | Model for writing and interacting with code across a wide range of programming languages and tasks. |
+ | microsoft/phi-3-mini-128k-instruct | 128K tokens | Lightweight, state-of-the-art open LLM with strong math and logical reasoning skills. |
+ | microsoft/phi-3-mini-4k-instruct | 4,096 tokens | Lightweight, state-of-the-art open LLM with strong math and logical reasoning skills. |
+ | microsoft/phi-3-small-8k-instruct | 8,192 tokens | Lightweight, state-of-the-art open LLM with strong math and logical reasoning skills. |
+ | microsoft/phi-3-small-128k-instruct | 128K tokens | Lightweight, state-of-the-art open LLM with strong math and logical reasoning skills. |
+ | microsoft/phi-3-medium-4k-instruct | 4,096 tokens | Lightweight, state-of-the-art open LLM with strong math and logical reasoning skills. |
+ | microsoft/phi-3-medium-128k-instruct | 128K tokens | Lightweight, state-of-the-art open LLM with strong math and logical reasoning skills. |
+ | microsoft/phi-3.5-mini-instruct | 128K tokens | Lightweight multilingual LLM powering AI applications in latency bound, memory/compute constrained environments |
+ | microsoft/phi-3.5-moe-instruct | 128K tokens | Advanced LLM based on Mixture of Experts architecture to deliver compute efficient content generation |
+ | microsoft/kosmos-2 | 1,024 tokens | Groundbreaking multimodal model designed to understand and reason about visual elements in images. |
+ | microsoft/phi-3-vision-128k-instruct | 128k tokens | Cutting-edge open multimodal model exceling in high-quality reasoning from images. |
+ | microsoft/phi-3.5-vision-instruct | 128k tokens | Cutting-edge open multimodal model exceling in high-quality reasoning from images. |
+ | databricks/dbrx-instruct | 12k tokens | A general-purpose LLM with state-of-the-art performance in language understanding, coding, and RAG. |
+ | snowflake/arctic | 1,024 tokens | Delivers high efficiency inference for enterprise applications focused on SQL generation and coding. |
+ | aisingapore/sea-lion-7b-instruct | 4,096 tokens | LLM to represent and serve the linguistic and cultural diversity of Southeast Asia |
+ | ibm/granite-8b-code-instruct | 4,096 tokens | Software programming LLM for code generation, completion, explanation, and multi-turn conversion. |
+ | ibm/granite-34b-code-instruct | 8,192 tokens | Software programming LLM for code generation, completion, explanation, and multi-turn conversion. |
+ | ibm/granite-3.0-8b-instruct | 4,096 tokens | Advanced Small Language Model supporting RAG, summarization, classification, code, and agentic AI |
+ | ibm/granite-3.0-3b-a800m-instruct | 4,096 tokens | Highly efficient Mixture of Experts model for RAG, summarization, entity extraction, and classification |
+ | mediatek/breeze-7b-instruct | 4,096 tokens | Creates diverse synthetic data that mimics the characteristics of real-world data. |
+ | upstage/solar-10.7b-instruct | 4,096 tokens | Excels in NLP tasks, particularly in instruction-following, reasoning, and mathematics. |
+ | writer/palmyra-med-70b-32k | 32k tokens | Leading LLM for accurate, contextually relevant responses in the medical domain. |
+ | writer/palmyra-med-70b | 32k tokens | Leading LLM for accurate, contextually relevant responses in the medical domain. |
+ | writer/palmyra-fin-70b-32k | 32k tokens | Specialized LLM for financial analysis, reporting, and data processing |
+ | 01-ai/yi-large | 32k tokens | Powerful model trained on English and Chinese for diverse tasks including chatbot and creative writing. |
+ | deepseek-ai/deepseek-coder-6.7b-instruct | 2k tokens | Powerful coding model offering advanced capabilities in code generation, completion, and infilling |
+ | rakuten/rakutenai-7b-instruct | 1,024 tokens | Advanced state-of-the-art LLM with language understanding, superior reasoning, and text generation. |
+ | rakuten/rakutenai-7b-chat | 1,024 tokens | Advanced state-of-the-art LLM with language understanding, superior reasoning, and text generation. |
+ | baichuan-inc/baichuan2-13b-chat | 4,096 tokens | Support Chinese and English chat, coding, math, instruction following, solving quizzes |
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ NVIDIA Nemotron models are designed for demanding agentic workloads, including complex reasoning, long-context analysis, tool use, multilingual tasks, and high-stakes RAG.
+
+ The `NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4` model is a frontier-scale open-weight model from NVIDIA with 550B total parameters and 55B active parameters. It uses a LatentMoE architecture that combines Mamba-2, MoE, Attention, and Multi-Token Prediction (MTP), and supports context lengths up to 1M tokens.
+
+
+ `NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4` is a very large model. NVIDIA lists minimum serving requirements of 4x GB200, 4x B200, 4x GB300, 4x B300, or 8x H100 GPUs. For most CrewAI users, the recommended path is to use NVIDIA NIM or another OpenAI-compatible hosted endpoint rather than running it locally.
+
+
+ **Hosted NVIDIA NIM usage:**
+ ```toml Code
+ NVIDIA_API_KEY=
+ ```
+
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="nvidia_nim/nvidia/nvidia-nemotron-3-ultra-550b-a55b",
+ temperature=0.2,
+ max_tokens=4096,
+ )
+ ```
+
+ **Self-hosted OpenAI-compatible endpoint:**
+ ```python Code
+ from crewai import LLM
+
+ llm = LLM(
+ model="openai/nvidia-nemotron-3-ultra-550b-a55b-nvfp4",
+ base_url="https://your-nemotron-endpoint.example.com/v1",
+ api_key="your-api-key",
+ temperature=0.2,
+ max_tokens=4096,
+ )
+ ```
+
+ **Model details:**
+
+ | Model | Context Window | Best For |
+ |-------|----------------|----------|
+ | `nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4` | Up to 1M tokens | Frontier reasoning, complex agentic workflows, long-context analysis, tool use, multilingual reasoning, and high-stakes RAG |
+
+ **Supported languages:** English, French, Spanish, Italian, German, Japanese, Korean, Hindi, Brazilian Portuguese, and Chinese.
+
+ **Reasoning mode:** Nemotron 3 Ultra supports configurable reasoning via its chat template using `enable_thinking=True` or `enable_thinking=False`. If you are using a hosted endpoint, check your provider's documentation for how that flag is exposed.
+
+ For model details, license, and deployment guidance, see the [NVIDIA Nemotron 3 Ultra model card](https://huggingface.co/nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-NVFP4).
+
+ **Note:** Hosted NVIDIA NIM usage uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+
+ NVIDIA NIM enables you to run powerful LLMs locally on your Windows machine using WSL2 (Windows Subsystem for Linux).
+ This approach allows you to leverage your NVIDIA GPU for private, secure, and cost-effective AI inference without relying on cloud services.
+ Perfect for development, testing, or production scenarios where data privacy or offline capabilities are required.
+
+ Here is a step-by-step guide to setting up a local NVIDIA NIM model:
+
+ 1. Follow installation instructions from [NVIDIA Website](https://docs.nvidia.com/nim/wsl2/latest/getting-started.html)
+
+ 2. Install the local model. For Llama 3.1-8b follow [instructions](https://build.nvidia.com/meta/llama-3_1-8b-instruct/deploy)
+
+ 3. Configure your crewai local models:
+
+ ```python Code
+ from crewai.llm import LLM
+
+ local_nvidia_nim_llm = LLM(
+ model="openai/meta/llama-3.1-8b-instruct", # it's an openai-api compatible model
+ base_url="http://localhost:8000/v1",
+ api_key="", # api_key is required, but you can use any text
+ )
+
+ # Then you can use it in your crew:
+
+ @CrewBase
+ class MyCrew():
+ # ...
+
+ @agent
+ def researcher(self) -> Agent:
+ return Agent(
+ config=self.agents_config['researcher'], # type: ignore[index]
+ llm=local_nvidia_nim_llm
+ )
+
+ # ...
+ ```
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+
+ ```toml Code
+ GROQ_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="groq/llama-3.2-90b-text-preview",
+ temperature=0.7
+ )
+ ```
+ | Model | Context Window | Best For |
+ |-------------------|------------------|--------------------------------------------|
+ | Llama 3.1 70B/8B | 131,072 tokens | High-performance, large context tasks |
+ | Llama 3.2 Series | 8,192 tokens | General-purpose tasks |
+ | Mixtral 8x7B | 32,768 tokens | Balanced performance and context |
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ # Required
+ WATSONX_URL=
+ WATSONX_APIKEY=
+ WATSONX_PROJECT_ID=
+
+ # Optional
+ WATSONX_TOKEN=
+ WATSONX_DEPLOYMENT_SPACE_ID=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="watsonx/meta-llama/llama-3-1-70b-instruct",
+ base_url="https://api.watsonx.ai/v1"
+ )
+ ```
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ 1. Install Ollama: [ollama.ai](https://ollama.ai/)
+ 2. Run a model: `ollama run llama3`
+ 3. Configure:
+
+ ```python Code
+ llm = LLM(
+ model="ollama/llama3:70b",
+ base_url="http://localhost:11434"
+ )
+ ```
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ FIREWORKS_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="fireworks_ai/accounts/fireworks/models/llama-v3-70b-instruct",
+ temperature=0.7
+ )
+ ```
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ PERPLEXITY_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="llama-3.1-sonar-large-128k-online",
+ base_url="https://api.perplexity.ai/"
+ )
+ ```
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ HF_TOKEN=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="huggingface/meta-llama/Meta-Llama-3.1-8B-Instruct"
+ )
+ ```
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+
+ ```toml Code
+ SAMBANOVA_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="sambanova/Meta-Llama-3.1-8B-Instruct",
+ temperature=0.7
+ )
+ ```
+ | Model | Context Window | Best For |
+ |--------------------|------------------------|----------------------------------------------|
+ | Llama 3.1 70B/8B | Up to 131,072 tokens | High-performance, large context tasks |
+ | Llama 3.1 405B | 8,192 tokens | High-performance and output quality |
+ | Llama 3.2 Series | 8,192 tokens | General-purpose, multimodal tasks |
+ | Llama 3.3 70B | Up to 131,072 tokens | High-performance and output quality |
+ | Qwen2 familly | 8,192 tokens | High-performance and output quality |
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ # Required
+ CEREBRAS_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="cerebras/llama3.1-70b",
+ temperature=0.7,
+ max_tokens=8192
+ )
+ ```
+
+
+ Cerebras features:
+ - Fast inference speeds
+ - Competitive pricing
+ - Good balance of speed and quality
+ - Support for long context windows
+
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ OPENROUTER_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="openrouter/deepseek/deepseek-r1",
+ base_url="https://openrouter.ai/api/v1",
+ api_key=OPENROUTER_API_KEY
+ )
+ ```
+
+
+ Open Router models:
+ - openrouter/deepseek/deepseek-r1
+ - openrouter/deepseek/deepseek-chat
+
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+ Set the following environment variables in your `.env` file:
+ ```toml Code
+ NEBIUS_API_KEY=
+ ```
+
+ Example usage in your CrewAI project:
+ ```python Code
+ llm = LLM(
+ model="nebius/Qwen/Qwen3-30B-A3B"
+ )
+ ```
+
+
+ Nebius AI Studio features:
+ - Large collection of open source models
+ - Higher rate limits
+ - Competitive pricing
+ - Good balance of speed and quality
+
+
+ **Note:** This provider uses LiteLLM. Add it as a dependency to your project:
+ ```bash
+ uv add 'crewai[litellm]'
+ ```
+
+
+
+## Streaming Responses
+
+CrewAI supports streaming responses from LLMs, allowing your application to receive and process outputs in real-time as they're generated.
+
+
+
+ Enable streaming by setting the `stream` parameter to `True` when initializing your LLM:
+
+ ```python
+ from crewai import LLM
+
+ # Create an LLM with streaming enabled
+ llm = LLM(
+ model="openai/gpt-4o",
+ stream=True # Enable streaming
+ )
+ ```
+
+ When streaming is enabled, responses are delivered in chunks as they're generated, creating a more responsive user experience.
+
+
+
+ CrewAI emits events for each chunk received during streaming:
+
+ ```python
+ from crewai.events import (
+ LLMStreamChunkEvent
+ )
+ from crewai.events import BaseEventListener
+
+ class MyCustomListener(BaseEventListener):
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(LLMStreamChunkEvent)
+ def on_llm_stream_chunk(self, event: LLMStreamChunkEvent):
+ # Process each chunk as it arrives
+ print(f"Received chunk: {event.chunk}")
+
+ my_listener = MyCustomListener()
+ ```
+
+
+ [Click here](/en/concepts/event-listener#event-listeners) for more details
+
+
+
+
+ All LLM events in CrewAI include agent and task information, allowing you to track and filter LLM interactions by specific agents or tasks:
+
+ ```python
+ from crewai import LLM, Agent, Task, Crew
+ from crewai.events import LLMStreamChunkEvent
+ from crewai.events import BaseEventListener
+
+ class MyCustomListener(BaseEventListener):
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(LLMStreamChunkEvent)
+ def on_llm_stream_chunk(source, event):
+ if researcher.id == event.agent_id:
+ print("\n==============\n Got event:", event, "\n==============\n")
+
+
+ my_listener = MyCustomListener()
+
+ llm = LLM(model="gpt-4o-mini", temperature=0, stream=True)
+
+ researcher = Agent(
+ role="About User",
+ goal="You know everything about the user.",
+ backstory="""You are a master at understanding people and their preferences.""",
+ llm=llm,
+ )
+
+ search = Task(
+ description="Answer the following questions about the user: {question}",
+ expected_output="An answer to the question.",
+ agent=researcher,
+ )
+
+ crew = Crew(agents=[researcher], tasks=[search])
+
+ result = crew.kickoff(
+ inputs={"question": "..."}
+ )
+ ```
+
+
+ This feature is particularly useful for:
+ - Debugging specific agent behaviors
+ - Logging LLM usage by task type
+ - Auditing which agents are making what types of LLM calls
+ - Performance monitoring of specific tasks
+
+
+
+
+## Async LLM Calls
+
+CrewAI supports asynchronous LLM calls for improved performance and concurrency in your AI workflows. Async calls allow you to run multiple LLM requests concurrently without blocking, making them ideal for high-throughput applications and parallel agent operations.
+
+
+
+ Use the `acall` method for asynchronous LLM requests:
+
+ ```python
+ import asyncio
+ from crewai import LLM
+
+ async def main():
+ llm = LLM(model="openai/gpt-4o")
+
+ # Single async call
+ response = await llm.acall("What is the capital of France?")
+ print(response)
+
+ asyncio.run(main())
+ ```
+
+ The `acall` method supports all the same parameters as the synchronous `call` method, including messages, tools, and callbacks.
+
+
+
+ Combine async calls with streaming for real-time concurrent responses:
+
+ ```python
+ import asyncio
+ from crewai import LLM
+
+ async def stream_async():
+ llm = LLM(model="openai/gpt-4o", stream=True)
+
+ response = await llm.acall("Write a short story about AI")
+
+ print(response)
+
+ asyncio.run(stream_async())
+ ```
+
+
+
+## Structured LLM Calls
+
+CrewAI supports structured responses from LLM calls by allowing you to define a `response_format` using a Pydantic model. This enables the framework to automatically parse and validate the output, making it easier to integrate the response into your application without manual post-processing.
+
+For example, you can define a Pydantic model to represent the expected response structure and pass it as the `response_format` when instantiating the LLM. The model will then be used to convert the LLM output into a structured Python object.
+
+```python Code
+from crewai import LLM
+
+class Dog(BaseModel):
+ name: str
+ age: int
+ breed: str
+
+
+llm = LLM(model="gpt-4o", response_format=Dog)
+
+response = llm.call(
+ "Analyze the following messages and return the name, age, and breed. "
+ "Meet Kona! She is 3 years old and is a black german shepherd."
+)
+print(response)
+
+# Output:
+# Dog(name='Kona', age=3, breed='black german shepherd')
+```
+
+## Advanced Features and Optimization
+
+Learn how to get the most out of your LLM configuration:
+
+
+
+ CrewAI includes smart context management features:
+
+ ```python
+ from crewai import LLM
+
+ # CrewAI automatically handles:
+ # 1. Token counting and tracking
+ # 2. Content summarization when needed
+ # 3. Task splitting for large contexts
+
+ llm = LLM(
+ model="gpt-4",
+ max_tokens=4000, # Limit response length
+ )
+ ```
+
+
+ Best practices for context management:
+ 1. Choose models with appropriate context windows
+ 2. Pre-process long inputs when possible
+ 3. Use chunking for large documents
+ 4. Monitor token usage to optimize costs
+
+
+
+
+
+
+ Choose the right context window for your task:
+ - Small tasks (up to 4K tokens): Standard models
+ - Medium tasks (between 4K-32K): Enhanced models
+ - Large tasks (over 32K): Large context models
+
+ ```python
+ # Configure model with appropriate settings
+ llm = LLM(
+ model="openai/gpt-4-turbo-preview",
+ temperature=0.7, # Adjust based on task
+ max_tokens=4096, # Set based on output needs
+ timeout=300 # Longer timeout for complex tasks
+ )
+ ```
+
+ - Lower temperature (0.1 to 0.3) for factual responses
+ - Higher temperature (0.7 to 0.9) for creative tasks
+
+
+
+
+ 1. Monitor token usage
+ 2. Implement rate limiting
+ 3. Use caching when possible
+ 4. Set appropriate max_tokens limits
+
+
+
+
+ Remember to regularly monitor your token usage and adjust your configuration as needed to optimize costs and performance.
+
+
+
+
+ CrewAI internally uses native sdks for LLM calls, which allows you to drop additional parameters that are not needed for your specific use case. This can help simplify your code and reduce the complexity of your LLM configuration.
+ For example, if you don't need to send the stop parameter, you can simply omit it from your LLM call:
+
+ ```python
+ from crewai import LLM
+ import os
+
+ os.environ["OPENAI_API_KEY"] = ""
+
+ o3_llm = LLM(
+ model="o3",
+ drop_params=True,
+ additional_drop_params=["stop"]
+ )
+ ```
+
+
+
+ CrewAI provides message interceptors for several providers, allowing you to hook into request/response cycles at the transport layer.
+
+ **Supported Providers:**
+ - ✅ OpenAI
+ - ✅ Anthropic
+
+ **Basic Usage:**
+ ```python
+import httpx
+from crewai import LLM
+from crewai.llms.hooks import BaseInterceptor
+
+class CustomInterceptor(BaseInterceptor[httpx.Request, httpx.Response]):
+ """Custom interceptor to modify requests and responses."""
+
+ def on_outbound(self, request: httpx.Request) -> httpx.Request:
+ """Print request before sending to the LLM provider."""
+ print(request)
+ return request
+
+ def on_inbound(self, response: httpx.Response) -> httpx.Response:
+ """Process response after receiving from the LLM provider."""
+ print(f"Status: {response.status_code}")
+ print(f"Response time: {response.elapsed}")
+ return response
+
+# Use the interceptor with an LLM
+llm = LLM(
+ model="openai/gpt-4o",
+ interceptor=CustomInterceptor()
+)
+ ```
+
+ **Important Notes:**
+ - Both methods must return the received object or type of object.
+ - Modifying received objects may result in unexpected behavior or application crashes.
+ - Not all providers support interceptors - check the supported providers list above
+
+
+ Interceptors operate at the transport layer. This is particularly useful for:
+ - Message transformation and filtering
+ - Debugging API interactions
+
+
+
+
+## Common Issues and Solutions
+
+
+
+
+ Most authentication issues can be resolved by checking API key format and environment variable names.
+
+
+ ```bash
+ # OpenAI
+ OPENAI_API_KEY=sk-...
+
+ # Anthropic
+ ANTHROPIC_API_KEY=sk-ant-...
+ ```
+
+
+
+ Always include the provider prefix in model names
+
+
+ ```python
+ # Correct
+ llm = LLM(model="openai/gpt-4")
+
+ # Incorrect
+ llm = LLM(model="gpt-4")
+ ```
+
+
+
+ Use larger context models for extensive tasks
+
+
+ ```python
+ # Large context model
+ llm = LLM(model="openai/gpt-4o") # 128K tokens
+ ```
+
+
diff --git a/docs/v1.15.1/en/concepts/memory.mdx b/docs/v1.15.1/en/concepts/memory.mdx
new file mode 100644
index 000000000..349546d1c
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/memory.mdx
@@ -0,0 +1,885 @@
+---
+title: Memory
+description: Leveraging the unified memory system in CrewAI to enhance agent capabilities.
+icon: database
+mode: "wide"
+---
+
+## Overview
+
+CrewAI provides a **unified memory system** -- a single `Memory` class that replaces separate short-term, long-term, entity, and external memory types with one intelligent API. Memory uses an LLM to analyze content when saving (inferring scope, categories, and importance) and supports adaptive-depth recall with composite scoring that blends semantic similarity, recency, and importance.
+
+You can use memory four ways: **standalone** (scripts, notebooks), **with Crews**, **with Agents**, or **inside Flows**.
+
+## Quick Start
+
+```python
+from crewai import Memory
+
+memory = Memory()
+
+# Store -- the LLM infers scope, categories, and importance
+memory.remember("We decided to use PostgreSQL for the user database.")
+
+# Retrieve -- results ranked by composite score (semantic + recency + importance)
+matches = memory.recall("What database did we choose?")
+for m in matches:
+ print(f"[{m.score:.2f}] {m.record.content}")
+
+# Tune scoring for a fast-moving project
+memory = Memory(recency_weight=0.5, recency_half_life_days=7)
+
+# Forget
+memory.forget(scope="/project/old")
+
+# Explore the self-organized scope tree
+print(memory.tree())
+print(memory.info("/"))
+```
+
+## Four Ways to Use Memory
+
+### Standalone
+
+Use memory in scripts, notebooks, CLI tools, or as a standalone knowledge base -- no agents or crews required.
+
+```python
+from crewai import Memory
+
+memory = Memory()
+
+# Build up knowledge
+memory.remember("The API rate limit is 1000 requests per minute.")
+memory.remember("Our staging environment uses port 8080.")
+memory.remember("The team agreed to use feature flags for all new releases.")
+
+# Later, recall what you need
+matches = memory.recall("What are our API limits?", limit=5)
+for m in matches:
+ print(f"[{m.score:.2f}] {m.record.content}")
+
+# Extract atomic facts from a longer text
+raw = """Meeting notes: We decided to migrate from MySQL to PostgreSQL
+next quarter. The budget is $50k. Sarah will lead the migration."""
+
+facts = memory.extract_memories(raw)
+# ["Migration from MySQL to PostgreSQL planned for next quarter",
+# "Database migration budget is $50k",
+# "Sarah will lead the database migration"]
+
+for fact in facts:
+ memory.remember(fact)
+```
+
+### With Crews
+
+Pass `memory=True` for default settings, or pass a configured `Memory` instance for custom behavior.
+
+```python
+from crewai import Crew, Agent, Task, Process, Memory
+
+# Option 1: Default memory
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ process=Process.sequential,
+ memory=True,
+ verbose=True,
+)
+
+# Option 2: Custom memory with tuned scoring
+memory = Memory(
+ recency_weight=0.4,
+ semantic_weight=0.4,
+ importance_weight=0.2,
+ recency_half_life_days=14,
+)
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ memory=memory,
+)
+```
+
+When `memory=True`, the crew creates a default `Memory()` and passes the crew's `embedder` configuration through automatically. All agents in the crew share the crew's memory unless an agent has its own. Without a custom `embedder`, memory uses OpenAI `text-embedding-3-large` embeddings.
+
+After each task, the crew automatically extracts discrete facts from the task output and stores them. Before each task, the agent recalls relevant context from memory and injects it into the task prompt.
+
+### With Agents
+
+Agents can use the crew's shared memory (default) or receive a scoped view for private context.
+
+```python
+from crewai import Agent, Memory
+
+memory = Memory()
+
+# Researcher gets a private scope -- only sees /agent/researcher
+researcher = Agent(
+ role="Researcher",
+ goal="Find and analyze information",
+ backstory="Expert researcher with attention to detail",
+ memory=memory.scope("/agent/researcher"),
+)
+
+# Writer uses crew shared memory (no agent-level memory set)
+writer = Agent(
+ role="Writer",
+ goal="Produce clear, well-structured content",
+ backstory="Experienced technical writer",
+ # memory not set -- uses crew._memory when crew has memory enabled
+)
+```
+
+This pattern gives the researcher private findings while the writer reads from the shared crew memory.
+
+### With Flows
+
+Every Flow has built-in memory. Use `self.remember()`, `self.recall()`, and `self.extract_memories()` inside any flow method.
+
+```python
+from crewai.flow.flow import Flow, listen, start
+
+class ResearchFlow(Flow):
+ @start()
+ def gather_data(self):
+ findings = "PostgreSQL handles 10k concurrent connections. MySQL caps at 5k."
+ self.remember(findings, scope="/research/databases")
+ return findings
+
+ @listen(gather_data)
+ def write_report(self, findings):
+ # Recall past research to provide context
+ past = self.recall("database performance benchmarks")
+ context = "\n".join(f"- {m.record.content}" for m in past)
+ return f"Report:\nNew findings: {findings}\nPrevious context:\n{context}"
+```
+
+See the [Flows documentation](/concepts/flows) for more on memory in Flows.
+
+
+## Hierarchical Scopes
+
+### What Scopes Are
+
+Memories are organized into a hierarchical tree of scopes, similar to a filesystem. Each scope is a path like `/`, `/project/alpha`, or `/agent/researcher/findings`.
+
+```
+/
+ /company
+ /company/engineering
+ /company/product
+ /project
+ /project/alpha
+ /project/beta
+ /agent
+ /agent/researcher
+ /agent/writer
+```
+
+Scopes provide **context-dependent memory** -- when you recall within a scope, you only search that branch of the tree, which improves both precision and performance.
+
+### How Scope Inference Works
+
+When you call `remember()` without specifying a scope, the LLM analyzes the content and the existing scope tree, then suggests the best placement. If no existing scope fits, it creates a new one. Over time, the scope tree grows organically from the content itself -- you don't need to design a schema upfront.
+
+```python
+memory = Memory()
+
+# LLM infers scope from content
+memory.remember("We chose PostgreSQL for the user database.")
+# -> might be placed under /project/decisions or /engineering/database
+
+# You can also specify scope explicitly
+memory.remember("Sprint velocity is 42 points", scope="/team/metrics")
+```
+
+### Visualizing the Scope Tree
+
+```python
+print(memory.tree())
+# / (15 records)
+# /project (8 records)
+# /project/alpha (5 records)
+# /project/beta (3 records)
+# /agent (7 records)
+# /agent/researcher (4 records)
+# /agent/writer (3 records)
+
+print(memory.info("/project/alpha"))
+# ScopeInfo(path='/project/alpha', record_count=5,
+# categories=['architecture', 'database'],
+# oldest_record=datetime(...), newest_record=datetime(...),
+# child_scopes=[])
+```
+
+### MemoryScope: Subtree Views
+
+A `MemoryScope` restricts all operations to a branch of the tree. The agent or code using it can only see and write within that subtree.
+
+```python
+memory = Memory()
+
+# Create a scope for a specific agent
+agent_memory = memory.scope("/agent/researcher")
+
+# Everything is relative to /agent/researcher
+agent_memory.remember("Found three relevant papers on LLM memory.")
+# -> stored under /agent/researcher
+
+agent_memory.recall("relevant papers")
+# -> searches only under /agent/researcher
+
+# Narrow further with subscope
+project_memory = agent_memory.subscope("project-alpha")
+# -> /agent/researcher/project-alpha
+```
+
+### Best Practices for Scope Design
+
+- **Start flat, let the LLM organize.** Don't over-engineer your scope hierarchy upfront. Begin with `memory.remember(content)` and let the LLM's scope inference create structure as content accumulates.
+
+- **Use `/{entity_type}/{identifier}` patterns.** Natural hierarchies emerge from patterns like `/project/alpha`, `/agent/researcher`, `/company/engineering`, `/customer/acme-corp`.
+
+- **Scope by concern, not by data type.** Use `/project/alpha/decisions` rather than `/decisions/project/alpha`. This keeps related content together.
+
+- **Keep depth shallow (2-3 levels).** Deeply nested scopes become too sparse. `/project/alpha/architecture` is good; `/project/alpha/architecture/decisions/databases/postgresql` is too deep.
+
+- **Use explicit scopes when you know, let the LLM infer when you don't.** If you're storing a known project decision, pass `scope="/project/alpha/decisions"`. If you're storing freeform agent output, omit the scope and let the LLM figure it out.
+
+### Use Case Examples
+
+**Multi-project team:**
+```python
+memory = Memory()
+# Each project gets its own branch
+memory.remember("Using microservices architecture", scope="/project/alpha/architecture")
+memory.remember("GraphQL API for client apps", scope="/project/beta/api")
+
+# Recall across all projects
+memory.recall("API design decisions")
+
+# Or within a specific project
+memory.recall("API design", scope="/project/beta")
+```
+
+**Per-agent private context with shared knowledge:**
+```python
+memory = Memory()
+
+# Researcher has private findings
+researcher_memory = memory.scope("/agent/researcher")
+
+# Writer can read from both its own scope and shared company knowledge
+writer_view = memory.slice(
+ scopes=["/agent/writer", "/company/knowledge"],
+ read_only=True,
+)
+```
+
+**Customer support (per-customer context):**
+```python
+memory = Memory()
+
+# Each customer gets isolated context
+memory.remember("Prefers email communication", scope="/customer/acme-corp")
+memory.remember("On enterprise plan, 50 seats", scope="/customer/acme-corp")
+
+# Shared product docs are accessible to all agents
+memory.remember("Rate limit is 1000 req/min on enterprise plan", scope="/product/docs")
+```
+
+
+## Memory Slices
+
+### What Slices Are
+
+A `MemorySlice` is a view across multiple, possibly disjoint scopes. Unlike a scope (which restricts to one subtree), a slice lets you recall from several branches simultaneously.
+
+### When to Use Slices vs Scopes
+
+- **Scope**: Use when an agent or code block should be restricted to a single subtree. Example: an agent that only sees `/agent/researcher`.
+- **Slice**: Use when you need to combine context from multiple branches. Example: an agent that reads from its own scope plus shared company knowledge.
+
+### Read-Only Slices
+
+The most common pattern: give an agent read access to multiple branches without letting it write to shared areas.
+
+```python
+memory = Memory()
+
+# Agent can recall from its own scope AND company knowledge,
+# but cannot write to company knowledge
+agent_view = memory.slice(
+ scopes=["/agent/researcher", "/company/knowledge"],
+ read_only=True,
+)
+
+matches = agent_view.recall("company security policies", limit=5)
+# Searches both /agent/researcher and /company/knowledge, merges and ranks results
+
+agent_view.remember("new finding") # Raises PermissionError (read-only)
+```
+
+### Read-Write Slices
+
+When read-only is disabled, you can write to any of the included scopes, but you must specify which scope explicitly.
+
+```python
+view = memory.slice(scopes=["/team/alpha", "/team/beta"], read_only=False)
+
+# Must specify scope when writing
+view.remember("Cross-team decision", scope="/team/alpha", categories=["decisions"])
+```
+
+
+## Composite Scoring
+
+Recall results are ranked by a weighted combination of three signals:
+
+```
+composite = semantic_weight * similarity + recency_weight * decay + importance_weight * importance
+```
+
+Where:
+- **similarity** = `1 / (1 + distance)` from the vector index (0 to 1)
+- **decay** = `0.5^(age_days / half_life_days)` -- exponential decay (1.0 for today, 0.5 at half-life)
+- **importance** = the record's importance score (0 to 1), set at encoding time
+
+Configure these directly on the `Memory` constructor:
+
+```python
+# Sprint retrospective: favor recent memories, short half-life
+memory = Memory(
+ recency_weight=0.5,
+ semantic_weight=0.3,
+ importance_weight=0.2,
+ recency_half_life_days=7,
+)
+
+# Architecture knowledge base: favor important memories, long half-life
+memory = Memory(
+ recency_weight=0.1,
+ semantic_weight=0.5,
+ importance_weight=0.4,
+ recency_half_life_days=180,
+)
+```
+
+Each `MemoryMatch` includes a `match_reasons` list so you can see why a result ranked where it did (e.g. `["semantic", "recency", "importance"]`).
+
+
+## LLM Analysis Layer
+
+Memory uses the LLM in three ways:
+
+1. **On save** -- When you omit scope, categories, or importance, the LLM analyzes the content and suggests scope, categories, importance, and metadata (entities, dates, topics).
+2. **On recall** -- For deep/auto recall, the LLM analyzes the query (keywords, time hints, suggested scopes, complexity) to guide retrieval.
+3. **Extract memories** -- `extract_memories(content)` breaks raw text (e.g. task output) into discrete memory statements. Agents use this before calling `remember()` on each statement so that atomic facts are stored instead of one large blob.
+
+All analysis degrades gracefully on LLM failure -- see [Failure Behavior](#failure-behavior).
+
+
+## Memory Consolidation
+
+When saving new content, the encoding pipeline automatically checks for similar existing records in storage. If the similarity is above `consolidation_threshold` (default 0.85), the LLM decides what to do:
+
+- **keep** -- The existing record is still accurate and not redundant.
+- **update** -- The existing record should be updated with new information (LLM provides the merged content).
+- **delete** -- The existing record is outdated, superseded, or contradicted.
+- **insert_new** -- Whether the new content should also be inserted as a separate record.
+
+This prevents duplicates from accumulating. For example, if you save "CrewAI ensures reliable operation" three times, consolidation recognizes the duplicates and keeps only one record.
+
+### Intra-batch Dedup
+
+When using `remember_many()`, items within the same batch are compared against each other before hitting storage. If two items have cosine similarity >= `batch_dedup_threshold` (default 0.98), the later one is silently dropped. This catches exact or near-exact duplicates within a single batch without any LLM calls (pure vector math).
+
+```python
+# Only 2 records are stored (the third is a near-duplicate of the first)
+memory.remember_many([
+ "CrewAI supports complex workflows.",
+ "Python is a great language.",
+ "CrewAI supports complex workflows.", # dropped by intra-batch dedup
+])
+```
+
+
+## Non-blocking Saves
+
+`remember_many()` is **non-blocking** -- it submits the encoding pipeline to a background thread and returns immediately. This means the agent can continue to the next task while memories are being saved.
+
+```python
+# Returns immediately -- save happens in background
+memory.remember_many(["Fact A.", "Fact B.", "Fact C."])
+
+# recall() automatically waits for pending saves before searching
+matches = memory.recall("facts") # sees all 3 records
+```
+
+### Read Barrier
+
+Every `recall()` call automatically calls `drain_writes()` before searching, ensuring the query always sees the latest persisted records. This is transparent -- you never need to think about it.
+
+### Crew Shutdown
+
+When a crew finishes, `kickoff()` drains all pending memory saves in its `finally` block, so no saves are lost even if the crew completes while background saves are in flight.
+
+### Standalone Usage
+
+For scripts or notebooks where there's no crew lifecycle, call `drain_writes()` or `close()` explicitly:
+
+```python
+memory = Memory()
+memory.remember_many(["Fact A.", "Fact B."])
+
+# Option 1: Wait for pending saves
+memory.drain_writes()
+
+# Option 2: Drain and shut down the background pool
+memory.close()
+```
+
+
+## Source and Privacy
+
+Every memory record can carry a `source` tag for provenance tracking and a `private` flag for access control.
+
+### Source Tracking
+
+The `source` parameter identifies where a memory came from:
+
+```python
+# Tag memories with their origin
+memory.remember("User prefers dark mode", source="user:alice")
+memory.remember("System config updated", source="admin")
+memory.remember("Agent found a bug", source="agent:debugger")
+
+# Recall only memories from a specific source
+matches = memory.recall("user preferences", source="user:alice")
+```
+
+### Private Memories
+
+Private memories are only visible to recall when the `source` matches:
+
+```python
+# Store a private memory
+memory.remember("Alice's API key is sk-...", source="user:alice", private=True)
+
+# This recall sees the private memory (source matches)
+matches = memory.recall("API key", source="user:alice")
+
+# This recall does NOT see it (different source)
+matches = memory.recall("API key", source="user:bob")
+
+# Admin access: see all private records regardless of source
+matches = memory.recall("API key", include_private=True)
+```
+
+This is particularly useful in multi-user or enterprise deployments where different users' memories should be isolated.
+
+
+## RecallFlow (Deep Recall)
+
+`recall()` supports two depths:
+
+- **`depth="shallow"`** -- Direct vector search with composite scoring. Fast (~200ms), no LLM calls.
+- **`depth="deep"` (default)** -- Runs a multi-step RecallFlow: query analysis, scope selection, parallel vector search, confidence-based routing, and optional recursive exploration when confidence is low.
+
+**Smart LLM skip**: Queries shorter than `query_analysis_threshold` (default 200 characters) skip the LLM query analysis entirely, even in deep mode. Short queries like "What database do we use?" are already good search phrases -- the LLM analysis adds little value. This saves ~1-3s per recall for typical short queries. Only longer queries (e.g. full task descriptions) go through LLM distillation into targeted sub-queries.
+
+```python
+# Shallow: pure vector search, no LLM
+matches = memory.recall("What did we decide?", limit=10, depth="shallow")
+
+# Deep (default): intelligent retrieval with LLM analysis for long queries
+matches = memory.recall(
+ "Summarize all architecture decisions from this quarter",
+ limit=10,
+ depth="deep",
+)
+```
+
+The confidence thresholds that control the RecallFlow router are configurable:
+
+```python
+memory = Memory(
+ confidence_threshold_high=0.9, # Only synthesize when very confident
+ confidence_threshold_low=0.4, # Explore deeper more aggressively
+ exploration_budget=2, # Allow up to 2 exploration rounds
+ query_analysis_threshold=200, # Skip LLM for queries shorter than this
+)
+```
+
+
+## Embedder Configuration
+
+Memory needs an embedding model to convert text into vectors for semantic search. By default, `Memory()` uses OpenAI `text-embedding-3-large` embeddings, which produce 3072-dimensional vectors. Set `OPENAI_API_KEY` for the default path, or configure a custom embedder in one of three ways.
+
+
+Existing local memory stores created with 1536-dimensional embeddings, such as `text-embedding-3-small` or `text-embedding-ada-002`, may not be compatible with the `text-embedding-3-large` default. This applies to both the OpenAI and Azure OpenAI providers — Azure's default embedding model also changed from `text-embedding-ada-002` to `text-embedding-3-large`. If local testing fails with an embedding dimension mismatch, reset memory with `crewai reset-memories -m`, delete the local memory storage directory, or explicitly configure the older embedder model until you migrate.
+
+
+### Passing to Memory Directly
+
+```python
+from crewai import Memory
+
+# As a config dict
+memory = Memory(embedder={"provider": "openai", "config": {"model_name": "text-embedding-3-large"}})
+
+# As a pre-built callable
+from crewai.rag.embeddings.factory import build_embedder
+embedder = build_embedder({"provider": "ollama", "config": {"model_name": "mxbai-embed-large"}})
+memory = Memory(embedder=embedder)
+```
+
+### Via Crew Embedder Config
+
+When using `memory=True`, the crew's `embedder` config is passed through:
+
+```python
+from crewai import Crew
+
+crew = Crew(
+ agents=[...],
+ tasks=[...],
+ memory=True,
+ embedder={"provider": "openai", "config": {"model_name": "text-embedding-3-large"}},
+)
+```
+
+### Provider Examples
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "openai",
+ "config": {
+ "model_name": "text-embedding-3-large",
+ # "api_key": "sk-...", # or set OPENAI_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "ollama",
+ "config": {
+ "model_name": "mxbai-embed-large",
+ "url": "http://localhost:11434/api/embeddings",
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "azure",
+ "config": {
+ "deployment_id": "your-embedding-deployment",
+ "api_key": "your-azure-api-key",
+ "api_base": "https://your-resource.openai.azure.com",
+ "api_version": "2024-02-01",
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "google-generativeai",
+ "config": {
+ "model_name": "gemini-embedding-001",
+ # "api_key": "...", # or set GOOGLE_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "google-vertex",
+ "config": {
+ "model_name": "gemini-embedding-001",
+ "project_id": "your-gcp-project-id",
+ "location": "us-central1",
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "cohere",
+ "config": {
+ "model_name": "embed-english-v3.0",
+ # "api_key": "...", # or set COHERE_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "voyageai",
+ "config": {
+ "model": "voyage-3",
+ # "api_key": "...", # or set VOYAGE_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "amazon-bedrock",
+ "config": {
+ "model_name": "amazon.titan-embed-text-v1",
+ # Uses default AWS credentials (boto3 session)
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "huggingface",
+ "config": {
+ "model_name": "sentence-transformers/all-MiniLM-L6-v2",
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "jina",
+ "config": {
+ "model_name": "jina-embeddings-v2-base-en",
+ # "api_key": "...", # or set JINA_API_KEY env var
+ },
+})
+```
+
+
+
+```python
+memory = Memory(embedder={
+ "provider": "watsonx",
+ "config": {
+ "model_id": "ibm/slate-30m-english-rtrvr",
+ "api_key": "your-watsonx-api-key",
+ "project_id": "your-project-id",
+ "url": "https://us-south.ml.cloud.ibm.com",
+ },
+})
+```
+
+
+
+```python
+# Pass any callable that takes a list of strings and returns a list of vectors
+def my_embedder(texts: list[str]) -> list[list[float]]:
+ # Your embedding logic here
+ return [[0.1, 0.2, ...] for _ in texts]
+
+memory = Memory(embedder=my_embedder)
+```
+
+
+
+### Provider Reference
+
+| Provider | Key | Typical Model | Notes |
+| :--- | :--- | :--- | :--- |
+| OpenAI | `openai` | `text-embedding-3-large` | Default. Set `OPENAI_API_KEY`. |
+| Ollama | `ollama` | `mxbai-embed-large` | Local, no API key needed. |
+| Azure OpenAI | `azure` | `text-embedding-3-large` | Default model. Requires `deployment_id`. |
+| Google AI | `google-generativeai` | `gemini-embedding-001` | Set `GOOGLE_API_KEY`. |
+| Google Vertex | `google-vertex` | `gemini-embedding-001` | Requires `project_id`. |
+| Cohere | `cohere` | `embed-english-v3.0` | Strong multilingual support. |
+| VoyageAI | `voyageai` | `voyage-3` | Optimized for retrieval. |
+| AWS Bedrock | `amazon-bedrock` | `amazon.titan-embed-text-v1` | Uses boto3 credentials. |
+| Hugging Face | `huggingface` | `all-MiniLM-L6-v2` | Local sentence-transformers. |
+| Jina | `jina` | `jina-embeddings-v2-base-en` | Set `JINA_API_KEY`. |
+| IBM WatsonX | `watsonx` | `ibm/slate-30m-english-rtrvr` | Requires `project_id`. |
+| Sentence Transformer | `sentence-transformer` | `all-MiniLM-L6-v2` | Local, no API key. |
+| Custom | `custom` | -- | Requires `embedding_callable`. |
+
+
+## LLM Configuration
+
+Memory uses an LLM for save analysis (scope, categories, importance inference), consolidation decisions, and deep recall query analysis. You can configure which model to use.
+
+```python
+from crewai import Memory, LLM
+
+# Default: gpt-4o-mini
+memory = Memory()
+
+# Use a different OpenAI model
+memory = Memory(llm="gpt-4o")
+
+# Use Anthropic
+memory = Memory(llm="anthropic/claude-3-haiku-20240307")
+
+# Use Ollama for fully local/private analysis
+memory = Memory(llm="ollama/llama3.2")
+
+# Use Google Gemini
+memory = Memory(llm="gemini/gemini-2.0-flash")
+
+# Pass a pre-configured LLM instance with custom settings
+llm = LLM(model="gpt-4o", temperature=0)
+memory = Memory(llm=llm)
+```
+
+The LLM is initialized **lazily** -- it's only created when first needed. This means `Memory()` never fails at construction time, even if API keys aren't set. Errors only surface when the LLM is actually called (e.g. when saving without explicit scope/categories, or during deep recall).
+
+For fully offline/private operation, use a local model for both the LLM and embedder:
+
+```python
+memory = Memory(
+ llm="ollama/llama3.2",
+ embedder={"provider": "ollama", "config": {"model_name": "mxbai-embed-large"}},
+)
+```
+
+
+## Storage Backend
+
+- **Default**: LanceDB, stored under `./.crewai/memory` (or `$CREWAI_STORAGE_DIR/memory` if the env var is set, or the path you pass as `storage="path/to/dir"`).
+- **Custom backend**: Implement the `StorageBackend` protocol (see `crewai.memory.storage.backend`) and pass an instance to `Memory(storage=your_backend)`.
+
+
+## Discovery
+
+Inspect the scope hierarchy, categories, and records:
+
+```python
+memory.tree() # Formatted tree of scopes and record counts
+memory.tree("/project", max_depth=2) # Subtree view
+memory.info("/project") # ScopeInfo: record_count, categories, oldest/newest
+memory.list_scopes("/") # Immediate child scopes
+memory.list_categories() # Category names and counts
+memory.list_records(scope="/project/alpha", limit=20) # Records in a scope, newest first
+```
+
+
+## Failure Behavior
+
+If the LLM fails during analysis (network error, rate limit, invalid response), memory degrades gracefully:
+
+- **Save analysis** -- A warning is logged and the memory is still stored with default scope `/`, empty categories, and importance `0.5`.
+- **Extract memories** -- The full content is stored as a single memory so nothing is dropped.
+- **Query analysis** -- Recall falls back to simple scope selection and vector search so you still get results.
+
+No exception is raised for these analysis failures; only storage or embedder failures will raise.
+
+
+## Privacy Note
+
+Memory content is sent to the configured LLM for analysis (scope/categories/importance on save, query analysis and optional deep recall). For sensitive data, use a local LLM (e.g. Ollama) or ensure your provider meets your compliance requirements.
+
+
+## Memory Events
+
+All memory operations emit events with `source_type="unified_memory"`. You can listen for timing, errors, and content.
+
+| Event | Description | Key Properties |
+| :---- | :---------- | :------------- |
+| **MemoryQueryStartedEvent** | Query begins | `query`, `limit` |
+| **MemoryQueryCompletedEvent** | Query succeeds | `query`, `results`, `query_time_ms` |
+| **MemoryQueryFailedEvent** | Query fails | `query`, `error` |
+| **MemorySaveStartedEvent** | Save begins | `value`, `metadata` |
+| **MemorySaveCompletedEvent** | Save succeeds | `value`, `save_time_ms` |
+| **MemorySaveFailedEvent** | Save fails | `value`, `error` |
+| **MemoryRetrievalStartedEvent** | Agent retrieval starts | `task_id` |
+| **MemoryRetrievalCompletedEvent** | Agent retrieval done | `task_id`, `memory_content`, `retrieval_time_ms` |
+
+Example: monitor query time:
+
+```python
+from crewai.events import BaseEventListener, MemoryQueryCompletedEvent
+
+class MemoryMonitor(BaseEventListener):
+ def setup_listeners(self, crewai_event_bus):
+ @crewai_event_bus.on(MemoryQueryCompletedEvent)
+ def on_done(source, event):
+ if getattr(event, "source_type", None) == "unified_memory":
+ print(f"Query '{event.query}' completed in {event.query_time_ms:.0f}ms")
+```
+
+
+## Troubleshooting
+
+**Memory not persisting?**
+- Ensure the storage path is writable (default `./.crewai/memory`). Pass `storage="./your_path"` to use a different directory, or set the `CREWAI_STORAGE_DIR` environment variable.
+- When using a crew, confirm `memory=True` or `memory=Memory(...)` is set.
+
+**Slow recall?**
+- Use `depth="shallow"` for routine agent context. Reserve `depth="deep"` for complex queries.
+- Increase `query_analysis_threshold` to skip LLM analysis for more queries.
+
+**LLM analysis errors in logs?**
+- Memory still saves/recalls with safe defaults. Check API keys, rate limits, and model availability if you want full LLM analysis.
+
+**Background save errors in logs?**
+- Memory saves run in a background thread. Errors are emitted as `MemorySaveFailedEvent` but don't crash the agent. Check logs for the root cause (usually LLM or embedder connection issues).
+
+**Embedding dimension mismatch?**
+- Existing local memory stores may have been created with a different embedding model. The default OpenAI memory embedder is now `text-embedding-3-large` (3072 dimensions), while older stores commonly used 1536-dimensional embeddings. For local testing, run `crewai reset-memories -m`, delete the local memory storage directory, or configure the previous embedder model explicitly.
+
+**Concurrent write conflicts?**
+- LanceDB operations are serialized with a shared lock and retried automatically on conflict. This handles multiple `Memory` instances pointing at the same database (e.g. agent memory + crew memory). No action needed.
+
+**Browse memory from the terminal:**
+```bash
+crewai memory # Opens the TUI browser
+crewai memory --storage-path ./my_memory # Point to a specific directory
+```
+
+**Reset memory (e.g. for tests):**
+```python
+crew.reset_memories(command_type="memory") # Resets unified memory
+# Or on a Memory instance:
+memory.reset() # All scopes
+memory.reset(scope="/project/old") # Only that subtree
+```
+
+
+## Configuration Reference
+
+All configuration is passed as keyword arguments to `Memory(...)`. Every parameter has a sensible default.
+
+| Parameter | Default | Description |
+| :--- | :--- | :--- |
+| `llm` | `"gpt-4o-mini"` | LLM for analysis (model name or `BaseLLM` instance). |
+| `storage` | `"lancedb"` | Storage backend (`"lancedb"`, a path string, or a `StorageBackend` instance). |
+| `embedder` | `None` (OpenAI `text-embedding-3-large`) | Embedder (config dict, callable, or `None` for default OpenAI). |
+| `recency_weight` | `0.3` | Weight for recency in composite score. |
+| `semantic_weight` | `0.5` | Weight for semantic similarity in composite score. |
+| `importance_weight` | `0.2` | Weight for importance in composite score. |
+| `recency_half_life_days` | `30` | Days for recency score to halve (exponential decay). |
+| `consolidation_threshold` | `0.85` | Similarity above which consolidation is triggered on save. Set to `1.0` to disable. |
+| `consolidation_limit` | `5` | Max existing records to compare during consolidation. |
+| `default_importance` | `0.5` | Importance assigned when not provided and LLM analysis is skipped. |
+| `batch_dedup_threshold` | `0.98` | Cosine similarity for dropping near-duplicates within a `remember_many()` batch. |
+| `confidence_threshold_high` | `0.8` | Recall confidence above which results are returned directly. |
+| `confidence_threshold_low` | `0.5` | Recall confidence below which deeper exploration is triggered. |
+| `complex_query_threshold` | `0.7` | For complex queries, explore deeper below this confidence. |
+| `exploration_budget` | `1` | Number of LLM-driven exploration rounds during deep recall. |
+| `query_analysis_threshold` | `200` | Queries shorter than this (in characters) skip LLM analysis during deep recall. |
diff --git a/docs/v1.15.1/en/concepts/planning.mdx b/docs/v1.15.1/en/concepts/planning.mdx
new file mode 100644
index 000000000..c1992718d
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/planning.mdx
@@ -0,0 +1,155 @@
+---
+title: Planning
+description: Learn how to add planning to your CrewAI Crew and improve their performance.
+icon: ruler-combined
+mode: "wide"
+---
+
+## Overview
+
+The planning feature in CrewAI allows you to add planning capability to your crew. When enabled, before each Crew iteration,
+all Crew information is sent to an AgentPlanner that will plan the tasks step by step, and this plan will be added to each task description.
+
+### Using the Planning Feature
+
+Getting started with the planning feature is very easy, the only step required is to add `planning=True` to your Crew:
+
+
+```python Code
+from crewai import Crew, Agent, Task, Process
+
+# Assemble your crew with planning capabilities
+my_crew = Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ planning=True,
+)
+```
+
+
+From this point on, your crew will have planning enabled, and the tasks will be planned before each iteration.
+
+
+When planning is enabled, crewAI will use `gpt-4o-mini` as the default LLM for planning, which requires a valid OpenAI API key. Since your agents might be using different LLMs, this could cause confusion if you don't have an OpenAI API key configured or if you're experiencing unexpected behavior related to LLM API calls.
+
+
+#### Planning LLM
+
+Now you can define the LLM that will be used to plan the tasks.
+
+When running the base case example, you will see something like the output below, which represents the output of the `AgentPlanner`
+responsible for creating the step-by-step logic to add to the Agents' tasks.
+
+
+```python Code
+from crewai import Crew, Agent, Task, Process
+
+# Assemble your crew with planning capabilities and custom LLM
+my_crew = Crew(
+ agents=self.agents,
+ tasks=self.tasks,
+ process=Process.sequential,
+ planning=True,
+ planning_llm="gpt-4o"
+)
+
+# Run the crew
+my_crew.kickoff()
+```
+
+```markdown Result
+[2024-07-15 16:49:11][INFO]: Planning the crew execution
+**Step-by-Step Plan for Task Execution**
+
+**Task Number 1: Conduct a thorough research about AI LLMs**
+
+**Agent:** AI LLMs Senior Data Researcher
+
+**Agent Goal:** Uncover cutting-edge developments in AI LLMs
+
+**Task Expected Output:** A list with 10 bullet points of the most relevant information about AI LLMs
+
+**Task Tools:** None specified
+
+**Agent Tools:** None specified
+
+**Step-by-Step Plan:**
+
+1. **Define Research Scope:**
+
+ - Determine the specific areas of AI LLMs to focus on, such as advancements in architecture, use cases, ethical considerations, and performance metrics.
+
+2. **Identify Reliable Sources:**
+
+ - List reputable sources for AI research, including academic journals, industry reports, conferences (e.g., NeurIPS, ACL), AI research labs (e.g., OpenAI, Google AI), and online databases (e.g., IEEE Xplore, arXiv).
+
+3. **Collect Data:**
+
+ - Search for the latest papers, articles, and reports published in 2024 and early 2025.
+ - Use keywords like "Large Language Models 2025", "AI LLM advancements", "AI ethics 2025", etc.
+
+4. **Analyze Findings:**
+
+ - Read and summarize the key points from each source.
+ - Highlight new techniques, models, and applications introduced in the past year.
+
+5. **Organize Information:**
+
+ - Categorize the information into relevant topics (e.g., new architectures, ethical implications, real-world applications).
+ - Ensure each bullet point is concise but informative.
+
+6. **Create the List:**
+
+ - Compile the 10 most relevant pieces of information into a bullet point list.
+ - Review the list to ensure clarity and relevance.
+
+**Expected Output:**
+
+A list with 10 bullet points of the most relevant information about AI LLMs.
+
+---
+
+**Task Number 2: Review the context you got and expand each topic into a full section for a report**
+
+**Agent:** AI LLMs Reporting Analyst
+
+**Agent Goal:** Create detailed reports based on AI LLMs data analysis and research findings
+
+**Task Expected Output:** A fully fledged report with the main topics, each with a full section of information. Formatted as markdown without '```'
+
+**Task Tools:** None specified
+
+**Agent Tools:** None specified
+
+**Step-by-Step Plan:**
+
+1. **Review the Bullet Points:**
+ - Carefully read through the list of 10 bullet points provided by the AI LLMs Senior Data Researcher.
+
+2. **Outline the Report:**
+ - Create an outline with each bullet point as a main section heading.
+ - Plan sub-sections under each main heading to cover different aspects of the topic.
+
+3. **Research Further Details:**
+ - For each bullet point, conduct additional research if necessary to gather more detailed information.
+ - Look for case studies, examples, and statistical data to support each section.
+
+4. **Write Detailed Sections:**
+ - Expand each bullet point into a comprehensive section.
+ - Ensure each section includes an introduction, detailed explanation, examples, and a conclusion.
+ - Use markdown formatting for headings, subheadings, lists, and emphasis.
+
+5. **Review and Edit:**
+ - Proofread the report for clarity, coherence, and correctness.
+ - Make sure the report flows logically from one section to the next.
+ - Format the report according to markdown standards.
+
+6. **Finalize the Report:**
+ - Ensure the report is complete with all sections expanded and detailed.
+ - Double-check formatting and make any necessary adjustments.
+
+**Expected Output:**
+A fully fledged report with the main topics, each with a full section of information. Formatted as markdown without '```'.
+```
+
\ No newline at end of file
diff --git a/docs/v1.15.1/en/concepts/processes.mdx b/docs/v1.15.1/en/concepts/processes.mdx
new file mode 100644
index 000000000..a7411a560
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/processes.mdx
@@ -0,0 +1,66 @@
+---
+title: Processes
+description: Detailed guide on workflow management through processes in CrewAI, with updated implementation details.
+icon: bars-staggered
+mode: "wide"
+---
+
+## Overview
+
+
+ Processes orchestrate the execution of tasks by agents, akin to project management in human teams.
+ These processes ensure tasks are distributed and executed efficiently, in alignment with a predefined strategy.
+
+
+## Process Implementations
+
+- **Sequential**: Executes tasks sequentially, ensuring tasks are completed in an orderly progression.
+- **Hierarchical**: Organizes tasks in a managerial hierarchy, where tasks are delegated and executed based on a structured chain of command. A manager language model (`manager_llm`) or a custom manager agent (`manager_agent`) must be specified in the crew to enable the hierarchical process, facilitating the creation and management of tasks by the manager.
+
+## The Role of Processes in Teamwork
+Processes enable individual agents to operate as a cohesive unit, streamlining their efforts to achieve common objectives with efficiency and coherence.
+
+## Assigning Processes to a Crew
+To assign a process to a crew, specify the process type upon crew creation to set the execution strategy. For a hierarchical process, ensure to define `manager_llm` or `manager_agent` for the manager agent.
+
+```python
+from crewai import Crew, Process
+
+# Example: Creating a crew with a sequential process
+crew = Crew(
+ agents=my_agents,
+ tasks=my_tasks,
+ process=Process.sequential
+)
+
+# Example: Creating a crew with a hierarchical process
+# Ensure to provide a manager_llm or manager_agent
+crew = Crew(
+ agents=my_agents,
+ tasks=my_tasks,
+ process=Process.hierarchical,
+ manager_llm="gpt-4o"
+ # or
+ # manager_agent=my_manager_agent
+)
+```
+**Note:** Ensure `my_agents` and `my_tasks` are defined prior to creating a `Crew` object, and for the hierarchical process, either `manager_llm` or `manager_agent` is also required.
+
+## Sequential Process
+
+This method mirrors dynamic team workflows, progressing through tasks in a thoughtful and systematic manner. Task execution follows the predefined order in the task list, with the output of one task serving as context for the next.
+
+To customize task context, utilize the `context` parameter in the `Task` class to specify outputs that should be used as context for subsequent tasks.
+
+## Hierarchical Process
+
+Emulates a corporate hierarchy, CrewAI allows specifying a custom manager agent or automatically creates one, requiring the specification of a manager language model (`manager_llm`). This agent oversees task execution, including planning, delegation, and validation. Tasks are not pre-assigned; the manager allocates tasks to agents based on their capabilities, reviews outputs, and assesses task completion.
+
+## Process Class: Detailed Overview
+
+The `Process` class is implemented as an enumeration (`Enum`), ensuring type safety and restricting process values to the defined types (`sequential`, `hierarchical`).
+
+## Conclusion
+
+The structured collaboration facilitated by processes within CrewAI is crucial for enabling systematic teamwork among agents.
+This documentation has been updated to reflect the latest features and enhancements, ensuring users have access to the most current and comprehensive information.
\ No newline at end of file
diff --git a/docs/v1.15.1/en/concepts/production-architecture.mdx b/docs/v1.15.1/en/concepts/production-architecture.mdx
new file mode 100644
index 000000000..82f873860
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/production-architecture.mdx
@@ -0,0 +1,162 @@
+---
+title: Production Architecture
+description: Best practices for building production-ready AI applications with CrewAI
+icon: server
+mode: "wide"
+---
+
+# The Flow-First Mindset
+
+When building production AI applications with CrewAI, **we recommend starting with a Flow**.
+
+While it's possible to run individual Crews or Agents, wrapping them in a Flow provides the necessary structure for a robust, scalable application.
+
+## Why Flows?
+
+1. **State Management**: Flows provide a built-in way to manage state across different steps of your application. This is crucial for passing data between Crews, maintaining context, and handling user inputs.
+2. **Control**: Flows allow you to define precise execution paths, including loops, conditionals, and branching logic. This is essential for handling edge cases and ensuring your application behaves predictably.
+3. **Observability**: Flows provide a clear structure that makes it easier to trace execution, debug issues, and monitor performance. We recommend using [CrewAI Tracing](/en/observability/tracing) for detailed insights. Simply run `crewai login` to enable free observability features.
+
+## The Architecture
+
+A typical production CrewAI application looks like this:
+
+```mermaid
+graph TD
+ Start((Start)) --> Flow[Flow Orchestrator]
+ Flow --> State{State Management}
+ State --> Step1[Step 1: Data Gathering]
+ Step1 --> Crew1[Research Crew]
+ Crew1 --> State
+ State --> Step2{Condition Check}
+ Step2 -- "Valid" --> Step3[Step 3: Execution]
+ Step3 --> Crew2[Action Crew]
+ Step2 -- "Invalid" --> End((End))
+ Crew2 --> End
+```
+
+### 1. The Flow Class
+Your `Flow` class is the entry point. It defines the state schema and the methods that execute your logic.
+
+```python
+from crewai.flow.flow import Flow, listen, start
+from pydantic import BaseModel
+
+class AppState(BaseModel):
+ user_input: str = ""
+ research_results: str = ""
+ final_report: str = ""
+
+class ProductionFlow(Flow[AppState]):
+ @start()
+ def gather_input(self):
+ # ... logic to get input ...
+ pass
+
+ @listen(gather_input)
+ def run_research_crew(self):
+ # ... trigger a Crew ...
+ pass
+```
+
+### 2. State Management
+Use Pydantic models to define your state. This ensures type safety and makes it clear what data is available at each step.
+
+- **Keep it minimal**: Store only what you need to persist between steps.
+- **Use structured data**: Avoid unstructured dictionaries when possible.
+
+### 3. Crews as Units of Work
+Delegate complex tasks to Crews. A Crew should be focused on a specific goal (e.g., "Research a topic", "Write a blog post").
+
+- **Don't over-engineer Crews**: Keep them focused.
+- **Pass state explicitly**: Pass the necessary data from the Flow state to the Crew inputs.
+
+```python
+ @listen(gather_input)
+ def run_research_crew(self):
+ crew = ResearchCrew()
+ result = crew.kickoff(inputs={"topic": self.state.user_input})
+ self.state.research_results = result.raw
+```
+
+## Control Primitives
+
+Leverage CrewAI's control primitives to add robustness and control to your Crews.
+
+### 1. Task Guardrails
+Use [Task Guardrails](/en/concepts/tasks#task-guardrails) to validate task outputs before they are accepted. This ensures that your agents produce high-quality results.
+
+```python
+def validate_content(result: TaskOutput) -> Tuple[bool, Any]:
+ if len(result.raw) < 100:
+ return (False, "Content is too short. Please expand.")
+ return (True, result.raw)
+
+task = Task(
+ ...,
+ guardrail=validate_content
+)
+```
+
+### 2. Structured Outputs
+Always use structured outputs (`output_pydantic` or `output_json`) when passing data between tasks or to your application. This prevents parsing errors and ensures type safety.
+
+```python
+class ResearchResult(BaseModel):
+ summary: str
+ sources: List[str]
+
+task = Task(
+ ...,
+ output_pydantic=ResearchResult
+)
+```
+
+### 3. LLM Hooks
+Use [LLM Hooks](/en/learn/llm-hooks) to inspect or modify messages before they are sent to the LLM, or to sanitize responses.
+
+```python
+@before_llm_call
+def log_request(context):
+ print(f"Agent {context.agent.role} is calling the LLM...")
+```
+
+## Deployment Patterns
+
+When deploying your Flow, consider the following:
+
+### CrewAI Enterprise
+The easiest way to deploy your Flow is using CrewAI Enterprise. It handles the infrastructure, authentication, and monitoring for you.
+
+Check out the [Deployment Guide](/en/enterprise/guides/deploy-crew) to get started.
+
+```bash
+crewai deploy create
+```
+
+### Async Execution
+For long-running tasks, use `kickoff_async` to avoid blocking your API.
+
+### Persistence
+Use the `@persist` decorator to save the state of your Flow to a database. This allows you to resume execution if the process crashes or if you need to wait for human input.
+
+```python
+@persist
+class ProductionFlow(Flow[AppState]):
+ # ...
+```
+
+By default, `@persist` resumes a flow when `kickoff(inputs={"id": })` is supplied, extending the same `flow_uuid` history. To **fork** a persisted flow into a new lineage — hydrate state from a previous run but write under a fresh `state.id` — pass `restore_from_state_id`:
+
+```python
+flow.kickoff(restore_from_state_id="")
+```
+
+The new run gets a fresh `state.id` (auto-generated, or `inputs["id"]` if pinned) so its `@persist` writes don't extend the source's history. Combining with `from_checkpoint` raises a `ValueError`; pick one hydration source.
+
+## Summary
+
+- **Start with a Flow.**
+- **Define a clear State.**
+- **Use Crews for complex tasks.**
+- **Deploy with an API and persistence.**
diff --git a/docs/v1.15.1/en/concepts/reasoning.mdx b/docs/v1.15.1/en/concepts/reasoning.mdx
new file mode 100644
index 000000000..d37017f57
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/reasoning.mdx
@@ -0,0 +1,148 @@
+---
+title: Reasoning
+description: "Learn how to enable and use agent reasoning to improve task execution."
+icon: brain
+mode: "wide"
+---
+
+## Overview
+
+Agent reasoning is a feature that allows agents to reflect on a task and create a plan before execution. This helps agents approach tasks more methodically and ensures they're ready to perform the assigned work.
+
+## Usage
+
+To enable reasoning for an agent, simply set `reasoning=True` when creating the agent:
+
+```python
+from crewai import Agent
+
+agent = Agent(
+ role="Data Analyst",
+ goal="Analyze complex datasets and provide insights",
+ backstory="You are an experienced data analyst with expertise in finding patterns in complex data.",
+ reasoning=True, # Enable reasoning
+ max_reasoning_attempts=3 # Optional: Set a maximum number of reasoning attempts
+)
+```
+
+## How It Works
+
+When reasoning is enabled, before executing a task, the agent will:
+
+1. Reflect on the task and create a detailed plan
+2. Evaluate whether it's ready to execute the task
+3. Refine the plan as necessary until it's ready or max_reasoning_attempts is reached
+4. Inject the reasoning plan into the task description before execution
+
+This process helps the agent break down complex tasks into manageable steps and identify potential challenges before starting.
+
+## Configuration Options
+
+
+ Enable or disable reasoning
+
+
+
+ Maximum number of attempts to refine the plan before proceeding with execution. If None (default), the agent will continue refining until it's ready.
+
+
+## Example
+
+Here's a complete example:
+
+```python
+from crewai import Agent, Task, Crew
+
+# Create an agent with reasoning enabled
+analyst = Agent(
+ role="Data Analyst",
+ goal="Analyze data and provide insights",
+ backstory="You are an expert data analyst.",
+ reasoning=True,
+ max_reasoning_attempts=3 # Optional: Set a limit on reasoning attempts
+)
+
+# Create a task
+analysis_task = Task(
+ description="Analyze the provided sales data and identify key trends.",
+ expected_output="A report highlighting the top 3 sales trends.",
+ agent=analyst
+)
+
+# Create a crew and run the task
+crew = Crew(agents=[analyst], tasks=[analysis_task])
+result = crew.kickoff()
+
+print(result)
+```
+
+## Error Handling
+
+The reasoning process is designed to be robust, with error handling built in. If an error occurs during reasoning, the agent will proceed with executing the task without the reasoning plan. This ensures that tasks can still be executed even if the reasoning process fails.
+
+Here's how to handle potential errors in your code:
+
+```python
+from crewai import Agent, Task
+import logging
+
+# Set up logging to capture any reasoning errors
+logging.basicConfig(level=logging.INFO)
+
+# Create an agent with reasoning enabled
+agent = Agent(
+ role="Data Analyst",
+ goal="Analyze data and provide insights",
+ reasoning=True,
+ max_reasoning_attempts=3
+)
+
+# Create a task
+task = Task(
+ description="Analyze the provided sales data and identify key trends.",
+ expected_output="A report highlighting the top 3 sales trends.",
+ agent=agent
+)
+
+# Execute the task
+# If an error occurs during reasoning, it will be logged and execution will continue
+result = agent.execute_task(task)
+```
+
+## Example Reasoning Output
+
+Here's an example of what a reasoning plan might look like for a data analysis task:
+
+```
+Task: Analyze the provided sales data and identify key trends.
+
+Reasoning Plan:
+I'll analyze the sales data to identify the top 3 trends.
+
+1. Understanding of the task:
+ I need to analyze sales data to identify key trends that would be valuable for business decision-making.
+
+2. Key steps I'll take:
+ - First, I'll examine the data structure to understand what fields are available
+ - Then I'll perform exploratory data analysis to identify patterns
+ - Next, I'll analyze sales by time periods to identify temporal trends
+ - I'll also analyze sales by product categories and customer segments
+ - Finally, I'll identify the top 3 most significant trends
+
+3. Approach to challenges:
+ - If the data has missing values, I'll decide whether to fill or filter them
+ - If the data has outliers, I'll investigate whether they're valid data points or errors
+ - If trends aren't immediately obvious, I'll apply statistical methods to uncover patterns
+
+4. Use of available tools:
+ - I'll use data analysis tools to explore and visualize the data
+ - I'll use statistical tools to identify significant patterns
+ - I'll use knowledge retrieval to access relevant information about sales analysis
+
+5. Expected outcome:
+ A concise report highlighting the top 3 sales trends with supporting evidence from the data.
+
+READY: I am ready to execute the task.
+```
+
+This reasoning plan helps the agent organize its approach to the task, consider potential challenges, and ensure it delivers the expected output.
diff --git a/docs/v1.15.1/en/concepts/skills.mdx b/docs/v1.15.1/en/concepts/skills.mdx
new file mode 100644
index 000000000..d88602b84
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/skills.mdx
@@ -0,0 +1,306 @@
+---
+title: Skills
+description: Filesystem-based skill packages that inject domain expertise and instructions into agent prompts.
+icon: bolt
+mode: "wide"
+---
+
+## Overview
+
+Skills are self-contained directories that provide agents with **domain-specific instructions, guidelines, and reference material**. Each skill is defined by a `SKILL.md` file with YAML frontmatter and a markdown body.
+
+When activated, a skill's instructions are injected directly into the agent's task prompt — giving the agent expertise without requiring any code changes.
+
+
+**Skills are NOT tools.** This is the most common point of confusion.
+
+- **Skills** inject *instructions and context* into the agent's prompt. They tell the agent *how to think* about a problem.
+- **Tools** give the agent *callable functions* to take action (search, read files, call APIs).
+
+You often need **both**: skills for expertise, tools for action. They are configured independently and complement each other.
+
+
+---
+
+## Quick Start
+
+### 1. Create a Skill Directory
+
+```
+skills/
+└── code-review/
+ ├── SKILL.md # Required — instructions
+ ├── references/ # Optional — reference docs
+ │ └── style-guide.md
+ └── scripts/ # Optional — executable scripts
+```
+
+### 2. Write Your SKILL.md
+
+```markdown
+---
+name: code-review
+description: Guidelines for conducting thorough code reviews with focus on security and performance.
+metadata:
+ author: your-team
+ version: "1.0"
+---
+
+## Code Review Guidelines
+
+When reviewing code, follow this checklist:
+
+1. **Security**: Check for injection vulnerabilities, auth bypasses, and data exposure
+2. **Performance**: Look for N+1 queries, unnecessary allocations, and blocking calls
+3. **Readability**: Ensure clear naming, appropriate comments, and consistent style
+4. **Testing**: Verify adequate test coverage for new functionality
+
+### Severity Levels
+- **Critical**: Security vulnerabilities, data loss risks → block merge
+- **Major**: Performance issues, logic errors → request changes
+- **Minor**: Style issues, naming suggestions → approve with comments
+```
+
+### 3. Attach to an Agent
+
+```python
+from crewai import Agent
+from crewai_tools import GithubSearchTool, FileReadTool
+
+reviewer = Agent(
+ role="Senior Code Reviewer",
+ goal="Review pull requests for quality and security issues",
+ backstory="Staff engineer with expertise in secure coding practices.",
+ skills=["./skills"], # Injects review guidelines
+ tools=[GithubSearchTool(), FileReadTool()], # Lets agent read code
+)
+```
+
+The agent now has both **expertise** (from the skill) and **capabilities** (from the tools).
+
+---
+
+## Skills + Tools: Working Together
+
+Here are common patterns showing how skills and tools complement each other:
+
+### Pattern 1: Skills Only (Domain Expertise, No Actions Needed)
+
+Use when the agent needs specific instructions but doesn't need to call external services:
+
+```python
+agent = Agent(
+ role="Technical Writer",
+ goal="Write clear API documentation",
+ backstory="Expert technical writer",
+ skills=["./skills/api-docs-style"], # Writing guidelines and templates
+ # No tools needed — agent writes based on provided context
+)
+```
+
+### Pattern 2: Tools Only (Actions, No Special Expertise)
+
+Use when the agent needs to take action but doesn't need domain-specific instructions:
+
+```python
+from crewai_tools import SerperDevTool, ScrapeWebsiteTool
+
+agent = Agent(
+ role="Web Researcher",
+ goal="Find information about a topic",
+ backstory="Skilled at finding information online",
+ tools=[SerperDevTool(), ScrapeWebsiteTool()], # Can search and scrape
+ # No skills needed — general research doesn't need special guidelines
+)
+```
+
+### Pattern 3: Skills + Tools (Expertise AND Actions)
+
+The most common real-world pattern. The skill provides *how* to approach the work; tools provide *what* the agent can do:
+
+```python
+from crewai_tools import SerperDevTool, FileReadTool, CodeInterpreterTool
+
+analyst = Agent(
+ role="Security Analyst",
+ goal="Audit infrastructure for vulnerabilities",
+ backstory="Expert in cloud security and compliance",
+ skills=["./skills/security-audit"], # Audit methodology and checklists
+ tools=[
+ SerperDevTool(), # Research known vulnerabilities
+ FileReadTool(), # Read config files
+ CodeInterpreterTool(), # Run analysis scripts
+ ],
+)
+```
+
+### Pattern 4: Skills + MCPs
+
+Skills work alongside MCP servers the same way they work with tools:
+
+```python
+agent = Agent(
+ role="Data Analyst",
+ goal="Analyze customer data and generate reports",
+ backstory="Expert data analyst with strong statistical background",
+ skills=["./skills/data-analysis"], # Analysis methodology
+ mcps=["https://data-warehouse.example.com/sse"], # Remote data access
+)
+```
+
+### Pattern 5: Skills + Apps
+
+Skills can guide how an agent uses platform integrations:
+
+```python
+agent = Agent(
+ role="Customer Support Agent",
+ goal="Respond to customer inquiries professionally",
+ backstory="Experienced support representative",
+ skills=["./skills/support-playbook"], # Response templates and escalation rules
+ apps=["gmail", "zendesk"], # Can send emails and update tickets
+)
+```
+
+---
+
+## Crew-Level Skills
+
+Skills can be set on a crew to apply to **all agents**:
+
+```python
+from crewai import Crew
+
+crew = Crew(
+ agents=[researcher, writer, reviewer],
+ tasks=[research_task, write_task, review_task],
+ skills=["./skills"], # All agents get these skills
+)
+```
+
+Agent-level skills take priority — if the same skill is discovered at both levels, the agent's version is used.
+
+---
+
+## SKILL.md Format
+
+```markdown
+---
+name: my-skill
+description: Short description of what this skill does and when to use it.
+license: Apache-2.0 # optional
+compatibility: crewai>=0.1.0 # optional
+metadata: # optional
+ author: your-name
+ version: "1.0"
+allowed-tools: web-search file-read # optional, experimental
+---
+
+Instructions for the agent go here. This markdown body is injected
+into the agent's prompt when the skill is activated.
+```
+
+### Frontmatter Fields
+
+| Field | Required | Description |
+| :-------------- | :------- | :----------------------------------------------------------------------- |
+| `name` | Yes | 1–64 chars. Lowercase alphanumeric and hyphens. Must match directory name. |
+| `description` | Yes | 1–1024 chars. Describes what the skill does and when to use it. |
+| `license` | No | License name or reference to a bundled license file. |
+| `compatibility` | No | Max 500 chars. Environment requirements (products, packages, network). |
+| `metadata` | No | Arbitrary string key-value mapping. |
+| `allowed-tools` | No | Space-delimited list of pre-approved tools. Experimental. |
+
+---
+
+## Directory Structure
+
+```
+my-skill/
+├── SKILL.md # Required — frontmatter + instructions
+├── scripts/ # Optional — executable scripts
+├── references/ # Optional — reference documents
+└── assets/ # Optional — static files (configs, data)
+```
+
+The directory name must match the `name` field in `SKILL.md`. The `scripts/`, `references/`, and `assets/` directories are available on the skill's `path` for agents that need to reference files directly.
+
+---
+
+## Pre-loading Skills
+
+For more control, you can discover and activate skills programmatically:
+
+```python
+from pathlib import Path
+from crewai.skills import discover_skills, activate_skill
+
+# Discover all skills in a directory
+skills = discover_skills(Path("./skills"))
+
+# Activate them (loads full SKILL.md body)
+activated = [activate_skill(s) for s in skills]
+
+# Pass to an agent
+agent = Agent(
+ role="Researcher",
+ goal="Find relevant information",
+ backstory="An expert researcher.",
+ skills=activated,
+)
+```
+
+---
+
+## How Skills Are Loaded
+
+Skills use **progressive disclosure** — only loading what's needed at each stage:
+
+| Stage | What's loaded | When |
+| :--------- | :------------------------------------ | :------------------ |
+| Discovery | Name, description, frontmatter fields | `discover_skills()` |
+| Activation | Full SKILL.md body text | `activate_skill()` |
+
+During normal agent execution (passing directory paths via `skills=["./skills"]`), skills are automatically discovered and activated. The progressive loading only matters when using the programmatic API.
+
+---
+
+## Skills vs Knowledge
+
+Both skills and knowledge modify the agent's prompt, but they serve different purposes:
+
+| Aspect | Skills | Knowledge |
+| :--- | :--- | :--- |
+| **What it provides** | Instructions, procedures, guidelines | Facts, data, information |
+| **How it's stored** | Markdown files (SKILL.md) | Embedded in vector store (ChromaDB) |
+| **How it's retrieved** | Entire body injected into prompt | Semantic search finds relevant chunks |
+| **Best for** | Methodology, checklists, style guides | Company docs, product info, reference data |
+| **Set via** | `skills=["./skills"]` | `knowledge_sources=[source]` |
+
+**Rule of thumb:** If the agent needs to follow a *process*, use a skill. If the agent needs to reference *data*, use knowledge.
+
+---
+
+## Common Questions
+
+
+
+ It depends on your use case. Skills and tools are **independent** — you can use either, both, or neither.
+
+ - **Skills alone**: When the agent needs expertise but no external actions (e.g., writing with style guidelines)
+ - **Tools alone**: When the agent needs actions but no special methodology (e.g., simple web search)
+ - **Both**: When the agent needs expertise AND actions (e.g., security audit with specific checklists AND ability to scan code)
+
+
+
+ **No.** The `allowed-tools` field in SKILL.md is experimental metadata only — it does not provision or inject any tools. You must always set tools separately via `tools=[]`, `mcps=[]`, or `apps=[]`.
+
+
+
+ The agent-level skill takes priority. Skills are deduplicated by name — the agent's skills are processed first, so if the same skill name appears at both levels, the agent's version is used.
+
+
+
+ There's a soft warning at 50,000 characters, but no hard limit. Keep skills focused and concise for best results — large prompt injections can dilute the agent's attention.
+
+
diff --git a/docs/v1.15.1/en/concepts/tasks.mdx b/docs/v1.15.1/en/concepts/tasks.mdx
new file mode 100644
index 000000000..6a11465b5
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/tasks.mdx
@@ -0,0 +1,1036 @@
+---
+title: Tasks
+description: Detailed guide on managing and creating tasks within the CrewAI framework.
+icon: list-check
+mode: "wide"
+---
+
+## Overview
+
+In the CrewAI framework, a `Task` is a specific assignment completed by an `Agent`.
+
+Tasks provide all necessary details for execution, such as a description, the agent responsible, required tools, and more, facilitating a wide range of action complexities.
+
+Tasks within CrewAI can be collaborative, requiring multiple agents to work together. This is managed through the task properties and orchestrated by the Crew's process, enhancing teamwork and efficiency.
+
+
+CrewAI AMP includes a Visual Task Builder in Crew Studio that simplifies complex task creation and chaining. Design your task flows visually and test them in real-time without writing code.
+
+
+
+The Visual Task Builder enables:
+
+- Drag-and-drop task creation
+- Visual task dependencies and flow
+- Real-time testing and validation
+- Easy sharing and collaboration
+
+
+### Task Execution Flow
+
+Tasks can be executed in two ways:
+
+- **Sequential**: Tasks are executed in the order they are defined
+- **Hierarchical**: Tasks are assigned to agents based on their roles and expertise
+
+The execution flow is defined when creating the crew:
+
+```python Code
+crew = Crew(
+ agents=[agent1, agent2],
+ tasks=[task1, task2],
+ process=Process.sequential # or Process.hierarchical
+)
+```
+
+## Task Attributes
+
+| Attribute | Parameters | Type | Description |
+| :------------------------------------- | :---------------------- | :-------------------------- | :-------------------------------------------------------------------------------------------------------------- |
+| **Description** | `description` | `str` | A clear, concise statement of what the task entails. |
+| **Expected Output** | `expected_output` | `str` | A detailed description of what the task's completion looks like. |
+| **Name** _(optional)_ | `name` | `Optional[str]` | A name identifier for the task. |
+| **Agent** _(optional)_ | `agent` | `Optional[BaseAgent]` | The agent responsible for executing the task. |
+| **Tools** _(optional)_ | `tools` | `List[BaseTool]` | The tools/resources the agent is limited to use for this task. |
+| **Context** _(optional)_ | `context` | `Optional[List["Task"]]` | Other tasks whose outputs will be used as context for this task. |
+| **Async Execution** _(optional)_ | `async_execution` | `Optional[bool]` | Whether the task should be executed asynchronously. Defaults to False. |
+| **Human Input** _(optional)_ | `human_input` | `Optional[bool]` | Whether the task should have a human review the final answer of the agent. Defaults to False. |
+| **Markdown** _(optional)_ | `markdown` | `Optional[bool]` | Whether the task should instruct the agent to return the final answer formatted in Markdown. Defaults to False. |
+| **Config** _(optional)_ | `config` | `Optional[Dict[str, Any]]` | Task-specific configuration parameters. |
+| **Output File** _(optional)_ | `output_file` | `Optional[str]` | File path for storing the task output. |
+| **Create Directory** _(optional)_ | `create_directory` | `Optional[bool]` | Whether to create the directory for output_file if it doesn't exist. Defaults to True. |
+| **Output JSON** _(optional)_ | `output_json` | `Optional[Type[BaseModel]]` | A Pydantic model to structure the JSON output. |
+| **Output Pydantic** _(optional)_ | `output_pydantic` | `Optional[Type[BaseModel]]` | A Pydantic model for task output. |
+| **Callback** _(optional)_ | `callback` | `Optional[Any]` | Function/object to be executed after task completion. |
+| **Guardrail** _(optional)_ | `guardrail` | `Optional[Callable]` | Function to validate task output before proceeding to next task. |
+| **Guardrails** _(optional)_ | `guardrails` | `Optional[List[Callable]]` | List of guardrails 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 common ways to create tasks in CrewAI: using **JSONC project configuration (recommended for new crews)** or defining them **directly in code**.
+
+### JSONC Configuration (Recommended)
+
+New projects created with `crewai create crew ` define tasks in `crew.jsonc`. The `agents` array points to files in `agents/`, and the `tasks` array defines the ordered work the crew should run.
+
+After creating your CrewAI project as outlined in the [Installation](/en/installation) section, edit the generated `crew.jsonc`.
+
+
+Use `{placeholder}` values in task `description`, `expected_output`, and `output_file`. Put defaults in the top-level `inputs` object; `crewai run` prompts for any missing values.
+
+
+Here's an example `crew.jsonc` with two ordered tasks:
+
+````jsonc crew.jsonc
+{
+ "name": "Research Crew",
+ "agents": ["researcher", "reporting_analyst"],
+ "tasks": [
+ {
+ "name": "research_task",
+ "description": "Conduct thorough research about {topic}. Include current and relevant information.",
+ "expected_output": "A list of the most relevant information about {topic}.",
+ "agent": "researcher"
+ },
+ {
+ "name": "reporting_task",
+ "description": "Review the research and expand it into a detailed report.",
+ "expected_output": "A polished markdown report without fenced code blocks.",
+ "agent": "reporting_analyst",
+ "context": ["research_task"],
+ "markdown": true,
+ "output_file": "report.md"
+ }
+ ],
+ "inputs": {
+ "topic": "AI Agents"
+ }
+}
+````
+
+Each task must include `description` and `expected_output`. The `agent` value should match an agent name listed in `agents`. `context` is a list of prior task names; forward references are rejected so sequential context stays explicit.
+
+Task entries support any public `Task` field. Common fields include `name`, `agent`, `context`, `output_file`, `tools`, `human_input`, `async_execution`, `guardrail`, `guardrails`, `guardrail_max_retries`, `markdown`, `input_files`, `output_json`, `output_pydantic`, `response_model`, and `converter_cls`. Use `"type": "ConditionalTask"` with a `condition` field for conditional tasks.
+
+### Classic YAML Configuration
+
+Classic projects created with `crewai create crew --classic` use `config/tasks.yaml` and a `@CrewBase` class in `crew.py`. This remains supported for existing YAML projects or teams that prefer decorator-based Python wiring.
+
+### Direct Code Definition (Alternative)
+
+Alternatively, you can define tasks directly in your code without using YAML configuration:
+
+```python task.py
+from crewai import Task
+
+research_task = Task(
+ description="""
+ Conduct a thorough research about AI Agents.
+ Make sure you find any interesting and relevant information given
+ the current year is 2025.
+ """,
+ expected_output="""
+ A list with 10 bullet points of the most relevant information about AI Agents
+ """,
+ agent=researcher
+)
+
+reporting_task = Task(
+ description="""
+ Review the context you got and expand each topic into a full section for a report.
+ Make sure the report is detailed and contains any and all relevant information.
+ """,
+ expected_output="""
+ A fully fledge reports with the mains topics, each with a full section of information.
+ """,
+ agent=reporting_analyst,
+ markdown=True, # Enable markdown formatting for the final output
+ output_file="report.md"
+)
+```
+
+
+ Directly specify an `agent` for assignment or let the `hierarchical` CrewAI's
+ process decide based on roles, availability, etc.
+
+
+## Task Output
+
+Understanding task outputs is crucial for building effective AI workflows. CrewAI provides a structured way to handle task results through the `TaskOutput` class, which supports multiple output formats and can be easily passed between tasks.
+
+The output of a task in CrewAI framework is encapsulated within the `TaskOutput` class. This class provides a structured way to access results of a task, including various formats such as raw output, JSON, and Pydantic models.
+
+By default, the `TaskOutput` will only include the `raw` output. A `TaskOutput` will only include the `pydantic` or `json_dict` output if the original `Task` object was configured with `output_pydantic` or `output_json`, respectively.
+
+### Task Output Attributes
+
+| Attribute | Parameters | Type | Description |
+| :---------------- | :-------------- | :------------------------- | :------------------------------------------------------------------------------------------------- |
+| **Description** | `description` | `str` | Description of the task. |
+| **Summary** | `summary` | `Optional[str]` | Summary of the task, auto-generated from the first 10 words of the description. |
+| **Raw** | `raw` | `str` | The raw output of the task. This is the default format for the output. |
+| **Pydantic** | `pydantic` | `Optional[BaseModel]` | A Pydantic model object representing the structured output of the task. |
+| **JSON Dict** | `json_dict` | `Optional[Dict[str, Any]]` | A dictionary representing the JSON output of the task. |
+| **Agent** | `agent` | `str` | The agent that executed the task. |
+| **Output Format** | `output_format` | `OutputFormat` | The format of the task output, with options including RAW, JSON, and Pydantic. The default is RAW. |
+| **Messages** | `messages` | `list[LLMMessage]` | The messages from the last task execution. |
+
+### Task Methods and Properties
+
+| Method/Property | Description |
+| :-------------- | :------------------------------------------------------------------------------------------------ |
+| **json** | Returns the JSON string representation of the task output if the output format is JSON. |
+| **to_dict** | Converts the JSON and Pydantic outputs to a dictionary. |
+| **str** | Returns the string representation of the task output, prioritizing Pydantic, then JSON, then raw. |
+
+### Accessing Task Outputs
+
+Once a task has been executed, its output can be accessed through the `output` attribute of the `Task` object. The `TaskOutput` class provides various ways to interact with and present this output.
+
+#### Example
+
+```python Code
+# Example task
+task = Task(
+ description='Find and summarize the latest AI news',
+ expected_output='A bullet list summary of the top 5 most important AI news',
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+# Execute the crew
+crew = Crew(
+ agents=[research_agent],
+ tasks=[task],
+ verbose=True
+)
+
+result = crew.kickoff()
+
+# Accessing the task output
+task_output = task.output
+
+print(f"Task Description: {task_output.description}")
+print(f"Task Summary: {task_output.summary}")
+print(f"Raw Output: {task_output.raw}")
+if task_output.json_dict:
+ print(f"JSON Output: {json.dumps(task_output.json_dict, indent=2)}")
+if task_output.pydantic:
+ print(f"Pydantic Output: {task_output.pydantic}")
+```
+
+## Markdown Output Formatting
+
+The `markdown` parameter enables automatic markdown formatting for task outputs. When set to `True`, the task will instruct the agent to format the final answer using proper Markdown syntax.
+
+### Using Markdown Formatting
+
+```python Code
+# Example task with markdown formatting enabled
+formatted_task = Task(
+ description="Create a comprehensive report on AI trends",
+ expected_output="A well-structured report with headers, sections, and bullet points",
+ agent=reporter_agent,
+ markdown=True # Enable automatic markdown formatting
+)
+```
+
+When `markdown=True`, the agent will receive additional instructions to format the output using:
+
+- `#` for headers
+- `**text**` for bold text
+- `*text*` for italic text
+- `-` or `*` for bullet points
+- `` `code` `` for inline code
+- ` `language ``` for code blocks
+
+### YAML Configuration with Markdown
+
+```yaml tasks.yaml
+analysis_task:
+ description: >
+ Analyze the market data and create a detailed report
+ expected_output: >
+ A comprehensive analysis with charts and key findings
+ agent: analyst
+ markdown: true # Enable markdown formatting
+ output_file: analysis.md
+```
+
+### Benefits of Markdown Output
+
+- **Consistent Formatting**: Ensures all outputs follow proper markdown conventions
+- **Better Readability**: Structured content with headers, lists, and emphasis
+- **Documentation Ready**: Output can be directly used in documentation systems
+- **Cross-Platform Compatibility**: Markdown is universally supported
+
+
+ The markdown formatting instructions are automatically added to the task
+ prompt when `markdown=True`, so you don't need to specify formatting
+ requirements in your task description.
+
+
+## Task Dependencies and Context
+
+Tasks can depend on the output of other tasks using the `context` attribute. For example:
+
+```python Code
+research_task = Task(
+ description="Research the latest developments in AI",
+ expected_output="A list of recent AI developments",
+ agent=researcher
+)
+
+analysis_task = Task(
+ description="Analyze the research findings and identify key trends",
+ expected_output="Analysis report of AI trends",
+ agent=analyst,
+ context=[research_task] # This task will wait for research_task to complete
+)
+```
+
+## Task Guardrails
+
+Task guardrails provide a way to validate and transform task outputs before they
+are passed to the next task. This feature helps ensure data quality and provides
+feedback to agents when their output doesn't meet specific criteria.
+
+CrewAI supports two types of guardrails:
+
+1. **Function-based guardrails**: Python functions with custom validation logic, giving you complete control over the validation process and ensuring reliable, deterministic results.
+
+2. **LLM-based guardrails**: String descriptions that use the agent's LLM to validate outputs based on natural language criteria. These are ideal for complex or subjective validation requirements.
+
+### Function-Based Guardrails
+
+To add a function-based guardrail to a task, provide a validation function through the `guardrail` parameter:
+
+```python Code
+from typing import Tuple, Union, Dict, Any
+from crewai import TaskOutput
+
+def validate_blog_content(result: TaskOutput) -> Tuple[bool, Any]:
+ """Validate blog content meets requirements."""
+ try:
+ # Check word count
+ word_count = len(result.raw.split())
+ if word_count > 200:
+ return (False, "Blog content exceeds 200 words")
+
+ # Additional validation logic here
+ return (True, result.raw.strip())
+ except Exception as e:
+ return (False, "Unexpected error during validation")
+
+blog_task = Task(
+ description="Write a blog post about AI",
+ expected_output="A blog post under 200 words",
+ agent=blog_agent,
+ guardrail=validate_blog_content # Add the guardrail function
+)
+```
+
+### LLM-Based Guardrails (String Descriptions)
+
+Instead of writing custom validation functions, you can use string descriptions that leverage LLM-based validation. When you provide a string to the `guardrail` or `guardrails` parameter, CrewAI automatically creates an `LLMGuardrail` that uses the agent's LLM to validate the output based on your description.
+
+**Requirements**:
+
+- The task must have an `agent` assigned (the guardrail uses the agent's LLM)
+- Provide a clear, descriptive string explaining the validation criteria
+
+```python Code
+from crewai import Task
+
+# Single LLM-based guardrail
+blog_task = Task(
+ description="Write a blog post about AI",
+ expected_output="A blog post under 200 words",
+ agent=blog_agent,
+ guardrail="The blog post must be under 200 words and contain no technical jargon"
+)
+```
+
+LLM-based guardrails are particularly useful for:
+
+- **Complex validation logic** that's difficult to express programmatically
+- **Subjective criteria** like tone, style, or quality assessments
+- **Natural language requirements** that are easier to describe than code
+
+The LLM guardrail will:
+
+1. Analyze the task output against your description
+2. Return `(True, output)` if the output complies with the criteria
+3. Return `(False, feedback)` with specific feedback if validation fails
+
+**Example with detailed validation criteria**:
+
+```python Code
+research_task = Task(
+ description="Research the latest developments in quantum computing",
+ expected_output="A comprehensive research report",
+ agent=researcher_agent,
+ guardrail="""
+ The research report must:
+ - Be at least 1000 words long
+ - Include at least 5 credible sources
+ - Cover both technical and practical applications
+ - Be written in a professional, academic tone
+ - Avoid speculation or unverified claims
+ """
+)
+```
+
+### Multiple Guardrails
+
+You can apply multiple guardrails to a task using the `guardrails` parameter. Multiple guardrails are executed sequentially, with each guardrail receiving the output from the previous one. This allows you to chain validation and transformation steps.
+
+The `guardrails` parameter accepts:
+
+- A list of guardrail functions or string descriptions
+- A single guardrail function or string (same as `guardrail`)
+
+**Note**: If `guardrails` is provided, it takes precedence over `guardrail`. The `guardrail` parameter will be ignored when `guardrails` is set.
+
+```python Code
+from typing import Tuple, Any
+from crewai import TaskOutput, Task
+
+def validate_word_count(result: TaskOutput) -> Tuple[bool, Any]:
+ """Validate word count is within limits."""
+ word_count = len(result.raw.split())
+ if word_count < 100:
+ return (False, f"Content too short: {word_count} words. Need at least 100 words.")
+ if word_count > 500:
+ return (False, f"Content too long: {word_count} words. Maximum is 500 words.")
+ return (True, result.raw)
+
+def validate_no_profanity(result: TaskOutput) -> Tuple[bool, Any]:
+ """Check for inappropriate language."""
+ profanity_words = ["badword1", "badword2"] # Example list
+ content_lower = result.raw.lower()
+ for word in profanity_words:
+ if word in content_lower:
+ return (False, f"Inappropriate language detected: {word}")
+ return (True, result.raw)
+
+def format_output(result: TaskOutput) -> Tuple[bool, Any]:
+ """Format and clean the output."""
+ formatted = result.raw.strip()
+ # Capitalize first letter
+ formatted = formatted[0].upper() + formatted[1:] if formatted else formatted
+ return (True, formatted)
+
+# Apply multiple guardrails sequentially
+blog_task = Task(
+ description="Write a blog post about AI",
+ expected_output="A well-formatted blog post between 100-500 words",
+ agent=blog_agent,
+ guardrails=[
+ validate_word_count, # First: validate length
+ validate_no_profanity, # Second: check content
+ format_output # Third: format the result
+ ],
+ guardrail_max_retries=3
+)
+```
+
+In this example, the guardrails execute in order:
+
+1. `validate_word_count` checks the word count
+2. `validate_no_profanity` checks for inappropriate language (using the output from step 1)
+3. `format_output` formats the final result (using the output from step 2)
+
+If any guardrail fails, the error is sent back to the agent, and the task is retried up to `guardrail_max_retries` times.
+
+**Mixing function-based and LLM-based guardrails**:
+
+You can combine both function-based and string-based guardrails in the same list:
+
+```python Code
+from typing import Tuple, Any
+from crewai import TaskOutput, Task
+
+def validate_word_count(result: TaskOutput) -> Tuple[bool, Any]:
+ """Validate word count is within limits."""
+ word_count = len(result.raw.split())
+ if word_count < 100:
+ return (False, f"Content too short: {word_count} words. Need at least 100 words.")
+ if word_count > 500:
+ return (False, f"Content too long: {word_count} words. Maximum is 500 words.")
+ return (True, result.raw)
+
+# Mix function-based and LLM-based guardrails
+blog_task = Task(
+ description="Write a blog post about AI",
+ expected_output="A well-formatted blog post between 100-500 words",
+ agent=blog_agent,
+ guardrails=[
+ validate_word_count, # Function-based: precise word count check
+ "The content must be engaging and suitable for a general audience", # LLM-based: subjective quality check
+ "The writing style should be clear, concise, and free of technical jargon" # LLM-based: style validation
+ ],
+ guardrail_max_retries=3
+)
+```
+
+This approach combines the precision of programmatic validation with the flexibility of LLM-based assessment for subjective criteria.
+
+### Guardrail Function Requirements
+
+1. **Function Signature**:
+
+ - Must accept exactly one parameter (the task output)
+ - Should return a tuple of `(bool, Any)`
+ - Type hints are recommended but optional
+
+2. **Return Values**:
+ - On success: it returns a tuple of `(bool, Any)`. For example: `(True, validated_result)`
+ - On Failure: it returns a tuple of `(bool, str)`. For example: `(False, "Error message explain the failure")`
+
+### Error Handling Best Practices
+
+1. **Structured Error Responses**:
+
+```python Code
+from crewai import TaskOutput, LLMGuardrail
+
+def validate_with_context(result: TaskOutput) -> Tuple[bool, Any]:
+ try:
+ # Main validation logic
+ validated_data = perform_validation(result)
+ return (True, validated_data)
+ except ValidationError as e:
+ return (False, f"VALIDATION_ERROR: {str(e)}")
+ except Exception as e:
+ return (False, str(e))
+```
+
+2. **Error Categories**:
+
+ - Use specific error codes
+ - Include relevant context
+ - Provide actionable feedback
+
+3. **Validation Chain**:
+
+```python Code
+from typing import Any, Dict, List, Tuple, Union
+from crewai import TaskOutput
+
+def complex_validation(result: TaskOutput) -> Tuple[bool, Any]:
+ """Chain multiple validation steps."""
+ # Step 1: Basic validation
+ if not result:
+ return (False, "Empty result")
+
+ # Step 2: Content validation
+ try:
+ validated = validate_content(result)
+ if not validated:
+ return (False, "Invalid content")
+
+ # Step 3: Format validation
+ formatted = format_output(validated)
+ return (True, formatted)
+ except Exception as e:
+ return (False, str(e))
+```
+
+### Handling Guardrail Results
+
+When a guardrail returns `(False, error)`:
+
+1. The error is sent back to the agent
+2. The agent attempts to fix the issue
+3. The process repeats until:
+ - The guardrail returns `(True, result)`
+ - Maximum retries are reached (`guardrail_max_retries`)
+
+Example with retry handling:
+
+```python Code
+from typing import Optional, Tuple, Union
+from crewai import TaskOutput, Task
+
+def validate_json_output(result: TaskOutput) -> Tuple[bool, Any]:
+ """Validate and parse JSON output."""
+ try:
+ # Try to parse as JSON
+ data = json.loads(result)
+ return (True, data)
+ except json.JSONDecodeError as e:
+ return (False, "Invalid JSON format")
+
+task = Task(
+ description="Generate a JSON report",
+ expected_output="A valid JSON object",
+ agent=analyst,
+ guardrail=validate_json_output,
+ guardrail_max_retries=3 # Limit retry attempts
+)
+```
+
+## Getting Structured Consistent Outputs from Tasks
+
+
+ It's also important to note that the output of the final task of a crew
+ becomes the final output of the actual crew itself.
+
+
+### Using `output_pydantic`
+
+The `output_pydantic` property allows you to define a Pydantic model that the task output should conform to. This ensures that the output is not only structured but also validated according to the Pydantic model.
+
+Here's an example demonstrating how to use output_pydantic:
+
+```python Code
+import json
+
+from crewai import Agent, Crew, Process, Task
+from pydantic import BaseModel
+
+
+class Blog(BaseModel):
+ title: str
+ content: str
+
+
+blog_agent = Agent(
+ role="Blog Content Generator Agent",
+ goal="Generate a blog title and content",
+ backstory="""You are an expert content creator, skilled in crafting engaging and informative blog posts.""",
+ verbose=False,
+ allow_delegation=False,
+ llm="gpt-4o",
+)
+
+task1 = Task(
+ description="""Create a blog title and content on a given topic. Make sure the content is under 200 words.""",
+ expected_output="A compelling blog title and well-written content.",
+ agent=blog_agent,
+ output_pydantic=Blog,
+)
+
+# Instantiate your crew with a sequential process
+crew = Crew(
+ agents=[blog_agent],
+ tasks=[task1],
+ verbose=True,
+ process=Process.sequential,
+)
+
+result = crew.kickoff()
+
+# Option 1: Accessing Properties Using Dictionary-Style Indexing
+print("Accessing Properties - Option 1")
+title = result["title"]
+content = result["content"]
+print("Title:", title)
+print("Content:", content)
+
+# Option 2: Accessing Properties Directly from the Pydantic Model
+print("Accessing Properties - Option 2")
+title = result.pydantic.title
+content = result.pydantic.content
+print("Title:", title)
+print("Content:", content)
+
+# Option 3: Accessing Properties Using the to_dict() Method
+print("Accessing Properties - Option 3")
+output_dict = result.to_dict()
+title = output_dict["title"]
+content = output_dict["content"]
+print("Title:", title)
+print("Content:", content)
+
+# Option 4: Printing the Entire Blog Object
+print("Accessing Properties - Option 5")
+print("Blog:", result)
+
+```
+
+In this example:
+
+- A Pydantic model Blog is defined with title and content fields.
+- The task task1 uses the output_pydantic property to specify that its output should conform to the Blog model.
+- After executing the crew, you can access the structured output in multiple ways as shown.
+
+#### Explanation of Accessing the Output
+
+1. Dictionary-Style Indexing: You can directly access the fields using result["field_name"]. This works because the CrewOutput class implements the **getitem** method.
+2. Directly from Pydantic Model: Access the attributes directly from the result.pydantic object.
+3. Using to_dict() Method: Convert the output to a dictionary and access the fields.
+4. Printing the Entire Object: Simply print the result object to see the structured output.
+
+### Using `output_json`
+
+The `output_json` property allows you to define the expected output in JSON format. This ensures that the task's output is a valid JSON structure that can be easily parsed and used in your application.
+
+Here's an example demonstrating how to use `output_json`:
+
+```python Code
+import json
+
+from crewai import Agent, Crew, Process, Task
+from pydantic import BaseModel
+
+
+# Define the Pydantic model for the blog
+class Blog(BaseModel):
+ title: str
+ content: str
+
+
+# Define the agent
+blog_agent = Agent(
+ role="Blog Content Generator Agent",
+ goal="Generate a blog title and content",
+ backstory="""You are an expert content creator, skilled in crafting engaging and informative blog posts.""",
+ verbose=False,
+ allow_delegation=False,
+ llm="gpt-4o",
+)
+
+# Define the task with output_json set to the Blog model
+task1 = Task(
+ description="""Create a blog title and content on a given topic. Make sure the content is under 200 words.""",
+ expected_output="A JSON object with 'title' and 'content' fields.",
+ agent=blog_agent,
+ output_json=Blog,
+)
+
+# Instantiate the crew with a sequential process
+crew = Crew(
+ agents=[blog_agent],
+ tasks=[task1],
+ verbose=True,
+ process=Process.sequential,
+)
+
+# Kickoff the crew to execute the task
+result = crew.kickoff()
+
+# Option 1: Accessing Properties Using Dictionary-Style Indexing
+print("Accessing Properties - Option 1")
+title = result["title"]
+content = result["content"]
+print("Title:", title)
+print("Content:", content)
+
+# Option 2: Printing the Entire Blog Object
+print("Accessing Properties - Option 2")
+print("Blog:", result)
+```
+
+In this example:
+
+- A Pydantic model Blog is defined with title and content fields, which is used to specify the structure of the JSON output.
+- The task task1 uses the output_json property to indicate that it expects a JSON output conforming to the Blog model.
+- After executing the crew, you can access the structured JSON output in two ways as shown.
+
+#### Explanation of Accessing the Output
+
+1. Accessing Properties Using Dictionary-Style Indexing: You can access the fields directly using result["field_name"]. This is possible because the CrewOutput class implements the **getitem** method, allowing you to treat the output like a dictionary. In this option, we're retrieving the title and content from the result.
+2. Printing the Entire Blog Object: By printing result, you get the string representation of the CrewOutput object. Since the **str** method is implemented to return the JSON output, this will display the entire output as a formatted string representing the Blog object.
+
+---
+
+By using output_pydantic or output_json, you ensure that your tasks produce outputs in a consistent and structured format, making it easier to process and utilize the data within your application or across multiple tasks.
+
+## Integrating Tools with Tasks
+
+Leverage tools from the [CrewAI Toolkit](https://github.com/joaomdmoura/crewai-tools) and [LangChain Tools](https://python.langchain.com/docs/integrations/tools) for enhanced task performance and agent interaction.
+
+## Creating a Task with Tools
+
+```python Code
+import os
+os.environ["OPENAI_API_KEY"] = "Your Key"
+os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
+
+from crewai import Agent, Task, Crew
+from crewai_tools import SerperDevTool
+
+research_agent = Agent(
+ role='Researcher',
+ goal='Find and summarize the latest AI news',
+ backstory="""You're a researcher at a large company.
+ You're responsible for analyzing data and providing insights
+ to the business.""",
+ verbose=True
+)
+
+# to perform a semantic search for a specified query from a text's content across the internet
+search_tool = SerperDevTool()
+
+task = Task(
+ description='Find and summarize the latest AI news',
+ expected_output='A bullet list summary of the top 5 most important AI news',
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+crew = Crew(
+ agents=[research_agent],
+ tasks=[task],
+ verbose=True
+)
+
+result = crew.kickoff()
+print(result)
+```
+
+This demonstrates how tasks with specific tools can override an agent's default set for tailored task execution.
+
+## Referring to Other Tasks
+
+In CrewAI, the output of one task is automatically relayed into the next one, but you can specifically define what tasks' output, including multiple, should be used as context for another task.
+
+This is useful when you have a task that depends on the output of another task that is not performed immediately after it. This is done through the `context` attribute of the task:
+
+```python Code
+# ...
+
+research_ai_task = Task(
+ description="Research the latest developments in AI",
+ expected_output="A list of recent AI developments",
+ async_execution=True,
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+research_ops_task = Task(
+ description="Research the latest developments in AI Ops",
+ expected_output="A list of recent AI Ops developments",
+ async_execution=True,
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+write_blog_task = Task(
+ description="Write a full blog post about the importance of AI and its latest news",
+ expected_output="Full blog post that is 4 paragraphs long",
+ agent=writer_agent,
+ context=[research_ai_task, research_ops_task]
+)
+
+#...
+```
+
+## Asynchronous Execution
+
+You can define a task to be executed asynchronously. This means that the crew will not wait for it to be completed to continue with the next task. This is useful for tasks that take a long time to be completed, or that are not crucial for the next tasks to be performed.
+
+You can then use the `context` attribute to define in a future task that it should wait for the output of the asynchronous task to be completed.
+
+```python Code
+#...
+
+list_ideas = Task(
+ description="List of 5 interesting ideas to explore for an article about AI.",
+ expected_output="Bullet point list of 5 ideas for an article.",
+ agent=researcher,
+ async_execution=True # Will be executed asynchronously
+)
+
+list_important_history = Task(
+ description="Research the history of AI and give me the 5 most important events.",
+ expected_output="Bullet point list of 5 important events.",
+ agent=researcher,
+ async_execution=True # Will be executed asynchronously
+)
+
+write_article = Task(
+ description="Write an article about AI, its history, and interesting ideas.",
+ expected_output="A 4 paragraph article about AI.",
+ agent=writer,
+ context=[list_ideas, list_important_history] # Will wait for the output of the two tasks to be completed
+)
+
+#...
+```
+
+## Callback Mechanism
+
+The callback function is executed after the task is completed, allowing for actions or notifications to be triggered based on the task's outcome.
+
+```python Code
+# ...
+
+def callback_function(output: TaskOutput):
+ # Do something after the task is completed
+ # Example: Send an email to the manager
+ print(f"""
+ Task completed!
+ Task: {output.description}
+ Output: {output.raw}
+ """)
+
+research_task = Task(
+ description='Find and summarize the latest AI news',
+ expected_output='A bullet list summary of the top 5 most important AI news',
+ agent=research_agent,
+ tools=[search_tool],
+ callback=callback_function
+)
+
+#...
+```
+
+## Accessing a Specific Task Output
+
+Once a crew finishes running, you can access the output of a specific task by using the `output` attribute of the task object:
+
+```python Code
+# ...
+task1 = Task(
+ description='Find and summarize the latest AI news',
+ expected_output='A bullet list summary of the top 5 most important AI news',
+ agent=research_agent,
+ tools=[search_tool]
+)
+
+#...
+
+crew = Crew(
+ agents=[research_agent],
+ tasks=[task1, task2, task3],
+ verbose=True
+)
+
+result = crew.kickoff()
+
+# Returns a TaskOutput object with the description and results of the task
+print(f"""
+ Task completed!
+ Task: {task1.output.description}
+ Output: {task1.output.raw}
+""")
+```
+
+## Tool Override Mechanism
+
+Specifying tools in a task allows for dynamic adaptation of agent capabilities, emphasizing CrewAI's flexibility.
+
+## Error Handling and Validation Mechanisms
+
+While creating and executing tasks, certain validation mechanisms are in place to ensure the robustness and reliability of task attributes. These include but are not limited to:
+
+- Ensuring only one output type is set per task to maintain clear output expectations.
+- Preventing the manual assignment of the `id` attribute to uphold the integrity of the unique identifier system.
+
+These validations help in maintaining the consistency and reliability of task executions within the crewAI framework.
+
+## Creating Directories when Saving Files
+
+The `create_directory` parameter controls whether CrewAI should automatically create directories when saving task outputs to files. This feature is particularly useful for organizing outputs and ensuring that file paths are correctly structured, especially when working with complex project hierarchies.
+
+### Default Behavior
+
+By default, `create_directory=True`, which means CrewAI will automatically create any missing directories in the output file path:
+
+```python Code
+# Default behavior - directories are created automatically
+report_task = Task(
+ description='Generate a comprehensive market analysis report',
+ expected_output='A detailed market analysis with charts and insights',
+ agent=analyst_agent,
+ output_file='reports/2025/market_analysis.md', # Creates 'reports/2025/' if it doesn't exist
+ markdown=True
+)
+```
+
+### Disabling Directory Creation
+
+If you want to prevent automatic directory creation and ensure that the directory already exists, set `create_directory=False`:
+
+```python Code
+# Strict mode - directory must already exist
+strict_output_task = Task(
+ description='Save critical data that requires existing infrastructure',
+ expected_output='Data saved to pre-configured location',
+ agent=data_agent,
+ output_file='secure/vault/critical_data.json',
+ create_directory=False # Will raise RuntimeError if 'secure/vault/' doesn't exist
+)
+```
+
+### YAML Configuration
+
+You can also configure this behavior in your YAML task definitions:
+
+```yaml tasks.yaml
+analysis_task:
+ description: >
+ Generate quarterly financial analysis
+ expected_output: >
+ A comprehensive financial report with quarterly insights
+ agent: financial_analyst
+ output_file: reports/quarterly/q4_2024_analysis.pdf
+ create_directory: true # Automatically create 'reports/quarterly/' directory
+
+audit_task:
+ description: >
+ Perform compliance audit and save to existing audit directory
+ expected_output: >
+ A compliance audit report
+ agent: auditor
+ output_file: audit/compliance_report.md
+ create_directory: false # Directory must already exist
+```
+
+### Use Cases
+
+**Automatic Directory Creation (`create_directory=True`):**
+
+- Development and prototyping environments
+- Dynamic report generation with date-based folders
+- Automated workflows where directory structure may vary
+- Multi-tenant applications with user-specific folders
+
+**Manual Directory Management (`create_directory=False`):**
+
+- Production environments with strict file system controls
+- Security-sensitive applications where directories must be pre-configured
+- Systems with specific permission requirements
+- Compliance environments where directory creation is audited
+
+### Error Handling
+
+When `create_directory=False` and the directory doesn't exist, CrewAI will raise a `RuntimeError`:
+
+```python Code
+try:
+ result = crew.kickoff()
+except RuntimeError as e:
+ # Handle missing directory error
+ print(f"Directory creation failed: {e}")
+ # Create directory manually or use fallback location
+```
+
+Check out the video below to see how to use structured outputs in CrewAI:
+
+
+
+## Conclusion
+
+Tasks are the driving force behind the actions of agents in CrewAI.
+By properly defining tasks and their outcomes, you set the stage for your AI agents to work effectively, either independently or as a collaborative unit.
+Equipping tasks with appropriate tools, understanding the execution process, and following robust validation practices are crucial for maximizing CrewAI's potential,
+ensuring agents are effectively prepared for their assignments and that tasks are executed as intended.
diff --git a/docs/v1.15.1/en/concepts/testing.mdx b/docs/v1.15.1/en/concepts/testing.mdx
new file mode 100644
index 000000000..dbac110b4
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/testing.mdx
@@ -0,0 +1,49 @@
+---
+title: Testing
+description: Learn how to test your CrewAI Crew and evaluate their performance.
+icon: vial
+mode: "wide"
+---
+
+## Overview
+
+Testing is a crucial part of the development process, and it is essential to ensure that your crew is performing as expected. With crewAI, you can easily test your crew and evaluate its performance using the built-in testing capabilities.
+
+### Using the Testing Feature
+
+We added the CLI command `crewai test` to make it easy to test your crew. This command will run your crew for a specified number of iterations and provide detailed performance metrics. The parameters are `n_iterations` and `model`, which are optional and default to 2 and `gpt-4o-mini` respectively. For now, the only provider available is OpenAI.
+
+```bash
+crewai test
+```
+
+If you want to run more iterations or use a different model, you can specify the parameters like this:
+
+```bash
+crewai test --n_iterations 5 --model gpt-4o
+```
+
+or using the short forms:
+
+```bash
+crewai test -n 5 -m gpt-4o
+```
+
+When you run the `crewai test` command, the crew will be executed for the specified number of iterations, and the performance metrics will be displayed at the end of the run.
+
+A table of scores at the end will show the performance of the crew in terms of the following metrics:
+
+
**Tasks Scores (1-10 Higher is better)**
+
+| Tasks/Crew/Agents | Run 1 | Run 2 | Avg. Total | Agents | Additional Info |
+|:------------------|:-----:|:-----:|:----------:|:------------------------------:|:---------------------------------|
+| Task 1 | 9.0 | 9.5 | **9.2** | Professional Insights | |
+| | | | | Researcher | |
+| Task 2 | 9.0 | 10.0 | **9.5** | Company Profile Investigator | |
+| Task 3 | 9.0 | 9.0 | **9.0** | Automation Insights | |
+| | | | | Specialist | |
+| Task 4 | 9.0 | 9.0 | **9.0** | Final Report Compiler | Automation Insights Specialist |
+| Crew | 9.00 | 9.38 | **9.2** | | |
+| Execution Time (s) | 126 | 145 | **135** | | |
+
+The example above shows the test results for two runs of the crew with two tasks, with the average total score for each task and the crew as a whole.
diff --git a/docs/v1.15.1/en/concepts/tools.mdx b/docs/v1.15.1/en/concepts/tools.mdx
new file mode 100644
index 000000000..da41da3b1
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/tools.mdx
@@ -0,0 +1,341 @@
+---
+title: Tools
+description: Understanding and leveraging tools within the CrewAI framework for agent collaboration and task execution.
+icon: screwdriver-wrench
+mode: "wide"
+---
+
+## Overview
+
+CrewAI tools empower agents with capabilities ranging from web searching and data analysis to collaboration and delegating tasks among coworkers.
+This documentation outlines how to create, integrate, and leverage these tools within the CrewAI framework, including a new focus on collaboration tools.
+
+
+ Tools give agents **callable functions** to take action. They work alongside [MCPs](/en/mcp/overview) (remote tool servers), [Apps](/en/concepts/agent-capabilities) (platform integrations), [Skills](/en/concepts/skills) (domain expertise), and [Knowledge](/en/concepts/knowledge) (retrieved facts). See the [Agent Capabilities](/en/concepts/agent-capabilities) overview to understand when to use each.
+
+
+## What is a Tool?
+
+A tool in CrewAI is a skill or function that agents can utilize to perform various actions.
+This includes tools from the [CrewAI Toolkit](https://github.com/joaomdmoura/crewai-tools) and [LangChain Tools](https://python.langchain.com/docs/integrations/tools),
+enabling everything from simple searches to complex interactions and effective teamwork among agents.
+
+
+CrewAI AMP provides a comprehensive Tools Repository with pre-built integrations for common business systems and APIs. Deploy agents with enterprise tools in minutes instead of days.
+
+The Enterprise Tools Repository includes:
+
+- Pre-built connectors for popular enterprise systems
+- Custom tool creation interface
+- Version control and sharing capabilities
+- Security and compliance features
+
+
+## Key Characteristics of Tools
+
+- **Utility**: Crafted for tasks such as web searching, data analysis, content generation, and agent collaboration.
+- **Integration**: Boosts agent capabilities by seamlessly integrating tools into their workflow.
+- **Customizability**: Provides the flexibility to develop custom tools or utilize existing ones, catering to the specific needs of agents.
+- **Error Handling**: Incorporates robust error handling mechanisms to ensure smooth operation.
+- **Caching Mechanism**: Features intelligent caching to optimize performance and reduce redundant operations.
+- **Asynchronous Support**: Handles both synchronous and asynchronous tools, enabling non-blocking operations.
+- **Typed Outputs**: Uses optional Pydantic models to give agents clear JSON fields while direct Python calls still receive the tool's normal return value.
+
+## Using CrewAI Tools
+
+To enhance your agents' capabilities with crewAI tools, begin by installing our extra tools package:
+
+```bash
+pip install 'crewai[tools]'
+```
+
+Here's an example demonstrating their use:
+
+```python Code
+import os
+from crewai import Agent, Task, Crew
+# Importing crewAI tools
+from crewai_tools import (
+ DirectoryReadTool,
+ FileReadTool,
+ SerperDevTool,
+ WebsiteSearchTool
+)
+
+# Set up API keys
+os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
+os.environ["OPENAI_API_KEY"] = "Your Key"
+
+# Instantiate tools
+docs_tool = DirectoryReadTool(directory='./blog-posts')
+file_tool = FileReadTool()
+search_tool = SerperDevTool()
+web_rag_tool = WebsiteSearchTool()
+
+# Create agents
+researcher = Agent(
+ role='Market Research Analyst',
+ goal='Provide up-to-date market analysis of the AI industry',
+ backstory='An expert analyst with a keen eye for market trends.',
+ tools=[search_tool, web_rag_tool],
+ verbose=True
+)
+
+writer = Agent(
+ role='Content Writer',
+ goal='Craft engaging blog posts about the AI industry',
+ backstory='A skilled writer with a passion for technology.',
+ tools=[docs_tool, file_tool],
+ verbose=True
+)
+
+# Define tasks
+research = Task(
+ description='Research the latest trends in the AI industry and provide a summary.',
+ expected_output='A summary of the top 3 trending developments in the AI industry with a unique perspective on their significance.',
+ agent=researcher
+)
+
+write = Task(
+ description='Write an engaging blog post about the AI industry, based on the research analyst's summary. Draw inspiration from the latest blog posts in the directory.',
+ expected_output='A 4-paragraph blog post formatted in markdown with engaging, informative, and accessible content, avoiding complex jargon.',
+ agent=writer,
+ output_file='blog-posts/new_post.md' # The final blog post will be saved here
+)
+
+# Assemble a crew with planning enabled
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research, write],
+ verbose=True,
+ planning=True, # Enable planning feature
+)
+
+# Execute tasks
+crew.kickoff()
+```
+
+## Available CrewAI Tools
+
+- **Error Handling**: All tools are built with error handling capabilities, allowing agents to gracefully manage exceptions and continue their tasks.
+- **Caching Mechanism**: All tools support caching, enabling agents to efficiently reuse previously obtained results, reducing the load on external resources and speeding up the execution time. You can also define finer control over the caching mechanism using the `cache_function` attribute on the tool.
+
+Here is a list of the available tools and their descriptions:
+
+| Tool | Description |
+| :------------------------------- | :--------------------------------------------------------------------------------------------- |
+| **ApifyActorsTool** | A tool that integrates Apify Actors with your workflows for web scraping and automation tasks. |
+| **BrowserbaseLoadTool** | A tool for interacting with and extracting data from web browsers. |
+| **CodeDocsSearchTool** | A RAG tool optimized for searching through code documentation and related technical documents. |
+| **CodeInterpreterTool** | A tool for interpreting python code. |
+| **ComposioTool** | Enables use of Composio tools. |
+| **CSVSearchTool** | A RAG tool designed for searching within CSV files, tailored to handle structured data. |
+| **DALL-E Tool** | A tool for generating images using the DALL-E API. |
+| **DirectorySearchTool** | A RAG tool for searching within directories, useful for navigating through file systems. |
+| **DOCXSearchTool** | A RAG tool aimed at searching within DOCX documents, ideal for processing Word files. |
+| **DirectoryReadTool** | Facilitates reading and processing of directory structures and their contents. |
+| **ExaSearchTool** | Search the web with Exa, the fastest and most accurate web search API. Supports token-efficient highlights and full page content. |
+| **FileReadTool** | Enables reading and extracting data from files, supporting various file formats. |
+| **FirecrawlSearchTool** | A tool to search webpages using Firecrawl and return the results. |
+| **FirecrawlCrawlWebsiteTool** | A tool for crawling webpages using Firecrawl. |
+| **FirecrawlScrapeWebsiteTool** | A tool for scraping webpages URL using Firecrawl and returning its contents. |
+| **GithubSearchTool** | A RAG tool for searching within GitHub repositories, useful for code and documentation search. |
+| **SerperDevTool** | A specialized tool for development purposes, with specific functionalities under development. |
+| **TXTSearchTool** | A RAG tool focused on searching within text (.txt) files, suitable for unstructured data. |
+| **JSONSearchTool** | A RAG tool designed for searching within JSON files, catering to structured data handling. |
+| **LlamaIndexTool** | Enables the use of LlamaIndex tools. |
+| **MDXSearchTool** | A RAG tool tailored for searching within Markdown (MDX) files, useful for documentation. |
+| **PDFSearchTool** | A RAG tool aimed at searching within PDF documents, ideal for processing scanned documents. |
+| **PGSearchTool** | A RAG tool optimized for searching within PostgreSQL databases, suitable for database queries. |
+| **Vision Tool** | A tool for generating images using the DALL-E API. |
+| **RagTool** | A general-purpose RAG tool capable of handling various data sources and types. |
+| **ScrapeElementFromWebsiteTool** | Enables scraping specific elements from websites, useful for targeted data extraction. |
+| **ScrapeWebsiteTool** | Facilitates scraping entire websites, ideal for comprehensive data collection. |
+| **WebsiteSearchTool** | A RAG tool for searching website content, optimized for web data extraction. |
+| **XMLSearchTool** | A RAG tool designed for searching within XML files, suitable for structured data formats. |
+| **YoutubeChannelSearchTool** | A RAG tool for searching within YouTube channels, useful for video content analysis. |
+| **YoutubeVideoSearchTool** | A RAG tool aimed at searching within YouTube videos, ideal for video data extraction. |
+
+## Creating your own Tools
+
+
+ Developers can craft `custom tools` tailored for their agent's needs or
+ utilize pre-built options.
+
+
+There are two main ways for one to create a CrewAI tool:
+
+### Subclassing `BaseTool`
+
+```python Code
+from crewai.tools import BaseTool
+from pydantic import BaseModel, Field
+
+class MyToolInput(BaseModel):
+ """Input schema for MyCustomTool."""
+ argument: str = Field(..., description="Description of the argument.")
+
+class MyCustomTool(BaseTool):
+ name: str = "Name of my tool"
+ description: str = "What this tool does. It's vital for effective utilization."
+ args_schema: Type[BaseModel] = MyToolInput
+
+ def _run(self, argument: str) -> str:
+ # Your tool's logic here
+ return "Tool's result"
+```
+
+### Typed Tool Outputs
+
+When a tool returns structured data, define a Pydantic output model. This gives the agent field names it can trust, such as `sku`, `quantity`, or `needs_reorder`.
+
+Direct Python calls still receive the value your tool returns. When an agent uses the tool, CrewAI sends the agent a JSON string based on the output model.
+
+```python Code
+from crewai.tools import BaseTool
+from pydantic import BaseModel
+
+class InventoryResult(BaseModel):
+ sku: str
+ quantity: int
+ needs_reorder: bool
+
+class InventoryTool(BaseTool):
+ name: str = "Inventory Check"
+ description: str = "Checks current stock for a product SKU."
+
+ def _run(self, sku: str) -> InventoryResult:
+ quantity = {"SKU-123": 14, "SKU-456": 0}.get(sku, 0)
+ return InventoryResult(sku=sku, quantity=quantity, needs_reorder=quantity < 5)
+
+tool = InventoryTool()
+
+# Direct calls receive the raw Pydantic object.
+result = tool.run(sku="SKU-123")
+print(result.quantity)
+```
+
+To send Markdown or another short text format to the agent, override `format_output_for_agent`. Direct calls to `tool.run(...)` still return the normal Python value.
+
+```python Code
+class InventoryTool(BaseTool):
+ name: str = "Inventory Check"
+ description: str = "Checks current stock for a product SKU."
+
+ def _run(self, sku: str) -> InventoryResult:
+ quantity = {"SKU-123": 14, "SKU-456": 0}.get(sku, 0)
+ return InventoryResult(sku=sku, quantity=quantity, needs_reorder=quantity < 5)
+
+ def format_output_for_agent(self, raw_result: object) -> str:
+ result = InventoryResult.model_validate(raw_result)
+ status = "reorder needed" if result.needs_reorder else "stock is healthy"
+ return f"{result.sku}: {result.quantity} units. {status}."
+```
+
+If you do not override `format_output_for_agent`, typed outputs are sent to the agent as JSON. Plain string results work as before.
+
+## Asynchronous Tool Support
+
+CrewAI supports asynchronous tools, allowing you to implement tools that perform non-blocking operations like network requests, file I/O, or other async operations without blocking the main execution thread.
+
+### Creating Async Tools
+
+You can create async tools in two ways:
+
+#### 1. Using the `tool` Decorator with Async Functions
+
+```python Code
+from crewai.tools import tool
+
+@tool("fetch_data_async")
+async def fetch_data_async(query: str) -> str:
+ """Asynchronously fetch data based on the query."""
+ # Simulate async operation
+ await asyncio.sleep(1)
+ return f"Data retrieved for {query}"
+```
+
+#### 2. Implementing Async Methods in Custom Tool Classes
+
+```python Code
+from crewai.tools import BaseTool
+
+class AsyncCustomTool(BaseTool):
+ name: str = "async_custom_tool"
+ description: str = "An asynchronous custom tool"
+
+ async def _run(self, query: str = "") -> str:
+ """Asynchronously run the tool"""
+ # Your async implementation here
+ await asyncio.sleep(1)
+ return f"Processed {query} asynchronously"
+```
+
+### Using Async Tools
+
+Async tools work seamlessly in both standard Crew workflows and Flow-based workflows:
+
+```python Code
+# In standard Crew
+agent = Agent(role="researcher", tools=[async_custom_tool])
+
+# In Flow
+class MyFlow(Flow):
+ @start()
+ async def begin(self):
+ crew = Crew(agents=[agent])
+ result = await crew.kickoff_async()
+ return result
+```
+
+The CrewAI framework automatically handles the execution of both synchronous and asynchronous tools, so you don't need to worry about how to call them differently.
+
+### Utilizing the `tool` Decorator
+
+```python Code
+from crewai.tools import tool
+@tool("Name of my tool")
+def my_tool(question: str) -> str:
+ """Clear description for what this tool is useful for, your agent will need this information to use it."""
+ # Function logic here
+ return "Result from your custom tool"
+```
+
+### Custom Caching Mechanism
+
+
+ Tools can optionally implement a `cache_function` to fine-tune caching
+ behavior. This function determines when to cache results based on specific
+ conditions, offering granular control over caching logic.
+
+
+```python Code
+from crewai.tools import tool
+
+@tool
+def multiplication_tool(first_number: int, second_number: int) -> str:
+ """Useful for when you need to multiply two numbers together."""
+ return first_number * second_number
+
+def cache_func(args, result):
+ # In this case, we only cache the result if it's a multiple of 2
+ cache = result % 2 == 0
+ return cache
+
+multiplication_tool.cache_function = cache_func
+
+writer1 = Agent(
+ role="Writer",
+ goal="You write lessons of math for kids.",
+ backstory="You're an expert in writing and you love to teach kids but you know nothing of math.",
+ tools=[multiplication_tool],
+ allow_delegation=False,
+ )
+ #...
+```
+
+## Conclusion
+
+Tools are pivotal in extending the capabilities of CrewAI agents, enabling them to undertake a broad spectrum of tasks and collaborate effectively.
+When building solutions with CrewAI, leverage both custom and existing tools to empower your agents and enhance the AI ecosystem. Consider utilizing error handling,
+caching mechanisms, and the flexibility of tool arguments to optimize your agents' performance and capabilities.
diff --git a/docs/v1.15.1/en/concepts/training.mdx b/docs/v1.15.1/en/concepts/training.mdx
new file mode 100644
index 000000000..468e1acef
--- /dev/null
+++ b/docs/v1.15.1/en/concepts/training.mdx
@@ -0,0 +1,197 @@
+---
+title: Training
+description: Learn how to train your CrewAI agents by giving them feedback early on and get consistent results.
+icon: dumbbell
+mode: "wide"
+---
+
+## Overview
+
+The training feature in CrewAI allows you to train your AI agents using the command-line interface (CLI).
+By running the command `crewai train -n `, you can specify the number of iterations for the training process.
+
+During training, CrewAI utilizes techniques to optimize the performance of your agents along with human feedback.
+This helps the agents improve their understanding, decision-making, and problem-solving abilities.
+
+### Training Your Crew Using the CLI
+
+To use the training feature, follow these steps:
+
+1. Open your terminal or command prompt.
+2. Navigate to the directory where your CrewAI project is located.
+3. Run the following command:
+
+```shell
+crewai train -n -f
+```
+
+ Replace `` with the desired number of training iterations and `` with the appropriate filename ending with `.pkl`.
+
+
+
+ If you omit `-f`, the output defaults to `trained_agents_data.pkl` in the current working directory. You can pass an absolute path to control where the file is written.
+
+
+### Training your Crew programmatically
+
+To train your crew programmatically, use the following steps:
+
+1. Define the number of iterations for training.
+2. Specify the input parameters for the training process.
+3. Execute the training command within a try-except block to handle potential errors.
+
+```python Code
+n_iterations = 2
+inputs = {"topic": "CrewAI Training"}
+filename = "your_model.pkl"
+
+try:
+ YourCrewName_Crew().crew().train(
+ n_iterations=n_iterations,
+ inputs=inputs,
+ filename=filename
+ )
+
+except Exception as e:
+ raise Exception(f"An error occurred while training the crew: {e}")
+```
+
+## How trained data is used by agents
+
+CrewAI uses the training artifacts in two ways: during training to incorporate your human feedback, and after training to guide agents with consolidated suggestions.
+
+### Training data flow
+
+```mermaid
+flowchart TD
+ A["Start training CLI: crewai train -n -f or Python: crew.train(...)"] --> B["Setup training mode - task.human_input = true - disable delegation - init training_data.pkl + trained file"]
+
+ subgraph "Iterations"
+ direction LR
+ C["Iteration i initial_output"] --> D["User human_feedback"]
+ D --> E["improved_output"]
+ E --> F["Append to training_data.pkl by agent_id and iteration"]
+ end
+
+ B --> C
+ F --> G{"More iterations?"}
+ G -- "Yes" --> C
+ G -- "No" --> H["Evaluate per agent aggregate iterations"]
+
+ H --> I["Consolidate suggestions[] + quality + final_summary"]
+ I --> J["Save by agent role to trained file (default: trained_agents_data.pkl)"]
+
+ J --> K["Normal (non-training) runs"]
+ K --> L["Auto-load suggestions from trained_agents_data.pkl"]
+ L --> M["Append to prompt for consistent improvements"]
+```
+
+### During training runs
+
+- On each iteration, the system records for every agent:
+ - `initial_output`: the agent’s first answer
+ - `human_feedback`: your inline feedback when prompted
+ - `improved_output`: the agent’s follow-up answer after feedback
+- This data is stored in a working file named `training_data.pkl` keyed by the agent’s internal ID and iteration.
+- While training is active, the agent automatically appends your prior human feedback to its prompt to enforce those instructions on subsequent attempts within the training session.
+ Training is interactive: tasks set `human_input = true`, so running in a non-interactive environment will block on user input.
+
+### After training completes
+
+- When `train(...)` finishes, CrewAI evaluates the collected training data per agent and produces a consolidated result containing:
+ - `suggestions`: clear, actionable instructions distilled from your feedback and the difference between initial/improved outputs
+ - `quality`: a 0–10 score capturing improvement
+ - `final_summary`: a step-by-step set of action items for future tasks
+- These consolidated results are saved to the filename you pass to `train(...)` (default via CLI is `trained_agents_data.pkl`). Entries are keyed by the agent’s `role` so they can be applied across sessions.
+- During normal (non-training) execution, each agent automatically loads its consolidated `suggestions` and appends them to the task prompt as mandatory instructions. This gives you consistent improvements without changing your agent definitions.
+
+### File summary
+
+- `training_data.pkl` (ephemeral, per-session):
+ - Structure: `agent_id -> { iteration_number: { initial_output, human_feedback, improved_output } }`
+ - Purpose: capture raw data and human feedback during training
+ - Location: saved in the current working directory (CWD)
+- `trained_agents_data.pkl` (or your custom filename):
+ - Structure: `agent_role -> { suggestions: string[], quality: number, final_summary: string }`
+ - Purpose: persist consolidated guidance for future runs
+ - Location: written to the CWD by default; use `-f` to set a custom (including absolute) path
+
+## Small Language Model Considerations
+
+
+ When using smaller language models (≤7B parameters) for training data evaluation, be aware that they may face challenges with generating structured outputs and following complex instructions.
+
+
+### Limitations of Small Models in Training Evaluation
+
+
+
+ Smaller models often struggle with producing valid JSON responses needed for structured training evaluations, leading to parsing errors and incomplete data.
+
+
+ Models under 7B parameters may provide less nuanced evaluations with limited reasoning depth compared to larger models.
+
+
+ Complex training evaluation criteria may not be fully followed or considered by smaller models.
+
+
+ Evaluations across multiple training iterations may lack consistency with smaller models.
+
+
+
+### Recommendations for Training
+
+
+
+ For optimal training quality and reliable evaluations, we strongly recommend using models with at least 7B parameters or larger:
+
+ ```python
+ from crewai import Agent, Crew, Task, LLM
+
+ # Recommended minimum for training evaluation
+ llm = LLM(model="mistral/open-mistral-7b")
+
+ # Better options for reliable training evaluation
+ llm = LLM(model="anthropic/claude-3-sonnet-20240229-v1:0")
+ llm = LLM(model="gpt-4o")
+
+ # Use this LLM with your agents
+ agent = Agent(
+ role="Training Evaluator",
+ goal="Provide accurate training feedback",
+ llm=llm
+ )
+ ```
+
+
+ More powerful models provide higher quality feedback with better reasoning, leading to more effective training iterations.
+
+
+
+ If you must use smaller models for training evaluation, be aware of these constraints:
+
+ ```python
+ # Using a smaller model (expect some limitations)
+ llm = LLM(model="huggingface/microsoft/Phi-3-mini-4k-instruct")
+ ```
+
+
+ While CrewAI includes optimizations for small models, expect less reliable and less nuanced evaluation results that may require more human intervention during training.
+
+
+
+
+### Key Points to Note
+
+- **Positive Integer Requirement:** Ensure that the number of iterations (`n_iterations`) is a positive integer. The code will raise a `ValueError` if this condition is not met.
+- **Filename Requirement:** Ensure that the filename ends with `.pkl`. The code will raise a `ValueError` if this condition is not met.
+- **Error Handling:** The code handles subprocess errors and unexpected exceptions, providing error messages to the user.
+- Trained guidance is applied at prompt time; it does not modify your Python/YAML agent configuration.
+- Agents automatically load trained suggestions from a file named `trained_agents_data.pkl` located in the current working directory. If you trained to a different filename, pass that path with `Crew(trained_agents_file="my_custom_trained.pkl")`, set `CREWAI_TRAINED_AGENTS_FILE`, or use `crewai run -f my_custom_trained.pkl`.
+- You can change the output filename when calling `crewai train` with `-f/--filename`. Absolute paths are supported if you want to save outside the CWD.
+
+It is important to note that the training process may take some time, depending on the complexity of your agents and will also require your feedback on each iteration.
+
+Once the training is complete, your agents will be equipped with enhanced capabilities and knowledge, ready to tackle complex tasks and provide more consistent and valuable insights.
+
+Remember to regularly update and retrain your agents to ensure they stay up-to-date with the latest information and advancements in the field.
diff --git a/docs/v1.15.1/en/enterprise/features/a2a.mdx b/docs/v1.15.1/en/enterprise/features/a2a.mdx
new file mode 100644
index 000000000..e66cbe340
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/a2a.mdx
@@ -0,0 +1,227 @@
+---
+title: A2A on AMP
+description: Production-grade Agent-to-Agent communication with distributed state and multi-scheme authentication
+icon: "network-wired"
+mode: "wide"
+---
+
+
+A2A server agents on AMP are in early release. APIs may change in future versions.
+
+
+## Overview
+
+CrewAI AMP extends the open-source [A2A protocol implementation](/en/learn/a2a-agent-delegation) with production infrastructure for deploying distributed agents at scale. AMP supports A2A protocol versions 0.2 and 0.3. When you deploy a crew or agent with A2A server configuration to AMP, the platform automatically provisions distributed state management, authentication, multi-transport endpoints, and lifecycle management.
+
+
+ For A2A protocol fundamentals, client/server configuration, and authentication schemes, see the [A2A Agent Delegation](/en/learn/a2a-agent-delegation) documentation. This page covers what AMP adds on top of the open-source implementation.
+
+
+### Usage
+
+Add `A2AServerConfig` to any agent in your crew and deploy to AMP. The platform detects agents with server configuration and automatically registers A2A endpoints, generates agent cards, and provisions the infrastructure described below.
+
+```python
+from crewai import Agent, Crew, Task
+from crewai.a2a import A2AServerConfig
+from crewai.a2a.auth import EnterpriseTokenAuth
+
+agent = Agent(
+ role="Data Analyst",
+ goal="Analyze datasets and provide insights",
+ backstory="Expert data scientist with statistical analysis skills",
+ llm="gpt-4o",
+ a2a=A2AServerConfig(
+ auth=EnterpriseTokenAuth()
+ )
+)
+
+task = Task(
+ description="Analyze the provided dataset",
+ expected_output="Statistical summary with key insights",
+ agent=agent
+)
+
+crew = Crew(agents=[agent], tasks=[task])
+```
+
+After [deploying to AMP](/en/enterprise/guides/deploy-to-amp), the platform registers two levels of A2A endpoints:
+
+- **Crew-level**: an aggregate agent card at `/.well-known/agent-card.json` where each agent with `A2AServerConfig` is listed as a skill, with a JSON-RPC endpoint at `/a2a`
+- **Per-agent**: isolated agent cards and JSON-RPC endpoints mounted at `/a2a/agents/{role}/`, each with its own tenancy
+
+Clients can interact with the crew as a whole or target a specific agent directly. To route a request to a specific agent through the crew-level endpoint, include `"target_agent"` in the message metadata with the agent's slugified role name (e.g., `"data-analyst"` for an agent with role `"Data Analyst"`). If no `target_agent` is provided, the request is handled by the first agent in the crew.
+
+See [A2A Agent Delegation](/en/learn/a2a-agent-delegation#server-configuration-options) for the full list of `A2AServerConfig` options.
+
+
+ Per the A2A protocol, agent cards are publicly accessible to enable discovery. This includes both the crew-level card at `/.well-known/agent-card.json` and per-agent cards at `/a2a/agents/{role}/.well-known/agent-card.json`. Do not include sensitive information in agent names, descriptions, or skill definitions.
+
+
+### File Inputs and Structured Output
+
+A2A on AMP supports passing files and requesting structured output in both directions. Clients can send files as `FilePart`s and request structured responses by embedding a JSON schema in the message. Server agents receive files as `input_files` on the task, and return structured data as `DataPart`s when a schema is provided. See [File Inputs and Structured Output](/en/learn/a2a-agent-delegation#file-inputs-and-structured-output) for details.
+
+### What AMP Adds
+
+
+
+ Persistent task, context, and result storage
+
+
+ OIDC, OAuth2, mTLS, and Enterprise token validation beyond simple bearer tokens
+
+
+ Full gRPC server with TLS and authentication
+
+
+ Automatic idle detection, expiration, and cleanup of long-running conversations
+
+
+ HMAC-SHA256 signed push notifications with replay protection
+
+
+ REST, JSON-RPC, and gRPC endpoints served simultaneously from a single deployment
+
+
+
+---
+
+## Distributed State Management
+
+In the open-source implementation, task and context state lives in memory on a single process. AMP replaces this with persistent, distributed stores.
+
+### Storage Layers
+
+| Store | Purpose |
+|---|---|
+| **Task Store** | Persists A2A task state and metadata |
+| **Context Store** | Tracks conversation context, creation time, last activity, and associated tasks |
+| **Result Store** | Caches task results for retrieval |
+| **Push Config Store** | Manages webhook subscriptions per task |
+
+Multiple A2A deployments are automatically isolated from each other, preventing data collisions when sharing infrastructure.
+
+---
+
+## Enterprise Authentication
+
+AMP supports six authentication schemes for incoming A2A requests, configurable per deployment. Authentication works across both HTTP and gRPC transports.
+
+| Scheme | Description | Use Case |
+|---|---|---|
+| **SimpleTokenAuth** | Static bearer token from `AUTH_TOKEN` env var | Development, simple deployments |
+| **EnterpriseTokenAuth** | Token verification via CrewAI PlusAPI with integration token claims | AMP-to-AMP agent communication |
+| **OIDCAuth** | OpenID Connect JWT validation with JWKS endpoint caching | Enterprise SSO integration |
+| **OAuth2ServerAuth** | OAuth2 with configurable scopes | Fine-grained access control |
+| **APIKeyServerAuth** | API key validation via header or query parameter | Third-party integrations |
+| **MTLSServerAuth** | Mutual TLS certificate-based authentication | Zero-trust environments |
+
+The configured auth scheme automatically populates the agent card's `securitySchemes` and `security` fields. Clients discover authentication requirements by fetching the agent card before making requests.
+
+---
+
+## Extended Agent Cards
+
+AMP supports role-based skill visibility through extended agent cards. Unauthenticated users see the standard agent card with public skills. Authenticated users receive an extended card with additional capabilities.
+
+This enables patterns like:
+- Public agents that expose basic skills to anyone, with advanced skills available to authenticated clients
+- Internal agents that advertise different capabilities based on the caller's identity
+
+---
+
+## gRPC Transport
+
+If enabled, AMP provides full gRPC support alongside the default JSON-RPC transport.
+
+- **TLS termination** with configurable certificate and key paths
+- **gRPC reflection** for debugging with tools like `grpcurl`
+- **Authentication** using the same schemes available for HTTP
+- **Extension validation** ensuring clients support required protocol extensions
+- **Version negotiation** across A2A protocol versions 0.2 and 0.3
+
+For deployments exposing multiple agents, AMP automatically allocates per-agent gRPC ports and coordinates TLS, startup, and shutdown across all servers.
+
+---
+
+## Context Lifecycle Management
+
+AMP tracks the lifecycle of A2A conversation contexts and automatically manages cleanup.
+
+### Lifecycle States
+
+| State | Condition | Action |
+|---|---|---|
+| **Active** | Context has recent activity | None |
+| **Idle** | No activity for a configured period | Marked idle, event emitted |
+| **Expired** | Context exceeds its maximum lifetime | Marked expired, associated tasks cleaned up, event emitted |
+
+A background cleanup task runs hourly to scan for idle and expired contexts. All state transitions emit CrewAI events that integrate with the platform's observability features.
+
+---
+
+## Signed Push Notifications
+
+When an A2A agent sends push notifications to a client webhook, AMP signs each request with HMAC-SHA256 to ensure integrity and prevent tampering.
+
+### Signature Headers
+
+| Header | Purpose |
+|---|---|
+| `X-A2A-Signature` | HMAC-SHA256 signature in `sha256={hex_digest}` format |
+| `X-A2A-Signature-Timestamp` | Unix timestamp bound to the signature |
+| `X-A2A-Notification-Token` | Optional notification auth token |
+
+### Security Properties
+
+- **Integrity**: payload cannot be modified without invalidating the signature
+- **Replay protection**: signatures are timestamp-bound with a configurable tolerance window
+- **Retry with backoff**: failed deliveries retry with exponential backoff
+
+---
+
+## Distributed Event Streaming
+
+In the open-source implementation, SSE streaming works within a single process. AMP propagates SSE events across instances so that clients receive updates even when the instance holding the streaming connection differs from the instance executing the task.
+
+---
+
+## Multi-Transport Endpoints
+
+AMP serves REST and JSON-RPC by default. gRPC is available as an additional transport if enabled.
+
+| Transport | Path Convention | Description |
+|---|---|---|
+| **REST** | `/v1/message:send`, `/v1/message:stream`, `/v1/tasks` | Google API conventions |
+| **JSON-RPC** | Standard A2A JSON-RPC endpoint | Default A2A protocol transport |
+| **gRPC** | Per-agent port allocation | Optional, high-performance binary protocol |
+
+All active transports share the same authentication, version negotiation, and extension validation. Agent cards are generated from agent and crew metadata — roles, goals, and tools become skills and descriptions — and automatically include interfaces for each active transport. They can also be manually configured via `A2AServerConfig`.
+
+---
+
+## Version and Extension Negotiation
+
+AMP validates A2A protocol versions and extensions at the transport layer.
+
+### Version Negotiation
+
+- Clients send the `A2A-Version` header with their preferred version
+- AMP validates against supported versions (0.2, 0.3) and falls back to 0.3 if unspecified
+- The negotiated version is returned in the response headers
+
+### Extension Validation
+
+- Clients declare supported extensions via the `X-A2A-Extensions` header
+- AMP validates that clients support all extensions the agent requires
+- Requests from clients missing required extensions receive an `UnsupportedExtensionError`
+
+---
+
+## Next Steps
+
+- [A2A Agent Delegation](/en/learn/a2a-agent-delegation) — A2A protocol fundamentals and configuration
+- [A2UI](/en/learn/a2ui) — Interactive UI rendering over A2A
+- [Deploy to AMP](/en/enterprise/guides/deploy-to-amp) — General deployment guide
+- [Webhook Streaming](/en/enterprise/features/webhook-streaming) — Event streaming for deployed automations
diff --git a/docs/v1.15.1/en/enterprise/features/agent-control-plane/monitoring.mdx b/docs/v1.15.1/en/enterprise/features/agent-control-plane/monitoring.mdx
new file mode 100644
index 000000000..ef94d1895
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/agent-control-plane/monitoring.mdx
@@ -0,0 +1,112 @@
+---
+title: "Watch your Automations"
+description: "Watch fleet health, LLM consumption, and per-automation behavior from the Automations tab."
+sidebarTitle: "Monitoring"
+icon: "gauge"
+mode: "wide"
+---
+
+
+ **ACP (Beta) Docs Navigation**
+
+ - [Overview](/en/enterprise/features/agent-control-plane/overview)
+ - **Monitoring** *(you are here)*
+ - [Rules](/en/enterprise/features/agent-control-plane/rules)
+
+
+## Overview
+
+The **Automations** tab is the read-only operations view of the [Agent Control Plane](/en/enterprise/features/agent-control-plane/overview). It combines two metric cards, an interactive sankey, and two sub-tables — **Automations** and **Consumption** — that you can search, filter, and sort.
+
+
+ 
+
+
+All charts and tables respect the **Last 24 hours / Last Week / Last 30 days** selector at the top right. Deltas compare the selected window against the previous one of the same length.
+
+
+ Rows only show data for deployments on **crewAI v1.13 or higher** — older deployments appear in the *"We've detected N other automations that we can't display"* banner under the sankey and contribute zero metrics until they're updated and re-deployed. See [Overview — Requirements](/en/enterprise/features/agent-control-plane/overview#requirements).
+
+
+## Dashboard
+
+The header of the page has two metric cards and an interactive sankey. Clicking either card switches the sankey between two modes:
+
+- **Health mode** — `Total Automations → status buckets (Critical / Warning / Healthy)`. Click a bucket to filter the Automations table to just those deployments.
+- **Consumption mode** — `Model Providers → Automations → Total Cost`. Click a provider to filter the Consumption table to that provider.
+
+| Card | What it shows |
+|------|---------------|
+| **Automations** | `active` automations (and total count), total `errors` in the window, currently `active executions` (and total in the window), with a delta vs the previous period. |
+| **Consumption** | Total `cost` and `tokens used`, with a cost delta vs the previous period. |
+
+
+ 
+
+
+## Automations table
+
+The **Automations** sub-tab is the per-deployment breakdown of fleet health. Each row is one deployed crew or flow.
+
+
+ 
+
+
+| Column | What it shows |
+|--------|---------------|
+| **Automation** | Deployment name and any tags assigned to it (e.g. `production`, `financial`). |
+| **Last execution** | Time since the most recent run. |
+| **Health Status Breakdown** | Stacked bar of `Critical` / `Warning` / `Healthy` percentages for executions in the window. |
+| **Executions with Errors** | Total failed executions in the window. |
+| **PII detection applied** | `Yes` if a per-deployment PII config or a matching [PII rule](/en/enterprise/features/agent-control-plane/rules) is active. |
+| **Executions** | Total executions in the window. |
+| **Last updated** | When the deployment was last re-deployed. |
+| **Crew Version** | The `crewai` version reported by the deployment. An info icon next to versions below `1.13` flags rows that can't contribute metrics. |
+
+Search by name, filter by `Status` (`Healthy` / `Warning` / `Critical`), and sort by any column header. Click a deployment name to open the **Automation panel** (see below).
+
+## Consumption table
+
+The **Consumption** sub-tab is the per-deployment breakdown of LLM spend and token usage.
+
+
+ 
+
+
+| Column | What it shows |
+|--------|---------------|
+| **Automation** | Deployment name. |
+| **Last execution** | Time since the most recent run. |
+| **Tokens used** | One row per LLM provider used by this automation, with the delta vs the previous period. |
+| **Cost** | Cost per LLM provider, with the delta vs the previous period. |
+| **Total cost** | Sum across all providers, with the delta. |
+| **Executions** | Total executions in the window. |
+| **Last updated** | When the deployment was last re-deployed. |
+| **Crew Version** | The `crewai` version reported by the deployment. |
+
+Filter by **LLM provider** and sort by `Cost`, `Executions`, or `Last run`.
+
+
+ **Empty cells (`—` or `$0.00`) usually mean the deployment is below crewAI v1.13.** In the screenshot above, *Automation F* (`1.7.0`) and *Automation I* (`1.12.2`) show blanks for tokens and cost — their executions still run, but they don't emit the provider-level telemetry that powers this table. Update and re-deploy these crews to start collecting consumption data.
+
+
+## Related
+
+
+
+ What ACP is, requirements, plan tiers, and RBAC.
+
+
+ Apply organization-wide PII Redaction rules across many automations.
+
+
+ Drill into a single execution to see agent reasoning, tool calls, and token usage.
+
+
+ Deploy a crew on a crewAI version that supports the Agent Control Plane.
+
+
+
+
+ Contact our support team for help interpreting metrics in the Agent Control Plane.
+
diff --git a/docs/v1.15.1/en/enterprise/features/agent-control-plane/overview.mdx b/docs/v1.15.1/en/enterprise/features/agent-control-plane/overview.mdx
new file mode 100644
index 000000000..1e3d4de8b
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/agent-control-plane/overview.mdx
@@ -0,0 +1,82 @@
+---
+title: Agent Control Plane Overview
+description: "Single operations hub for live automations — fleet health, LLM consumption, and organization-wide policies in one place."
+sidebarTitle: Overview
+icon: "book-open"
+---
+
+
+ **ACP (Beta) Docs Navigation**
+
+ - **Overview** *(you are here)*
+ - [Monitoring](/en/enterprise/features/agent-control-plane/monitoring)
+ - [Rules](/en/enterprise/features/agent-control-plane/rules)
+
+
+## Overview
+
+The **Agent Control Plane** (ACP) is the operations hub for everything you have running on CrewAI AMP. It is a single screen — split into **Automations** and **Rules** tabs — that lets your team:
+
+- Monitor the **health** of every live automation (crew or flow), with `Critical` / `Warning` / `Healthy` breakdowns and execution counts.
+- Track **LLM consumption** — tokens and cost — per automation, per provider, and per model, with a delta vs the previous period.
+- Drill into any single automation or model provider for time-series charts and per-provider breakdowns.
+- Apply organization-wide **Rules** (today: PII Redaction) across many automations at once instead of editing each deployment individually.
+
+
+ 
+
+
+
+ The Agent Control Plane is currently labeled **Beta** in CrewAI Platform.
+
+
+The two tabs answer two different questions:
+
+- **Automations** — *"How is my fleet behaving right now, and what is it costing me?"* See [Monitoring](/en/enterprise/features/agent-control-plane/monitoring).
+- **Rules** — *"How do I enforce a policy (e.g. PII redaction) across many deployments without re-deploying each one?"* See [Rules](/en/enterprise/features/agent-control-plane/rules).
+
+## Requirements
+
+
+ **crewAI v1.13 or higher** is required for an automation to populate any data on this page — health, executions, errors, tokens, and cost all flow through telemetry that lit up in `crewai==1.13`. Older deployments appear in the *"We've detected N other automations that we can't display"* banner and contribute zero rows until they are updated and re-deployed.
+
+
+
+ **Enterprise Plan or Ultra Plan** is required to create or edit [Rules](/en/enterprise/features/agent-control-plane/rules). Lower-tier organizations can open the Rules tab and view existing rules, but the editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction rules require an Enterprise plan."* Monitoring (the Automations tab) is available on all plans where the feature is enabled.
+
+
+- The **Agent Control Plane** feature must be enabled for your organization. If you don't see it in the sidebar, ask your account owner to request enablement.
+- Inside ACP, [RBAC](/en/enterprise/features/rbac) governs access: `read` to view the dashboard and rules, `manage` to create, edit, toggle, or delete rules.
+- All charts and tables can be scoped to the **Last 24 hours**, **Last Week**, or **Last 30 days** using the time selector at the top right. Deltas (`↑ 8 vs yesterday`, `↓ $20.57 vs yesterday`, etc.) compare the selected window against the previous one of the same length.
+
+## What you can do here
+
+
+
+ Watch fleet health and LLM spend with metric cards, an interactive sankey, per-automation tables, and drill-down side panels for any automation or provider.
+
+
+ Apply organization-wide PII Redaction policies scoped by tools and tags. Changes take effect on the next execution — no re-deploy required.
+
+
+
+## Related
+
+
+
+ Drill into a single execution to see agent reasoning, tool calls, and token usage.
+
+
+ Manage who can read the Agent Control Plane and who can edit rules.
+
+
+ Entity catalog and per-deployment PII configuration referenced by Rules.
+
+
+ Deploy a crew on a crewAI version that supports the Agent Control Plane.
+
+
+
+
+ Contact our support team for help interpreting metrics or designing rules.
+
diff --git a/docs/v1.15.1/en/enterprise/features/agent-control-plane/rules.mdx b/docs/v1.15.1/en/enterprise/features/agent-control-plane/rules.mdx
new file mode 100644
index 000000000..755afbcc4
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/agent-control-plane/rules.mdx
@@ -0,0 +1,122 @@
+---
+title: "Set up the Rules"
+description: "Apply organization-wide policies across many automations from a single place."
+sidebarTitle: "Rules"
+icon: "shield-check"
+mode: "wide"
+---
+
+
+ **ACP (Beta) Docs Navigation**
+
+ - [Overview](/en/enterprise/features/agent-control-plane/overview)
+ - [Monitoring](/en/enterprise/features/agent-control-plane/monitoring)
+ - **Rules** *(you are here)*
+
+
+## Overview
+
+Rules let you apply policies — today: **PII Redaction** — across many automations at once, instead of configuring each deployment individually. Open the **Rules** tab in the [Agent Control Plane](/en/enterprise/features/agent-control-plane/overview) to manage them.
+
+
+ 
+
+
+Each rule card shows the name, description, the **scope** the rule applies to (selected tools and tags), and a count of **engaged automations** — deployments that currently match the scope. The toggle on the right enables or disables the rule without deleting it.
+
+## Requirements
+
+
+ **Enterprise Plan or Ultra Plan** is required to create or edit PII Redaction rules. Lower-tier organizations can still open the Rules tab and view existing rules, but the editor renders read-only with an "Enterprise" lock pill and the alert *"PII Redaction rules require an Enterprise plan."* — contact your account owner or sales to upgrade.
+
+
+- The **Agent Control Plane** feature must be enabled for your organization. See [Overview — Requirements](/en/enterprise/features/agent-control-plane/overview#requirements).
+- The `manage` [RBAC permission](/en/enterprise/features/rbac) on Agent Control Plane is required to create, edit, toggle, or delete rules. The `read` permission is enough to view them.
+- All rule changes are versioned for auditing.
+
+## Available rule types
+
+| Type | What it does |
+|------|---------------|
+| **PII Redaction** | Applies PII redaction to executions of every matching automation, using the same entity catalog and custom recognizers documented in [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions). |
+
+More rule types will be added over time.
+
+## Creating a rule
+
+
+
+
+
+
+
+ Click **+ Create new** at the top-right of the Rules tab, or **View Details** on an existing rule card.
+
+
+
+ Give the rule a clear name (e.g. *Mask PII (CC)*) and a description explaining when it applies. Both show up on the rule card and in the Engaged Automations modal.
+
+
+
+ Today only **PII Redaction** is available.
+
+
+
+ Conditions decide which automations the rule engages with. Both are optional and use **set-equality** semantics:
+
+ - **Tools** — only automations whose tool set **exactly matches** the selected tools will engage. Picks from Studio apps, MCPs, OSS tools, and Tool Repository registry tools.
+ - **Automations** — only automations whose tag set **exactly matches** the selected tags will engage.
+
+ Leaving a picker empty means "no filter on this dimension". Leaving both empty means the rule applies to **every** automation in the organization.
+
+
+
+ Check each entity type you want covered and choose **Mask** (replaces with the entity label, e.g. ``) or **Redact** (removes the matched text entirely). See [PII Redaction for Traces](/en/enterprise/features/pii-trace-redactions) for the full entity catalog and how to add organization-level custom recognizers.
+
+
+
+ The rule applies to **future** executions of every engaged automation as soon as you save. No re-deploy is needed.
+
+
+
+## Engaged automations
+
+Click **Engaged N automations** on any rule card to see exactly which deployments the rule is currently matching, along with each one's last execution.
+
+
+ 
+
+
+This is the fastest way to sanity-check a rule's scope before enabling it — for example, to confirm that a rule scoped to the `production` tag isn't accidentally matching a staging deployment.
+
+## Org-wide rules vs per-deployment settings
+
+PII Redaction can be configured in two places:
+
+- **Per-deployment** — under **Settings → PII Protection** on each individual deployment ([guide](/en/enterprise/features/pii-trace-redactions))
+- **Org-wide** — as a Rule on this page
+
+When an enabled org-wide rule's scope matches a deployment, the rule's entity configuration **overrides** the deployment-owned PII settings for that deployment's executions — the rule becomes the single source of truth while it's attached. Disable or detach the rule (or change its scope so it no longer matches) and the deployment falls back to its own PII Protection settings.
+
+Prefer org-wide rules when you want to enforce a consistent policy across many deployments; reserve per-deployment configuration for one-off exceptions.
+
+## Related
+
+
+
+ What ACP is, requirements, plan tiers, and RBAC.
+
+
+ Monitor automations and LLM consumption across your fleet.
+
+
+ Entity catalog, custom recognizers, and per-deployment configuration.
+
+
+ Manage who can create or edit rules.
+
+
+
+
+ Contact our support team for help designing rules for your organization.
+
diff --git a/docs/v1.15.1/en/enterprise/features/agent-repositories.mdx b/docs/v1.15.1/en/enterprise/features/agent-repositories.mdx
new file mode 100644
index 000000000..879d39045
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/agent-repositories.mdx
@@ -0,0 +1,155 @@
+---
+title: 'Agent Repositories'
+description: 'Learn how to use Agent Repositories to share and reuse your agents across teams and projects'
+icon: 'people-group'
+mode: "wide"
+---
+
+Agent Repositories allow enterprise users to store, share, and reuse agent definitions across teams and projects. This feature enables organizations to maintain a centralized library of standardized agents, promoting consistency and reducing duplication of effort.
+
+
+ 
+
+
+## Benefits of Agent Repositories
+
+- **Standardization**: Maintain consistent agent definitions across your organization
+- **Reusability**: Create an agent once and use it in multiple crews and projects
+- **Governance**: Implement organization-wide policies for agent configurations
+- **Collaboration**: Enable teams to share and build upon each other's work
+
+## Creating and Use Agent Repositories
+
+1. You must have an account at CrewAI, try the [free plan](https://app.crewai.com).
+2. Create agents with specific roles and goals for your workflows.
+3. Configure tools and capabilities for each specialized assistant.
+4. Deploy agents across projects via visual interface or API integration.
+
+
+ 
+
+
+
+### Loading Agents from Repositories
+
+You can load agents from repositories in your code using the `from_repository` parameter to run locally:
+
+```python
+from crewai import Agent
+
+# Create an agent by loading it from a repository
+# The agent is loaded with all its predefined configurations
+researcher = Agent(
+ from_repository="market-research-agent"
+)
+```
+
+### Overriding Repository Settings
+
+You can override specific settings from the repository by providing them in the configuration:
+
+```python
+researcher = Agent(
+ from_repository="market-research-agent",
+ goal="Research the latest trends in AI development", # Override the repository goal
+ verbose=True # Add a setting not in the repository
+)
+```
+
+### Example: Creating a Crew with Repository Agents
+
+```python
+from crewai import Crew, Agent, Task
+
+# Load agents from repositories
+researcher = Agent(
+ from_repository="market-research-agent"
+)
+
+writer = Agent(
+ from_repository="content-writer-agent"
+)
+
+# Create tasks
+research_task = Task(
+ description="Research the latest trends in AI",
+ agent=researcher
+)
+
+writing_task = Task(
+ description="Write a comprehensive report based on the research",
+ agent=writer
+)
+
+# Create the crew
+crew = Crew(
+ agents=[researcher, writer],
+ tasks=[research_task, writing_task],
+ verbose=True
+)
+
+# Run the crew
+result = crew.kickoff()
+```
+
+### Example: Using `kickoff()` with Repository Agents
+
+You can also use repository agents directly with the `kickoff()` method for simpler interactions:
+
+```python
+from crewai import Agent
+from pydantic import BaseModel
+from typing import List
+
+# Define a structured output format
+class MarketAnalysis(BaseModel):
+ key_trends: List[str]
+ opportunities: List[str]
+ recommendation: str
+
+# Load an agent from repository
+analyst = Agent(
+ from_repository="market-analyst-agent",
+ verbose=True
+)
+
+# Get a free-form response
+result = analyst.kickoff("Analyze the AI market in 2025")
+print(result.raw) # Access the raw response
+
+# Get structured output
+structured_result = analyst.kickoff(
+ "Provide a structured analysis of the AI market in 2025",
+ response_format=MarketAnalysis
+)
+
+# Access structured data
+print(f"Key Trends: {structured_result.pydantic.key_trends}")
+print(f"Recommendation: {structured_result.pydantic.recommendation}")
+```
+
+## Best Practices
+
+1. **Naming Convention**: Use clear, descriptive names for your repository agents
+2. **Documentation**: Include comprehensive descriptions for each agent
+3. **Tool Management**: Ensure that tools referenced by repository agents are available in your environment
+4. **Access Control**: Manage permissions to ensure only authorized team members can modify repository agents
+
+## Organization Management
+
+To switch between organizations or see your current organization, use the CrewAI CLI:
+
+```bash
+# View current organization
+crewai org current
+
+# Switch to a different organization
+crewai org switch
+
+# List all available organizations
+crewai org list
+```
+
+
+When loading agents from repositories, you must be authenticated and switched to the correct organization. If you receive errors, check your authentication status and organization settings using the CLI commands above.
+
diff --git a/docs/v1.15.1/en/enterprise/features/automations.mdx b/docs/v1.15.1/en/enterprise/features/automations.mdx
new file mode 100644
index 000000000..675977e01
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/automations.mdx
@@ -0,0 +1,104 @@
+---
+title: Automations
+description: "Manage, deploy, and monitor your live crews (automations) in one place."
+icon: "rocket"
+mode: "wide"
+---
+
+## Overview
+
+Automations is the live operations hub for your deployed crews. Use it to deploy from GitHub or a ZIP file, manage environment variables, re‑deploy when needed, and monitor the status of each automation.
+
+
+ 
+
+
+
+## Deployment Methods
+
+### Deploy from GitHub
+
+Use this for version‑controlled projects and continuous deployment.
+
+
+
+ Click Configure GitHub and authorize access.
+
+
+ Choose the Repository and Branch you want to deploy from.
+
+
+ Turn on Automatically deploy new commits to ship updates on every push.
+
+
+ Add secrets individually or use Bulk View for multiple variables.
+
+
+ Click Deploy to create your live automation.
+
+
+
+
+ 
+
+
+### Deploy from ZIP
+
+Ship quickly without Git—upload a compressed package of your project.
+
+
+
+ Select the ZIP archive from your computer.
+
+
+ Provide any required variables or keys.
+
+
+ Click Deploy to create your live automation.
+
+
+
+
+ 
+
+
+## Automations Dashboard
+
+The table lists all live automations with key details:
+
+- **CREW**: Automation name
+- **STATUS**: Online / Failed / In Progress
+- **URL**: Endpoint for kickoff/status
+- **TOKEN**: Automation token
+- **ACTIONS**: Re‑deploy, delete, and more
+
+Use the top‑right controls to filter and search:
+
+- Search by name
+- Filter by Status
+- Filter by Source (GitHub / Studio / ZIP)
+
+Once deployed, you can view the automation details and have the **Options** dropdown menu to `chat with this crew`, `Export React Component` and `Export as MCP`.
+
+
+ 
+
+
+## Best Practices
+
+- Prefer GitHub deployments for version control and CI/CD
+- Use re‑deploy to roll forward after code or config updates or set it to auto-deploy on every push
+
+## Related
+
+
+
+ Deploy a Crew from GitHub or ZIP file.
+
+
+ Trigger automations via webhooks or API.
+
+
+ Stream real-time events and updates to your systems.
+
+
diff --git a/docs/v1.15.1/en/enterprise/features/crew-studio.mdx b/docs/v1.15.1/en/enterprise/features/crew-studio.mdx
new file mode 100644
index 000000000..b4ea0b238
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/crew-studio.mdx
@@ -0,0 +1,88 @@
+---
+title: Crew Studio
+description: "Build new automations with AI assistance, a visual editor, and integrated testing."
+icon: "pencil"
+mode: "wide"
+---
+
+## Overview
+
+Crew Studio is an interactive, AI‑assisted workspace for creating new automations from scratch using natural language and a visual workflow editor.
+
+
+ 
+
+
+## Prompt‑based Creation
+
+- Describe the automation you want; the AI generates agents, tasks, and tools.
+- Use voice input via the microphone icon if preferred.
+- Start from built‑in prompts for common use cases.
+
+
+ 
+
+
+## Visual Editor
+
+The canvas reflects the workflow as nodes and edges with three supporting panels that allow you to configure the workflow easily without writing code; a.k.a. "**vibe coding AI Agents**".
+
+You can use the drag-and-drop functionality to add agents, tasks, and tools to the canvas or you can use the chat section to build the agents. Both approaches share state and can be used interchangeably.
+
+- **AI Thoughts (left)**: streaming reasoning as the workflow is designed
+- **Canvas (center)**: agents and tasks as connected nodes
+- **Resources (right)**: drag‑and‑drop components (agents, tasks, tools)
+
+
+ 
+
+
+## Execution & Debugging
+
+Switch to the Execution view to run and observe the workflow:
+
+- Event timeline
+- Detailed logs (Details, Messages, Raw Data)
+- Local test runs before publishing
+
+
+ 
+
+
+## Publish & Export
+
+- Publish to deploy a live automation
+- Download source as a ZIP for local development or customization
+
+
+ 
+
+
+Once published, you can view the automation details and have the **Options** dropdown menu to `chat with this crew`, `Export React Component` and `Export as MCP`.
+
+
+ 
+
+
+## Best Practices
+
+- Iterate quickly in Studio; publish only when stable
+- Keep tools constrained to minimum permissions needed
+- Use Traces to validate behavior and performance
+
+## Related
+
+
+
+ Enable Crew Studio.
+
+
+ Build a Crew.
+
+
+ Deploy a Crew from GitHub or ZIP file.
+
+
+ Export a React Component.
+
+
diff --git a/docs/v1.15.1/en/enterprise/features/flow-hitl-management.mdx b/docs/v1.15.1/en/enterprise/features/flow-hitl-management.mdx
new file mode 100644
index 000000000..36eb4325c
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/flow-hitl-management.mdx
@@ -0,0 +1,558 @@
+---
+title: "Flow HITL Management"
+description: "Enterprise-grade human review for Flows with email-first notifications, routing rules, and auto-response capabilities"
+icon: "users-gear"
+mode: "wide"
+---
+
+
+Flow HITL Management features require the `@human_feedback` decorator, available in **CrewAI version 1.8.0 or higher**. These features apply specifically to **Flows**, not Crews.
+
+
+CrewAI Enterprise provides a comprehensive Human-in-the-Loop (HITL) management system for Flows that transforms AI workflows into collaborative human-AI processes. The platform uses an **email-first architecture** that enables anyone with an email address to respond to review requests—no platform account required.
+
+## Overview
+
+
+
+ Responders can reply directly to notification emails to provide feedback
+
+
+ Route requests to specific emails based on method patterns or flow state
+
+
+ Configure automatic fallback responses when no human replies in time
+
+
+
+### Key Benefits
+
+- **Simple mental model**: Email addresses are universal; no need to manage platform users or roles
+- **External responders**: Anyone with an email can respond, even non-platform users
+- **Dynamic assignment**: Pull assignee email directly from flow state (e.g., `sales_rep_email`)
+- **Reduced configuration**: Fewer settings to configure, faster time to value
+- **Email as primary channel**: Most users prefer responding via email over logging into a dashboard
+
+## Setting Up Human Review Points in Flows
+
+Configure human review checkpoints within your Flows using the `@human_feedback` decorator. When execution reaches a review point, the system pauses, notifies the assignee via email, and waits for a response.
+
+```python
+from crewai.flow.flow import Flow, start, listen, or_
+from crewai.flow.human_feedback import human_feedback, HumanFeedbackResult
+
+class ContentApprovalFlow(Flow):
+ @start()
+ def generate_content(self):
+ return "Generated marketing copy for Q1 campaign..."
+
+ @human_feedback(
+ message="Please review this content for brand compliance:",
+ emit=["approved", "rejected", "needs_revision"],
+ )
+ @listen(or_("generate_content", "needs_revision"))
+ def review_content(self):
+ return "Marketing copy for review..."
+
+ @listen("approved")
+ def publish_content(self, result: HumanFeedbackResult):
+ print(f"Publishing approved content. Reviewer notes: {result.feedback}")
+
+ @listen("rejected")
+ def archive_content(self, result: HumanFeedbackResult):
+ print(f"Content rejected. Reason: {result.feedback}")
+```
+
+For complete implementation details, see the [Human Feedback in Flows](/en/learn/human-feedback-in-flows) guide.
+
+### Decorator Parameters
+
+| Parameter | Type | Description |
+|-----------|------|-------------|
+| `message` | `str` | The message displayed to the human reviewer |
+| `emit` | `list[str]` | Valid response options (displayed as buttons in UI) |
+
+## Platform Configuration
+
+Access HITL configuration from: **Deployment → Settings → Human in the Loop Configuration**
+
+
+
+
+
+### Email Notifications
+
+Toggle to enable or disable email notifications for HITL requests.
+
+| Setting | Default | Description |
+|---------|---------|-------------|
+| Email Notifications | Enabled | Send emails when feedback is requested |
+
+
+When disabled, responders must use the dashboard UI or you must configure webhooks for custom notification systems.
+
+
+### SLA Target
+
+Set a target response time for tracking and metrics purposes.
+
+| Setting | Description |
+|---------|-------------|
+| SLA Target (minutes) | Target response time. Used for dashboard metrics and SLA tracking |
+
+Leave empty to disable SLA tracking.
+
+## Email Notifications & Responses
+
+The HITL system uses an email-first architecture where responders can reply directly to notification emails.
+
+### How Email Responses Work
+
+
+
+ When a HITL request is created, an email is sent to the assigned responder with the review content and context.
+
+
+ The email includes a special reply-to address with a signed token for authentication.
+
+
+ The responder simply replies to the email with their feedback—no login required.
+
+
+ The platform receives the reply, verifies the signed token, and matches the sender email.
+
+
+ The feedback is recorded and the flow continues with the human's input.
+
+
+
+### Response Format
+
+Responders can reply with:
+
+- **Emit option**: If the reply matches an `emit` option (e.g., "approved"), it's used directly
+- **Free-form text**: Any text response is passed to the flow as feedback
+- **Plain text**: The first line of the reply body is used as feedback
+
+### Confirmation Emails
+
+After processing a reply, the responder receives a confirmation email indicating whether the feedback was successfully submitted or if an error occurred.
+
+### Email Token Security
+
+- Tokens are cryptographically signed for security
+- Tokens expire after 7 days
+- Sender email must match the token's authorized email
+- Confirmation/error emails are sent after processing
+
+## Routing Rules
+
+Route HITL requests to specific email addresses based on method patterns.
+
+
+
+
+
+### Rule Structure
+
+```json
+{
+ "name": "Approvals to Finance",
+ "match": {
+ "method_name": "approve_*"
+ },
+ "assign_to_email": "finance@company.com",
+ "assign_from_input": "manager_email"
+}
+```
+
+### Matching Patterns
+
+| Pattern | Description | Example Match |
+|---------|-------------|---------------|
+| `approve_*` | Wildcard (any chars) | `approve_payment`, `approve_vendor` |
+| `review_?` | Single char | `review_a`, `review_1` |
+| `validate_payment` | Exact match | `validate_payment` only |
+
+### Assignment Priority
+
+1. **Dynamic assignment** (`assign_from_input`): If configured, pulls email from flow state
+2. **Static email** (`assign_to_email`): Falls back to configured email
+3. **Deployment creator**: If no rule matches, the deployment creator's email is used
+
+### Dynamic Assignment Example
+
+If your flow state contains `{"sales_rep_email": "alice@company.com"}`, configure:
+
+```json
+{
+ "name": "Route to Sales Rep",
+ "match": {
+ "method_name": "review_*"
+ },
+ "assign_from_input": "sales_rep_email"
+}
+```
+
+The request will be assigned to `alice@company.com` automatically.
+
+
+**Use Case**: Pull the assignee from your CRM, database, or previous flow step to dynamically route reviews to the right person.
+
+
+## Auto-Response
+
+Automatically respond to HITL requests if no human responds within a timeout. This ensures flows don't hang indefinitely.
+
+### Configuration
+
+| Setting | Description |
+|---------|-------------|
+| Enabled | Toggle to enable auto-response |
+| Timeout (minutes) | Time to wait before auto-responding |
+| Default Outcome | The response value (must match an `emit` option) |
+
+
+
+
+
+### Use Cases
+
+- **SLA compliance**: Ensure flows don't hang indefinitely
+- **Default approval**: Auto-approve low-risk requests after timeout
+- **Graceful degradation**: Continue with a safe default when reviewers are unavailable
+
+
+Use auto-response carefully. Only enable it for non-critical reviews where a default response is acceptable.
+
+
+## Review Process
+
+### Dashboard Interface
+
+The HITL review interface provides a clean, focused experience for reviewers:
+
+- **Markdown Rendering**: Rich formatting for review content with syntax highlighting
+- **Context Panel**: View flow state, execution history, and related information
+- **Feedback Input**: Provide detailed feedback and comments with your decision
+- **Quick Actions**: One-click emit option buttons with optional comments
+
+
+
+
+
+### Response Methods
+
+Reviewers can respond via three channels:
+
+| Method | Description |
+|--------|-------------|
+| **Email Reply** | Reply directly to the notification email |
+| **Dashboard** | Use the Enterprise dashboard UI |
+| **API/Webhook** | Programmatic response via API |
+
+### History & Audit Trail
+
+Every HITL interaction is tracked with a complete timeline:
+
+- Decision history (approve/reject/revise)
+- Reviewer identity and timestamp
+- Feedback and comments provided
+- Response method (email/dashboard/API)
+- Response time metrics
+
+## Analytics & Monitoring
+
+Track HITL performance with comprehensive analytics.
+
+### Performance Dashboard
+
+
+
+
+
+
+
+ Monitor average and median response times by reviewer or flow.
+
+
+ Analyze review volume patterns to optimize team capacity.
+
+
+ View approval/rejection rates across different review types.
+
+
+ Track percentage of reviews completed within SLA targets.
+
+
+
+### Audit & Compliance
+
+Enterprise-ready audit capabilities for regulatory requirements:
+
+- Complete decision history with timestamps
+- Reviewer identity verification
+- Immutable audit logs
+- Export capabilities for compliance reporting
+
+## Common Use Cases
+
+
+
+ **Use Case**: Internal security questionnaire automation with human validation
+
+ - AI generates responses to security questionnaires
+ - Security team reviews and validates accuracy via email
+ - Approved responses are compiled into final submission
+ - Full audit trail for compliance
+
+
+
+ **Use Case**: Marketing content requiring legal/brand review
+
+ - AI generates marketing copy or social media content
+ - Route to brand team email for voice/tone review
+ - Automatic publishing upon approval
+
+
+
+ **Use Case**: Expense reports, contract terms, budget allocations
+
+ - AI pre-processes and categorizes financial requests
+ - Route based on amount thresholds using dynamic assignment
+ - Maintain complete audit trail for financial compliance
+
+
+
+ **Use Case**: Route reviews to account owners from your CRM
+
+ - Flow fetches account owner email from CRM
+ - Store email in flow state (e.g., `account_owner_email`)
+ - Use `assign_from_input` to route to the right person automatically
+
+
+
+ **Use Case**: AI output validation before customer delivery
+
+ - AI generates customer-facing content or responses
+ - QA team reviews via email notification
+ - Feedback loops improve AI performance over time
+
+
+
+## Webhooks API
+
+When your Flows pause for human feedback, you can configure webhooks to send request data to your own application. This enables:
+
+- Building custom approval UIs
+- Integrating with internal tools (Jira, ServiceNow, custom dashboards)
+- Routing approvals to third-party systems
+- Mobile app notifications
+- Automated decision systems
+
+
+
+
+
+### Configuring Webhooks
+
+
+
+ Go to your **Deployment** → **Settings** → **Human in the Loop**
+
+
+ Click to expand the **Webhooks** configuration
+
+
+ Enter your webhook URL (must be HTTPS in production)
+
+
+ Click **Save Configuration** to activate
+
+
+
+You can configure multiple webhooks. Each active webhook receives all HITL events.
+
+### Webhook Events
+
+Your endpoint will receive HTTP POST requests for these events:
+
+| Event Type | When Triggered |
+|------------|----------------|
+| `new_request` | A flow pauses and requests human feedback |
+
+### Webhook Payload
+
+All webhooks receive a JSON payload with this structure:
+
+```json
+{
+ "event": "new_request",
+ "request": {
+ "id": "550e8400-e29b-41d4-a716-446655440000",
+ "flow_id": "flow_abc123",
+ "method_name": "review_article",
+ "message": "Please review this article for publication.",
+ "emit_options": ["approved", "rejected", "request_changes"],
+ "state": {
+ "article_id": 12345,
+ "author": "john@example.com",
+ "category": "technology"
+ },
+ "metadata": {},
+ "created_at": "2026-01-14T12:00:00Z"
+ },
+ "deployment": {
+ "id": 456,
+ "name": "Content Review Flow",
+ "organization_id": 789
+ },
+ "callback_url": "https://api.crewai.com/...",
+ "assigned_to_email": "reviewer@company.com"
+}
+```
+
+### Responding to Requests
+
+To submit feedback, **POST to the `callback_url`** included in the webhook payload.
+
+```http
+POST {callback_url}
+Content-Type: application/json
+
+{
+ "feedback": "Approved. Great article!",
+ "source": "my_custom_app"
+}
+```
+
+### Security
+
+
+All webhook requests are cryptographically signed using HMAC-SHA256 to ensure authenticity and prevent tampering.
+
+
+#### Webhook Security
+
+- **HMAC-SHA256 signatures**: Every webhook includes a cryptographic signature
+- **Per-webhook secrets**: Each webhook has its own unique signing secret
+- **Encrypted at rest**: Signing secrets are encrypted in our database
+- **Timestamp verification**: Prevents replay attacks
+
+#### Signature Headers
+
+Each webhook request includes these headers:
+
+| Header | Description |
+|--------|-------------|
+| `X-Signature` | HMAC-SHA256 signature: `sha256=` |
+| `X-Timestamp` | Unix timestamp when the request was signed |
+
+#### Verification
+
+Verify by computing:
+
+```python
+import hmac
+import hashlib
+
+expected = hmac.new(
+ signing_secret.encode(),
+ f"{timestamp}.{payload}".encode(),
+ hashlib.sha256
+).hexdigest()
+
+if hmac.compare_digest(expected, signature):
+ # Valid signature
+```
+
+### Error Handling
+
+Your webhook endpoint should return a 2xx status code to acknowledge receipt:
+
+| Your Response | Our Behavior |
+|---------------|--------------|
+| 2xx | Webhook delivered successfully |
+| 4xx/5xx | Logged as failed, no retry |
+| Timeout (30s) | Logged as failed, no retry |
+
+## Security & RBAC
+
+### Dashboard Access
+
+HITL access is controlled at the deployment level:
+
+| Permission | Capability |
+|------------|------------|
+| `manage_human_feedback` | Configure HITL settings, view all requests |
+| `respond_to_human_feedback` | Respond to requests, view assigned requests |
+
+### Email Response Authorization
+
+For email replies:
+1. The reply-to token encodes the authorized email
+2. Sender email must match the token's email
+3. Token must not be expired (7-day default)
+4. Request must still be pending
+
+### Audit Trail
+
+All HITL actions are logged:
+- Request creation
+- Assignment changes
+- Response submission (with source: dashboard/email/API)
+- Flow resume status
+
+## Troubleshooting
+
+### Emails Not Sending
+
+1. Check "Email Notifications" is enabled in configuration
+2. Verify routing rules match the method name
+3. Verify assignee email is valid
+4. Check deployment creator fallback if no routing rules match
+
+### Email Replies Not Processing
+
+1. Check token hasn't expired (7-day default)
+2. Verify sender email matches assigned email
+3. Ensure request is still pending (not already responded)
+
+### Flow Not Resuming
+
+1. Check request status in dashboard
+2. Verify callback URL is accessible
+3. Ensure deployment is still running
+
+## Best Practices
+
+
+**Start Simple**: Begin with email notifications to deployment creator, then add routing rules as your workflows mature.
+
+
+1. **Use Dynamic Assignment**: Pull assignee emails from your flow state for flexible routing.
+
+2. **Configure Auto-Response**: Set up a fallback for non-critical reviews to prevent flows from hanging.
+
+3. **Monitor Response Times**: Use analytics to identify bottlenecks and optimize your review process.
+
+4. **Keep Review Messages Clear**: Write clear, actionable messages in the `@human_feedback` decorator.
+
+5. **Test Email Flow**: Send test requests to verify email delivery before going to production.
+
+## Related Resources
+
+
+
+ Implementation guide for the `@human_feedback` decorator
+
+
+ Step-by-step guide for setting up HITL workflows
+
+
+ Configure role-based access control for your organization
+
+
+ Set up real-time event notifications
+
+
diff --git a/docs/v1.15.1/en/enterprise/features/hallucination-guardrail.mdx b/docs/v1.15.1/en/enterprise/features/hallucination-guardrail.mdx
new file mode 100644
index 000000000..db11956d8
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/hallucination-guardrail.mdx
@@ -0,0 +1,251 @@
+---
+title: Hallucination Guardrail
+description: "Prevent and detect AI hallucinations in your CrewAI tasks"
+icon: "shield-check"
+mode: "wide"
+---
+
+## Overview
+
+The Hallucination Guardrail is an enterprise feature that validates AI-generated content to ensure it's grounded in facts and doesn't contain hallucinations. It analyzes task outputs against reference context and provides detailed feedback when potentially hallucinated content is detected.
+
+## What are Hallucinations?
+
+AI hallucinations occur when language models generate content that appears plausible but is factually incorrect or not supported by the provided context. The Hallucination Guardrail helps prevent these issues by:
+
+- Comparing outputs against reference context
+- Evaluating faithfulness to source material
+- Providing detailed feedback on problematic content
+- Supporting custom thresholds for validation strictness
+
+## Basic Usage
+
+### Setting Up the Guardrail
+
+```python
+from crewai.tasks.hallucination_guardrail import HallucinationGuardrail
+from crewai import LLM
+
+# Basic usage - will use task's expected_output as context
+guardrail = HallucinationGuardrail(
+ llm=LLM(model="gpt-4o-mini")
+)
+
+# With explicit reference context
+context_guardrail = HallucinationGuardrail(
+ context="AI helps with various tasks including analysis and generation.",
+ llm=LLM(model="gpt-4o-mini")
+)
+```
+
+### Adding to Tasks
+
+```python
+from crewai import Task
+
+# Create your task with the guardrail
+task = Task(
+ description="Write a summary about AI capabilities",
+ expected_output="A factual summary based on the provided context",
+ agent=my_agent,
+ guardrail=guardrail # Add the guardrail to validate output
+)
+```
+
+## Advanced Configuration
+
+### Custom Threshold Validation
+
+For stricter validation, you can set a custom faithfulness threshold (0-10 scale):
+
+```python
+# Strict guardrail requiring high faithfulness score
+strict_guardrail = HallucinationGuardrail(
+ context="Quantum computing uses qubits that exist in superposition states.",
+ llm=LLM(model="gpt-4o-mini"),
+ threshold=8.0 # Requires score >= 8 to pass validation
+)
+```
+
+### Including Tool Response Context
+
+When your task uses tools, you can include tool responses for more accurate validation:
+
+```python
+# Guardrail with tool response context
+weather_guardrail = HallucinationGuardrail(
+ context="Current weather information for the requested location",
+ llm=LLM(model="gpt-4o-mini"),
+ tool_response="Weather API returned: Temperature 22°C, Humidity 65%, Clear skies"
+)
+```
+
+## How It Works
+
+### Validation Process
+
+1. **Context Analysis**: The guardrail compares task output against the provided reference context
+2. **Faithfulness Scoring**: Uses an internal evaluator to assign a faithfulness score (0-10)
+3. **Verdict Determination**: Determines if content is faithful or contains hallucinations
+4. **Threshold Checking**: If a custom threshold is set, validates against that score
+5. **Feedback Generation**: Provides detailed reasons when validation fails
+
+### Validation Logic
+
+- **Default Mode**: Uses verdict-based validation (FAITHFUL vs HALLUCINATED)
+- **Threshold Mode**: Requires faithfulness score to meet or exceed the specified threshold
+- **Error Handling**: Gracefully handles evaluation errors and provides informative feedback
+
+## Guardrail Results
+
+The guardrail returns structured results indicating validation status:
+
+```python
+# Example of guardrail result structure
+{
+ "valid": False,
+ "feedback": "Content appears to be hallucinated (score: 4.2/10, verdict: HALLUCINATED). The output contains information not supported by the provided context."
+}
+```
+
+### Result Properties
+
+- **valid**: Boolean indicating whether the output passed validation
+- **feedback**: Detailed explanation when validation fails, including:
+ - Faithfulness score
+ - Verdict classification
+ - Specific reasons for failure
+
+## Integration with Task System
+
+### Automatic Validation
+
+When a guardrail is added to a task, it automatically validates the output before the task is marked as complete:
+
+```python
+# Task output validation flow
+task_output = agent.execute_task(task)
+validation_result = guardrail(task_output)
+
+if validation_result.valid:
+ # Task completes successfully
+ return task_output
+else:
+ # Task fails with validation feedback
+ raise ValidationError(validation_result.feedback)
+```
+
+### Event Tracking
+
+The guardrail integrates with CrewAI's event system to provide observability:
+
+- **Validation Started**: When guardrail evaluation begins
+- **Validation Completed**: When evaluation finishes with results
+- **Validation Failed**: When technical errors occur during evaluation
+
+## Best Practices
+
+### Context Guidelines
+
+
+
+ Include all relevant factual information that the AI should base its output on:
+
+ ```python
+ context = """
+ Company XYZ was founded in 2020 and specializes in renewable energy solutions.
+ They have 150 employees and generated $50M revenue in 2023.
+ Their main products include solar panels and wind turbines.
+ """
+ ```
+
+
+
+ Only include information directly related to the task to avoid confusion:
+
+ ```python
+ # Good: Focused context
+ context = "The current weather in New York is 18°C with light rain."
+
+ # Avoid: Unrelated information
+ context = "The weather is 18°C. The city has 8 million people. Traffic is heavy."
+ ```
+
+
+
+ Ensure your reference context reflects current, accurate information.
+
+
+
+### Threshold Selection
+
+
+
+ Begin without custom thresholds to understand baseline performance.
+
+
+
+ - **High-stakes content**: Use threshold 8-10 for maximum accuracy
+ - **General content**: Use threshold 6-7 for balanced validation
+ - **Creative content**: Use threshold 4-5 or default verdict-based validation
+
+
+
+ Track validation results and adjust thresholds based on false positives/negatives.
+
+
+
+## Performance Considerations
+
+### Impact on Execution Time
+
+- **Validation Overhead**: Each guardrail adds ~1-3 seconds per task
+- **LLM Efficiency**: Choose efficient models for evaluation (e.g., gpt-4o-mini)
+
+### Cost Optimization
+
+- **Model Selection**: Use smaller, efficient models for guardrail evaluation
+- **Context Size**: Keep reference context concise but comprehensive
+- **Caching**: Consider caching validation results for repeated content
+
+## Troubleshooting
+
+
+ **Possible Causes:**
+ - Context is too restrictive or unrelated to task output
+ - Threshold is set too high for the content type
+ - Reference context contains outdated information
+
+ **Solutions:**
+ - Review and update context to match task requirements
+ - Lower threshold or use default verdict-based validation
+ - Ensure context is current and accurate
+
+
+
+ **Possible Causes:**
+ - Threshold too high for creative or interpretive tasks
+ - Context doesn't cover all valid aspects of the output
+ - Evaluation model being overly conservative
+
+ **Solutions:**
+ - Lower threshold or use default validation
+ - Expand context to include broader acceptable content
+ - Test with different evaluation models
+
+
+
+ **Possible Causes:**
+ - Network connectivity issues
+ - LLM model unavailable or rate limited
+ - Malformed task output or context
+
+ **Solutions:**
+ - Check network connectivity and LLM service status
+ - Implement retry logic for transient failures
+ - Validate task output format before guardrail evaluation
+
+
+
+ Contact our support team for assistance with hallucination guardrail configuration or troubleshooting.
+
diff --git a/docs/v1.15.1/en/enterprise/features/marketplace.mdx b/docs/v1.15.1/en/enterprise/features/marketplace.mdx
new file mode 100644
index 000000000..8e5c1ee85
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/marketplace.mdx
@@ -0,0 +1,46 @@
+---
+title: Marketplace
+description: "Discover, install, and govern reusable assets for your enterprise crews."
+icon: "store"
+mode: "wide"
+---
+
+## Overview
+
+The Marketplace provides a curated surface for discovering integrations, internal tools, and reusable assets that accelerate crew development.
+
+
+ 
+
+
+## Discoverability
+
+- Browse by category and capability
+- Search for assets by name or keyword
+
+## Install & Enable
+
+- One‑click install for approved assets
+- Enable or disable per crew as needed
+- Configure required environment variables and scopes
+
+
+ 
+
+
+You can also download the templates directly from the marketplace by clicking on the `Download` button so
+you can use them locally or refine them to your needs.
+
+## Related
+
+
+
+ Connect external apps and manage internal tools your agents can use.
+
+
+ Publish and install tools to enhance your crews' capabilities.
+
+
+ Store, share, and reuse agent definitions across teams and projects.
+
+
diff --git a/docs/v1.15.1/en/enterprise/features/merged-step-card.mdx b/docs/v1.15.1/en/enterprise/features/merged-step-card.mdx
new file mode 100644
index 000000000..f0a3be647
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/merged-step-card.mdx
@@ -0,0 +1,82 @@
+---
+title: One Card per Step
+description: "Each step on the Studio canvas is a single card that combines the task and the agent that performs it."
+icon: "layer-group"
+mode: "wide"
+---
+
+## Overview
+
+On the Studio canvas, each step of work is represented by a **single card**. The card combines two things that used to live in separate nodes:
+
+- **The task** — what to do (name, description, expected output, and response format).
+- **The agent** — who does it (the assigned agent, its model, and its tools).
+
+An agent isn't an independent participant in your workflow — it's an attribute of the task: *which agent performs this work.* Putting the task and its agent on one card makes that relationship explicit and turns your automation into a single, left-to-right chain of work units that's easier to read at a glance.
+
+
+ 
+
+
+## On the canvas
+
+Each collapsed card shows:
+
+- The **task name and description** at the top.
+- A **footer summarizing the assigned agent** — avatar, name, model, and tools.
+
+There's no separate agent node and no vertical agent → task edge. Your steps connect directly to one another in the order they run.
+
+## In the editor
+
+Open a card to edit it. The expanded view is the same card in a detailed state — not a different screen — organized into two clearly labeled sections.
+
+
+ 
+
+
+### The task — what to do
+
+Open by default, since this is what you usually edit:
+
+- **Name**
+- **Description**
+- **Expected Output**
+- **Response Format** — surfaced here because it controls exactly what downstream steps (such as routing) read from this step.
+
+### The agent — who does it
+
+The assigned agent is shown as a summary — **name, model, and tools inline**. Its deeper configuration is preserved behind two disclosures:
+
+- **Role, goal & backstory**
+- **Agent settings** — reasoning, max reasoning attempts, allow delegation, max iterations, and LLM settings.
+
+
+ An agent's full configuration — Role, Goal, Backstory, Model, Tools, LLM Settings, and the complete Agent Settings block — lives behind the **Role, goal & backstory** and **Agent settings** disclosures, organized by how often you edit it.
+
+
+## Swapping vs. editing the agent
+
+There are two distinct ways to work with the agent on a card, and they do different things:
+
+- **Swap** reassigns *which* agent performs this task. Use the **Swap** control to pick a different agent from this project, choose one from your Agent Repository, or create a new agent. This is scoped to the task.
+- **Editing** the agent — opening **Role, goal & backstory** or **Agent settings** — changes the agent *itself*.
+
+
+ 
+
+
+
+ **Agents are reusable and shared.** The same agent can perform more than one task across your project. Editing an agent's role, backstory, or settings updates that agent **everywhere it's used** — not just on the card you opened. If you want a change to apply to only one step, **Swap** in a different agent instead of editing the shared one.
+
+
+## Related
+
+
+
+ Build automations with AI assistance and a visual editor.
+
+
+ Manage and reuse agents across your automations.
+
+
diff --git a/docs/v1.15.1/en/enterprise/features/pii-trace-redactions.mdx b/docs/v1.15.1/en/enterprise/features/pii-trace-redactions.mdx
new file mode 100644
index 000000000..75b6073aa
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/pii-trace-redactions.mdx
@@ -0,0 +1,342 @@
+---
+title: PII Redaction for Traces
+description: "Automatically redact sensitive data from crew and flow execution traces"
+icon: "lock"
+mode: "wide"
+---
+
+## Overview
+
+PII Redaction is a CrewAI AMP feature that automatically detects and masks Personally Identifiable Information (PII) in your crew and flow execution traces. This ensures sensitive data like credit card numbers, social security numbers, email addresses, and names are not exposed in your CrewAI AMP traces. You can also create custom recognizers to protect organization-specific data.
+
+
+
+ PII Redaction is available on the Enterprise plan.
+ Deployment must be version 1.8.0 or higher.
+
+
+
+
+ 
+
+
+
+## Why PII Redaction Matters
+
+When running AI agents in production, sensitive information often flows through your crews:
+
+- Customer data from CRM integrations
+- Financial information from payment processors
+- Personal details from form submissions
+- Internal employee data
+
+Without proper redaction, this data appears in traces, making compliance with regulations like GDPR, HIPAA, and PCI-DSS challenging. PII Redaction solves this by automatically masking sensitive data before it's stored in traces.
+
+## How It Works
+
+1. **Detect** - Scan trace event data for known PII patterns
+2. **Classify** - Identify the type of sensitive data (credit card, SSN, email, etc.)
+3. **Mask/Redact** - Replace the sensitive data with masked values based on your configuration
+
+```
+Original: "Contact john.doe@company.com or call 555-123-4567"
+Redacted: "Contact or call "
+```
+
+## Enabling PII Redaction
+
+
+ You must be on the Enterprise plan and your deployment must be version 1.8.0 or higher to use this feature.
+
+
+
+
+ In the CrewAI AMP dashboard, select your deployed crew and go to one of your deployments/automations, then navigate to **Settings** → **PII Protection**.
+
+
+
+ Toggle on **PII Redaction for Traces**. This will enable automatic scanning and redaction of trace data.
+
+
+ You need to manually enable PII Redaction for each deployment.
+
+
+
+ 
+
+
+
+
+ Select which types of PII to detect and redact. Each entity can be individually enabled or disabled.
+
+
+ 
+
+
+
+
+ Save your configuration. PII redaction will be active on all subsequent crew executions, no redeployment is needed.
+
+
+
+## Supported Entity Types
+
+CrewAI supports the following PII entity types, organized by category.
+
+### Global Entities
+
+| Entity | Description | Example |
+|--------|-------------|---------|
+| `CREDIT_CARD` | Credit/debit card numbers | "4111-1111-1111-1111" |
+| `CRYPTO` | Cryptocurrency wallet addresses | "bc1qxy2kgd..." |
+| `DATE_TIME` | Dates and times | "January 15, 2024" |
+| `EMAIL_ADDRESS` | Email addresses | "john@example.com" |
+| `IBAN_CODE` | International bank account numbers | "DE89 3704 0044 0532 0130 00" |
+| `IP_ADDRESS` | IPv4 and IPv6 addresses | "192.168.1.1" |
+| `LOCATION` | Geographic locations | "New York City" |
+| `MEDICAL_LICENSE` | Medical license numbers | "MD12345" |
+| `NRP` | Nationalities, religious, or political groups | - |
+| `PERSON` | Personal names | "John Doe" |
+| `PHONE_NUMBER` | Phone numbers in various formats | "+1 (555) 123-4567" |
+| `URL` | Web URLs | "https://example.com" |
+
+### US-Specific Entities
+
+| Entity | Description | Example |
+|--------|-------------|---------|
+| `US_BANK_NUMBER` | US Bank account numbers | "1234567890" |
+| `US_DRIVER_LICENSE` | US Driver's license numbers | "D1234567" |
+| `US_ITIN` | Individual Taxpayer ID | "900-70-0000" |
+| `US_PASSPORT` | US Passport numbers | "123456789" |
+| `US_SSN` | Social Security Numbers | "123-45-6789" |
+
+## Redaction Actions
+
+For each enabled entity, you can configure how the data is redacted:
+
+| Action | Description | Example Output |
+|--------|-------------|----------------|
+| `mask` | Replace with the entity type label | `` |
+| `redact` | Completely remove the text | *(empty)* |
+
+## Custom Recognizers
+
+In addition to built-in entities, you can create **custom recognizers** to detect organization-specific PII patterns.
+
+
+ 
+
+
+### Recognizer Types
+
+You have two options for custom recognizers:
+
+| Type | Best For | Example Use Case |
+|------|----------|------------------|
+| **Pattern-based (Regex)** | Structured data with predictable formats | Salary amounts, employee IDs, project codes |
+| **Deny-list** | Exact string matches | Company names, internal codenames, specific terms |
+
+### Creating a Custom Recognizer
+
+
+
+ Go to your Organization **Settings** → **Organization** → **Add Recognizer**.
+
+
+
+
+ 
+
+
+ Configure the following fields:
+ - **Name**: A descriptive name for the recognizer
+ - **Entity Type**: The entity label that will appear in redacted output (e.g., `EMPLOYEE_ID`, `SALARY`)
+ - **Type**: Choose between Regex Pattern or Deny List
+ - **Pattern/Values**: Regex pattern or list of strings to match
+ - **Confidence Threshold**: Minimum score (0.0-1.0) required for a match to trigger redaction. Higher values (e.g., 0.8) reduce false positives but may miss some matches. Lower values (e.g., 0.5) catch more matches but may over-redact. Default is 0.8.
+ - **Context Words** (optional): Words that increase detection confidence when found nearby
+
+
+
+ Save the recognizer. It will be available to enable on your deployments.
+
+
+
+### Understanding Entity Types
+
+The **Entity Type** determines how matched content appears in redacted traces:
+
+```
+Entity Type: SALARY
+Pattern: salary:\s*\$\s*\d+
+Input: "Employee salary: $50,000"
+Output: "Employee "
+```
+
+### Using Context Words
+
+Context words improve accuracy by increasing confidence when specific terms appear near the matched pattern:
+
+```
+Context Words: "project", "code", "internal"
+Entity Type: PROJECT_CODE
+Pattern: PRJ-\d{4}
+```
+
+When "project" or "code" appears near "PRJ-1234", the recognizer has higher confidence it's a true match, reducing false positives.
+
+
+## Viewing Redacted Traces
+
+Once PII redaction is enabled, your traces will show redacted values in place of sensitive data:
+
+```
+Task Output: "Customer placed order #12345.
+Contact email: , phone: .
+Payment processed for card ending in ."
+```
+
+Redacted values are clearly marked with angle brackets and the entity type label (e.g., ``), making it easy to understand what data was protected while still allowing you to debug and monitor crew behavior.
+
+
+
+## Best Practices
+
+### Performance Considerations
+
+
+
+ Each enabled entity adds processing overhead. Only enable entities relevant to your data.
+
+
+
+ For custom recognizers, use specific patterns to reduce false positives and improve performance. Regex patterns are best when identifying specific patterns in the traces such as salary, employee id, project code, etc. Deny-list recognizers are best when identifying exact strings in the traces such as company names, internal codenames, etc.
+
+
+
+ Context words improve accuracy by only triggering detection when surrounding text matches.
+
+
+
+## Troubleshooting
+
+
+ **Possible Causes:**
+ - Entity type not enabled in configuration
+ - Pattern doesn't match the data format
+ - Custom recognizer has syntax errors
+
+ **Solutions:**
+ - Verify entity is enabled in Settings → Security
+ - Test regex patterns with sample data
+ - Check logs for configuration errors
+
+
+
+ **Possible Causes:**
+ - Overly broad entity types enabled (e.g., `DATE_TIME` catches dates everywhere)
+ - Custom recognizer patterns are too general
+
+ **Solutions:**
+ - Disable entities that cause false positives
+ - Make custom patterns more specific
+ - Add context words to improve accuracy
+
+
+
+ **Possible Causes:**
+ - Too many entities enabled
+ - NLP-based entities (`PERSON`, `LOCATION`, `NRP`) are computationally expensive as they use machine learning models
+
+ **Solutions:**
+ - Only enable entities you actually need
+ - Consider using pattern-based alternatives where possible
+ - Monitor trace processing times in the dashboard
+
+
+---
+
+## Practical Example: Salary Pattern Matching
+
+This example demonstrates how to create a custom recognizer to detect and mask salary information in your traces.
+
+### Use Case
+
+Your crew processes employee or financial data that includes salary information in formats like:
+- `salary: $50,000`
+- `salary: $125,000.00`
+- `salary:$1,500.50`
+
+You want to automatically mask these values to protect sensitive compensation data.
+
+### Configuration
+
+
+ 
+
+
+| Field | Value |
+|-------|-------|
+| **Name** | `SALARY` |
+| **Entity Type** | `SALARY` |
+| **Type** | Regex Pattern |
+| **Regex Pattern** | `salary:\s*\$\s*\d{1,3}(,\d{3})*(\.\d{2})?` |
+| **Action** | Mask |
+| **Confidence Threshold** | `0.8` |
+| **Context Words** | `salary, compensation, pay, wage, income` |
+
+### Regex Pattern Breakdown
+
+| Pattern Component | Meaning |
+|-------------------|---------|
+| `salary:` | Matches the literal text "salary:" |
+| `\s*` | Matches zero or more whitespace characters |
+| `\$` | Matches the dollar sign (escaped) |
+| `\s*` | Matches zero or more whitespace characters after $ |
+| `\d{1,3}` | Matches 1-3 digits (e.g., "1", "50", "125") |
+| `(,\d{3})*` | Matches comma-separated thousands (e.g., ",000", ",500,000") |
+| `(\.\d{2})?` | Optionally matches cents (e.g., ".00", ".50") |
+
+### Example Results
+
+```
+Original: "Employee record shows salary: $125,000.00 annually"
+Redacted: "Employee record shows annually"
+
+Original: "Base salary:$50,000 with bonus potential"
+Redacted: "Base with bonus potential"
+```
+
+
+ Adding context words like "salary", "compensation", "pay", "wage", and "income" helps increase detection confidence when these terms appear near the matched pattern, reducing false positives.
+
+
+### Enable the Recognizer for Your Deployments
+
+
+ Creating a custom recognizer at the organization level does not automatically enable it for your deployments. You must manually enable each recognizer for every deployment where you want it applied.
+
+
+After creating your custom recognizer, enable it for each deployment:
+
+
+
+ Go to your deployment/automation and open **Settings** → **PII Protection**.
+
+
+
+ Under **Mask Recognizers**, you'll see your organization-defined recognizers. Check the box next to the recognizers you want to enable.
+
+
+ 
+
+
+
+
+ Save your changes. The recognizer will be active on all subsequent executions for this deployment.
+
+
+
+
+ Repeat this process for each deployment where you need the custom recognizer. This gives you granular control over which recognizers are active in different environments (e.g., development vs. production).
+
diff --git a/docs/v1.15.1/en/enterprise/features/rbac.mdx b/docs/v1.15.1/en/enterprise/features/rbac.mdx
new file mode 100644
index 000000000..ad4ed77d7
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/rbac.mdx
@@ -0,0 +1,256 @@
+---
+title: "Role-Based Access Control (RBAC)"
+description: "Control access to crews, tools, and data with roles, scopes, and granular permissions."
+icon: "shield"
+mode: "wide"
+---
+
+## Overview
+
+RBAC in CrewAI AMP enables secure, scalable access management through two layers:
+
+1. **Feature permissions** — control what each role can do across the platform (manage, read, or no access)
+2. **Entity-level permissions** — fine-grained access on individual automations, environment variables, LLM connections, and Git repositories
+
+
+
+
+
+## Users and Roles
+
+Each member in your CrewAI workspace is assigned a role, which determines their access across various features.
+
+You can:
+
+- Use predefined roles (Owner, Member)
+- Create custom roles tailored to specific permissions
+- Assign roles at any time through the settings panel
+
+You can configure users and roles in Settings → Roles.
+
+
+
+ Go to Settings → Roles in CrewAI AMP.
+
+
+ Use a predefined role (Owner, Member) or click{" "}
+ Create role to define a custom one.
+
+
+ Select users and assign the role. You can change this anytime.
+
+
+
+### Predefined Roles
+
+| Role | Description |
+| :--------- | :-------------------------------------------------------------------------- |
+| **Owner** | Full access to all features and settings. Cannot be restricted. |
+| **Member** | Read access to most features, manage access to environment variables, LLM connections, and Studio projects. Cannot modify organization or default settings. |
+
+### Configuration summary
+
+| Area | Where to configure | Options |
+| :-------------------- | :--------------------------------- | :-------------------------------------- |
+| Users & Roles | Settings → Roles | Predefined: Owner, Member; Custom roles |
+| Automation visibility | Automation → Settings → Visibility | Private; Whitelist users/roles |
+
+---
+
+## Feature Permissions Matrix
+
+Every role has a permission level for each feature area. The three levels are:
+
+- **Manage** — full read/write access (create, edit, delete)
+- **Read** — view-only access
+- **No access** — feature is hidden/inaccessible
+
+| Feature | Owner | Member (default) | Available levels | Description |
+| :------------------------ | :------ | :--------------- | :------------------------ | :-------------------------------------------------------------- |
+| `usage_dashboards` | Manage | Read | Manage / Read / No access | View usage metrics and analytics |
+| `crews_dashboards` | Manage | Read | Manage / Read / No access | View deployment dashboards, access automation details |
+| `invitations` | Manage | Read | Manage / Read / No access | Invite new members to the organization |
+| `training_ui` | Manage | Read | Manage / Read / No access | Access training/fine-tuning interfaces |
+| `tools` | Manage | Read | Manage / Read / No access | Create and manage tools |
+| `agents` | Manage | Read | Manage / Read / No access | Create and manage agents |
+| `environment_variables` | Manage | Manage | Manage / No access | Create and manage environment variables |
+| `llm_connections` | Manage | Manage | Manage / No access | Configure LLM provider connections |
+| `default_settings` | Manage | No access | Manage / No access | Modify organization-wide default settings |
+| `organization_settings` | Manage | No access | Manage / No access | Manage billing, plans, and organization configuration |
+| `studio_projects` | Manage | Manage | Manage / No access | Create and edit projects in Studio |
+
+
+ When creating a custom role, most features can be set to **Manage**, **Read**, or **No access**. However, `environment_variables`, `llm_connections`, `default_settings`, `organization_settings`, and `studio_projects` only support **Manage** or **No access** — there is no read-only option for these features.
+
+
+---
+
+## Deploying from GitHub or Zip
+
+One of the most common RBAC questions is: _"What permissions does a team member need to deploy?"_
+
+### Deploy from GitHub
+
+To deploy an automation from a GitHub repository, a user needs:
+
+1. **`crews_dashboards`**: at least `Read` — required to access the automations dashboard where deployments are created
+2. **Git repository access** (if entity-level RBAC for Git repositories is enabled): the user's role must be granted access to the specific Git repository via entity-level permissions
+3. **`studio_projects`: `Manage`** — if building the crew in Studio before deploying
+
+### Deploy from Zip
+
+To deploy an automation from a Zip file upload, a user needs:
+
+1. **`crews_dashboards`**: at least `Read` — required to access the automations dashboard
+2. **Zip deployments enabled**: the organization must not have disabled zip deployments in organization settings
+
+### Quick Reference: Minimum Permissions for Deployment
+
+| Action | Required feature permissions | Additional requirements |
+| :------------------- | :------------------------------------ | :----------------------------------------------- |
+| Deploy from GitHub | `crews_dashboards: Read` | Git repo entity access (if Git RBAC is enabled) |
+| Deploy from Zip | `crews_dashboards: Read` | Zip deployments must be enabled at the org level |
+| Build in Studio | `studio_projects: Manage` | — |
+| Configure LLM keys | `llm_connections: Manage` | — |
+| Set environment vars | `environment_variables: Manage` | Entity-level access (if entity RBAC is enabled) |
+
+---
+
+## Automation‑level Access Control (Entity Permissions)
+
+In addition to organization‑wide roles, CrewAI supports fine‑grained entity-level permissions that restrict access to individual resources.
+
+### Automation Visibility
+
+Automations support visibility settings that restrict access by user or role. This is useful for:
+
+- Keeping sensitive or experimental automations private
+- Managing visibility across large teams or external collaborators
+- Testing automations in isolated contexts
+
+Deployments can be configured as private, meaning only whitelisted users and roles will be able to interact with them.
+
+You can configure automation‑level access control in Automation → Settings → Visibility tab.
+
+
+
+ Navigate to Automation → Settings → Visibility.
+
+
+ Choose Private to restrict access. The organization owner always
+ retains access.
+
+
+ Add specific users and roles allowed to view, run, and access
+ logs/metrics/settings.
+
+
+ Save changes, then confirm that non‑whitelisted users cannot view or run the
+ automation.
+
+
+
+### Private visibility: access outcomes
+
+| Action | Owner | Whitelisted user/role | Not whitelisted |
+| :--------------------------- | :---- | :-------------------- | :-------------- |
+| View automation | ✓ | ✓ | ✗ |
+| Run automation/API | ✓ | ✓ | ✗ |
+| Access logs/metrics/settings | ✓ | ✓ | ✗ |
+
+
+ The organization owner always has access. In private mode, only whitelisted
+ users and roles can view, run, and access logs/metrics/settings.
+
+
+
+
+
+
+### Deployment Permission Types
+
+When granting entity-level access to a specific automation, you can assign these permission types:
+
+| Permission | What it allows |
+| :------------------- | :-------------------------------------------------- |
+| `run` | Execute the automation and use its API |
+| `traces` | View execution traces and logs |
+| `manage_settings` | Edit, redeploy, rollback, or delete the automation |
+| `human_in_the_loop` | Respond to human-in-the-loop (HITL) requests |
+| `full_access` | All of the above |
+
+### Entity-level RBAC for Other Resources
+
+When entity-level RBAC is enabled, access to these resources can also be controlled per user or role:
+
+| Resource | Controlled by | Description |
+| :--------------------- | :------------------------------- | :---------------------------------------------------- |
+| Environment variables | Entity RBAC feature flag | Restrict which roles/users can view or manage specific env vars |
+| LLM connections | Entity RBAC feature flag | Restrict access to specific LLM provider configurations |
+| Git repositories | Git repositories RBAC org setting | Restrict which roles/users can access specific connected repos |
+
+---
+
+## Common Role Patterns
+
+While CrewAI ships with Owner and Member roles, most teams benefit from creating custom roles. Here are common patterns:
+
+### Developer Role
+
+A role for team members who build and deploy automations but don't manage organization settings.
+
+| Feature | Permission |
+| :------------------------ | :--------- |
+| `usage_dashboards` | Read |
+| `crews_dashboards` | Manage |
+| `invitations` | Read |
+| `training_ui` | Read |
+| `tools` | Manage |
+| `agents` | Manage |
+| `environment_variables` | Manage |
+| `llm_connections` | Manage |
+| `default_settings` | No access |
+| `organization_settings` | No access |
+| `studio_projects` | Manage |
+
+### Viewer / Stakeholder Role
+
+A role for non-technical stakeholders who need to monitor automations and view results.
+
+| Feature | Permission |
+| :------------------------ | :--------- |
+| `usage_dashboards` | Read |
+| `crews_dashboards` | Read |
+| `invitations` | No access |
+| `training_ui` | Read |
+| `tools` | Read |
+| `agents` | Read |
+| `environment_variables` | No access |
+| `llm_connections` | No access |
+| `default_settings` | No access |
+| `organization_settings` | No access |
+| `studio_projects` | No access |
+
+### Ops / Platform Admin Role
+
+A role for platform operators who manage infrastructure settings but may not build agents.
+
+| Feature | Permission |
+| :------------------------ | :--------- |
+| `usage_dashboards` | Manage |
+| `crews_dashboards` | Manage |
+| `invitations` | Manage |
+| `training_ui` | Read |
+| `tools` | Read |
+| `agents` | Read |
+| `environment_variables` | Manage |
+| `llm_connections` | Manage |
+| `default_settings` | Manage |
+| `organization_settings` | Read |
+| `studio_projects` | No access |
+
+---
+
+
+ Contact our support team for assistance with RBAC questions.
+
diff --git a/docs/v1.15.1/en/enterprise/features/secrets-manager/aws-workload-identity.mdx b/docs/v1.15.1/en/enterprise/features/secrets-manager/aws-workload-identity.mdx
new file mode 100644
index 000000000..f9ba0e8c0
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/secrets-manager/aws-workload-identity.mdx
@@ -0,0 +1,321 @@
+---
+title: AWS Workload Identity (OIDC Federation)
+description: Configure AWS Secrets Manager via Workload Identity for rotation-aware, credential-free secret access
+sidebarTitle: With Workload Identity
+icon: "id-badge"
+---
+
+## Overview
+
+This guide configures AWS Secrets Manager as a secret provider using **Workload Identity Federation**: CrewAI Platform mints short-lived OIDC tokens, exchanges them for AWS credentials via STS, and reads your secrets — without a long-lived AWS access key being stored anywhere.
+
+
+**Why this path:** secrets are resolved at automation execution time, so **rotated values propagate to the next kickoff with no re-deploy**. If you only need static credentials and don't care about rotation propagation, see the simpler [AWS — static keys / AssumeRole](/en/enterprise/features/secrets-manager/aws) guide.
+
+
+### How it works at runtime
+
+1. The deployment worker requests a fresh OIDC JWT from CrewAI Platform.
+2. The worker calls `sts:AssumeRoleWithWebIdentity` on the IAM role you set up below, presenting the JWT.
+3. AWS STS validates the JWT against CrewAI Platform's public OIDC issuer (so your platform installation must be reachable from AWS), then returns short-lived AWS credentials.
+4. The worker uses those credentials to call `secretsmanager:GetSecretValue`.
+5. The fetched value is injected as the environment variable's value for that automation kickoff.
+
+OIDC subject tokens are cached for ~1 hour to avoid re-issuing on every kickoff. Secret values are fetched fresh on every kickoff regardless of OIDC cache state, which is what makes this path rotation-aware.
+
+## Prerequisites
+
+
+Before starting, make sure you have:
+
+- The automation pod image must include CrewAI runtime version `1.14.5` or later.
+- An AWS account with permission to create IAM OIDC providers, IAM roles, and IAM policies.
+- The AWS region where your secrets live (or will live), e.g. `us-east-1`.
+- A CrewAI Platform organization where your user has the `workload_identity_configs: manage` and `secret_providers: manage` permissions. See [Permissions (RBAC)](/en/enterprise/features/secrets-manager/usage#permissions-rbac).
+- **Your CrewAI organization UUID.** Find it on the organization's settings page in CrewAI Platform — the trust policy in Step 3 binds the IAM role to this specific organization.
+- **Your CrewAI Platform installation must be reachable from AWS over HTTPS** so that AWS STS can fetch the OIDC discovery document and JWKS during token validation. Confirm with your platform administrator that the host is internet-accessible (or that AWS has network reach to it via VPC peering / equivalent).
+
+
+## Step 1 — Find Your CrewAI Platform OIDC Issuer URL
+
+Your CrewAI Platform installation publishes an OpenID Connect discovery document at `https:///.well-known/openid-configuration`. The `issuer` field in that document is the URL AWS will register as a trusted OIDC provider.
+
+Open the URL in a browser (replacing `` with your actual hostname, e.g. `app.crewai.com`):
+
+```
+https:///.well-known/openid-configuration
+```
+
+You should see JSON containing:
+
+```json
+{
+ "issuer": "https://",
+ "jwks_uri": "https:///oauth2/jwks",
+ ...
+}
+```
+
+Note the exact value of `issuer` — you'll use it in Step 3.
+
+
+If the URL returns 404 or 503, contact your platform administrator. The OIDC issuer requires a private signing key to be configured at install time. See the platform's installation guide for the `OIDC_PRIVATE_KEY` and `OIDC_ISSUER` configuration.
+
+
+## Step 2 — Register CrewAI Platform as an IAM OIDC Identity Provider
+
+Open the [IAM → Identity providers console](https://console.aws.amazon.com/iam/home#/identity_providers) and click **Add provider**.
+
+- **Provider type:** OpenID Connect.
+- **Provider URL:** the `issuer` value from Step 1 (e.g. `https://app.crewai.com`).
+- **Audience:** `sts.amazonaws.com`
+
+Click **Add provider**.
+
+Or via CLI:
+
+```bash
+aws iam create-open-id-connect-provider \
+ --url "https://" \
+ --client-id-list "sts.amazonaws.com" \
+ --thumbprint-list "$(echo | openssl s_client -servername -connect :443 2>/dev/null | openssl x509 -fingerprint -noout -sha1 | cut -d= -f2 | tr -d ':')"
+```
+
+Copy the **OpenIDConnectProviderArn** from the output (or the provider's ARN from the console). You'll use it in Step 3.
+
+
+AWS does not actually validate the thumbprint for STS WebIdentity calls — it always re-fetches the JWKS at validation time — but the API requires the field to be present.
+
+
+{/* SCREENSHOT: AWS IAM "Add identity provider" form filled with the Platform issuer URL and audience sts.amazonaws.com → /images/secrets-manager/aws-wi/01-add-oidc-provider.png */}
+{/* SCREENSHOT: Provider detail page showing the provider's ARN → /images/secrets-manager/aws-wi/02-oidc-provider-arn.png */}
+
+## Step 3 — Create the IAM Role
+
+Save as `trust-policy.json`, replacing ``, `` (the issuer host **without** `https://` or `http://`, e.g. `app.crewai.com`), and `` (from the Prerequisites):
+
+```json
+{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Principal": {
+ "Federated": "arn:aws:iam:::oidc-provider/"
+ },
+ "Action": "sts:AssumeRoleWithWebIdentity",
+ "Condition": {
+ "StringEquals": {
+ ":aud": "sts.amazonaws.com",
+ ":sub": "organization:"
+ }
+ }
+ }
+ ]
+}
+```
+
+Create the role:
+
+```bash
+aws iam create-role \
+ --role-name crewai-secrets-reader \
+ --assume-role-policy-document file://trust-policy.json
+```
+
+Copy the **Role Arn** from the output — that's your `aws_role_arn`. You'll paste it into CrewAI Platform in Step 6.
+
+
+The two conditions scope the trust precisely: `aud` restricts assumption to tokens with the AWS STS audience, and `sub` scopes federation to a specific CrewAI organization — only tokens minted for that org's automations are accepted. CrewAI Platform always sets both claims on AWS workload identity tokens.
+
+
+{/* SCREENSHOT: IAM "Create role" with Web Identity trust type, federated provider selector pointing at the CrewAI Platform OIDC provider → /images/secrets-manager/aws-wi/03-create-role-trust.png */}
+
+## Step 4 — Create and attach the IAM policy for Secrets Manager + KMS access
+
+Save as `secrets-policy.json`, replacing the placeholders with your account ID, region, secret-name prefix, and the KMS key ARN(s) that encrypt those secrets:
+
+```json
+{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Sid": "SecretsManagerListForUI",
+ "Effect": "Allow",
+ "Action": "secretsmanager:ListSecrets",
+ "Resource": "*"
+ },
+ {
+ "Sid": "SecretsManagerRead",
+ "Effect": "Allow",
+ "Action": [
+ "secretsmanager:GetSecretValue"
+ ],
+ "Resource": "arn:aws:secretsmanager:::secret:-*"
+ },
+ {
+ "Sid": "KMSDecrypt",
+ "Effect": "Allow",
+ "Action": [
+ "kms:Decrypt"
+ ],
+ "Resource": "arn:aws:kms:::key/"
+ }
+ ]
+}
+```
+
+`SecretsManagerListForUI` powers the **Secret Name autocomplete** in the Environment Variables form and the **Test Connection** button on the credential. `secretsmanager:ListSecrets` only accepts `Resource: "*"` — it is account-scoped at the IAM layer.
+
+Attach the policy to the role using either the CLI (inline policy, simplest) or the console UI; for environments that reuse the same permissions across many roles, use the **Managed policy** tab for a reusable, named policy.
+
+
+
+ ```bash
+ aws iam put-role-policy \
+ --role-name crewai-secrets-reader \
+ --policy-name SecretsManagerRead \
+ --policy-document file://secrets-policy.json
+ ```
+
+ This attaches the policy **inline** to the role. Inline policies are tied to the role and cannot be reused on other roles.
+
+
+
+ ```bash
+ POLICY_ARN=$(aws iam create-policy \
+ --policy-name CrewAISecretsReader \
+ --policy-document file://secrets-policy.json \
+ --query 'Policy.Arn' --output text)
+
+ aws iam attach-role-policy \
+ --role-name crewai-secrets-reader \
+ --policy-arn "$POLICY_ARN"
+ ```
+
+ A managed policy is a standalone IAM resource you can attach to multiple roles.
+
+
+
+ 1. Open the [IAM → Roles console](https://console.aws.amazon.com/iam/home#/roles) and select **crewai-secrets-reader**.
+ 2. On the **Permissions** tab, click **Add permissions** → **Create inline policy**.
+ 3. Switch to the **JSON** editor and paste the contents of `secrets-policy.json`.
+ 4. Click **Next**, give the policy a name (e.g. `SecretsManagerRead`), and click **Create policy**.
+
+ To create a reusable managed policy instead, use **IAM → Policies → Create policy** and then attach it to the role from the role's **Permissions** tab.
+
+ {/* SCREENSHOT: IAM Role detail → Permissions → Create inline policy with JSON editor → /images/secrets-manager/aws-wi/03b-attach-inline-policy.png */}
+
+
+
+## Step 5 — Create at Least One Secret in AWS
+
+If you don't already have a secret to test against, create one now:
+
+```bash
+aws secretsmanager create-secret \
+ --region \
+ --name crewai-test-keyword \
+ --secret-string "hello from aws"
+```
+
+Or via the [AWS Secrets Manager console](https://console.aws.amazon.com/secretsmanager/) → **Store a new secret**.
+
+{/* SCREENSHOT: AWS Secrets Manager "Store a new secret" page with a sample value → /images/secrets-manager/aws-wi/04-create-secret.png */}
+
+## Step 6 — Add a Workload Identity Configuration in CrewAI Platform
+
+In CrewAI Platform, navigate to **Settings** → **Workload Identity** and click **Add Workload Identity Config**.
+
+{/* SCREENSHOT: Sidebar highlighting Settings → Workload Identity → /images/secrets-manager/aws-wi/05-amp-settings-wi-nav.png */}
+{/* SCREENSHOT: Empty state of Workload Identity page with "Add Workload Identity Config" button → /images/secrets-manager/aws-wi/06-amp-wi-empty-state.png */}
+
+Fill the form:
+
+- **Name:** A descriptive name, e.g. `aws-prod`.
+- **Cloud Provider:** `AWS`.
+- **AWS Role ARN:** the **Role Arn** from Step 3.
+- **AWS Region:** the region where your secrets live, e.g. `us-east-1`.
+- (Optional) Check **Set as default for AWS** if you'd like this WI config to be the default selected when creating an AWS-backed secret credential.
+
+Click **Create**.
+
+{/* SCREENSHOT: "Add Workload Identity Config" form with AWS, role ARN, and region filled in → /images/secrets-manager/aws-wi/07-amp-add-wi-config-aws.png */}
+{/* SCREENSHOT: Workload Identity list showing the new AWS row with "(default)" badge if applicable → /images/secrets-manager/aws-wi/08-amp-wi-list-with-aws.png */}
+
+## Step 7 — Add a Secret Provider Credential Bound to the WI Config
+
+Navigate to **Settings** → **Secret Provider Credentials** and click **Add Credential**.
+
+Fill the form:
+
+- **Name:** A descriptive name, e.g. `aws-prod-wi`.
+- **Provider:** `AWS Secrets Manager`.
+- **Authentication Method:** `Workload Identity` (instead of static keys / AssumeRole).
+- **Workload Identity Configuration:** select the config you created in Step 6 (e.g. `aws-prod`).
+- (Optional) Check **Set as default credential for this provider**.
+
+The form will only ask for **AWS Region** under Workload Identity — the static-credential fields (Access Key ID, Secret Access Key, Role ARN, External ID) are intentionally hidden because they don't apply to this path; the role ARN comes from the linked WI config.
+
+Click **Create**.
+
+{/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + Workload Identity + WI config dropdown selected → /images/secrets-manager/aws-wi/09-amp-add-credential-aws-wi.png */}
+
+## Step 8 — Test the Connection
+
+After saving the credential, click **Test Connection**. For workload-identity credentials this verifies the OIDC handshake: CrewAI Platform mints a JWT, exchanges it with AWS STS via `sts:AssumeRoleWithWebIdentity`, and confirms the resulting credentials can call `sts:GetCallerIdentity` against the assumed role. A green result means the federation binding is healthy.
+
+A successful Test Connection proves the trust policy, OIDC provider registration, and audience condition are all wired correctly. It does **not** prove per-secret IAM is correct — `secretsmanager:GetSecretValue` on a specific secret ARN is exercised separately when an environment variable resolves at kickoff. See [Troubleshooting](#troubleshooting) for handshake failure modes.
+
+## Step 9 — Reference the Secret in an Environment Variable
+
+Now reference the secret on an automation, exactly as you would for any other Secrets Manager-backed env var. See [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) for the form fields and behavior.
+
+The only difference between WI-backed and static-keys-backed env vars is **when** the secret is read:
+
+- **WI-backed:** secret value is read fresh on every automation kickoff.
+- **Static-keys-backed:** secret value is read at deploy time and baked into the deployment image.
+
+## Step 10 — Verify Rotation
+
+After the deployment is running, rotate the secret in AWS:
+
+```bash
+aws secretsmanager update-secret \
+ --region \
+ --secret-id crewai-test-keyword \
+ --secret-string "rotated value"
+```
+
+Trigger a new automation kickoff. The kickoff's environment will see `"rotated value"` — no re-deploy, no worker restart, no waiting on a TTL.
+
+To confirm in logs (if you have access to the worker), look for:
+
+```
+Workload identity config '' (aws): N secret(s) resolved
+```
+
+This line appears for every kickoff and indicates a fresh `GetSecretValue` call against AWS.
+
+## Troubleshooting
+
+| Symptom | Likely cause |
+|---|---|
+| Test Connection fails with a handshake error | The `sts:AssumeRoleWithWebIdentity` call was rejected. Verify the trust policy's federated principal ARN references `oidc-provider/` (host **without** `https://` or `http://`, no trailing slash), the audience condition is exactly `sts.amazonaws.com`, the `sub` condition matches your CrewAI organization UUID, and the platform's OIDC discovery URL is reachable from AWS over the public internet. |
+| `InvalidIdentityToken: Couldn't retrieve verification key from your identity provider` | AWS STS can't reach your CrewAI Platform host to fetch JWKS. Confirm the host is internet-accessible from AWS, the OIDC discovery URL returns 200, and the JWKS endpoint is reachable. |
+| `AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity` | Trust policy mismatch. Re-check Step 3: the federated principal ARN must include `oidc-provider/` (host **without** `https://` or `http://`, no trailing slash), the audience condition must be exactly `sts.amazonaws.com`, and the `sub` condition must equal `organization:`. |
+| Secret Name autocomplete shows `AccessDenied: secretsmanager:ListSecrets` | The role is missing `secretsmanager:ListSecrets` with `Resource: "*"`. Add the `SecretsManagerListForUI` statement from Step 4. |
+| Kickoff fails to resolve a secret even though Test Connection passes | The WI binding is healthy, but resource-scoped IAM is missing on the failing secret. Audit the role's `secretsmanager:GetSecretValue` and `kms:Decrypt` permissions for that specific secret's ARN and KMS key. |
+| `RegionDisabledException` / no secrets found | The region in the Workload Identity Config doesn't match where the secret lives. Re-check Step 6. |
+| Rotated value isn't picked up on the next kickoff | Confirm the env var on the automation is referencing a Workload Identity-backed credential (not a static-keys credential). The static path bakes values into the deploy image. |
+
+### Reference Links
+
+- AWS: [Creating OpenID Connect (OIDC) identity providers](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html)
+- AWS: [Configuring a role for OpenID Connect federation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc_relying-party.html)
+- AWS: [STS:AssumeRoleWithWebIdentity API reference](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
+
+## Next Steps
+
+- [Use secrets in environment variables and manage permissions](/en/enterprise/features/secrets-manager/usage)
+- For multi-cloud, see also [GCP Workload Identity Federation](/en/enterprise/features/secrets-manager/gcp-workload-identity) and [Azure Workload Identity Federation](/en/enterprise/features/secrets-manager/azure-workload-identity).
diff --git a/docs/v1.15.1/en/enterprise/features/secrets-manager/aws.mdx b/docs/v1.15.1/en/enterprise/features/secrets-manager/aws.mdx
new file mode 100644
index 000000000..11eecac8f
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/secrets-manager/aws.mdx
@@ -0,0 +1,295 @@
+---
+title: AWS Secrets Manager (Static Credentials)
+description: Configure AWS Secrets Manager as a secret provider for CrewAI Platform using static access keys or AssumeRole
+sidebarTitle: With Static Credentials
+icon: "key"
+---
+
+## Overview
+
+This guide walks you through configuring AWS Secrets Manager as a secret provider for your CrewAI Platform organization, using **static credentials** (access keys, optionally with AssumeRole). By the end, CrewAI Platform will be able to read secrets stored in your AWS account and inject them as environment variable values at runtime.
+
+
+This guide covers the **static credentials** path — secrets are resolved at deploy time and baked into the deployment image. Rotated values require a re-deploy. If you want rotation-aware secrets that update on every automation kickoff (no re-deploy), see [AWS Workload Identity (OIDC Federation)](/en/enterprise/features/secrets-manager/aws-workload-identity).
+
+
+
+This guide covers the AWS-side configuration and the credential setup in CrewAI Platform. To then reference a secret from an environment variable, see [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage).
+
+
+## Prerequisites
+
+
+Before starting, make sure you have:
+
+- An AWS account with permission to create IAM users, customer-managed policies, and (optionally) IAM roles.
+- The AWS region where your secrets live (or will live), for example `us-east-1`.
+- A CrewAI Platform organization where your user has the `secret_providers: manage` permission. See [Permissions (RBAC)](/en/enterprise/features/secrets-manager/usage#permissions-rbac).
+
+
+## Choose an Authentication Method
+
+CrewAI Platform supports two ways for the platform to authenticate with AWS Secrets Manager. Pick one before you begin — the steps below differ depending on which you choose.
+
+| Method | When to use | Trade-offs |
+|---|---|---|
+| **Static access keys** | Getting started, single-account deployments | Simplest setup; access keys must be rotated manually |
+| **AssumeRole** | Cross-account, production hardening | Short-lived credentials; supports External ID; requires extra IAM role |
+
+The rest of this guide uses tabs in Steps 3–5 so you can follow the path that matches your choice.
+
+## Step 1 — Create an IAM User
+
+Open the [IAM console](https://console.aws.amazon.com/iam/), navigate to **Users**, then click **Create user**.
+
+- Suggested name: `crewai-secrets-reader`.
+- Leave **Provide user access to the AWS Management Console** unchecked — this principal is used programmatically by CrewAI Platform, not by humans.
+- Click **Next**.
+
+On the **Set permissions** page, leave the default selection. You will attach the policy in Step 3.
+
+Click **Next**, review, and click **Create user**.
+
+For full details, see the AWS documentation: [Create an IAM user in your AWS account](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html).
+
+{/* SCREENSHOT: AWS IAM "Create user" form filled with name "crewai-secrets-reader" → /images/secrets-manager/aws/01-create-iam-user.png */}
+
+## Step 2 — Create the IAM Policy
+
+CrewAI Platform needs read-only access to AWS Secrets Manager and permission to decrypt secrets via KMS. Create a customer-managed policy with the following JSON.
+
+In the IAM console, navigate to **Policies**, then click **Create policy**.
+
+Choose the **JSON** tab and replace the contents with:
+
+```json
+{
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Sid": "SecretsManagerRead",
+ "Effect": "Allow",
+ "Action": [
+ "secretsmanager:ListSecrets",
+ "secretsmanager:GetSecretValue",
+ "secretsmanager:DescribeSecret"
+ ],
+ "Resource": "*"
+ },
+ {
+ "Sid": "KMSDecrypt",
+ "Effect": "Allow",
+ "Action": [
+ "kms:DescribeKey",
+ "kms:Decrypt"
+ ],
+ "Resource": "*"
+ }
+ ]
+}
+```
+
+Click **Next**, then on the **Review and create** page:
+
+- **Policy name:** `CrewAISecretsManagerRead`
+- **Description (optional):** `Read-only access to AWS Secrets Manager for CrewAI Platform`
+
+Click **Create policy**.
+
+
+The policy above grants `*` on `Resource` for simplicity. In production, scope the `Resource` down to the ARNs of the specific secrets CrewAI Platform should access, and scope `kms:Decrypt` to the specific KMS key ARNs that encrypt those secrets. See the [AWS guidance on least privilege](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html).
+
+
+{/* SCREENSHOT: AWS IAM "Create policy" → JSON tab with the policy above pasted → /images/secrets-manager/aws/02-create-policy-json-editor.png */}
+{/* SCREENSHOT: AWS IAM "Review and create policy" page with name "CrewAISecretsManagerRead" → /images/secrets-manager/aws/03-policy-review-and-create.png */}
+
+## Step 3 — Attach the Policy
+
+
+
+ 1. In the IAM console, navigate to **Users** and click the user you created in Step 1.
+ 2. On the **Permissions** tab, click **Add permissions** → **Attach policies directly**.
+ 3. Search for `CrewAISecretsManagerRead`, select it, and click **Next**.
+ 4. Click **Add permissions**.
+
+ {/* SCREENSHOT: "Add permissions" → "Attach policies directly" with CrewAISecretsManagerRead selected → /images/secrets-manager/aws/04a-attach-policy-to-user.png */}
+
+
+
+ With AssumeRole, the policy is attached to a separate IAM **role** (not directly to the user). The user from Step 1 only needs permission to call `sts:AssumeRole` on that role.
+
+ **Create the role:**
+
+ 1. In the IAM console, navigate to **Roles** and click **Create role**.
+ 2. **Trusted entity type:** AWS account. Choose **This account** (or **Another AWS account** for cross-account setups, then enter the AWS account ID hosting the IAM user from Step 1).
+ 3. (Recommended) Check **Require external ID** and enter a value you generate yourself — this is a shared secret you will paste into CrewAI Platform in Step 5.
+ 4. Click **Next**.
+ 5. Attach the `CrewAISecretsManagerRead` policy.
+ 6. Click **Next**, name the role `CrewAISecretsManagerRole`, and click **Create role**.
+
+ **Allow the IAM user to assume the role:**
+
+ 1. Open the role you just created and copy its **ARN**.
+ 2. In the IAM console, navigate to **Users**, click the user from Step 1, and on the **Permissions** tab click **Add permissions** → **Create inline policy**.
+ 3. On the **JSON** tab, paste the following (replace `ROLE_ARN_FROM_ABOVE`):
+
+ ```json
+ {
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Action": "sts:AssumeRole",
+ "Resource": "ROLE_ARN_FROM_ABOVE"
+ }
+ ]
+ }
+ ```
+
+ 4. Name the policy `CrewAIAssumeSecretsRole` and click **Create policy**.
+
+ {/* SCREENSHOT: IAM "Create role" trust policy step with External ID checkbox enabled → /images/secrets-manager/aws/04b-create-role-trust-policy.png */}
+ {/* SCREENSHOT: Inline sts:AssumeRole policy attached to the IAM user → /images/secrets-manager/aws/04c-attach-assumerole-on-user.png */}
+
+
+
+## Step 4 — Get Credentials
+
+
+
+ 1. In the IAM console, open the user from Step 1.
+ 2. Click the **Security credentials** tab.
+ 3. Under **Access keys**, click **Create access key**.
+ 4. Select **Application running outside AWS** (or **Other**) as the use case. Click **Next**.
+ 5. (Optional) Add a description tag. Click **Create access key**.
+ 6. Click **Show** to reveal the secret access key, then copy both the **Access key ID** and the **Secret access key**, or click **Download .csv file**.
+
+
+ The secret access key is shown only once. If you close this page without copying it, you will need to delete the key and create a new one.
+
+
+ For full details, see the AWS documentation: [Manage access keys for IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html).
+
+ {/* SCREENSHOT: Access key use-case selector ("Application running outside AWS") → /images/secrets-manager/aws/05a-create-access-key-use-case.png */}
+ {/* SCREENSHOT: "Retrieve access keys" page with Show/Download buttons → /images/secrets-manager/aws/06a-retrieve-access-keys.png */}
+
+
+
+ Even with AssumeRole, CrewAI Platform still needs an access key for the IAM user — it uses those keys as the calling identity to perform the `sts:AssumeRole` call.
+
+ 1. Create an access key for the user exactly as described in the **Static access keys** tab above.
+ 2. Open the role you created in Step 3 and copy:
+ - The **Role ARN** (from the role summary).
+ - The **External ID** you configured (if any) — you set this yourself in Step 3, so make sure you have it on hand.
+
+ {/* SCREENSHOT: IAM role detail page showing Role ARN → /images/secrets-manager/aws/05b-role-arn-detail.png */}
+
+
+
+## Step 5 — Add the Credential in CrewAI Platform
+
+In CrewAI Platform, navigate to **Settings** → **Secret Provider Credentials** and click **Add Credential**.
+
+{/* SCREENSHOT: Sidebar/nav highlighting Settings → Secret Provider Credentials → /images/secrets-manager/usage/01-amp-settings-nav.png */}
+{/* SCREENSHOT: Empty state of Secret Provider Credentials page with "Add Credential" button → /images/secrets-manager/usage/02-amp-credentials-empty-state.png */}
+
+
+
+ Fill the form:
+
+ - **Name:** A descriptive name, e.g. `aws-prod`.
+ - **Provider:** `AWS Secrets Manager`.
+ - **Region:** The AWS region where your secrets live, e.g. `us-east-1`. This must match the region of the secrets you want to read.
+ - **Access Key ID:** The value from Step 4.
+ - **Secret Access Key:** The value from Step 4.
+ - (Optional) Check **Set as default credential for this provider**. The default credential is used by environment variables that reference AWS secrets without specifying a credential explicitly.
+
+ Leave **Role ARN** and **External ID** blank.
+
+ Click **Create**.
+
+ {/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + static access keys filled in → /images/secrets-manager/usage/03a-amp-add-credential-form-aws-static.png */}
+
+
+
+ Fill the form:
+
+ - **Name:** A descriptive name, e.g. `aws-prod-assumerole`.
+ - **Provider:** `AWS Secrets Manager`.
+ - **Region:** The AWS region where your secrets live.
+ - **Access Key ID:** The IAM user's access key from Step 4 (used to call STS).
+ - **Secret Access Key:** The IAM user's secret access key from Step 4.
+ - **Role ARN:** The Role ARN you copied in Step 4.
+ - **External ID:** The External ID you set on the role's trust policy (omit if none).
+ - (Optional) Check **Set as default credential for this provider**.
+
+ Click **Create**.
+
+ {/* SCREENSHOT: "Add Secret Provider Credential" form with AWS + AssumeRole fields filled in → /images/secrets-manager/usage/03b-amp-add-credential-form-aws-assumerole.png */}
+
+
+
+
+**How the two modes behave at runtime:**
+
+- With **static access keys** only, CrewAI Platform calls AWS Secrets Manager directly using the keys you supplied.
+- When a **Role ARN** is set, CrewAI Platform first calls `sts:AssumeRole` with the supplied access keys (and External ID if configured), then uses the short-lived credentials returned by STS to read your secrets.
+
+
+{/* SCREENSHOT: Credentials list showing the new AWS row, with "(default)" badge if applicable → /images/secrets-manager/usage/04-amp-credential-created.png */}
+
+## Step 6 — Create at Least One Secret in AWS
+
+If you do not already have secrets in AWS Secrets Manager, create one now so you can verify the connection in Step 7.
+
+In the [AWS Secrets Manager console](https://console.aws.amazon.com/secretsmanager/), click **Store a new secret**.
+
+- **Secret type:** Choose **Other type of secret**.
+- **Key/value pairs** — either:
+ - Enter one or more key/value pairs (recommended for structured secrets), or
+ - Use the **Plaintext** tab for a single string value.
+- **Encryption key:** Use `aws/secretsmanager` (the AWS-managed key) unless you have a specific KMS key requirement.
+
+Click **Next**, then enter:
+
+- **Secret name:** A unique name, e.g. `crewai/openai-api-key`.
+- **Description (optional):** A short note about what the secret is for.
+
+Click **Next** through the rotation and review steps, then click **Store**.
+
+
+**JSON-key reference syntax.** If you store a secret with multiple key/value pairs (a JSON object), CrewAI Platform can extract a specific field using the `secret-name#json_key` syntax in environment variable references. For example, a secret named `database-credentials` with `{"username": "...", "password": "..."}` can be referenced as `database-credentials#password`. See [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) for details.
+
+
+For full details, see the AWS documentation: [Create an AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html).
+
+{/* SCREENSHOT: AWS Secrets Manager "Choose secret type" page → /images/secrets-manager/aws/07-create-secret-store-type.png */}
+{/* SCREENSHOT: AWS Secrets Manager "Configure secret" page with name and description → /images/secrets-manager/aws/08-create-secret-name.png */}
+
+## Step 7 — Test the Connection
+
+Back in CrewAI Platform, on the **Secret Provider Credentials** page, find the credential you just created and click **Test Connection**.
+
+A success toast confirms that CrewAI Platform can authenticate to AWS and read secrets from your account.
+
+{/* SCREENSHOT: Success toast after clicking "Test Connection" → /images/secrets-manager/usage/05-amp-test-connection-success.png */}
+
+If the test fails, check the most common causes:
+
+| Symptom | Likely cause |
+|---|---|
+| `AccessDenied` on `secretsmanager:ListSecrets` | Policy not attached, or wrong user. Re-check Step 3. |
+| `AccessDenied` on `kms:Decrypt` | Missing the `KMSDecrypt` statement, or your secrets use a customer-managed KMS key not covered by `Resource: "*"`. |
+| `InvalidClientTokenId` / `SignatureDoesNotMatch` | Wrong access key ID or secret access key. Re-check Step 4 and Step 5. |
+| `RegionDisabledException` / no secrets found | The credential's **Region** does not match where your secrets actually live. |
+| `AccessDenied` on `sts:AssumeRole` (AssumeRole only) | Inline `sts:AssumeRole` policy missing on the IAM user, or the role's trust policy does not allow this principal, or the External ID does not match. |
+| Test passes immediately after creating the IAM user, but fails next time | IAM credentials sometimes take a minute or two to propagate globally. Retry. |
+
+## Next Steps
+
+Now that AWS is connected, head to [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage) to:
+
+- Grant org members the right permissions to use (or manage) Secrets Manager.
+- Reference your AWS secrets from CrewAI Platform environment variables.
+
+If you want **rotation-aware** secrets that propagate without re-deploying, switch to [AWS Workload Identity (OIDC Federation)](/en/enterprise/features/secrets-manager/aws-workload-identity) — same secret store, no static credentials, secrets are fetched per kickoff.
diff --git a/docs/v1.15.1/en/enterprise/features/secrets-manager/azure-workload-identity.mdx b/docs/v1.15.1/en/enterprise/features/secrets-manager/azure-workload-identity.mdx
new file mode 100644
index 000000000..091410322
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/secrets-manager/azure-workload-identity.mdx
@@ -0,0 +1,275 @@
+---
+title: Azure Workload Identity Federation
+description: Configure Azure Key Vault via Microsoft Entra Workload Identity Federation for rotation-aware, credential-free secret access
+sidebarTitle: With Workload Identity
+icon: "id-badge"
+---
+
+## Overview
+
+This guide configures Azure Key Vault as a secret provider using **Microsoft Entra Workload Identity Federation**: CrewAI Platform mints short-lived OIDC tokens, exchanges them for an Entra access token via the Microsoft identity platform, and reads your secrets — without any client secret being stored anywhere.
+
+
+**Why this path:** secrets are resolved at automation execution time, so **rotated values propagate to the next kickoff with no re-deploy**. If you only need static credentials, see the simpler [Azure Key Vault — client secret](/en/enterprise/features/secrets-manager/azure) guide.
+
+
+### How it works at runtime
+
+1. The deployment worker requests a fresh OIDC JWT from CrewAI Platform.
+2. The worker presents the JWT to Microsoft Entra at `https://login.microsoftonline.com//oauth2/v2.0/token` as a `client_assertion` (`urn:ietf:params:oauth:client-assertion-type:jwt-bearer`), referencing the App Registration whose **Federated Identity Credential** matches the JWT's issuer + subject.
+3. Entra validates the JWT against your platform's OIDC discovery document and JWKS, then returns a short-lived access token scoped to `https://vault.azure.net/.default`.
+4. The worker calls Azure Key Vault to read the secret.
+5. The fetched value is injected as the environment variable's value for that automation kickoff.
+
+OIDC subject tokens are cached for ~1 hour to avoid re-issuing on every kickoff. Secret values are fetched fresh on every kickoff regardless of OIDC cache state, which is what makes this path rotation-aware.
+
+## Prerequisites
+
+
+Before starting, make sure you have:
+
+- The automation pod image must include CrewAI runtime version `1.14.5` or later.
+- An Azure subscription and a Microsoft Entra tenant you can manage.
+- Permission in the tenant to create App Registrations and add Federated Identity Credentials.
+- A Key Vault using **Azure RBAC** for authorization (not the legacy access-policy model).
+- A CrewAI Platform organization where your user has the `workload_identity_configs: manage` and `secret_providers: manage` permissions. See [Permissions (RBAC)](/en/enterprise/features/secrets-manager/usage#permissions-rbac).
+- **Your CrewAI Platform installation must be reachable from Microsoft Entra over HTTPS** so that Entra can fetch the OIDC discovery document and JWKS during token validation. Confirm with your platform administrator that the host is internet-accessible.
+
+
+## Step 1 — Find Your CrewAI Platform OIDC Issuer URL
+
+Your CrewAI Platform installation publishes an OpenID Connect discovery document at `https:///.well-known/openid-configuration`. The `issuer` field there is the URL Microsoft Entra will register as a trusted federation issuer.
+
+Open the URL in a browser:
+
+```
+https:///.well-known/openid-configuration
+```
+
+You should see JSON containing:
+
+```json
+{
+ "issuer": "https://",
+ "jwks_uri": "https:///oauth2/jwks",
+ ...
+}
+```
+
+Note the exact value of `issuer` — you'll use it in Step 3.
+
+
+If the URL returns 404 or 503, contact your platform administrator. The OIDC issuer requires a private signing key to be configured at install time. See the platform's installation guide for the `OIDC_PRIVATE_KEY` and `OIDC_ISSUER` configuration.
+
+
+## Step 2 — Create an App Registration
+
+In the [Microsoft Entra portal](https://entra.microsoft.com), navigate to **App registrations** and click **New registration**.
+
+- **Name:** `crewai-secrets-reader`
+- **Supported account types:** `Accounts in this organizational directory only (Single tenant)`.
+- Leave **Redirect URI** blank.
+
+Click **Register**. Note the **Application (client) ID** and **Directory (tenant) ID** on the App's overview blade — you'll use them in Step 6.
+
+{/* SCREENSHOT: Azure portal "Register an application" form with name "crewai-secrets-reader" → /images/secrets-manager/azure-wi/01-register-app.png */}
+
+## Step 3 — Add a Federated Identity Credential
+
+The Federated Identity Credential tells Microsoft Entra: *trust JWTs minted by this issuer, with this subject, when they're presented as a client assertion for this App Registration.*
+
+On the App Registration, navigate to **Certificates & secrets** → **Federated credentials** → **Add credential**.
+
+- **Federated credential scenario:** `Other issuer`.
+- **Issuer:** the CrewAI Platform issuer URL from Step 1, e.g. `https://`.
+- **Subject identifier:** `organization:` — exactly the value of the JWT's `sub` claim. Find your org UUID in CrewAI Platform's organization settings. This scopes federation to a specific CrewAI organization — only tokens minted for that org's automations are accepted.
+- **Name:** any descriptive label, e.g. `crewai-org-prod`.
+- **Audience:** `api://AzureADTokenExchange`. This is the fixed audience Microsoft Entra requires for federated credentials and is what CrewAI Platform sets in the JWT's `aud` claim.
+
+Click **Add**.
+
+
+**Per-org isolation.** The subject identifier (`organization:`) restricts the federated credential to a specific CrewAI organization's tokens. If multiple CrewAI organizations should share one App Registration, add one Federated Identity Credential per organization (each with the org's UUID).
+
+
+For full details, see the Microsoft documentation: [Configure a federated identity credential on an app](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-create-trust).
+
+{/* SCREENSHOT: "Add credential" panel with scenario = "Other issuer", issuer URL, subject "organization:", audience "api://AzureADTokenExchange" → /images/secrets-manager/azure-wi/02-add-federated-credential.png */}
+
+## Step 4 — Grant the App Registration Access to Key Vault
+
+Grant the App Registration **Key Vault Secrets User** on the target vault — the same role you'd use for the static-credentials path. Use either vault-wide (simpler) or per-secret (least privilege).
+
+
+
+ ```bash
+ az role assignment create \
+ --assignee \
+ --role "Key Vault Secrets User" \
+ --scope $(az keyvault show --name --query id -o tsv)
+ ```
+
+ Vault-wide scope grants the `secrets/list` permission that the **Secret Name autocomplete** in CrewAI Platform's env-var form depends on. Choose this tab if you want autocomplete to work.
+
+ {/* SCREENSHOT: Key Vault "Add role assignment" panel with "Key Vault Secrets User" and the App Registration selected → /images/secrets-manager/azure-wi/03-grant-vault-rbac.png */}
+
+
+
+ ```bash
+ az role assignment create \
+ --assignee \
+ --role "Key Vault Secrets User" \
+ --scope $(az keyvault secret show --vault-name --name --query id -o tsv)
+ ```
+
+ Per-secret bindings disable the **Secret Name autocomplete** in CrewAI Platform's env-var form (autocomplete requires `secrets/list`, which is vault-scoped only). Type the full secret name instead.
+
+ {/* SCREENSHOT: Per-secret IAM panel with the App Registration assigned **Key Vault Secrets User** at the secret resource scope → /images/secrets-manager/azure-wi/04-per-secret-rbac.png */}
+
+
+
+ For a **vault-wide** assignment:
+
+ 1. Open your Key Vault in the Azure portal.
+ 2. Click **Access control (IAM)** → **Add** → **Add role assignment**.
+ 3. Select role **Key Vault Secrets User** → **Next**.
+ 4. Click **Select members**, search for the App Registration `crewai-secrets-reader`, click **Select**.
+ 5. Click **Review + assign**.
+
+ For a **per-secret** assignment, use the same flow but start from **Objects** → **Secrets** → select the secret → its own **Access control (IAM)** panel. Per-secret bindings disable autocomplete (see the Per-secret tab above).
+
+
+
+## Step 5 — Create at Least One Secret in Key Vault
+
+If you don't already have a secret to test against, create one via the Azure CLI:
+
+```bash
+az keyvault secret set \
+ --vault-name \
+ --name openai-api-key \
+ --value "sk-your-actual-key"
+```
+
+Or via the Azure portal:
+
+1. Open your Key Vault and navigate to **Objects** → **Secrets**.
+2. Click **Generate/Import**.
+3. **Upload options:** `Manual`. **Name:** the secret name (e.g. `openai-api-key`). **Secret value:** paste the value.
+4. Click **Create**.
+
+
+**Secret name conventions.** Azure Key Vault secret names cannot contain underscores. CrewAI Platform automatically converts underscores to hyphens when calling Azure (e.g., `db_password` is sent as `db-password`), so you can keep underscore-style env-var names — but the underlying secret in Key Vault must use hyphens.
+
+
+## Step 6 — Add a Workload Identity Configuration in CrewAI Platform
+
+In CrewAI Platform, navigate to **Settings** → **Workload Identity** and click **Add Workload Identity Config**.
+
+Fill the form:
+
+- **Name:** A descriptive name, e.g. `azure-prod`.
+- **Cloud Provider:** `Azure`.
+- **Tenant ID:** your Microsoft Entra **Directory (tenant) ID** from Step 2.
+- **Client ID:** your App Registration's **Application (client) ID** from Step 2.
+- (Optional) Check **Set as default for Azure** if you'd like this to be the default WI config selected when creating an Azure-backed secret credential.
+
+The **Audience** is fixed at `api://AzureADTokenExchange` — Microsoft Entra requires this exact audience for federated credentials, so no Audience field is shown on the form.
+
+Click **Create**.
+
+{/* SCREENSHOT: "Add Workload Identity Config" form with Azure, tenant ID, client ID populated → /images/secrets-manager/azure-wi/05-amp-add-wi-config-azure.png */}
+{/* SCREENSHOT: Workload Identity list showing AWS, GCP, and Azure rows → /images/secrets-manager/azure-wi/06-amp-wi-list-with-azure.png */}
+
+## Step 7 — Add a Secret Provider Credential Bound to the WI Config
+
+Navigate to **Settings** → **Secret Provider Credentials** and click **Add Credential**.
+
+Fill the form:
+
+- **Name:** A descriptive name, e.g. `azure-prod-wi`.
+- **Provider:** `Azure Key Vault`.
+- **Authentication Method:** `Workload Identity`.
+- **Workload Identity Configuration:** select the config you created in Step 6.
+- **Key Vault URL:** the vault's DNS hostname, e.g. `https://my-vault.vault.azure.net`.
+- (Optional) Check **Set as default credential for this provider**.
+
+The form will only ask for **Key Vault URL** under Workload Identity — the static-credential fields (Tenant ID, Client ID, Client Secret) are intentionally hidden because they don't apply to this path; tenant + client come from the linked WI config.
+
+Click **Create**.
+
+
+**One App Registration, many vaults.** The Key Vault URL lives on the credential, not the WI config. So one App Registration (and one WI config) can serve multiple Key Vaults — just create one Secret Provider Credential per vault, all linked to the same WI config.
+
+
+{/* SCREENSHOT: "Add Secret Provider Credential" form with Azure + Workload Identity + WI config dropdown + vault URL → /images/secrets-manager/azure-wi/07-amp-add-credential-azure-wi.png */}
+
+## Step 8 — Test the Connection
+
+After saving the credential, click **Test Connection**. For workload-identity credentials this verifies the OIDC handshake: CrewAI Platform mints a JWT, presents it to Microsoft Entra as a federated `client_assertion`, and confirms Entra returns a vault-scoped access token. A green result means the federation binding is healthy.
+
+A successful Test Connection proves the Federated Identity Credential's issuer, subject, and audience all match, and that the App Registration is reachable. It does **not** prove per-secret Key Vault RBAC is correct — `getSecret` against a specific secret is exercised separately when an environment variable resolves at kickoff. See [Troubleshooting](#troubleshooting) for handshake failure modes.
+
+## Step 9 — Reference the Secret in an Environment Variable
+
+Reference the secret on an automation, exactly as you would for any other Secrets Manager-backed env var. See [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) for the form fields and behavior.
+
+## Step 10 — Verify Rotation
+
+After the deployment is running, rotate the secret in Key Vault:
+
+```bash
+az keyvault secret set \
+ --vault-name \
+ --name openai-api-key \
+ --value "rotated value"
+```
+
+Trigger a new automation kickoff. The kickoff's environment will see `"rotated value"` — no re-deploy, no worker restart, no TTL wait.
+
+To confirm in worker logs, look for:
+
+```
+Workload identity config '' (azure): N secret(s) resolved
+```
+
+This line appears for every kickoff and indicates a fresh `getSecret` call against Azure Key Vault.
+
+For an end-to-end fingerprint-based verification, see [Verify Rotation End-to-End](/en/enterprise/features/secrets-manager/verify-rotation).
+
+## Troubleshooting
+
+| Symptom | Likely cause |
+|---|---|
+| Test Connection fails with a handshake error | The federated `client_assertion` was rejected by Microsoft Entra. Verify the Federated Identity Credential's **Issuer** matches the platform's `issuer` value exactly, **Subject** is `organization:` (matching the JWT's `sub` claim), **Audience** is `api://AzureADTokenExchange`, and the platform's OIDC discovery URL is reachable from Entra over the public internet. |
+| `AADSTS70021: No matching federated identity record found for presented assertion` | The Federated Identity Credential's **Issuer** + **Subject** + **Audience** don't all match the JWT exactly. Re-check Step 3: subject must be `organization:` (matching the JWT's `sub` claim), audience must be `api://AzureADTokenExchange`. |
+| `AADSTS700024: Client assertion is not within its valid time range` | The CrewAI Platform host's clock is significantly skewed from real time. Check NTP on the host. |
+| `AADSTS50013: Assertion failed signature validation` | Microsoft Entra couldn't verify the JWT's signature. Confirm `https:///oauth2/jwks` is reachable from the public internet and serves a valid JWKS. |
+| Secret Name autocomplete shows `Forbidden — does not have permission to perform action 'Microsoft.KeyVault/vaults/secrets/.../list'` | The App Registration's **Key Vault Secrets User** role is scoped to a single secret. Grant the role at the vault scope so the `list` data-plane action is allowed. See Step 4. |
+| Kickoff fails to resolve a secret even though Test Connection passes | The WI binding is healthy, but per-secret Key Vault RBAC is missing on the failing secret. Audit **Key Vault Secrets User** on that specific secret (or extend the role assignment to the vault scope). |
+| `Forbidden — request was not authorized` (vault using legacy access policies) | The vault hasn't been switched to Azure RBAC. Under the vault's **Access configuration**, set permission model to **Azure role-based access control** and re-grant the role from Step 4. |
+| `azure_vault_url is required for Azure secret resolution` (worker logs) | The Secret Provider Credential is missing **Key Vault URL**. Re-check Step 7. |
+| Rotated value isn't picked up on the next kickoff | Confirm the env var on the automation is referencing a Workload Identity-backed credential (not a static-keys credential). The static path bakes values into the deploy image. |
+
+### Reference Links
+
+- Microsoft: [Microsoft Entra Workload Identity Federation overview](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation)
+- Microsoft: [Configure a federated identity credential on an app](https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation-create-trust)
+- Microsoft: [Azure Key Vault RBAC guide](https://learn.microsoft.com/en-us/azure/key-vault/general/rbac-guide)
+
+## Next Steps
+
+- [Use secrets in environment variables and manage permissions](/en/enterprise/features/secrets-manager/usage)
+- For multi-cloud, the AWS-equivalent setup is at [AWS Workload Identity (OIDC Federation)](/en/enterprise/features/secrets-manager/aws-workload-identity) and the GCP-equivalent at [GCP Workload Identity Federation](/en/enterprise/features/secrets-manager/gcp-workload-identity).
+
+## Screenshot Reference
+
+The placeholders above map to:
+
+- `01-register-app.png` — Azure portal "Register an application" form filled with `crewai-secrets-reader`.
+- `02-add-federated-credential.png` — App Registration → Certificates & secrets → Federated credentials → Add credential, with **Other issuer**, the platform issuer URL, subject `organization:`, audience `api://AzureADTokenExchange`.
+- `03-grant-vault-rbac.png` — Key Vault → Access control (IAM) → Add role assignment, with **Key Vault Secrets User** and the App Registration selected.
+- `04-per-secret-rbac.png` — Same form but at a single secret's IAM scope (alternative least-privilege path).
+- `05-amp-add-wi-config-azure.png` — CrewAI Platform "Add Workload Identity Config" form with Cloud Provider = Azure, Tenant ID, Client ID populated.
+- `06-amp-wi-list-with-azure.png` — Workload Identity list page after creation, showing rows for AWS, GCP, and the new Azure config.
+- `07-amp-add-credential-azure-wi.png` — "Add Secret Provider Credential" form with Provider = Azure Key Vault, Auth = Workload Identity, the WI config picked, and Key Vault URL populated.
diff --git a/docs/v1.15.1/en/enterprise/features/secrets-manager/azure.mdx b/docs/v1.15.1/en/enterprise/features/secrets-manager/azure.mdx
new file mode 100644
index 000000000..2c39e6fee
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/secrets-manager/azure.mdx
@@ -0,0 +1,196 @@
+---
+title: Azure Key Vault
+description: Configure Azure Key Vault as a secret provider for CrewAI Platform, end-to-end
+sidebarTitle: With Static Credentials
+icon: "key"
+---
+
+## Overview
+
+This guide walks you through configuring Azure Key Vault as a secret provider for your CrewAI Platform organization, using a **Microsoft Entra App Registration with a client secret**. By the end, CrewAI Platform will be able to read secrets stored in your Azure Key Vault and inject them as environment variable values at runtime.
+
+
+This guide covers the **static credentials** path — secrets are resolved at deploy time and baked into the deployment image. Rotated values require a re-deploy. If you want rotation-aware secrets that update on every automation kickoff, see [Azure Workload Identity Federation](/en/enterprise/features/secrets-manager/azure-workload-identity).
+
+
+
+This guide covers the Azure-side configuration and the credential setup in CrewAI Platform. To then reference a secret from an environment variable, see [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage).
+
+
+## Prerequisites
+
+
+Before starting, make sure you have:
+
+- An Azure subscription with permission to create App Registrations in Microsoft Entra and to grant role assignments on Key Vault resources.
+- A Key Vault using **Azure RBAC** for authorization (not the legacy access-policy model). If your vault still uses access policies, switch it to RBAC under the vault's **Access configuration** blade.
+- A CrewAI Platform organization where your user has the `secret_providers: manage` permission. See [Permissions (RBAC)](/en/enterprise/features/secrets-manager/usage#permissions-rbac).
+
+
+## Step 1 — Create an App Registration
+
+The App Registration is the Microsoft Entra-side identity CrewAI Platform will authenticate as.
+
+In the [Microsoft Entra portal](https://entra.microsoft.com), navigate to **App registrations** and click **New registration**.
+
+- **Name:** `crewai-secrets-reader`
+- **Supported account types:** `Accounts in this organizational directory only (Single tenant)`.
+- Leave **Redirect URI** blank.
+
+Click **Register**. Note the **Application (client) ID** and **Directory (tenant) ID** on the App's overview blade — you'll paste both into CrewAI Platform in Step 4.
+
+For full details, see the Microsoft documentation: [Register an application with the Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app).
+
+{/* SCREENSHOT: Azure "Register an application" form with name "crewai-secrets-reader" → /images/secrets-manager/azure/01-register-app.png */}
+
+## Step 2 — Create a Client Secret
+
+On the App Registration, navigate to **Certificates & secrets** → **Client secrets** → **New client secret**.
+
+- **Description:** `crewai-platform`
+- **Expires:** pick a duration that matches your rotation policy (Microsoft caps this at 24 months).
+
+Click **Add**. Copy the **Value** column immediately — it can never be re-displayed once you leave the page.
+
+
+Client secrets are long-lived static credentials. Store the value securely (in a password manager or your own secret store) and rotate it before expiry. To eliminate static credentials entirely, use [Azure Workload Identity Federation](/en/enterprise/features/secrets-manager/azure-workload-identity) instead.
+
+
+{/* SCREENSHOT: "Client secrets" tab with the new secret row and the "Value" column highlighted → /images/secrets-manager/azure/02-create-client-secret.png */}
+
+## Step 3 — Grant the App Registration Access to Key Vault
+
+CrewAI Platform needs read access to secrets in your Key Vault. Use one of two scopes — **vault-wide** for simplicity, or **per-secret** for least privilege.
+
+
+
+ In the [Key Vault console](https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.KeyVault%2Fvaults), open the target vault, then navigate to **Access control (IAM)** → **Add** → **Add role assignment**.
+
+ - **Role:** **Key Vault Secrets User**
+ - **Assign access to:** User, group, or service principal
+ - **Members:** search for and select your App Registration (`crewai-secrets-reader`).
+
+ Click **Review + assign**.
+
+ Or via the Azure CLI:
+
+ ```bash
+ az role assignment create \
+ --assignee \
+ --role "Key Vault Secrets User" \
+ --scope $(az keyvault show --name --query id -o tsv)
+ ```
+
+ {/* SCREENSHOT: Key Vault "Add role assignment" panel with "Key Vault Secrets User" and the App Registration selected → /images/secrets-manager/azure/03-grant-vault-rbac.png */}
+
+
+
+ Grant the role at the level of an individual secret. Repeat for each secret CrewAI Platform should access:
+
+ ```bash
+ az role assignment create \
+ --assignee \
+ --role "Key Vault Secrets User" \
+ --scope $(az keyvault secret show --vault-name --name --query id -o tsv)
+ ```
+
+ {/* SCREENSHOT: Per-secret "Access control (IAM)" panel showing role assignment scoped to one secret → /images/secrets-manager/azure/04-per-secret-rbac.png */}
+
+
+
+
+The **Key Vault Secrets User** role allows reading secret values but not listing all secrets in the vault. CrewAI Platform's secret-name autocomplete also calls `list` — that permission is included by the role at the vault scope, but **not** at the per-secret scope. With per-secret bindings, autocomplete won't suggest secrets; type the full secret name instead.
+
+
+## Step 4 — Add the Credential in CrewAI Platform
+
+In CrewAI Platform, navigate to **Settings** → **Secret Provider Credentials** and click **Add Credential**.
+
+{/* SCREENSHOT: Sidebar/nav highlighting Settings → Secret Provider Credentials → /images/secrets-manager/usage/01-amp-settings-nav.png */}
+
+Fill the form:
+
+- **Name:** A descriptive name, e.g. `azure-prod`.
+- **Provider:** `Azure Key Vault`.
+- **Key Vault URL:** the vault's DNS hostname, e.g. `https://my-vault.vault.azure.net`.
+- **Tenant ID:** your Microsoft Entra **Directory (tenant) ID** from Step 1.
+- **Client ID:** your App Registration's **Application (client) ID** from Step 1.
+- **Client Secret:** the **Value** you copied in Step 2.
+- (Optional) Check **Set as default credential for this provider**. The default credential is used by environment variables that reference Azure secrets without specifying a credential explicitly.
+
+Click **Create**.
+
+{/* SCREENSHOT: "Add Secret Provider Credential" form with Azure fields filled in → /images/secrets-manager/azure/05-amp-add-credential-form-azure.png */}
+
+## Step 5 — Create at Least One Secret in Azure Key Vault
+
+If you don't already have secrets in Key Vault, create one now so you can verify the connection in Step 6.
+
+In the Key Vault console, navigate to **Objects** → **Secrets** → **Generate/Import**.
+
+- **Upload options:** `Manual`
+- **Name:** e.g. `openai-api-key`
+- **Secret value:** paste your secret value
+- Leave the rest at defaults.
+
+Click **Create**.
+
+Or via the Azure CLI:
+
+```bash
+az keyvault secret set \
+ --vault-name \
+ --name openai-api-key \
+ --value "sk-your-actual-key"
+```
+
+
+**Secret name conventions.** Azure Key Vault secret names cannot contain underscores. CrewAI Platform automatically converts underscores to hyphens when calling Azure (e.g., `db_password` is sent as `db-password`), so you can keep underscore-style env-var names — but the underlying secret in Key Vault must use hyphens.
+
+
+
+**JSON-key reference syntax.** Key Vault treats secret values as opaque strings. If your secret value happens to be a JSON object, CrewAI Platform can extract a single field using the `secret-name#json_key` syntax (e.g. `database-credentials#password`). See [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage#referencing-secrets-in-environment-variables) for details.
+
+
+For full details, see the Microsoft documentation: [Set and retrieve a secret](https://learn.microsoft.com/en-us/azure/key-vault/secrets/quick-create-cli).
+
+{/* SCREENSHOT: Azure Key Vault "Create a secret" form with name and value → /images/secrets-manager/azure/06-create-secret.png */}
+
+## Step 6 — Test the Connection
+
+Back in CrewAI Platform, on the **Secret Provider Credentials** page, find the credential you just created and click **Test Connection**.
+
+A success toast confirms that CrewAI Platform can authenticate to Microsoft Entra and read secrets from your vault.
+
+{/* SCREENSHOT: Success toast after clicking "Test Connection" on the Azure credential → /images/secrets-manager/azure/07-test-connection-success.png */}
+
+If the test fails, check the most common causes:
+
+| Symptom | Likely cause |
+|---|---|
+| `AADSTS7000215: Invalid client secret provided` | The pasted **Client Secret** is wrong or expired. Re-create the secret (Step 2) and update the credential. |
+| `AADSTS700016: Application not found in the directory` | The **Tenant ID** or **Client ID** doesn't match the App Registration. Re-check Step 4. |
+| `Forbidden — caller does not have permission` | The App Registration is missing the **Key Vault Secrets User** role on the vault (or per-secret). Re-check Step 3. |
+| `Vault not found` / DNS errors | The **Key Vault URL** is wrong, or your vault has private endpoints that block public access. Confirm the host responds to `curl https://.vault.azure.net/secrets?api-version=7.4`. |
+| `Forbidden — request was not authorized` (vault using legacy access policies) | The vault hasn't been switched to Azure RBAC. Under the vault's **Access configuration**, set permission model to **Azure role-based access control** and re-grant the role from Step 3. |
+
+## Next Steps
+
+Now that Azure Key Vault is connected, head to [Using the Secrets Manager](/en/enterprise/features/secrets-manager/usage) to:
+
+- Grant org members the right permissions to use (or manage) Secrets Manager.
+- Reference your Azure secrets from CrewAI Platform environment variables.
+
+If you want **rotation-aware** secrets that propagate without re-deploying, switch to [Azure Workload Identity Federation](/en/enterprise/features/secrets-manager/azure-workload-identity) — same vault, no client secret to rotate, secrets are fetched per kickoff.
+
+## Screenshot Reference
+
+The placeholders above map to:
+
+- `01-register-app.png` — Azure portal "Register an application" form filled with `crewai-secrets-reader`.
+- `02-create-client-secret.png` — App Registration → Certificates & secrets → Client secrets, with the freshly-created secret row visible (Value column highlighted before it gets masked).
+- `03-grant-vault-rbac.png` — Key Vault → Access control (IAM) → Add role assignment, with **Key Vault Secrets User** picked and the App Registration selected as a member.
+- `04-per-secret-rbac.png` — Same panel but scoped to a single secret resource (alternative least-privilege path).
+- `05-amp-add-credential-form-azure.png` — CrewAI Platform "Add Secret Provider Credential" form: Provider = Azure Key Vault, all five fields populated.
+- `06-create-secret.png` — Azure Key Vault "Create a secret" panel with `openai-api-key` and a pasted value.
+- `07-test-connection-success.png` — CrewAI Platform success toast / row state after clicking **Test Connection** on the credential.
diff --git a/docs/v1.15.1/en/enterprise/features/secrets-manager/gcp-workload-identity.mdx b/docs/v1.15.1/en/enterprise/features/secrets-manager/gcp-workload-identity.mdx
new file mode 100644
index 000000000..7c594d643
--- /dev/null
+++ b/docs/v1.15.1/en/enterprise/features/secrets-manager/gcp-workload-identity.mdx
@@ -0,0 +1,273 @@
+---
+title: GCP Workload Identity Federation
+description: Configure Google Cloud Secret Manager via Workload Identity Federation for rotation-aware, credential-free secret access
+sidebarTitle: With Workload Identity
+icon: "id-badge"
+---
+
+## Overview
+
+This guide configures Google Cloud Secret Manager as a secret provider using **Workload Identity Federation**: CrewAI Platform mints short-lived OIDC tokens, exchanges them for Google Cloud credentials via the Security Token Service, and reads your secrets — without a long-lived service account key being stored anywhere.
+
+
+**Why this path:** secrets are resolved at automation execution time, so **rotated values propagate to the next kickoff with no re-deploy**. If you only need static credentials, see the simpler [GCP — service account key](/en/enterprise/features/secrets-manager/gcp) guide.
+
+
+### How it works at runtime
+
+1. The deployment worker requests a fresh OIDC JWT from CrewAI Platform.
+2. The worker exchanges the JWT for a federated Google credential via the [Security Token Service](https://cloud.google.com/iam/docs/reference/sts/rest), referencing the Workload Identity Pool Provider you set up below.
+3. The worker calls `secretmanager.googleapis.com:accessSecretVersion` to read the secret, using the federated credential directly (the federated principal holds `roles/secretmanager.secretAccessor` — see Step 4).
+4. The fetched value is injected as the environment variable's value for that automation kickoff.
+
+OIDC subject tokens are cached for ~1 hour to avoid re-issuing on every kickoff. Secret values are fetched fresh on every kickoff regardless of OIDC cache state, which is what makes this path rotation-aware.
+
+## Prerequisites
+
+
+Before starting, make sure you have:
+
+- The automation pod image must include CrewAI runtime version `1.14.5` or later.
+- A Google Cloud project with the **Secret Manager API**, **Security Token Service API**, and **IAM Credentials API** enabled. Enable them via the console or:
+
+ ```bash
+ gcloud services enable secretmanager.googleapis.com sts.googleapis.com iamcredentials.googleapis.com \
+ --project=
+ ```
+
+- Permission in the project to create Workload Identity Pools, IAM roles, service accounts, and (if needed) secrets.
+- A CrewAI Platform organization where your user has the `workload_identity_configs: manage` and `secret_providers: manage` permissions. See [Permissions (RBAC)](/en/enterprise/features/secrets-manager/usage#permissions-rbac).
+- **Your CrewAI Platform installation must be reachable from Google Cloud over HTTPS** so that GCP STS can fetch the OIDC discovery document and JWKS during token validation. Confirm with your platform administrator that the host is internet-accessible.
+
+
+## Step 1 — Find Your CrewAI Platform OIDC Issuer URL
+
+Your CrewAI Platform installation publishes an OpenID Connect discovery document at `https:///.well-known/openid-configuration`. The `issuer` field there is the URL Google will register as a trusted OIDC provider.
+
+Open the URL in a browser:
+
+```
+https:///.well-known/openid-configuration
+```
+
+You should see JSON containing:
+
+```json
+{
+ "issuer": "https://",
+ "jwks_uri": "https:///oauth2/jwks",
+ ...
+}
+```
+
+Note the exact value of `issuer` — you'll use it in Step 3.
+
+
+If the URL returns 404 or 503, contact your platform administrator. The OIDC issuer requires a private signing key to be configured at install time. See the platform's installation guide for the `OIDC_PRIVATE_KEY` and `OIDC_ISSUER` configuration.
+
+
+## Step 2 — Create a Workload Identity Pool
+
+A Workload Identity Pool is a Google Cloud-side container for trusted external identities. You'll register CrewAI Platform as a provider inside this pool.
+
+```bash
+gcloud iam workload-identity-pools create crewai-pool \
+ --project= \
+ --location=global \
+ --display-name="CrewAI Platform"
+```
+
+Or in the [Workload Identity Pools console](https://console.cloud.google.com/iam-admin/workload-identity-pools), click **Create Pool**.
+
+{/* SCREENSHOT: GCP "Create Workload Identity Pool" form with name "crewai-pool" → /images/secrets-manager/gcp-wi/01-create-pool.png */}
+
+## Step 3 — Add CrewAI Platform as an OIDC Provider in the Pool
+
+```bash
+gcloud iam workload-identity-pools providers create-oidc crewai-provider \
+ --project= \
+ --location=global \
+ --workload-identity-pool=crewai-pool \
+ --display-name="CrewAI Platform OIDC" \
+ --issuer-uri="https://" \
+ --attribute-mapping="google.subject=assertion.sub,attribute.organization=assertion.organization_id" \
+ --attribute-condition="assertion.organization_id != ''"
+```
+
+The `--attribute-mapping` tells Google how to map JWT claims into Google attributes:
+- `google.subject` is the principal identifier — we map it to the JWT's `sub` claim, which CrewAI Platform sets to `organization:`.
+- `attribute.organization` is a custom attribute — we map it to the JWT's `organization_id` claim so you can reference it in IAM bindings later.
+
+The `--attribute-condition` is a defense-in-depth check that rejects tokens missing an `organization_id` claim.
+
+Get the **provider resource name** (you'll need it for the audience and IAM bindings):
+
+```bash
+gcloud iam workload-identity-pools providers describe crewai-provider \
+ --project= \
+ --location=global \
+ --workload-identity-pool=crewai-pool \
+ --format="value(name)"
+```
+
+Output looks like:
+
+```
+projects//locations/global/workloadIdentityPools/crewai-pool/providers/crewai-provider
+```
+
+This is your **Workload Identity Provider** value for CrewAI Platform in Step 6. CrewAI Platform automatically computes the OIDC audience as `//iam.googleapis.com/` when issuing tokens.
+
+{/* SCREENSHOT: "Add provider to pool" form with OIDC selected, issuer URI, audience defaults, attribute mapping → /images/secrets-manager/gcp-wi/02-add-oidc-provider.png */}
+
+## Step 4 — Grant Secret Manager Access to the Federated Principal
+
+Bind both Secret Manager roles at project scope to the federated principal — one role enables the Secret Name autocomplete in the env-var form, the other allows reading secret values at automation kickoff. Both are required for the feature to work end-to-end.
+
+```bash
+PRINCIPAL_SET="principalSet://iam.googleapis.com/projects//locations/global/workloadIdentityPools/crewai-pool/attribute.organization/"
+
+# Required for the Secret Name autocomplete (calls secretmanager.secrets.list)
+gcloud projects add-iam-policy-binding \
+ --member="$PRINCIPAL_SET" \
+ --role="roles/secretmanager.viewer"
+
+# Required to read secret values at kickoff
+gcloud projects add-iam-policy-binding \
+ --member="$PRINCIPAL_SET" \
+ --role="roles/secretmanager.secretAccessor"
+```
+
+Replace `