Runtime verification for coding agents using local process, Docker and file logs over MCP
TailFlow exposes 4 read-only log-querying tools with complete JSON schemas and reasonable descriptions (avg 60 chars). All tools have proper input schemas with typed parameters and descriptions. However, descriptions are terse and lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Output schemas are not documented. Error handling is minimal, no recovery guidance or actionable error messages visible. Tools are well-named (verb_noun pattern) and focused, but lack composition hints and chaining IDs.
Distinct failures, deduplicated, with stack traces
What is running, and how noisy it is
Individual log lines matching a filter
Block until a matching line appears
Output schemas not documented. LLMs cannot plan downstream calls or extract fields without knowing response structure (e.g., what fields does get_errors return? Is it an array of objects with 'stack_trace' and 'count' fields?).
Descriptions lack LLM-optimized guidance. 'Distinct failures, deduplicated, with stack traces' (get_errors) does not explain WHEN to call it vs. search_logs, or what 'distinct' means operationally. Descriptions should answer: What does it do? When vs. similar tools? What does it return?
get_sources has minimal description ('What is running, and how noisy it is'), under 30 chars. Does not explain what 'noisy' means or when to call it. Violates baseline: descriptions should be 34 - 392 chars (p10 - p90).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
No error handling guidance visible. If a regex in 'grep' is invalid, or 'since' is malformed, what does the tool return? How should the LLM recover? No actionable error messages documented.
Parameter descriptions lack format constraints. 'since' accepts '30s, 5m, 2h, 1d, or an RFC 3339 timestamp', this is good, but no regex pattern or enum. LLMs may hallucinate invalid formats like '30 seconds' or '2024-01-15T10:30Z' (missing seconds).