Immutable audit trail for agent-to-agent interactions with hash chain verification
AgentAudit has 6 tools with clear naming (audit_* prefix) and reasonable descriptions (100-150 chars each). However, critical gaps undermine quality: (1) Input schemas are present but lack formal enum constraints for event_type and severity despite predefined lists in code; (2) Parameter descriptions are minimal (10-30 chars) and do not explain format, constraints, or dependencies; (3) Output schemas are undocumented, responses are JSON strings, not structured objects with typed fields; (4) Error handling returns JSON with 'isError' flag but provides no recovery guidance or actionable next steps; (5) No tool annotations (readOnlyHint, destructiveHint) despite clear read/write distinction. The audit_log tool modifies state but lacks confirmation/dry-run pattern. Overall, definitions are functional but fall short of production-grade clarity and LLM-optimization standards.
Get complete event history for a specific agent.
Get full details of a specific audit event by event_id.
Log an agent-to-agent event with hash chain verification. Returns event_id and proof hash.
Search audit events by agent, type, date range, or severity.
Get audit trail statistics: total events, by type, by severity.
Verify the hash chain integrity between two events. Detects tampering.
Output schemas undocumented. All tools return JSON strings; LLMs cannot infer field types or structure for downstream chaining. No documented return schema for any tool.
Parameter descriptions are too brief (10-30 chars) and lack format/constraint details. E.g., 'Filter by agent ID' does not explain format, length, or whether it accepts names or only IDs.
event_type and severity parameters accept free-form strings despite predefined lists in code. Should declare as enums in schema to prevent hallucinated invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Error responses lack recovery guidance. Errors return 'isError: true' with a message but do not suggest next steps (e.g., 'Try audit_search() to find the event').
audit_log is a destructive write operation but lacks confirmation/dry-run pattern. No tool annotation (destructiveHint) to signal to LLMs that this modifies state irreversibly.