Nanobot
Nanobot can forget uploaded files after conversation consolidation
A Nanobot report finds that six of 17 channels store uploaded paths only in structured media fields that the archive formatter ignores. Images, PDFs and video remain usable in the live window, then become unreachable after consolidation. An open patch makes replay and archive share one breadcrumb rule.
HKUDS/nanobot issue #5118 is the inspected primary source: “Bug: Session consolidation drops uploaded media paths carried only in media[] (6/17 channels) — files become unrecoverable after archive.” Issue #5118 compares two renderers of the same stored message. Session replay synthesizes an image-style breadcrumb from media[], so the model can read an uploaded absolute path while the turn remains live. MemoryStore consolidation reads only content and skips empty-content messages, dropping the path before it reaches history.jsonl. The reporter audited 17 channels and names WebUI, Mattermost and NapCat as path-only cases; Slack, Discord and WeCom retain only a basename in content. The structured field can also carry PDFs and video, even though the existing breadcrumb label says image. The minimal reproducer feeds an empty-content user message with one media path: replay returns the path while archive output is empty. PR #5120 extracts a shared helper and applies it before the empty-content skip; its author reports 68 focused tests plus a clean Ruff run. PR #4667 separately protects user-authored skills from Nanobot’s Dream writer unless dream_managed frontmatter grants ownership.
The facts
- HKUDS/nanobot issue #5118 was created 2026-07-27T14:57:07Z and updated 2026-07-27T15:30:39Z; state is open. - HKUDS/nanobot returned 46305 GitHub stars, 769 open issues, default branch main, and last push 2026-07-27T19:17:57Z. - Latest tagged-release baseline checked: v0.3.0 published 2026-07-25T08:08:47Z. - Issue #5118 compares two renderers of the same stored message. - Session replay synthesizes an image-style breadcrumb from media[], so the model can read an uploaded absolute path while the turn remains live. - MemoryStore consolidation reads only content and skips empty-content messages, dropping the path before it reaches history.jsonl. - The reporter audited 17 channels and names WebUI, Mattermost and NapCat as path-only cases; Slack, Discord and WeCom retain only a basename in content. - The structured field can also carry PDFs and video, even though the existing breadcrumb label says image.
What changed
Issue #5118 compares two renderers of the same stored message. Session replay synthesizes an image-style breadcrumb from media[], so the model can read an uploaded absolute path while the turn remains live. MemoryStore consolidation reads only content and skips empty-content messages, dropping the path before it reaches history.jsonl. The reporter audited 17 channels and names WebUI, Mattermost and NapCat as path-only cases; Slack, Discord and WeCom retain only a basename in content. The structured field can also carry PDFs and video, even though the existing breadcrumb label says image. The minimal reproducer feeds an empty-content user message with one media path: replay returns the path while archive output is empty. PR #5120 extracts a shared helper and applies it before the empty-content skip; its author reports 68 focused tests plus a clean Ruff run. PR #4667 separately protects user-authored skills from Nanobot’s Dream writer unless dream_managed frontmatter grants ownership. The primary record was inspected with its timestamps, state, body and adjacent project records. ClawCharts supplied the assignment list; it does not establish the claim.
Why it matters
Memory consolidation is a data migration that happens repeatedly inside a conversation. If live replay and archive use different serialization rules, the agent’s apparent memory depends on timing rather than policy. Restrict-to-workspace deployments feel the defect most sharply because the model cannot compensate by scanning arbitrary media directories. The useful boundary is where persisted state, visible control and runtime behavior are expected to agree.
Current
The issue and fix were both open. The report names Nanobot 0.3.0, which is also the latest tagged release, published July 25. Focused tests support the proposed serialization repair, but no inspected merge or release proves that current packaged users have it. Repository metadata, current issues and pull requests, release baseline, Hacker News discovery and the rendered ranking row were checked. Weak search residue and historically used source spines were not promoted.
Evidence
The primary URL is https://github.com/HKUDS/nanobot/issues/5118. Supporting links are inspected current project records that establish implementation, adjacent direction or boundary conditions. Dates, reproductions, test totals and deployment observations remain attributed to their authors unless this brief explicitly says they were independently rerun.
Source boundary
Open work is described as open, closed work as closed, and operator reports as reports. Closure can reflect a documentation decision or triage outcome; it is not silently translated into a shipped code fix. Ranking explains why the project was scanned; it does not prove correctness, adoption or package behavior.
Operator take
Use one canonical message renderer for live replay, compaction input and durable history. Test empty-content attachments, multiple files, non-image media and workspace restrictions across every channel adapter. Before consolidation, verify that every model-visible resource keeps a durable reference rather than assuming content text duplicates structured state. Preserve a before-state receipt and verify the narrowest invariant where state changes. Do not broaden permissions or delete state merely because the visible symptom is inconvenient.
Caveat
Public project records are mutable. Source state was captured at publication time, and later revisions may change status, scope or evidence. No source here authorizes automatic mutation of a reader’s deployment.
Source inspected; source state, environment and release boundary remain explicit.