A FastAPI-based AI agent backend system with tool/skill management, MCP client integration, sandbox execution, and multi-model LLM support for autonomous task execution
WorkWit has 14 tools with basic naming and descriptions, but critical gaps undermine quality. Tool names follow verb_noun convention (create_skill, list_tools, task_update), which is good. However, descriptions are often vague or lack actionable context. Most critically, input schemas are either missing entirely or severely incomplete, many tools lack parameter type definitions, descriptions, or constraints. For example, create_skill accepts 'rules' and 'allowed_tools' but provides no validation guidance. Error handling is absent: no recovery guidance, no categorization of retryable vs fatal errors. Output schemas are undocumented. The sandbox execution model (run_temp_code, create_tool) introduces security risks without explicit validation or permission gates. Composition is reasonable (tools are single-purpose), but parameter relationships are undocumented (e.g., skill_type='code' requires 'code' param, but this dependency is not stated). Overall, this reads as a functional backend API wrapped as MCP tools, not a production-grade agent tool suite.
Request user input/clarification during agent execution (blocks until user responds)
Search conversation history by keyword or semantic query
Create a method-type skill (instructions/workflow) or code-type skill (Python code). Method skills inject thinking constraints without code execution; code skills run Python in sandbox. Supports business rules and tool whitelisting for constrained execution.
Create a private user tool (Python code executed in sandbox). Tools are executable utilities distinct from method-type skills. Code must pass sandbox security scan (no os/sys/subprocess/socket/requests/shutil, no eval/exec).
Delete user memory entries by key
List available skills (method-type and code-type) for the current user, optionally filtered by visibility and usability
Input schemas lack type definitions and constraints. Parameters like 'rules', 'allowed_tools', 'code' have descriptions but no JSON Schema types, minLength, maxLength, enum, or pattern constraints. This forces LLMs to guess valid formats and invites malformed input.
No output schemas documented. Tools return results (e.g., task_create returns a task record, list_skills returns an array) but the response structure is not specified. LLMs cannot plan downstream calls or extract required fields without guessing.
No error handling or recovery guidance. Tools that execute code (run_temp_code, create_tool) or modify state (create_skill, task_update) provide no error categorization, actionable messages, or retry hints. A sandbox timeout or permission denial returns a raw error with no guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
List available tools (built-in and user-created) for the current user
Execute temporary Python code in sandbox (one-off execution, not saved as skill/tool). Supports file generation and artifact tracking.
Save user memory/context (key-value pairs) for persistent state across sessions
Spawn a child agent with restricted tool access (no meta-tools, no user prompting, no further spawning). Subagent executes autonomously with allowed_tools whitelist.
Create a task record with title, description, and optional deadline
Retrieve a task by ID
List all tasks for the current user, optionally filtered by status
Update task status, description, or deadline
Undocumented parameter dependencies. create_skill requires 'code' only if skill_type='code', and 'instructions' only if skill_type='method'. These conditional requirements are not stated in parameter descriptions, forcing LLMs to infer or fail.
Security: Code execution tools (run_temp_code, create_tool) accept arbitrary Python code with only a sandbox claim. No explicit validation rules, no permission gates, no audit trail documented. Sandbox bypass or privilege escalation risks are not mitigated at the tool interface level.