# Tool Design Design effective tools for agent systems. ## Consolidation Principle Single comprehensive tools > multiple narrow tools. **Target**: 10-20 tools max. ## Architectural Reduction Evidence | Metric | 17 Tools | 2 Tools | Improvement | |--------|----------|---------|-------------| | Time | 274.8s | 77.4s | 3.5x faster | | Success | 80% | 100% | +20% | | Tokens | 102k | 61k | 37% fewer | **Key**: Good documentation replaces tool sophistication. ## When Reduction Works **Prerequisites**: High docs quality, capable model, navigable problem **Avoid when**: Messy systems, specialized domain, safety-critical ## Description Engineering Answer four questions: 1. **What** does the tool do? 2. **When** should it be used? 3. **What inputs** does it accept? 4. **What** does it return? ### Good Example ```json { "name": "get_customer", "description": "Retrieve customer profile by ID. Use for order processing, support. Returns 404 if not found.", "parameters": { "customer_id": {"type": "string", "pattern": "^CUST-[0-9]{6}$"}, "format": {"enum": ["concise", "detailed"]} } } ``` ### Poor Example ```json {"name": "search", "description": "Search for things", "parameters": {"q": {}}} ``` ## Error Messages ```python def format_error(code, message, resolution): return { "error": {"code": code, "message": message, "resolution": resolution, "retryable": code in RETRYABLE} } # "Use YYYY-MM-DD format, e.g., '2024-01-05'" ``` ## Response Formats Offer concise vs detailed: ```python def get_data(id, format="concise"): if format == "concise": return {"name": data.name} return data.full() # Detailed ``` ## Guidelines 1. Consolidate tools (target 10-20) 2. Answer all four questions 3. Use full parameter names 4. Design errors for recovery 5. Offer concise/detailed formats 6. Test with agents before deploy 7. Start minimal, add when proven ## Related - [Context Fundamentals](./context-fundamentals.md) - [Multi-Agent Patterns](./multi-agent-patterns.md)