Appearance
AgenTree Tools API
This page documents the architecture, interface, and extension of the AgenTree tool system, intended for developers.
General Architecture
The AgenTree tool system is based on:
- A standardized interface for each tool (
Tool) - A centralized registry (
ToolRegistry) for registration and discovery - A tool creation utility (
tool) facilitating parameter validation and integration
Main Interfaces
ToolOptions<T>
Describes the options required to create a tool:
name?: tool name (optional, otherwise deduced)description: textual descriptionparameters: Zod schema of expected parametersstrict?: strict validation (default: true)execute: asynchronous function executing the toolerrorFunction?: custom error handler
Tool
Represents a registered tool:
name: unique namedescription: descriptionparameters: JSON Schema derived from the Zod schemaexecute(args, context?): tool executionerrorFunction?: error handler
ToolRegistry
Static registry centralizing all tools:
register(tool): registers a toolget(name): retrieves a tool by its namelist(): lists the names of registered toolsclear(): clears the registryhas(name): checks for the presence of a toolgetAll(): returns all tools
Creating a Tool
Use the tool function to transform a configuration into a compliant Tool object:
typescript
import { z } from 'zod';
import { tool } from 'src/tools/ToolHelper';
const myToolSchema = z.object({
input: z.string().describe("Input to process"),
});
const myTool = tool({
name: 'myTool',
description: 'An example tool',
parameters: myToolSchema,
execute: async (args) => {
// Processing
return `Input: ${args.input}`;
}
});
Parameter validation is automatic (via Zod) if strict is set to true.
Registration and Usage
To make a tool available in AgenTree, it must be registered:
typescript
import { ToolRegistry } from 'src/tools/ToolRegistry';
ToolRegistry.register(myTool);
The tool can then be retrieved and used dynamically:
typescript
const tool = ToolRegistry.get('myTool');
if (tool) {
const result = await tool.execute({ input: 'test' });
// ...
}
Extension: Creating a Custom Tool
Example: file reading tool (readFileTool):
typescript
import { z } from 'zod';
import { tool } from 'src/tools/ToolHelper';
import * as fs from 'fs-extra';
const readFileSchema = z.object({
path: z.string().describe("Path to the file to read"),
});
export const readFileTool = tool({
name: 'readFile',
description: "Reads the content of a file",
parameters: readFileSchema,
execute: async (args) => {
const { path } = args;
if (!await fs.pathExists(path)) {
throw new Error(`The file ${path} does not exist`);
}
const content = await fs.readFile(path, 'utf-8');
return content;
}
});
Parameter Schema Management
Parameter schemas are defined with Zod and automatically converted to JSON Schema for the API. Supported types include: strings, numbers, booleans, objects, arrays, enumerations, optional fields, and default values.
Best Practices
- Use explicit descriptions for each parameter
- Handle errors via
errorFunctionif needed - Prioritize strict validation for robustness
- Register your tools when the application starts