mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-09 08:08:32 +00:00
- Added documentation for file operation tools - Added documentation for search tools - Added documentation for web scraping tools - Added documentation for specialized tools (RAG, code interpreter) - Added documentation for API-based tools (SerpApi, Serply) Link to Devin run: https://app.devin.ai/sessions/d2f72a2dfb214659aeb3e9f67ed961f7 Co-Authored-By: Joe Moura <joao@crewai.com>
218 lines
5.0 KiB
Plaintext
218 lines
5.0 KiB
Plaintext
---
|
|
title: Directory Read Tool
|
|
description: A tool for recursively listing directory contents
|
|
---
|
|
|
|
# Directory Read Tool
|
|
|
|
The Directory Read Tool provides functionality to recursively list all files within a directory. It supports both fixed and dynamic directory path modes, allowing you to specify the directory at initialization or runtime.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install 'crewai[tools]'
|
|
```
|
|
|
|
## Usage
|
|
|
|
You can use the Directory Read Tool in two ways:
|
|
|
|
### 1. Fixed Directory Path
|
|
|
|
Initialize the tool with a specific directory path:
|
|
|
|
```python
|
|
from crewai import Agent
|
|
from crewai_tools import DirectoryReadTool
|
|
|
|
# Initialize with a fixed directory
|
|
tool = DirectoryReadTool(directory="/path/to/your/directory")
|
|
|
|
# Create an agent with the tool
|
|
agent = Agent(
|
|
role='File System Analyst',
|
|
goal='Analyze directory contents',
|
|
backstory='I help analyze and organize file systems',
|
|
tools=[tool]
|
|
)
|
|
|
|
# Use in a task
|
|
task = Task(
|
|
description="List all files in the project directory",
|
|
agent=agent
|
|
)
|
|
```
|
|
|
|
### 2. Dynamic Directory Path
|
|
|
|
Initialize the tool without a specific directory path to provide it at runtime:
|
|
|
|
```python
|
|
from crewai import Agent
|
|
from crewai_tools import DirectoryReadTool
|
|
|
|
# Initialize without a fixed directory
|
|
tool = DirectoryReadTool()
|
|
|
|
# Create an agent with the tool
|
|
agent = Agent(
|
|
role='File System Explorer',
|
|
goal='Explore different directories',
|
|
backstory='I analyze various directory structures',
|
|
tools=[tool]
|
|
)
|
|
|
|
# Use in a task with dynamic directory path
|
|
task = Task(
|
|
description="List all files in the specified directory",
|
|
agent=agent,
|
|
context={
|
|
"directory": "/path/to/explore"
|
|
}
|
|
)
|
|
```
|
|
|
|
## Input Schema
|
|
|
|
### Fixed Directory Mode
|
|
```python
|
|
class FixedDirectoryReadToolSchema(BaseModel):
|
|
pass # No additional parameters needed when directory is fixed
|
|
```
|
|
|
|
### Dynamic Directory Mode
|
|
```python
|
|
class DirectoryReadToolSchema(BaseModel):
|
|
directory: str # The path to the directory to list contents
|
|
```
|
|
|
|
## Function Signatures
|
|
|
|
```python
|
|
def __init__(self, directory: Optional[str] = None, **kwargs):
|
|
"""
|
|
Initialize the Directory Read Tool.
|
|
|
|
Args:
|
|
directory (Optional[str]): Path to the directory (optional)
|
|
**kwargs: Additional arguments passed to BaseTool
|
|
"""
|
|
|
|
def _run(
|
|
self,
|
|
**kwargs: Any,
|
|
) -> str:
|
|
"""
|
|
Execute the directory listing.
|
|
|
|
Args:
|
|
**kwargs: Arguments including 'directory' for dynamic mode
|
|
|
|
Returns:
|
|
str: A formatted string containing all file paths in the directory
|
|
"""
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Path Handling**:
|
|
- Use absolute paths to avoid path resolution issues
|
|
- Handle trailing slashes appropriately
|
|
- Verify directory existence before listing
|
|
|
|
2. **Performance Considerations**:
|
|
- Be mindful of directory size when listing large directories
|
|
- Consider implementing pagination for large directories
|
|
- Handle symlinks appropriately
|
|
|
|
3. **Error Handling**:
|
|
- Handle directory not found errors gracefully
|
|
- Manage permission issues appropriately
|
|
- Validate input parameters before processing
|
|
|
|
## Example Integration
|
|
|
|
Here's a complete example showing how to integrate the Directory Read Tool with CrewAI:
|
|
|
|
```python
|
|
from crewai import Agent, Task, Crew
|
|
from crewai_tools import DirectoryReadTool
|
|
|
|
# Initialize the tool
|
|
dir_tool = DirectoryReadTool()
|
|
|
|
# Create an agent with the tool
|
|
file_analyst = Agent(
|
|
role='File System Analyst',
|
|
goal='Analyze and report on directory structures',
|
|
backstory='I am an expert at analyzing file system organization',
|
|
tools=[dir_tool]
|
|
)
|
|
|
|
# Create tasks
|
|
analysis_task = Task(
|
|
description="""
|
|
Analyze the project directory structure:
|
|
1. List all files recursively
|
|
2. Identify key file types
|
|
3. Report on directory organization
|
|
|
|
Provide a comprehensive analysis of the findings.
|
|
""",
|
|
agent=file_analyst,
|
|
context={
|
|
"directory": "/path/to/project"
|
|
}
|
|
)
|
|
|
|
# Create and run the crew
|
|
crew = Crew(
|
|
agents=[file_analyst],
|
|
tasks=[analysis_task]
|
|
)
|
|
|
|
result = crew.kickoff()
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
The tool handles various error scenarios:
|
|
|
|
1. **Directory Not Found**:
|
|
```python
|
|
try:
|
|
tool = DirectoryReadTool(directory="/nonexistent/path")
|
|
except FileNotFoundError:
|
|
print("Directory not found. Please verify the path.")
|
|
```
|
|
|
|
2. **Permission Issues**:
|
|
```python
|
|
try:
|
|
tool = DirectoryReadTool(directory="/restricted/path")
|
|
except PermissionError:
|
|
print("Insufficient permissions to access the directory.")
|
|
```
|
|
|
|
3. **Invalid Path**:
|
|
```python
|
|
try:
|
|
result = tool._run(directory="invalid/path")
|
|
except ValueError:
|
|
print("Invalid directory path provided.")
|
|
```
|
|
|
|
## Output Format
|
|
|
|
The tool returns a formatted string containing all file paths in the directory:
|
|
|
|
```
|
|
File paths:
|
|
- /path/to/directory/file1.txt
|
|
- /path/to/directory/subdirectory/file2.txt
|
|
- /path/to/directory/subdirectory/file3.py
|
|
```
|
|
|
|
|
|
Each file path is listed on a new line with a hyphen prefix, making it easy to parse and read the output.
|