Security analysis platform for AI agent skills (OpenClaw SKILL.md format)
ClawGuard exposes 9 tools across HTTP API and CLI. Most tools have descriptions (7/9), but parameter documentation is sparse and inconsistent. Input schemas are present but lack depth: many parameters missing type constraints, enums, or validation guidance. Output schemas are partially documented in response models but not exposed in tool definitions. Error handling is basic (HTTP exceptions) without recovery guidance. No tool annotations (readOnlyHint/destructiveHint). The 'scan' and 'scan_all' CLI tools appear inferred rather than explicitly registered, capping their scores at 50. Overall, definitions lack the LLM-optimization and constraint clarity needed for reliable agent invocation.
Scan top N skills from the ClawHub registry (CLI command)
Get scan results by ID
Get health status and version of the ClawGuard API
List scan history (paginated, newest first)
Scan a local skill directory or ClawHub URL (CLI command)
Scan all skill directories under a directory (CLI command)
Submit a skill for scanning via URL or local path
CLI tools (scan, scan_all, watch, bulk_scan) appear inferred from Click decorators, not explicitly registered as MCP tools with full schemas. Tool definitions are not visible in source.
Parameter descriptions are minimal or missing. 'url' and 'path' in submit_scan lack format/constraint guidance. 'json_output', 'no_llm', 'verbose', 'quiet' in scan lack explanation of when to use each. LLMs cannot infer parameter semantics from names alone.
No input validation constraints (enums, min/max, regex patterns) visible in schemas. 'limit' and 'offset' in list_scans lack bounds (should be 1 - 100 and 0 - max). 'json_output' and 'no_llm' should be boolean enums, not free-form.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Scan an uploaded skill zip archive
Watch a skill directory and re-scan on changes (CLI command)
Error responses are HTTP exceptions without recovery guidance. 'Scan failed' or 'Invalid file' do not tell the LLM what to do next or whether to retry. No categorization of retryable vs. fatal errors.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes without explicit hints. 'submit_scan' and 'upload_scan' are WRITE but unmarked.