Bug: Claude hallucinated actions. User said «удалить таймер чайника»,
Claude replied «Таймер чайника отменён» без вызова cancel_timer.
Две причины:
1) История сохраняла только финальный текст предыдущих turn'ов.
Claude видел «я говорил поставил таймер» и мог ответить «удалил» по
паттерну без реального tool-use.
2) System prompt мягко просил использовать tools — Haiku иногда
пропускал tool и отвечал сразу.
Фикс:
- История теперь содержит полные turn'ы (assistant с tool_use блоками,
user с tool_result блоками). _build_messages/_strip_cache_control
корректно обрабатывают content как string или list of blocks.
- System prompt добавил жёсткий раздел «ЖЁСТКИЕ ПРАВИЛА про tools»:
явно запрещено говорить 'поставил/отменил/удалил' без вызова tool,
информацию (погода, события) — только через tool, не выдумывать.
Размер истории вырастет (tool_result'ы могут быть по 500-2000 байт),
но это не проблема — prompt caching делает каждый turn дешёвым на
чтение (cache_r > 90% в логах).