English teacher agent — intercepts every user message, surfaces a targeted English improvement tip drawn from a persistent mistake history, and tracks patterns across sessions.
Three tools with complete schemas and descriptions, but significant gaps in parameter documentation, error handling, and composition. Tool names lack action verbs (analyze-english, log-tip, set-queensguard-mode are descriptive but not verb-first). Descriptions are adequate (100-150 chars) but lack WHEN/WHY guidance. Parameters have types and basic descriptions, but no validation constraints, enums, or error recovery guidance. No documented output schemas. Error handling is minimal, handlers return JSON strings without structured error classification or recovery hints. Tools operate on persistent local state (~/.queensguard/) with no documented transaction safety, idempotency guarantees, or conflict resolution.
Reads the persistent tip store and returns past mistake patterns that match the given text, so the agent can generate a targeted English tip before responding.
Persists a newly detected English mistake to the tip store so future sessions can detect recurrence.
Enables or disables queensguard mode. State persists across sessions in ~/.queensguard/state.json.
Tool names lack action verbs. 'analyze-english', 'log-tip', 'set-queensguard-mode' are descriptive but do not start with clear action verbs (get_, create_, update_, search_, list_). LLMs infer intent from verb-first names; these require reading full descriptions.
No output schema documentation. Handlers return JSON strings (e.g., {past_mistakes, text}, {saved, category, total_for_category}) but no formal schema is declared. LLMs cannot plan downstream calls or extract fields reliably.
No error handling or recovery guidance. Handlers catch exceptions silently (e.g., 'file does not exist yet') and return partial results without indicating failure. LLMs cannot distinguish success from degraded state or know when to retry.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
No idempotency or transaction safety documented. log-tip appends to tips.json with a tmp file rename, but concurrent calls could race. analyze-english reads state without locking. No documented guarantees for multi-session consistency.
Parameter 'category' in log-tip accepts free-form strings with no enum or validation. Description says 'kebab-case label' but no constraint is enforced. LLMs may pass invalid categories like 'Article Usage' or 'article usage'.