Scoring was not performed
Generic tool descriptions under 50 characters lack actionable context. Tools 'list', 'info', 'open', 'config show', 'config path' have descriptions too brief to guide LLM tool selection (baseline: 194 chars average for A+ tools). 'list' = 'List all indexed videos.' does not explain when to use it vs 'info', or what fields are returned.
Output schemas not documented for any tool. LLMs cannot plan downstream calls without knowing what fields search() returns, or what structure ingest() produces. Code shows search/ask accept 'limit' and 'db' parameters, but no documented response format (e.g., does search return [{'id', 'text', 'timestamp', 'score'}]?).
Parameter constraint documentation incomplete. 'ingest' has parameters like 'fps_sample' (float), 'max_frames' (integer), 'topic' (enum: security|traffic|warehouse|retail|meeting|general|custom) but descriptions lack ranges, minimums, maximums. LLMs will pass unbounded values (fps_sample=999999, max_frames=-1) causing silent failures.
No error handling guidance. No tool description explains what happens on failure: is 'ingest' idempotent if run twice on the same file? Does 'ask' fail gracefully if video_id is invalid? Are errors retryable? LLMs have no recovery path.
Tool 'config' groups three unrelated operations (show, path, setup) under one namespace. Should split into separate tools: 'config_show', 'config_path', 'config_setup'. Current naming violates single-responsibility principle, LLMs cannot distinguish which to call without reading nested descriptions.
Destructive/side-effect operations lack confirmation patterns. 'ingest' with 'force=true' will re-ingest and overwrite video metadata. No dry_run guidance or undo path documented. Pattern 'confirmation-request' not followed.
Parameter 'topic' in 'ingest' has enum values embedded in description ('security, traffic, warehouse, retail, meeting, general, or a custom description') but not formally constrained in schema. LLMs may hallucinate invalid values like 'security_monitoring' or 'traffic-safety'.
No chaining guidance. If LLM calls 'search' and wants to open a result, does it need video_id or filename? Are these returned by search? If ingest requires a 'db' path, is the same path required for search? Undocumented parameter dependencies force trial-and-error.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 29 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 38 | - | v1 |