Nanobot

Nanobot proposes stable aliases for resources that currently move with package layout

A Nanobot proposal introduces stable resource aliases rather than exposing package-relative paths to prompts, skills and tooling. Adjacent patches release idle session locks and cap buffered command output, tying resource naming to a broader effort to keep long-lived agent processes bounded.

← Back to homeOriginal source ↗

HKUDS/nanobot PR #5131 is the inspected primary source: “feat(core): add stable resource path aliases.” The two related records below were inspected as supporting context, not treated as independent confirmation.

The facts

- HKUDS/nanobot PR #5131 was created 2026-07-28T03:53:37Z and was open at inspection; its title is “feat(core): add stable resource path aliases.” - HKUDS/nanobot PR #5151 was created 2026-07-28T17:04:18Z and was open at inspection; its title is “fix(agent): release idle session locks.” - HKUDS/nanobot PR #5150 was created 2026-07-28T17:04:18Z and was open at inspection; its title is “fix(exec): bound buffered session output.” - The repository reported 46340 stars, 781 open issues, default branch main, and last push 2026-07-28T17:41:36Z. - The latest tagged-release baseline checked was v0.3.0 published 2026-07-25T08:08:47Z.

What changed

HKUDS/nanobot PR #5131 reports: Summary add a best-effort resource view at /resources/ / with agent, media, and package directory aliases use healthy aliases in main-agent, subagent, skill, memory, and Dream prompts while keeping canonical paths as the source of truth prepare the view from gateway, API, direct CLI, and SDK startup paths without making startup depend on link creation Design and compatibility derive immutable view IDs from the config, agent workspace, and installed package paths so concurrent environments never repoint a shared current link use directory symlinks on Unix and fall back to Windows junctions when symlink creation is unavailable never replace unknown files, directories, or mismatched links; ownership markers and a bounded lock make retries conservative preserve all existing canonical paths, configuration, and persisted state formats keep authorization target-based: restricted prompts expose only already-readable skill/media subtrees, and filesystem policy still validates the resolved canonical target keep project files relative to the effective project workspace instead of adding a mutable project alias Validation pytest tests/agent/test_context_builder.py tests/agent/test_context_prompt_cache.py tests/agent/test_subagent.py tests/test_resource_links.py tests/security/test_resource_view_access.py

HKUDS/nanobot PR #5151 reports: Summary Store AgentLoop session locks in a WeakValueDictionary. Centralize lock creation in _get_session_lock() for bus and direct turns. Cover idle cleanup and same-session waiter serialization. Why AgentLoop._session_locks retained every session key for the lifetime of the loop. SDK and API callers can supply many temporary session IDs, so the registry grew even after all work for those sessions completed. Owners and waiters keep a strong reference to their lock, preserving same-session serialization. Once the last user leaves, the weak registry entry can be collected. This is the AgentLoop counterpart to the API-server registry discussed in #4883 and #4890; direct calls still enter this separate lock map. Validation uv run --extra dev pytest -q (5328 passed, 22 skipped) uv run --extra dev pytest tests/agent/test_session_lock_lifecycle.py -q (2 passed) uv run --extra dev ruff check nanobot/agent/loop.py tests/agent/test_session_lock_lifecycle.py git diff --check

HKUDS/nanobot PR #5150 reports: Summary Keep stdout and stderr reader tasks draining while retaining only a fixed head/tail budget per stream. Include producer-side dropped characters in the existing truncation accounting. Bound wait_for aggregation and preserve target detection across poll boundaries. Why Exec sessions previously appended every decoded stdout/stderr chunk to _chunks until the next poll. A chatty process could therefore retain arbitrarily large output in memory even when the caller requested a small response limit. The new buffer remains bounded while preserving the beginning and most recent output, so pipe back-pressure is avoided and trailing diagnostics remain available. Validation uv run --extra dev pytest -q (5329 passed, 22 skipped) uv run --extra dev pytest tests/tools/test_exec_session_tools.py -q (36 passed) uv run --extra dev ruff check nanobot/agent/tools/exec_session.py tests/tools/test_exec_session_tools.py git diff --check

Why it matters

Agent packages become platforms when external skills and prompts depend on their internal files. Stable aliases create a compatibility seam; bounded locks and output prevent that seam from becoming another source of process accumulation. 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-07-29. The release baseline was v0.3.0 published 2026-07-25T08:08:47Z. Current repository metadata, pull requests, issues, release records, Hacker News discovery results 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/5131. Supporting records are https://github.com/HKUDS/nanobot/pull/5151 and https://github.com/HKUDS/nanobot/pull/5150. 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

Publish the alias contract as an API, test upgrades from older layouts, and keep aliases narrower than unrestricted filesystem discovery. 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.