name: tool-definition-patterns description: Standards for defining AI agent tools based on Cline's system prompt patterns. Covers parameter typing, documentation, edit formats, safety mechanisms, and operational best practices. tier: 2 tags: [tool-definition, ai-agents, coding-standards, documentation]
Tool Definition Patterns
This skill establishes standards for defining AI agent tools, inspired by Cline's tool definition system. These patterns ensure consistent, safe, and usable tool interfaces.
1. Precise Parameter Types
Define required vs optional parameters explicitly in every tool definition.
Required Parameters
- Mark with
(required)in parameter description - Must be provided for tool to execute
- List first in parameters section
Optional Parameters
- Mark with
(optional)in parameter description - Specify default value behavior when omitted
- Group after required parameters
Example from Cline
## execute_command
Parameters:
- command: (required) The CLI command to execute...
- requires_approval: (required) A boolean indicating whether this command...
2. Description + Usage Example
Every tool documentation MUST include both a clear description AND a concrete usage example.
Description Requirements
- Explain what the tool accomplishes
- Specify when to use this tool vs alternatives
- Mention any automatic behaviors or side effects
Usage Example Requirements
- Show actual XML-formatted tool call
- Include realistic parameter values
- Demonstrate complete invocation structure
Example
## read_file
Description: Request to read the contents of a file at the specified path...
Parameters:
- path: (required) The path of the file to read...
Usage:
<read_file>
<path>src/main.js</path>
</read_file>
3. SEARCH/REPLACE Blocks
Standard edit format using exact matching for atomic changes.
Format Specification
<<<<<< SEARCH
[exact content to find - character for character match]
=======
[new content to replace with]
>>>>>> REPLACE
Critical Rules
- Exact matching: SEARCH content must match file content exactly - whitespace, indentation, line endings
- First match only: SEARCH/REPLACE replaces only first occurrence
- Concise blocks: Keep blocks small - include just enough context for uniqueness
- Complete lines: Never truncate lines mid-way
Multi-Change Pattern
<<<<<< SEARCH
function add(a, b) {
return a + b;
}
=======
function add(a: number, b: number): number {
return a + b;
}
>>>>>> REPLACE
<<<<<< SEARCH
function multiply(a, b) {
return a * b;
}
=======
function multiply(a: number, b: number): number {
return a * b;
}
>>>>>> REPLACE
4. Rollback Capability
All destructive operations must have recovery mechanisms.
Destructive Operations Include
- File deletion or overwrite
- Database schema changes
- System configuration modifications
- Network operations with side effects
Recovery Patterns
- Backup before change: Store original content for restore
- Version control integration: Rely on git for file recovery
- Confirmation dialogs: Require explicit approval for destructive actions
- Idempotent operations: Design tools to be safely re-runnable
Example - requires_approval flag
- requires_approval: (required) Set to 'true' for potentially impactful operations
like deleting/overwriting files, system configuration changes...
5. requires_approval Flag
Mark impactful operations to ensure human oversight.
When to Set requires_approval: true
- File deletion or overwrite
- Installing/uninstalling packages
- System configuration changes
- Network operations
- Database write operations
- Commands that could have unintended side effects
When to Set requires_approval: false
- Reading files or directories
- Running development servers
- Building projects
- Search operations
- Safe, non-destructive operations
Example
<execute_command>
<command>rm -rf node_modules</command>
<requires_approval>true</requires_approval>
</execute_command>
6. Atomic Operation Expectations
Each tool should do ONE thing well.
Atomic Design Principles
- Single responsibility: One tool = one operation
- Composability: Chain multiple tools for complex operations
- Predictable output: Same input → same output
- No hidden state: Tool should not depend on external state
Non-Atomic Anti-Patterns
- Tool that reads AND writes in one call
- Tool with conditional behavior based on hidden flags
- Tool that modifies multiple unrelated resources
Example - Atomic read_file
## read_file
Description: Request to read the contents of a file at the specified path.
(Does one thing - reads file content)
7. Regex-First Patterns
Use regex over glob for content search.
Why Regex
- More precise pattern matching
- Supports capture groups
- Handles complex matching logic
- Standard syntax across tools
Glob Limitations
- Limited to filename patterns only
- Cannot match content patterns
- Less expressive for complex searches
Example - search_files
## search_files
Parameters:
- regex: (required) The regular expression pattern to search for. Uses Rust regex syntax.
- file_pattern: (optional) Glob pattern to filter files (e.g., '*.ts' for TypeScript files).
Usage
<search_files>
<path>src/</path>
<regex>function\s+(\w+)\s*\(</regex>
<file_pattern>*.ts</file_pattern>
</search_files>
8. Context Window Awareness
Be mindful of file size and token limits.
Best Practices
- Large files: Read in chunks or use offset/limit
- Binary files: Skip or use specialized tools
- Long outputs: Truncate or summarize
- Token budgeting: Consider context window limits
Handling Large Files
- Use
offsetandlimitparameters when available - Read specific sections rather than entire files
- Consider grep for large file searches
Example - list_files recursive flag
- recursive: (optional) Whether to list files recursively. Use true for recursive
listing, false or omit for top-level only.
9. Path Resolution Best Practices
Define absolute vs relative path handling clearly.
Relative Paths
- Specify base directory (typically current working directory)
- Use consistent path normalization
- Document path resolution behavior
Absolute Paths
- Use when paths are environment-independent
- Specify when full paths are required
- Consider platform differences (Windows vs Unix)
Example from Cline
- path: (required) The path of the file to read (relative to the current working
directory ${cwd.toPosix()})
Best Practices
- Normalize paths: Use canonical path representations
- Platform-aware: Handle OS-specific separators
- Clear base: Always document the reference directory
- Posix format: Use Posix-style paths for cross-platform compatibility
10. Error Recovery Patterns
Document how to recover from tool failures.
Common Error Scenarios
- File not found: Check path, use list_files to verify
- Permission denied: Verify access rights, use alternative paths
- Parse errors: Verify syntax, check for truncation
- Network failures: Implement retry logic, timeout handling
Recovery Strategies
- Graceful degradation: Provide partial results when possible
- Clear error messages: Include actionable recovery steps
- Idempotent operations: Allow safe retry
- State verification: Check state after operations
Example - Multiple Tool Usage for Recovery
# If write fails, verify directory exists
<list_files>
<path>./</path>
</list_files>
# If search fails, try with broader pattern
<search_files>
<path>./</path>
<regex>pattern</regex>
</search_files>
Documentation Pattern
Include error handling guidance in tool description:
May not be suitable for other types of binary files, as it returns the raw content
as a string.
Quick Reference
| Pattern | Key Point |
|---|---|
| Parameter Types | Required (required) vs Optional (optional) |
| Documentation | Description + Usage Example always |
| Edits | SEARCH/REPLACE with exact matching |
| Safety | requires_approval for destructive ops |
| Scope | One tool = one atomic operation |
| Search | Regex over glob for content |
| Size | Context window awareness |
| Paths | Document relative/absolute base |
| Recovery | Document error handling |
| Rollback | Backup or version control for destructive ops |