An LLM agent framework built in Go for research, study support, and problem-solving with tool integration, search capabilities, and multi-agent orchestration
goAgent has critically incomplete tool definitions that would fail to guide an LLM in production. Of the 4 tools, none have complete, well-structured input schemas. Tool names lack action verbs (SearchTool, ResponseTool are noun-based). Descriptions exist but are vague and do not include WHEN to use each tool or dependency hints. Input schemas are either missing type information (summarize.json, searchExtraction) or use non-standard type declarations (queries accepts 'array|string' without clear enum or constraints). No output schemas are documented. Error handling is absent. The ResponseTool appears to be a side-effect tool (prints output) but this is not clearly marked. The toolRegistry and agent initialization suggest internal stateful handling rather than stateless tool composition. No evidence of parameter validation or recovery guidance.
Prints and formats a message response from the agent
Executes multi-query search operations using DuckDuckGo, embeds results, ranks by relevance, and summarizes content
Extracts key information and citations from search results using a structured tool call
Tool for summarizing content extracted from search results
summarize.json has null input schema ({"type":"object"} with no properties). Tool cannot be invoked; LLM has no guidance on structure.
No action verbs in tool names. 'SearchTool', 'ResponseTool', 'summarize.json', 'searchExtraction' are nouns or noun phrases, not verb_noun patterns. LLMs cannot infer intent from names alone.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract return fields.
Parameter types are non-standard or incomplete. SearchTool 'page' is string (should be integer); 'queries' accepts 'array|string' (ambiguous). searchExtraction lacks min/max constraints on array/string fields.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 23 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 18 | - | v1 |
ResponseTool modifies output state (prints/formats) but is not annotated with a destructiveHint or side-effect marker. LLMs cannot determine if this call is idempotent or has side effects.
Descriptions are vague and lack WHEN context. 'Executes multi-query search operations' tells what, not when to call. Missing dependency hints (e.g., 'Call this to gather background info before summarizing').
No error handling guidance. If SearchTool fails or returns empty results, LLM has no recovery path. No actionable error messages documented.
searchExtraction schema appears to define OUTPUT shape (what LLM generates), not INPUT shape (what tool accepts). Tool definition is backwards.