Claude Code 2.1.287 tool heartbeats and Sume jobs_wait slices

Claude Code 2.1.287 fixed tool heartbeats not reaching SDK hosts during a stalled response stream. Sume's jobs_wait holds up to 55 s, so heartbeats matter.

4 min readSume
All posts

If you embed Claude Code through the Agent SDK and call Sume's jobs_wait, the 2.1.287 fix keeps your host informed while a tool runs. The changelog for October 1, 2026 says it fixed tool heartbeats not reaching SDK hosts while the model's response stream was stalled with no data arriving. A jobs_wait call can hold one request for up to 55 seconds, which is long enough for a host to think the process has hung.

What changed

The Claude Code line comes from the Claude Code changelog (read 2026-10-07). The Sume figures come from Jobs and results.

Limits to set a timeout above

The table gives the Sume wait limits so that you can set a host timeout above them.

Sume wait limits for host timeouts (read 2026-10-07)
CallLongest holdIf it times out
jobs_wait on hosted MCP55 seconds (default 50)Call it again with the same ids
Submit with mode: "sync"30 seconds (wait_timeout_seconds cap)Poll status_url; do not resubmit
Poll status_urlOne short readObey next_poll_after_seconds

Set the timeout

Set the host's per-tool timeout above 55 seconds, ideally with some margin, and let jobs_wait return wait_slice_expired on its own. Do not ask for a longer timeout_seconds: the API clamps it to the cap and reports wait_slice_clamped.

A dropped wait does not cancel anything

If the host drops the call, the job is unaffected. A Sume job runs until it reaches a terminal state, whether or not anyone is waiting. Keep the job ids in your own state, and on restart call jobs_wait or jobs_status with them.

Wait on a wave

Pass up to 20 ids in one jobs_wait and set include_results: true, so one slice returns finished results for the whole wave.

Sources

Related posts

More in Agents

All Agents posts

Written by Sume