ao-lens provides 11 specialized tools for Lua/AO static analysis with mostly complete schemas and reasonable descriptions. Strengths: all tools have names starting with action verbs (analyze_, find_, check_, list_, get_, query_, map_), all have descriptions (ranging 75-200 chars), and all have input schemas with parameter descriptions. Weaknesses: descriptions are terse and lack usage context; output schemas are completely undocumented (critical gap); error handling is not visible in tool definitions; no pagination guidance despite tools returning lists; parameters lack format constraints and constraint descriptions. The tools are domain-specialized and well-scoped individually, but the definitions lack the LLM-optimization guidance (WHEN to use, WHAT it returns, dependency hints) that production tools exhibit.
Parse a Lua file and extract handlers, functions, globals, state access, and determinism issues
Get detailed analysis of a specific handler by name, including trigger conditions, matcher strictness, and state access
Check for replay-safety violations (os.time, math.random, io operations)
Find all State.* field mutations in a file or directory
Find all reads and writes to a specific state field across files, with handler context
Get comprehensive details about a specific function by name, including parameters, line range, and body analysis
Output schemas completely undocumented. No tool definition includes what fields are returned, data types, or structure of responses. LLMs cannot infer downstream field names or plan multi-step operations.
Descriptions lack WHEN/WHY guidance. Terse one-liners (e.g. 'Parse a Lua file and extract handlers, functions, globals, state access, and determinism issues') tell WHAT but not WHEN to use vs similar tools or dependencies. Should include context like 'Call this first before analyze_handler to get handler names' or 'Use for initial code discovery.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 14 | 1.25.1+ | v1 |
Get handler source code and detailed body analysis including auth patterns, state access, and local function calls
List all handlers in a file with their Action tags and strictness levels
Generate IPC topology graph from multiple Lua files showing process communication patterns
Query handlers with semantic filters: action pattern, auth presence, frozen check, state mutation, strictness
Run security audit on Lua files and return severity-ranked findings
No pagination guidance for list-returning tools. 'list_handlers', 'find_state_mutations', 'find_state_usage', 'query_handlers' can return unbounded results but lack limit/offset parameters. Large directories could return hundreds of matches, exhausting context windows.
Parameters lack format/constraint descriptions. 'path' and 'file_path' parameters omit whether they accept absolute or relative paths, glob patterns, or must be validated paths. 'handler_name' and 'function_name' omit case sensitivity, special character handling, or max length.
No error handling guidance visible. Tool definitions do not document what errors are retryable (e.g. file not found vs I/O error), what to do on invalid input, or how to distinguish fatal vs user-correctable failures.
'map_architecture' output_format param lacks enum validation. Accepts ['json', 'mermaid', 'summary'] but no guidance on defaults, implications, or which format is most useful for LLMs.