honest-eta
May 11, 2026 · View on GitHub
A Claude Code Stop hook that blocks LLM time estimates that lack the Agent-Native Estimate shape, plus blocks linear-scaling parallelism claims (which are almost always false). Forces honest hedge ranges or an explicit
blocked/unknowninstead of confident bullshit.
honest-eta is one bash file (~100 lines, depends only on jq) wired into Claude Code's Stop and SubagentStop events. It pattern-matches time-estimate vocabulary in the assistant's outgoing message and blocks two specific failure modes:
- Vibe estimates without structure — "this will take about 3 hours," "2 weeks of dev time," "ETA: tomorrow" — given without an estimate type, hedge range, or structured agent-native fields.
- Linear-scaling claims — "with 5 agents this is 5x faster," "divided by lane count," "linear speedup" — these are almost always false because real agent work has supervisor review, sync barriers, shared files, CI, and credentials as bottlenecks that don't divide by lane count.
When matched, the hook returns a repair-guidance template containing the literal Agent-Native Estimate shape so the model can copy it on the next turn.
Why this exists
LLM time estimates are bullshit by default for two structural reasons documented in 2026 research:
- Frontiers in AI 2026 — "Toward LLM-aware software effort estimation: a conceptual framework" — finds that "Story Points are designed to capture human-perceived difficulty but these dimensions do not align with the dominant cost drivers in LLM-mediated development." The model defaults to a human-developer cost model that systematically does not match what the agent will actually do.
- OpenAI September 2025 paper (cited in LLM Hallucination 2026 reviews) — "next-token training objectives and common leaderboards reward confident guessing over calibrated uncertainty, so models learn to bluff." The model is trained to be confident, not calibrated. Time estimates are exactly the kind of confident-bluffing the training rewards.
- METR research — task-completion length doubles every 7 months. Any estimate the model derives from training cutoff is stale within months.
Result: every LLM time estimate is some mixture of (human-cost-model bias) + (training-cutoff staleness) + (RLHF-rewarded confident bluffing). The estimate is rarely a measurement and almost always a vibe.
The Agent-Native Estimate shape (developed in the minmaxing governance harness) is the structured replacement: separate agent_wall_clock from agent_hours from human_touch_time from calendar_blockers, name the critical_path, label the confidence with a downgrade reason. honest-eta is the out-of-band enforcement of that shape.
What gets blocked
A message containing time-estimate vocabulary (X minutes/hours/days/weeks, ETA, should take, will take, time to deliver/ship/complete, ready in X, etc.) without any of:
- Structured agent-native field:
agent_wall_clock,agent_hours,human_touch_time,calendar_blockers,critical_path,estimate type: agent-native|human-equivalent|blocked/unknown,confidence: high|medium|low,insufficient_data - Honest hedge range:
optimistic / likely / pessimistic,worst-case / best-case,p50 / p90,range:,approximately X-Y,somewhere between X and,could be anywhere from
A message containing linear-scaling parallelism claims (Nx faster, with N agents N x, linearly scales, divided by lane count, per-lane speedup) is always blocked regardless of structure — these are almost never true.
What stays allowed
- Messages with no time estimate at all.
- Estimates wrapped in the Agent-Native Estimate shape.
- Estimates with at minimum a hedge range and an explicit
estimate type:. - Estimates that honestly say
estimate type: blocked/unknownbecause capacity isn't yet measured.
Install
mkdir -p .claude/hooks
curl -fsSL https://raw.githubusercontent.com/waitdeadai/honest-eta/main/honest-eta.sh \
-o .claude/hooks/honest-eta.sh
chmod +x .claude/hooks/honest-eta.sh
Merge settings.example.json entries into .claude/settings.json. Requires jq.
Receipts
Six reproducible local fixture tests in RECEIPTS.md. Six for six.
Sister tools
Part of the LLM Dark Patterns Hooks suite.
- no-vibes, time-anchor, no-curfew, no-sycophancy, no-cliffhanger
- no-fake-recall — false-memory recall claims without quoted prior content.
- no-fake-stats — fabricated percentages and amounts without source.
- no-fake-cite — academic citation patterns without verifiable URL.
- minmaxing — parent harness where the Agent-Native Estimate concept is fully spec'd
License
Apache-2.0.