Nanobot
Nanobot separates wait-target search from output truncation
Nanobot’s exec patch searches retained session output for a wait target before applying the caller’s smaller head-and-tail response budget. Related session work tolerates malformed persisted summaries, while a user report says per-session model selection still falls back to the instance-wide primary.
HKUDS/nanobot PR #5200 is the inspected primary source: “fix(exec): preserve wait targets across response truncation.” The two related records below were inspected as supporting context, not treated as independent confirmation.
The facts
- HKUDS/nanobot PR #5200 was created 2026-07-31T17:47:50Z and was open at inspection; its title is “fix(exec): preserve wait targets across response truncation.” - HKUDS/nanobot PR #5201 was created 2026-07-31T17:49:13Z and was open at inspection; its title is “fix(session): tolerate malformed persisted session summary.” - HKUDS/nanobot issue #5198 was created 2026-07-31T17:26:27Z and was open at inspection; its title is “[Bug] Not possible to change models in a specific session unless reconfiguring the entire instance.” - The repository reported 46481 stars, 780 open issues, default branch main, and last push 2026-07-31T16:28:22Z. - The latest tagged-release baseline checked was v0.3.0 published 2026-07-25T08:08:47Z.
What changed
HKUDS/nanobot PR #5200 reports: Summary search wait_for against the exec session's existing bounded internal output limit keep the returned response bounded by the caller's max_output_chars add regression coverage for a target omitted by head/tail response truncation Problem write_stdin(wait_for=...) passed the caller's response limit into every session poll. The poll applies head/tail truncation before returning, so a target in the omitted middle could be produced successfully but never reach the wait search. The command could exit normally while the tool incorrectly reported Wait target not observed. Approach Poll with the existing MAX_OUTPUT_CHARS internal retention limit while waiting for a target. The existing _BoundedOutputBuffer(max_output_chars) still enforces the caller's response budget, so
HKUDS/nanobot PR #5201 reports: Summary tolerate missing or malformed fields in persisted _last_summary metadata preserve a usable summary while falling back to session.updated_at for an invalid timestamp treat a missing or empty summary text as no persisted summary Problem AutoCompact.prepare_session() runs on the turn path and read persisted _last_summary fields with direct indexing and datetime.fromisoformat(). Hand-edited, legacy, or partially written metadata could therefore raise KeyError or ValueError and abort the turn. Approach Narrow the persisted mapping locally, require a non-empty string text, and parse last_active defensively. If the timestamp is absent or malformed, use the session's existing updated_at value. Valid persisted summaries keep their existing behavior. Testing TDD Red:
HKUDS/nanobot issue #5198 reports: Bug Description Nanobot always runs with a specific model as its top choice and only uses the additional models as fallback. Clicking the model blip near the chat input box allows no change (unlike UIs of Cloud SaaS AIs). The /model command when used with the ID of another model seemingly does nothing either. Steps to Reproduce 1. Run Nanobot with at least two model configured, one in primary and two in 2nd position. 2. Start a chat. At the bottom, it is indicated that model one is being used. 3. Try to click the button, nothing happens. If models one and two are dissimilar
Why it matters
A bounded response and a bounded internal search solve different problems. Truncating before synchronization can report failure after the process actually emitted the target, poisoning every later automation decision. This is an operator boundary: persisted state, execution ownership and visible controls must describe the same event. A workaround that broadens access, deletes state or hides the symptom would trade a visible defect for an unmeasured one.
Current
The primary record was open when captured on 2026-08-01. The release baseline was v0.3.0 published 2026-07-25T08:08:47Z. Current repository metadata, pull requests, issues, release records, Google News discovery, Hacker News discovery, Lobsters, Metamesh and the rendered ClawCharts row were checked. ClawCharts selected the subject; it did not prove the claim.
Evidence
The primary URL is https://github.com/HKUDS/nanobot/pull/5200. Supporting records are https://github.com/HKUDS/nanobot/pull/5201 and https://github.com/HKUDS/nanobot/issues/5198. Their source bodies, timestamps and states were captured in the daily evidence bundle. Test counts, reproductions and deployment observations remain attributed to their authors unless explicitly identified as independently rerun.
Source boundary
Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Issue closure would not by itself prove a deployed fix. Search residue, package mirrors and historically published source spines were excluded.
Operator take
Keep internal retention bounded, test targets in the omitted middle, and expose session model choice as durable scoped state rather than a cosmetic command. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently after intervention.
Caveat
Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.
Source inspected; source state, environment and release boundary remain explicit.