Files
mai-bot/agentlite/docs/tools.md
2026-04-03 22:15:53 +08:00

272 lines
6.1 KiB
Markdown

# AgentLite Tool Suite
A comprehensive tool suite for AgentLite, inspired by kimi-cli's tools, with configuration support for enabling/disabling individual tools.
## Overview
This tool suite provides:
- **File Operations**: Read, write, edit, search files
- **Shell Execution**: Execute shell commands
- **Web Access**: Fetch URLs and search the web
- **Multi-Agent**: Task delegation and subagent creation
- **Utilities**: Todo lists and thinking tools
- **Configuration**: Fine-grained control over which tools are available
## Installation
The tool suite is included with AgentLite. No additional installation required.
## Quick Start
```python
from agentlite.tools import ConfigurableToolset, ToolSuiteConfig
from agentlite import Agent, OpenAIProvider
# Create toolset with default config (all tools enabled)
toolset = ConfigurableToolset()
# Create agent with tools
provider = OpenAIProvider(api_key="your-key", model="gpt-4")
agent = Agent(
provider=provider,
system_prompt="You are a helpful assistant.",
tools=toolset.tools,
)
```
## Configuration
### Basic Configuration
```python
from agentlite.tools import (
ToolSuiteConfig,
FileToolsConfig,
ShellToolsConfig,
)
# Disable specific tools
config = ToolSuiteConfig(
file_tools=FileToolsConfig(
tools={"WriteFile": False, "StrReplaceFile": False}
)
)
toolset = ConfigurableToolset(config)
```
### Disable Entire Tool Groups
```python
# Disable all shell tools
config = ToolSuiteConfig(
shell_tools=ShellToolsConfig(enabled=False)
)
toolset = ConfigurableToolset(config)
```
### Custom Tool Settings
```python
config = ToolSuiteConfig(
file_tools=FileToolsConfig(
max_lines=500,
max_bytes=50 * 1024, # 50KB
allow_write_outside_work_dir=False,
),
shell_tools=ShellToolsConfig(
timeout=60,
blocked_commands=["rm -rf", "sudo"],
),
)
```
### Dynamic Configuration
```python
# Create toolset
config = ToolSuiteConfig()
toolset = ConfigurableToolset(config)
# Disable tools and reload
config.file_tools.disable_tool("WriteFile")
config.shell_tools.enabled = False
toolset.reload()
```
## Available Tools
### File Tools
| Tool | Description | Config Options |
|------|-------------|----------------|
| `ReadFile` | Read text files with line numbers | `max_lines`, `max_bytes` |
| `WriteFile` | Write or append to files | `allow_write_outside_work_dir` |
| `StrReplaceFile` | Edit files using string replacement | `allow_write_outside_work_dir` |
| `Glob` | Search files using glob patterns | `max_glob_matches` |
| `Grep` | Search file contents with regex | - |
| `ReadMediaFile` | Read images and videos | `max_size_mb` |
### Shell Tools
| Tool | Description | Config Options |
|------|-------------|----------------|
| `Shell` | Execute shell commands | `timeout`, `blocked_commands` |
### Web Tools
| Tool | Description | Config Options |
|------|-------------|----------------|
| `FetchURL` | Fetch web page content | `timeout`, `user_agent` |
| `SearchWeb` | Search the web | `timeout` |
### Multi-Agent Tools
| Tool | Description | Config Options |
|------|-------------|----------------|
| `Task` | Delegate tasks to subagents | `max_steps` |
| `CreateSubagent` | Create custom subagents | - |
### Utility Tools
| Tool | Description |
|------|-------------|
| `SetTodoList` | Manage todo lists |
| `Think` | Record thinking steps |
## Safety Features
### Path Security
- Files outside the working directory require absolute paths
- Optional restriction on writing outside working directory
- Path traversal protection
### Shell Security
- Configurable command timeout
- Blocked command list
- No shell injection (uses `execve` style execution)
### Resource Limits
- File size limits
- Line count limits
- Glob match limits
- HTTP content size limits
## Examples
### Safe Configuration for Untrusted Agents
```python
from agentlite.tools import ToolSuiteConfig, FileToolsConfig, ShellToolsConfig
# Safe config - read-only file access, no shell
safe_config = ToolSuiteConfig(
file_tools=FileToolsConfig(
allow_write_outside_work_dir=False,
),
shell_tools=ShellToolsConfig(enabled=False),
)
toolset = ConfigurableToolset(safe_config)
```
### Using Individual Tools
```python
from agentlite.tools.file import ReadFile, Glob
from pathlib import Path
# Create tools directly
read_tool = ReadFile(work_dir=Path("."))
glob_tool = Glob(work_dir=Path("."))
# Use tools
result = await read_tool.read({"path": "README.md"})
if not result.is_error:
print(result.output)
result = await glob_tool.glob({"pattern": "*.py"})
if not result.is_error:
print(result.output)
```
### Configuration from File
```python
import json
from agentlite.tools import ToolSuiteConfig
# Load config from file
with open("tool_config.json") as f:
config_dict = json.load(f)
config = ToolSuiteConfig.model_validate(config_dict)
toolset = ConfigurableToolset(config)
```
## API Reference
### Config Classes
#### `ToolSuiteConfig`
Main configuration class for all tools.
```python
class ToolSuiteConfig(BaseModel):
file_tools: FileToolsConfig
shell_tools: ShellToolsConfig
web_tools: WebToolsConfig
multiagent_tools: MultiAgentToolsConfig
misc_tools: ToolGroupConfig
```
#### `FileToolsConfig`
```python
class FileToolsConfig(ToolGroupConfig):
max_lines: int = 1000
max_line_length: int = 2000
max_bytes: int = 100 * 1024
allow_write_outside_work_dir: bool = False
max_glob_matches: int = 1000
```
#### `ShellToolsConfig`
```python
class ShellToolsConfig(ToolGroupConfig):
timeout: int = 60
max_timeout: int = 300
blocked_commands: list[str] = []
```
#### `WebToolsConfig`
```python
class WebToolsConfig(ToolGroupConfig):
timeout: int = 30
user_agent: str = "Mozilla/5.0 ..."
max_content_length: int = 1024 * 1024
```
### ConfigurableToolset
```python
class ConfigurableToolset(SimpleToolset):
def __init__(
self,
config: ToolSuiteConfig | None = None,
work_dir: str | None = None,
)
def reload(self, config: ToolSuiteConfig | None = None) -> None
```
## License
MIT License - same as AgentLite.