An intelligent learning assistant that searches web resources, compiles educational materials, and generates practice exercises using LLM function calling, skills modules, and MCP integration
StudyAgent has 7 tools with basic schemas and descriptions, but significant gaps prevent production use. Tool names lack clear action verbs (e.g., 'task' is vague; 'load_skill' is passive). Descriptions exist but are often generic or incomplete, 'load_skill' lacks guidance on when to use it vs. other tools. Parameter descriptions are sparse; many lack type constraints or validation hints. Output schemas are undocumented. Error handling is minimal, no recovery guidance or actionable error messages. The 'task' tool delegates to subagents but lacks clear composition semantics. Overall, definitions read as functional but not LLM-optimized.
Fetch and extract the main content from a webpage URL
Load previously saved documents from the output directory
Load the complete usage instructions for a specific skill. Call this tool to understand how to handle complex tasks, then follow the skill's guidance to complete the task. Available skills are listed in the system prompt.
Save generated educational materials, practice questions, and other content to local files
Delegate a subtask to a subagent with a fresh context. The subagent has the same tools as the main agent (search, fetch, save, load skill) but completely isolated context that won't pollute the main conversation's message array. Use this tool when you need to split large tasks into multiple independent subtasks—for example: simultaneously search multiple different topics, or generate content for different chapters separately. The subagent will return a summary when complete.
Create and manage structured task lists to track progress on multi-step tasks. Call this tool each time you update task status. Rule: only one task can be in_progress at a time. Continuous 3 rounds without calling this tool will trigger a system reminder.
Tool 'task' has vague name and unclear semantics. 'task' does not convey that it delegates to a subagent with isolated context. LLMs will struggle to distinguish when to use 'task' vs. direct tool calls.
Tool 'load_skill' uses passive verb 'load' and lacks actionable description. No guidance on when to call it, what skills are available, or how it differs from other discovery tools. Description is 40 chars, below 50-char minimum for LLM clarity.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. E.g., does web_search return URLs, summaries, or both? Does fetch_webpage return structured sections or raw HTML?
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
Search for web resources related to a topic using DuckDuckGo
Error handling is minimal. No recovery guidance in error messages. E.g., if load_document fails with 'file not found', no suggestion to call web_search or save_document first. Errors do not categorize as retryable vs. fatal.
Parameter 'filepath' in load_document lacks format/path constraints. No guidance on absolute vs. relative paths, or valid directory structure. Invites path traversal or invalid input from LLMs.