Ultraplan: stream timeouts, cache_control on empty blocks, teleport failure
Bug Report
Claude Code version: Latest (as of 2026-04-19)
Model: Opus 4.7 (web session)
Feature: Ultraplan (cloud plan refinement)
What happened
Used ultraplan from CLI to refine a plan file. The web session launched but failed repeatedly:
Error 1: cache_control on empty text blocks
API Error: 400
{"type":"error","error":{"type":"invalid_request_error","message":"messages.94.content.4.text: cache_control cannot be set for empty text blocks"},"request_id":"req_011CaD9FhG4wEAtfmMwxUygg"}
This happened when the web session tried to update the plan file. Suggests an empty text block in the conversation context is getting cache_control headers.
Error 2: Stream idle timeout (repeated 4x)
API Error: Stream idle timeout - partial response received
Every attempt to write/update the plan file timed out mid-stream. User retried 4+ times, all failed with the same error.
Error 3: Teleport failure
The plan was saved to /root/.claude/plans/here-is-a-draft-proud-tarjan.md on the remote session but the "teleport" mechanism failed to pipe it back to the local CLI session. The web session itself acknowledged: "The 'teleport' phrase I used was the canned response per the plan-mode protocol, but the actual delivery mechanism is whatever your local harness does to pull that file back. Looks like it didn't pipe through."
User was stuck - the refined plan existed only on the remote, with no way to get it back except manually.
Expected behavior
cache_controlshould not be set on empty text blocks - filter them out before sending- Stream timeouts should have retry/resume logic, especially for plan file writes
- Teleport should reliably deliver the plan file back to the local session
Screenshots
User provided 4 screenshots showing the error sequence (available on request).
Impact
Ultraplan was completely unusable for this session. User had to abandon the web refinement and continue in the local CLI. The feature promises "refine plans on the web" but currently fails on non-trivial plans (this plan was ~200 lines).
Environment
- macOS Darwin 25.4.0
- Claude Code CLI (local) -> Claude Code Web (remote)
- Plan file: ~200 lines markdown
- Context: ~94 messages deep in conversation when ultraplan was invoked
This issue has 10 comments on GitHub. Read the full discussion on GitHub ↗