Flight recorder for incident troubleshooting inside Claude Code. Captures tool calls, classifies events via background Haiku classifier, and generates distilled timelines and runbooks.
WTF server has well-defined tool schemas with proper enums and descriptions, but suffers from weak naming conventions and incomplete parameter documentation. Tool names (wtf_now, wtf_freshell, wtf_happened, wtf_imout) are cryptic and do not follow verb_noun patterns, they obscure intent and force LLMs to read descriptions to understand what each tool does. Descriptions are present but generic (avg ~120 chars, below the 194-char baseline). Parameter descriptions exist but lack actionable constraints (e.g., 'text' param has no length guidance; 'detail' enum is documented but not explained when to use each). Output schemas are not documented, LLMs cannot predict what fields to expect from responses. Error handling is absent from visible code. Security is reasonable (no exposed secrets in params), but composition is weak: wtf_now conflates 'crafted' and 'captured' entry types in one tool, forcing conditional logic on the LLM side.
Archive the current incident and start a fresh journal. Previous entries are preserved in the database.
Get a distilled timeline of the current troubleshooting incident. Writes a full runbook to .claude/wtf/runbook.md.
Suspend the active troubleshooting session. Stops recording but preserves captured data for later triage.
Record a journal entry in the WTF flight recorder. Use gen_type 'crafted' for intentional entries, 'captured' for automatic hook entries.
Tool names do not follow verb_noun convention and are cryptic. 'wtf_now', 'wtf_freshell', 'wtf_happened', 'wtf_imout' obscure intent, LLMs cannot infer what each tool does from the name alone. Should be 'record_journal_entry', 'archive_incident', 'get_incident_timeline', 'suspend_session'.
Output schemas are not documented. LLMs cannot predict response structure (fields, types, pagination). wtf_happened writes to .claude/wtf/runbook.md but response format is undocumented. wtf_now returns success/failure but field names are unknown.
Parameter descriptions lack actionable constraints. 'text' param in wtf_now has no length limit guidance; 'detail' enum in wtf_happened says 'summary (default, max 50 lines)' but does not explain when to use 'full'. Descriptions should state format, range, and use cases per pattern:tool-description.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
wtf_now conflates two entry types ('crafted' vs 'captured') in one tool with conditional required fields. This forces LLMs to reason about which fields apply to which type. Should split into 'record_manual_entry' and 'record_captured_entry' per pattern:tool (one tool, one job).
No error handling guidance visible. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. E.g., wtf_freshell does not explain what happens if no active incident exists.