---
title: CodeDocsSearchTool
description: A semantic search tool for code documentation websites using RAG capabilities
icon: book-open
---

## CodeDocsSearchTool

The CodeDocsSearchTool is a specialized Retrieval-Augmented Generation (RAG) tool that enables semantic search within code documentation websites. It inherits from the base RagTool class and provides both fixed and dynamic documentation URL searching capabilities.

## Installation

```bash
pip install 'crewai[tools]'
```

## Usage Example

```python
from crewai import Agent
from crewai_tools import CodeDocsSearchTool

# Method 1: Dynamic documentation URL
docs_search = CodeDocsSearchTool()

# Method 2: Fixed documentation URL
fixed_docs_search = CodeDocsSearchTool(
    docs_url="https://docs.example.com"
)

# Create an agent with the tool
researcher = Agent(
    role='Documentation Researcher',
    goal='Search through code documentation semantically',
    backstory='Expert at finding relevant information in technical documentation.',
    tools=[docs_search],
    verbose=True
)
```

## Input Schema

The tool supports two input schemas depending on initialization:

### Dynamic URL Schema
```python
class CodeDocsSearchToolSchema(BaseModel):
    search_query: str  # The semantic search query
    docs_url: str     # URL of the documentation site to search
```

### Fixed URL Schema
```python
class FixedCodeDocsSearchToolSchema(BaseModel):
    search_query: str  # The semantic search query
```

## Function Signature

```python
def __init__(self, docs_url: Optional[str] = None, **kwargs):
    """
    Initialize the documentation search tool.

    Args:
        docs_url (Optional[str]): Fixed URL to a documentation site. If provided, 
            the tool will only search this documentation.
        **kwargs: Additional arguments passed to the parent RagTool
    """

def _run(self, search_query: str, **kwargs: Any) -> Any:
    """
    Perform semantic search on the documentation site.

    Args:
        search_query (str): The semantic search query
        **kwargs: Additional arguments (including 'docs_url' for dynamic mode)

    Returns:
        str: Relevant documentation passages based on semantic search
    """
```

## Best Practices

1. Choose initialization method based on use case:
   - Use fixed URL when repeatedly searching the same documentation
   - Use dynamic URL when searching different documentation sites
2. Write clear, semantic search queries
3. Ensure documentation sites are accessible
4. Consider documentation structure and size
5. Handle potential URL access errors in agent prompts

## Integration Example

```python
from crewai import Agent, Task, Crew
from crewai_tools import CodeDocsSearchTool

# Example 1: Fixed documentation search
api_docs_search = CodeDocsSearchTool(
    docs_url="https://api.example.com/docs"
)

# Example 2: Dynamic documentation search
flexible_docs_search = CodeDocsSearchTool()

# Create agents
api_analyst = Agent(
    role='API Documentation Analyst',
    goal='Find relevant API endpoints and usage examples',
    backstory='Expert at analyzing API documentation.',
    tools=[api_docs_search]
)

docs_researcher = Agent(
    role='Documentation Researcher',
    goal='Search through various documentation sites',
    backstory='Specialist in finding information across multiple docs.',
    tools=[flexible_docs_search]
)

# Define tasks
fixed_search_task = Task(
    description="""Find all authentication-related endpoints 
    in the API documentation.""",
    agent=api_analyst
)

# The agent will use:
# {
#   "search_query": "authentication endpoints and methods"
# }

dynamic_search_task = Task(
    description="""Search through the Python documentation at 
    docs.python.org for information about async/await.""",
    agent=docs_researcher
)

# The agent will use:
# {
#   "search_query": "async await syntax and usage",
#   "docs_url": "https://docs.python.org"
# }

# Create crew
crew = Crew(
    agents=[api_analyst, docs_researcher],
    tasks=[fixed_search_task, dynamic_search_task]
)

# Execute
result = crew.kickoff()
```

## Notes

- Inherits from RagTool for semantic search capabilities
- Supports both fixed and dynamic documentation URLs
- Uses embeddings for semantic search
- Thread-safe operations
- Automatically handles documentation loading and embedding
- Optimized for technical documentation search
