Toolsets API#
Toolsets extend agent capabilities with tools for file operations, code execution, web search, and more.
Using Toolsets#
Add toolsets at runtime using await agent.toolset():
from pantheon.agent import Agent
from pantheon.toolsets import FileManagerToolSet, ShellToolSet
agent = Agent(
name="developer",
instructions="You are a developer assistant."
)
# Add toolsets at runtime (name parameter is required)
await agent.toolset(FileManagerToolSet("files"))
await agent.toolset(ShellToolSet("shell"))
Available Toolsets#
File Operations
from pantheon.toolsets import FileManagerToolSet
# Read, write, edit, search files
await agent.toolset(FileManagerToolSet("files"))
Shell Commands
from pantheon.toolsets import ShellToolSet
# Run shell commands with timeout protection
await agent.toolset(ShellToolSet("shell"))
Python Execution
from pantheon.toolsets import PythonInterpreterToolSet
# Execute Python code
await agent.toolset(PythonInterpreterToolSet("python"))
Jupyter Notebooks
from pantheon.toolsets import IntegratedNotebookToolSet
# Create, edit, execute notebooks
await agent.toolset(IntegratedNotebookToolSet("notebook"))
Web Search
from pantheon.toolsets import WebToolSet
# Search and fetch web content
await agent.toolset(WebToolSet("web"))
Knowledge Base
from pantheon.toolsets import KnowledgeToolSet
# Vector store and RAG
await agent.toolset(KnowledgeToolSet("knowledge"))
Creating Custom Tools#
Simple Function
@agent.tool
def my_function(param: str) -> str:
"""Description shown to the LLM."""
return f"Result: {param}"
ToolSet Class
from pantheon.toolset import ToolSet, tool
class MyToolSet(ToolSet):
@tool
def calculate(self, expression: str) -> float:
"""Evaluate a math expression.
Args:
expression: Math expression to evaluate
Returns:
The result of the calculation
"""
return eval(expression)
@tool
async def fetch_data(self, url: str) -> str:
"""Fetch data from a URL."""
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
return await resp.text()
Tool Documentation#
The docstring becomes the tool description:
@tool
def search_files(self, pattern: str, directory: str = ".") -> list:
"""Search for files matching a pattern.
Use this tool when you need to find files in the project.
Args:
pattern: Glob pattern (e.g., "*.py", "**/*.md")
directory: Directory to search (default: current directory)
Returns:
List of matching file paths
"""
return glob.glob(pattern, root_dir=directory)
Good docstrings help the LLM understand when and how to use the tool.
Async Tools#
Use async for I/O operations:
@tool
async def fetch_url(self, url: str) -> str:
"""Fetch content from a URL."""
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
Combining Toolsets#
agent = Agent(
name="full_stack",
instructions="You are a full-stack developer."
)
await agent.toolset(FileManagerToolSet("files"))
await agent.toolset(ShellToolSet("shell"))
await agent.toolset(PythonInterpreterToolSet("python"))
await agent.toolset(WebToolSet("web"))
Best Practices#
Only Include Needed Tools
Too many tools can confuse the model. Be selective.
Clear Descriptions
Write descriptive docstrings that explain when to use each tool.
Error Handling
Return informative error messages:
@tool
def read_file(self, path: str) -> str:
"""Read a file."""
try:
with open(path) as f:
return f.read()
except FileNotFoundError:
return f"Error: File '{path}' not found"
except PermissionError:
return f"Error: No permission to read '{path}'"