Changelog
User-facing changes, newest first. To see which version a channel points to right now: npm view @sleep2agi/agent-network dist-tags (same for agent-node and commhub-server). Full release notes for every npm version are in the repository's docs/tests/release-v<version>.md; desktop notes are at agent-network-app releases.
Node visibility: rules files, skills, project folder — preview (2026-09-23 to 09-25)
Coordinated release: commhub-server@0.9.0-preview.56–.60, agent-node@2.5.0-preview.85–.88, agent-network@2.3.0-preview.110–.115 (agent-node@.84 never became visible on npm and is superseded by .85).
- Read-only project folder browsing (#1999): new hub tools
list_node_files/read_node_filelet you walk a node's working directory level by level and view text files (≤256 KiB). Credential-like files (.env*, private keys,auth.json, …) are listed by name only; paths and symlinks cannot escape the working directory; node tokens cannot start a browse. Requires hub.59+ agent-node.88(or anet.115) + desktop 0.2.94 - Read-only node skills (#1984):
list_node_skills/read_node_skilllist skills from where each runtime (codex / grok / opencode / Claude Code) actually loads them, and read SKILL.md - Claude Code sessions can have CLAUDE.md read/written remotely (#1977):
read_node_rules_file/write_node_rules_filegain analiasparameter that can target a session without a node row; running sessions must be restarted on anet.111to report the capability - Staged content is cleaned up (#2001, hub
.60): rules files, SKILL.md and file-read results are cleared 60 s after the requester fetches them, unfetched content after 24 h, and rows are deleted after 30 days; the first run after deploy clears all content older than 24 h in one pass - Pickups resolve by the token's bound node (#1994, hub
.58): when an alias has several rows, rules-file / config-update requests no longer go to a stale row and wait 60 s for nothing - Steadier codex-app-server startup (#1988 / #1989 / #1991): new
ANET_QUEUE_TIMEOUT_MS(queue deadline) andANET_CODEX_RESUME_TIMEOUT_MS(startup session resume, default 120 s, one retry on timeout); a failed resume reports offline to the hub before exiting, so the hub no longer shows a dead node as idle; an unbound legacy token now only disables outbound reconciliation instead of stopping inbox compensation too - Daemons can still create nodes after a reboot (#1976, anet
.110): daemons started throughanet node start/restartor the boot sweep also pin the anet binary, ending the "online but cannot create nodes" state
Desktop 0.2.85–0.2.97 (2026-09-24 to 09-25)
Signed updates for macOS (Apple Silicon) and Windows (x64).
- Look: a quieter palette and hierarchy (surfaces separated by tone, text contrast ≥4.5:1); thin scrollbars that appear on hover; long code, hashes and URLs wrap inside chat bubbles
- Redesigned node page (0.2.87–0.2.88): header card plus section bar (Overview / Model & runtime / Rules file / Skills / Tasks / Danger zone); tasks grouped into In progress, Queued, Possibly stuck and Recently finished; centered layout on wide windows
- Rules-file editor (0.2.85–0.2.93): shown for Codex / OpenCode / Claude nodes; a rendered Read mode by default, full-screen view with a heading outline, double-click a passage to jump to its source in the editor; periodic refresh no longer wipes unsaved edits; an agent-node that is too old is reported with the required version instead of a 60 s wait
- Skills and project folder: read-only Skills section (0.2.87) and project-folder browsing (0.2.94), with a clear upgrade hint when versions are too old
- Unread and notifications: the macOS menu-bar unread count now clears and the panel is no longer capped at 20 conversations (0.2.92); a "New messages" group at the top of the node list (0.2.95)
- Find and replace in rules files (0.2.97):
Ctrl+F/⌘Fworks in Read, Edit and full screen with jumps between matches; Edit mode can replace, changing only the draft until you save; a read now always shows content or a reason within 90 s, and stale content is no longer shown as an editable empty file - New Grok nodes default to ACP mode (0.2.97): co-presence moves under Advanced and is marked experimental
- Other: Settings → About update checks always end in a visible result (0.2.88); in full-screen reading, macOS traffic lights and Windows caption buttons are no longer covered (0.2.96); the Grok TUI co-presence runtime is labelled Preview in the wizard
Queue correctness and runtime fixes — preview (2026-09-22 to 09-23)
agent-node@2.5.0-preview.76–.83, agent-network@2.3.0-preview.100–.109 (.102 is void on npm and superseded by .103).
- The codex queue no longer runs work twice or late (#1939 / #1945): every terminal path removes the local queue row; queued rows ask the hub before dequeue, so tasks already acknowledged or finished no longer start a turn
- grok-build-acp really uses the configured model (#1961): the model is passed at launch and read back via
session/set_model; a mismatch fails before any prompt, and the hub shows the model actually in effect - Explicit codex binary selection (#1971): order is
codexBinconfig →ANET_CODEX_BIN→ a PATHcodexno older than the bundled one → bundled; the startup log prints path and version. Fixes clean installs whose bundled codex was too old for newer models ("requires a newer version of Codex"). #1974 stops the false reasoning-tier warning on newer codex - opencode co-presence survives a remote model change (#1950 / #1964 / #1966): restart no longer refuses on its own previous generation's
ANET-COMMHUB.md; the old attach TUI is stopped precisely and the new session is re-attached in the same tmux pane anet node codex forkgains five fixes (#1954, anet.104): creates a missing--workdir, rewrites the project table header,--modeloverride with a mismatch warning, pre-probes a free port, carriesAGENTS.mdalong- grok co-presence marked Preview (#1968):
anet setup,anet node createand the docs labelgrok-build-clias Preview and point to the stablegrok-build-acp; the refusal for an unverified grok binary now includes a copy-pasteGROK_BINARY=… anet node startrecovery command
Shared codex login detection + long-turn observability — preview (2026-09-19 to 09-20)
agent-node@2.5.0-preview.73–.75, agent-network@2.3.0-preview.97–.99.
- Nodes sharing one codex login are named (#1920 / #1928 / #1931): at startup a refresh-token fingerprint check warns and lists the other nodes sharing the login (warn only, never refuses to start). The check runs inside agent-node, so directly launched nodes are covered, and comparison is host-wide (
~/.anet/codex-auth-fingerprints/). Use anet.99+ agent-node.75for the complete behavior - Named refresh-failure causes:
rotation-conflict(the token was already used by another node; log in once again) andtoken-endpoint-unreachable(egress cannot reach the token endpoint) are reported separately; the message explicitly says not to copy another node'sauth.json - Long-turn heartbeat (#1919): grok nodes write an
in-flight: … elapsed=… last=…line every 30–60 s during a turn, so "quiet" and "stuck" are distinguishable - Less stderr noise: known-benign grok stderr is folded into one INFO line per turn instead of flooding WARN
ANET_LOG_LEVEL: a newANET_-prefixed log-level variable; invalid values warn once (a mistypedLOG_LEVELused to fall back to info silently)
Attachments, cross-WAN node start, clearing unread — preview (2026-09-14 to 09-17)
commhub-server@0.9.0-preview.54–.55, agent-node@2.5.0-preview.69–.72, agent-network@2.3.0-preview.90–.96 (.94 never became visible on npm and is superseded by .95).
- Local file links in replies become attachments (#1869 / #1876): any runtime can write
[name](/absolute/path)in a reply and the desktop shows a downloadable attachment card; files that cannot be uploaded are annotated with the reason (outside the workdir/home, over 12 MB, …);attachmentspassed as a string on claude-code-cli nodes is no longer dropped - Cross-WAN hubs are no longer misjudged (#1882): the hub health probe in
anet node startdefaults to 10 s for non-loopback hubs, overridable withANET_HUB_HEALTH_TIMEOUT_MS(1000–60000) - Gzip hub responses (#1897, hub
.54): JSON/text responses ≥1 KB are compressed on request and/api/status?light=1truncates task text, making node lists and chat history much smaller on slow links - Mark an agent read in one call (#1909, hub
.55):POST /api/messages/ackaccepts{ "agent": "<alias>" }to clear all unread from that agent (used by desktop 0.2.73+) - Finished tasks are not re-run (#1902): serial queues check task state before dequeue; replied/closed tasks are only acked, never started
- claude-code nodes drain the inbox (#1901): each new-task event fetches the whole backlog, so the 6th message onward no longer waits for the next event
- opencode co-presence reply ownership (#1912): long turns that went through context compaction are no longer rejected as "not owned" with the answer dropped; when still rejected, the answer is attached to the error
- The co-presence identity reaper only targets its own process tree (#1872): unrelated processes that inherited a node marker are no longer killed as a previous generation; two common grok co-presence startup failures now include recovery commands (#1882 / #1888);
anet grok --helplists themodelsubcommand (#1886)
Desktop integration and the Codex lifecycle controller — preview (2026-09-06 to 09-10)
commhub-server@0.9.0-preview.50–.53, agent-node@2.5.0-preview.67–.68, agent-network@2.3.0-preview.86–.89.
anet node codexlifecycle commands (#1856, anet.89): read-onlypreflight/verify; deterministicstart/restart/resumewith rollback on failure;forka new node that inherits history;account register|list|installandrollbackfor logins; sequentialcanary. Plusanet node edit --workdir- Reply attachments land in the right bubble (#1824, hub
.50): an agent's reply attachments no longer render under the asker's bubble or overwrite the asker's own attachments - Authoritative per-agent unread counts (#1838, hub
.51):GET /api/messages?scope=userreturnsunread_by_agent/unread_total, and acks sync across devices - The wizard shows why node creation failed (#1843, hub
.52): newGET /api/node-create-requests?request_id=surfaces the daemon's error directly - OpenCode co-presence on macOS (#1847 / #1848 / #1849): package identity check, launch isolation and process identity now support darwin (Windows still unsupported)
provider/modelmodel names allowed (#1853): hub and daemon both accept a single slash, so the wizard can create nodes withopencode/…models
Co-presence and CLI reliability — preview (2026-09-03 to 09-04)
commhub-server@0.9.0-preview.46–.49, agent-node@2.5.0-preview.59–.66, agent-network@2.3.0-preview.77–.85.
- Standard MCP clients get the tool list again (#1763, hub
.46):tools/listno longer throwsschema._zod, so Claude Code MCP configs, Inspector and similar clients can list tools blockedhas a way out (#1793, hub.47): a node returns toidleafter sending a terminal reply or dispatching a task; internal hub errors now return the real error message to MCP callers (#1801)- grok co-presence stops timing out task after task (#1774 / #1775 / #1776): the verified grok binary is pinned; a missing
turn_endedis abandoned after a bounded wait; a half-typed TUI input left idle for 10 minutes yields to queued work. Stopping no longer leaves 5 placeholder files behind (#1784 / #1817) - No more duplicate replies from co-presence nodes (#1770): the model's own extra messages to the task sender are rewritten into non-push progress reports (requires anet
.77+ agent-node.62, and a node restart) - CLI:
anet node startrefuses a second session for a running node (#1804); prefers the agent-node installed beside anet (#1813);anet node editsupports--runtime/--model;--force/--yesno longer swallow the next argument; agents can send files viaattachments(#1186); grok co-presence can start on Mac / Windows (with a reduced-isolation notice) - Richer roster data: claude-code nodes report telemetry and model (#1787 / #1799); handover reports no longer wipe version and telemetry (#1810); codex co-presence readiness is probed by port and becomes ready in seconds (#1798)
- Delegation false positives fixed (#1805): "let/ask X …" patterns only count as delegation at the start of a sentence or line, so mentioning another node in prose no longer creates phantom tasks
agent-network 2.3.0-preview.76 promoted to latest (2026-09-02)
npm i -g @sleep2agi/agent-network now installs 2.3.0-preview.76 by default. It includes all CLI improvements through 2026-09-02, notably the error-message, help and layout fixes in the 08-29 to 09-02 entries below.
agent-node 2.5.0-preview.58 promoted to latest (2026-09-02)
The latest tag of @sleep2agi/agent-node points to 2.5.0-preview.58, which supports remote node rules-file read/write. commhub-server's latest did not move in this period (still 0.9.0-preview.30); install preview for the newer hub capabilities.
Remote node rules files + CLI wording overhaul — preview (2026-09-02)
Coordinated release: commhub-server@0.9.0-preview.45, agent-node@2.5.0-preview.58, agent-network@2.3.0-preview.76.
- Node rules files (#1755): the desktop can read and write a node's
CLAUDE.md/AGENTS.mdremotely; the hub addsread_node_rules_file/write_node_rules_fileand related tools; nodes only read/write inside their own working directory and the chain has no path parameter - Did-you-mean and subcommand help: mistyped commands such as
daemonget the right suggestion;anet goal/token/batch/opencode/network/channel/session --helpprint their own help - Unknown node names get close matches, with separate messages for "no nodes", "similar names exist" and "no similar names"
- Table layout: CJK aliases, long runtime names and multi-line task text no longer skew
node ls/status/tasks;anet demono longer prints literal color codes - Time and diagnostics: hub timestamps are labelled UTC with a relative age;
anet doctorsays what each check measures, lists actual runtime CLI versions, and no longer reports zero nodes as an error
Node-creation capability made visible + grok co-presence UX — preview (2026-08-30)
commhub-server@0.9.0-preview.43–.44, agent-node@2.5.0-preview.53–.57, agent-network@2.3.0-preview.68–.75.
- Whether a daemon can create nodes is now obvious (#1545):
anet daemon listreports create capability in five distinct messages with when it was measured; the hub checks the daemon's reported capability before dispatchingcreate_nodeand explains refusals (#1510 / #1511 / #1588) anet daemon restart <name>(#1601, anet.74): restart a daemon in one command; if it fails to come back, it says clearly that the daemon is now stopped and how to retry (#1616)- grok co-presence:
anet grok attachuses the alternate screen and restores your terminal on detach (#1514); the recovery TUI shows grok's real output when it exits (#1518); leaderless builds such as grok 1.0.5 are no longer permanently reportedblocked(#1609) - Errors point the right way: a 401 is no longer called "cannot reach hub" (#1581);
anet daemon startwarns when grok is installed but not on the daemon's PATH (#1586); grok not found distinguishes not-on-PATH / not executable / failed to start (#1582); theanet_bin_sourcefix command now actually runs (#1521) anet statusno longer shows stuck/errored nodes as working (#1577); Feishu channels are refused on non-claude-agent-sdk nodes (#1575)anet node stopno longer reports failure because of a leftover socket path with no listener (#1526)
grok co-presence fixes, Windows support, persistent desktop messages — preview (2026-08-29)
commhub-server@0.9.0-preview.39–.42, agent-node@2.5.0-preview.44–.52, agent-network@2.3.0-preview.60–.67.
- grok co-presence TUI: immediate notice when a slash command is blocked (#1404); a clean
/model <id>is executed on your behalf (#1408); no more black screen after attach (#1412); switching models no longer crashes the node (#1416) - Windows works (#1137 / #1489 / #1494 / #1504):
anetcan launch npm/npx and other external launchers, and the daemon can fork nodes on Windows without children crashing on a missingHOME. Upgrade both anet.66and agent-node.51or later - Desktop messages are no longer lost (#1481 / #1485 / #1488):
send_desktop_messagepersists before pushing; newGET /api/messages?scope=userandPOST /api/messages/ackwith unread counts and token-shaped strings masked on read - Nodes start on machines without a non-loopback IPv4 (#1498 / #1506): the hub accepts
host.ip = null, and nodes retry without optional telemetry on a schema mismatch - The daemon is a pure program again (#1418): free-text tasks no longer invoke an LLM; only structured lifecycle commands run. stop/start/delete doorbells are replayed after SSE reconnect (#1450)
- Security: node deletion cleans the real working directory and no longer leaves node credentials behind (#1478; on machines where cwd ≠ home, check
.anet/nodes/manually for nodes deleted before upgrading) - CLI:
anet node create --resumeinfersclaude-code-cli(#1420); the interactive wizard shares the named path's environment checks (#1473);--copresencestartup failures name the failing step and log paths (#1500)
Reliability sprint: stop/delete convergence + node logs + timeout guard — preview (2026-08-28 evening)
Coordinated release: commhub-server@0.9.0-preview.36–.38, agent-node@2.5.0-preview.40–.43, agent-network@2.3.0-preview.54–.59.
create_node doorbell compensation (#1362, absorbing #1364): doorbells missed during an SSE outage are no longer lost forever — on reconnect the daemon calls the new hub tool
list_my_pending_create_requestsand replays them (.38/.43pair)stop/delete convergence (#1286 trio): daemon-side ack tracing, hub-side six-exit instrumentation for
ack_stop_request, stuckdeletingrows re-dispatchable withforce(5-minute staleness criterion)claude-code-cli node logs (#1345): the stdio proxy now mirrors every log line into
.anet/nodes/<alias>/logs/(UTC-dated files) — per-alias node logs exist for this runtime for the first time; includes a stop-race guard (a torn-down node dir is never resurrected)callCommHub timeout (#1357): 30s
AbortSignal.timeout— a hung hub can no longer silently swallow doorbellsdaemon capability visibility:
runtimes_supportedwidened to 7 (#1376), four-class creation-failure codes (#1377), hublifecycle_controllableflag (#1374) pairing with desktop button disabling (app#197/#200 — the three TUI co-presence runtimes join the create wizard, zero-key, following the host login)agent-initiated push:
send_desktop_messagedocumented (guide/channels)
Exact BTW task boundary — Hub preview (2026-08-28)
commhub-server@0.9.0-preview.34 adds optional thread_id / turn_id fields to task records and returns them through REST and MCP task projections. The Hub accepts a boundary only when the consuming node reports it for an owned task without conflict. Older nodes and historical tasks remain compatible; absent boundaries stay explicitly absent and are never guessed or backfilled. The paired agent-node@2.5.0-preview.39 and agent-network@2.3.0-preview.53 will follow after the Hub is published, in dependency order.
Durable Codex co-presence and safe teardown — preview (2026-08-26)
This paired preview release is agent-network@2.3.0-preview.46 / agent-node@2.5.0-preview.34 / commhub-server@0.9.0-preview.30. The Hub adds immutable node cursors and a monotonic terminal journal for durable recovery after a missed SSE notification, while task delivery returns the network-authorized actual_to. Codex co-presence keeps one bridge and a shared CODEX_HOME plus thread/history; node stop now converges the managed app-server, bridge, and TUI resources. Linux and protected Windows Codex 0.148 gates cover upgrade recovery, active-turn steering, and history preservation.
Versioning note
This log runs reverse-chronologically. The version scheme was reshuffled once:
- From 2026-05 onward: gradual v0.6 → v0.7 → v0.8 → v0.9 → v0.10 → v0.11 releases; the
v0.X.Yformat mirrorscommhub-server's0.X.Ysemver style. - Before 2026-04: used
v1.0.0-preview.N/v2.1style version numbers that overpromised. Deprecated. - Current stable: whatever npm's
latesttag points to (see Versioning — npmlatestis authoritative); v0.8.1 was the first Apache 2.0 OSS release. - Current preview: follow npm's
previewdist-tag. Bothlatestandpreviewnow includegrok-build-cliandanet grok attach(experimental;grok-build-acpremains the default recommendation); see the Grok nodes. - Entries for v0.9.2 and earlier (including v1.0.0-preview / v2.1 / v0.x) are linked under Older releases at the end of this page.
Grok Co-presence TUI (grok-build-cli) — preview (2026-07-15) 🟡 preview
Correction — 2026-07-31
The section below records a candidate milestone. Its installation and usage commands are as written at the time; do not copy them. grok-build-cli / anet grok attach later shipped in the npm packages (experimental); for the current status and usage see the Grok nodes.
Version sync (npm @preview tag):
@sleep2agi/agent-network@2.3.0-preview.23@sleep2agi/agent-node@2.5.0-preview.21
Note:
preview.2–preview.22were incremental iterations (see git history); this entry records the co-presence milestone.
🌟 Highlights
Grok co-presence: attach to the real Grok TUI held by the agent-node
New grok-build-cli runtime + anet grok attach <alias>: you and CommHub network tasks share one Grok session — network tasks render live in the terminal, reply back to the originator, and you can watch and type alongside.
anet node create grok-shared --runtime grok-build-cli
anet node start grok-shared # wait for: attach with anet grok attach grok-shared
anet grok attach grok-shared # Terminal 2, real TTY, same machine/user/project dirConstraints: Linux only, exact grok 0.2.93 (f00f96316d), fixed text-only [todo_write] profile (no fs/shell/network/MCP tools), trusted Hubs only, preview (not latest/production). Full usage and caveats: Grok Co-presence TUI.
opencode-cli — the 5th Runtime (RFC-029) — preview (2026-07-09) 🟡 preview
New opencode-cli runtime: use the public sst/opencode CLI as a multi-vendor front-end (unified session / auth abstraction) — anet's 5th runtime. Preview channel only (RFC-029 in progress) — not yet in npm latest: after installing latest, the anet node create picker shows only the 4 formal runtimes (claude-code-cli / claude-agent-sdk / codex-sdk / grok-build-acp); it lands in latest once stabilized.
🌟 Highlights
anet node create --runtime opencode-cli(preview channel): the interactiveanet node createwizard is now a 5-way picker (opencode-cli added; npmlatestis still 4-way).- Vendor preset: after picking the runtime, choose an
anthropic(readsANTHROPIC_API_KEY) oropenai(readsOPENAI_API_KEY) preset — the key is read from env, not prompted. - Parent-mediated model: same as
codex-sdk— opencode runs as a pure LLM worker; the commhub SSE / inbox / reply roundtrip is handled by the agent-node parent process (no commhub MCP server on the opencode side). - Version pin: spawns the local
opencodeCLI at a fixedopencode-aiversion pin (the firstanet node createpromptsnpm i -g opencode-ai@<pin>); the free-model keyless path passed full e2e (2026-07-09).
Usage and comparison: Node Runtime — Five runtimes; design: RFC-029.
v0.11-preview2 — /loop works for every runtime + security batch + RFC-024 hub config-apply foundation (2026-06-28) 🟡 preview
Version alignment (npm @preview tag, three packages in sync):
@sleep2agi/agent-network@2.3.0-preview.1← bumped (CLI: newanet node loopsubcommand)@sleep2agi/agent-node@2.5.0-preview.1← bumped (runtime:/loopworks across all runtimes)@sleep2agi/commhub-server@0.9.0-preview.1← bumped (hub: security batch + RFC-024 PR A)
PINNED_SERVER_VERSION updated to 0.9.0-preview.1 — anet hub start lazy-fetches the matching hub binary automatically.
🌟 Highlights
/loop now works for every runtime
Before preview2, the /loop self-scheduler only ran for the claude-code-cli runtime; agent-node-driven runtimes (claude-agent-sdk / codex-sdk / grok-build-acp) silently skipped goal ticks. preview2 removes that runtime-bucket skip — every runtime can now drive a /loop goal end-to-end.
Plus: new anet node loop CLI to manage goals from outside the agent — set / list / cancel a node's running /loop jobs without entering an interactive session.
anet node loop my-codex "monitor PR #271" --every 5m
anet node loop researcher "scan twitter for grok updates" --every 30m
anet node loop daily-bot "post the morning summary" --every 2hFull usage + trigger mechanics: Agent Node — Loop scheduler (ZH + EN parity).
🔒 Security batch
Four cross-tenant / data-integrity gaps closed for public-hub multi-user / multi-network deployments:
- Cross-tenant write guards (#287, RFC-024 PR A): 4 new MCP tools (
update_node_config/get_config_update/ack_config_update/restart_node) gate every write bynode.network_id == caller.effectiveNetId, mirroring the #275 pattern.report_statusupsert no longer lets a node row cross networks. SQL-layer trust root protected by theupsertNodeWithSec1Guardhelper + 5 real-driver regression tests + 6 inline-mirror tests retention sweep+ incremental VACUUM (#282): hub sweeps old task / inbox rows on a background schedule; theagent_telemetryindex is split so the periodic READ doesn't write-amp. Multi-tenant deployments see steadier CPU- Read-path stale-marker fix (#283): sessions stale-mark moved off the read path to a single background sweeper —
/api/statusis no longer a write-amp call - Password KDF strengthening (#285): scrypt path gets a verified-modern parameter set, backwards-compatible (existing hashes still verify; new hashes use the stronger params)
Engineering hardening
superviseChild()shared helper (#284): theconnectFeishu+connectSSEsupervisor logic (while-loop respawn + jittered backoff + stable-uptime reset + shutdown gate + abandon-after-timeout) extracted into one helper. Two intentionalconnectSSEimprovements landed alongside (±25% jitter to defend against thundering-herd reconnects after a hub restart; backoff no longer resets on a raw HTTP 200 — only on the SSE"connected"event — fixes a hot ~1s reconnect loop)- RFC-024 hub config-apply foundation (#287): the 4 MCP tools + schema (
nodes.config_revision/nodes.config_snapshot/node_config_updatestable) land in preview2. Dashboard 改配置真生效 is the consumer side (PR B + PR C); those merge in a follow-up preview2.x / preview3
Not in preview2 yet
- RFC-024 PR B (agent-node config-apply runtime + W1 supervisor) — separate PR #290, depends on PR A (which IS in preview2). Queued for preview2.x / preview3
- Dashboard 改配置 end-to-end — PR C is a 1-line constant swap in
sleep2agi/agent-network-dashboard; fires after PR B merges
Install / Upgrade
Clean install (new user):
npm install -g @sleep2agi/agent-network@2.3.0-preview.1
npm install -g @sleep2agi/agent-node@2.5.0-preview.1
npm install -g @sleep2agi/commhub-server@0.9.0-preview.1Upgrade (existing user tracking the preview channel):
anet upgrade --channel previewRestart any running nodes so they pick up the new runtime:
anet node stop <alias>
anet node start <alias>Full upgrade workflow + cross-version migration → Upgrade Guide.
v0.10.15 — Wave 2 CLI UX polish (9 items) (2026-06-10) ✅ stable
Version sync (npm latest tag): CLI-only release — no agent-node / commhub-server change, no PINNED bump, no hub/runtime restart needed.
@sleep2agi/agent-network@2.2.12← bumped (from 2.2.11)@sleep2agi/agent-node@2.4.10← unchanged@sleep2agi/commhub-server@0.8.5← unchanged (PINNED)
🌟 Highlights
Trustworthy anet hub status (P1.1 / #214 F7-04)
In containers (node:24-slim, alpine…) without lsof, the old build falsely reported "Hub not running" even when /health returned 200, and busybox lsof streamed fd numbers as PIDs, rendering 60+ junk entries. Fix (commit d33bbfc): /health is now the ground truth (no more false negatives); the PID list is sanity-filtered and folds to "top-3 + count" when >5; three clear states (healthy / port-held-but-unhealthy / not-running), each with the right hint.
Did-you-mean command correction (P1.2 / #214 F7-02/10/11)
Typos within Levenshtein distance ≤2 get an auto-suggestion instead of a 50-line help dump. Wired into the top-level, anet node, and anet project default branches:
$ anet creat
Unknown command "creat". Did you mean: anet create?anet node restart <alias> (P1.3 / #173)
Symmetric with anet project restart / anet batch restart — restart a single node without typing stop + start.
-V and anet help aliases (P1.4 / #192)
-V (uppercase, cargo/git/docker convention) equals -v / --version; anet help (no dash) equals --help / -h.
🐛 Bugs Fixed
- #214 hub status PID list corruption (container lsof streamed-fd pollution)
- #214 hub status falsely "not running" (
/health200 but lsof unavailable) - #214 no hint on mistyped commands (F7-02/10/11)
📦 Install
npm i -g @sleep2agi/agent-network@latest
anet --version # agent-network v2.2.12 ⬆v0.10.14 — Reply reliability / dispatch dedup / idle timeout / --help safety (2026-06-10) ✅ stable
Version sync (npm latest tag):
@sleep2agi/agent-node@2.4.10← bumped (from 2.4.9)@sleep2agi/commhub-server@0.8.5← bumped (from 0.8.4, PINNED realigned)@sleep2agi/agent-network@2.2.11← bumped (from 2.2.10)
🌟 Highlights
#168 Reply reliability (codex / claude / grok — all runtimes)
Symptom: a node wrote its output to /tmp on time, but the completion reply never reached the dispatcher — operators only saw "idle / no output" and had to ls /tmp by hand. Root cause was in the shared agent-node callCommHub + sendReply + processInbox chain, not runtime-specific. Fix (commit 5b61d1c): new reply-reliability.ts (CommHubError typed class + classifyCommHubResponse classifier for success/retryable/appLevel + a disk-persisted idempotent PendingReplyQueue that survives restarts and keeps an attempts counter); processInbox reworked to drain-pending → inflight guard → process → persist + send + clear-on-success → ack. 20 new test cases (bun test 111 pass / 0 fail, zero schema change). Server side (#216): send_reply now has three-way semantics — not_found not stored / offline stored as explicit queued / structured error — fixing the earlier false-positive ok:true.
#212 Dispatch dedup (commhub-server guardrail)
Server-side dedup per (from, to, content-hash), 5-min default window, in-memory with zero schema change (commit 1f3ae1e). When an agent retries or a user double-fires the same prompt, only one passes within the window. Tunable via COMMHUB_SEND_DEDUP_WINDOW_MS.
idle timeout + --help safety
The remaining two of the four: node idle-timeout handling, and safer --help output.
📦 Install
npm i -g @sleep2agi/agent-network@latest @sleep2agi/agent-node@latest
anet --version # agent-network v2.2.11 ⬆
agent-node --version # agent-node v2.4.10 ⬆v0.10.13 — grok-build-acp session/prompt 300s timeout hang fix (P0 hotfix) (2026-06-08) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-node@2.4.9← bumped (#210 / #204 runtime — ACPhandleServerRequestnon-integer error-code coerce fix)@sleep2agi/agent-network@2.2.10← unchanged@sleep2agi/commhub-server@0.8.4← unchanged (PINNED)
🌟 Highlights
Root cause + fix for grok-build-acp nodes hanging at session/prompt timed out after 300000ms
Symptom: A grok-build-acp runtime node accepts a second task, hangs for ≈5 min, then agent-node reports grok ACP request 'session/prompt' timed out after 300000ms. an ai-insight user's Grok node (grok 0.2.29 alpha) captured the exact 2026-06-07 19:53:09 log:
ERROR failed to parse incoming message: invalid type: string 'ENOENT',
expected i32 at line 1 column 48.
Raw: {'jsonrpc':'2.0','id':5,
'error':{'code':'ENOENT',
'message':'ENOENT: no such file or directory, open ...'}}Root cause: ACP server-request responses (e.g. a failed read_file) carry a JS-native string error code like 'ENOENT', but the Grok agent's protocol requires code to be an i32 integer. The old agent-node passed the string straight through → Grok agent parse failure → undefined state → hang until the client-side 300 s timeout.
Fix (commit 4818776): client.ts:handleServerRequest adds a Number.isInteger(rawCode) guard. Non-integer codes are coerced to -32000 (the JSON-RPC standard reserved range); the original string is preserved on data.originalCode so no information is lost.
New regression tests: +2 cases, bun test 89/89 pass.
Live verification (in-house, 2026-06-07 19:50–19:55):
- Same-shape
read_filefailure retried: returns structuredcode: -32000+data.originalCode: "ENOENT"immediately - The grok turn continues without hanging; the task completes normally (47 s, well under the 300 s timeout)
- ai-insight's Grok node passed UAT after installing
2.4.9-preview.0globally
🐛 Bugs Fixed
- #210 / #204 runtime —
grok-build-acpACP server-request responses carrying non-integer error codes (e.g.ENOENT) caused the Grok agent to fail to parse and hang until the 300 s timeout
📦 Install (fresh install)
npm i -g @sleep2agi/agent-network@latest @sleep2agi/agent-node@latest
# Verify versions
anet --version # agent-network v2.2.10 (unchanged)
agent-node --version # agent-node v2.4.9 ⬆anet hub start auto-fetches commhub-server@0.8.4 (PINNED, unchanged).
🔄 Upgrade (existing users)
Narrow path (recommended — only this package needs the hotfix):
npm i -g @sleep2agi/agent-node@2.4.9
# Restart every grok-build-acp node
cd <your-anet-workdir>
anet node stop <grok-node-alias> && anet node start <grok-node-alias>Full sweep (also refreshes READMEs / metadata):
anet upgrade⚠️ Node version note: agent-node supports Node ≥ 18; this hotfix's Docker smoke ran clean on both Node 20.20 and 24.16.
For the full troubleshooting entry see troubleshooting → grok-build-acp node task hangs.
🙏 Credits
Bug repro + root cause + UAT: live 19:53:09 capture + a 47 s pilot on a user's Grok node; fix implementation: commit 4818776 + 2 regression tests; release ops: Method B two-phase + dual Install/Upgrade release notes sections.
Full Changelog: https://github.com/sleep2agi/agent-network/compare/v0.10.12...v0.10.13
v0.10.12 — Grok-build runtime scenario enablement + 0.2.8 alpha regression verify (2026-05-30) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-node@2.4.8← bumped (scenario docs + 0.2.8 alpha regression baseline tag)@sleep2agi/agent-network@2.2.10← unchanged@sleep2agi/commhub-server@0.8.4← unchanged
Highlights
- Video-generation scenario (0 LOC): Send a Grok node a task carrying an image URL; the backend auto-routes to the
grok-imagine-videomodel and returns mp4. Anet itself ships zero code changes — verified via ffmpeg first-frame visual check. See research/grok-video-gen-capability-probe.md (with Erratum) + scenarios/video-gen-marketing.en.md. - Basic X search (out-of-the-box): Find X URL + title + excerpt by keyword / handle — the LLM does it via
web_search+allowed_domains=["x.com"]. No pre-setup required. - Live X advanced search (workspace setup required): Live streaming + per-post faves / retweets / replies metadata +
since:/min_faves:operators — requires the user to pre-stage a twitterapi.io API key + fetcher script that the LLM drives viarun_terminal_command. See scenarios/x-search-informant.en.md. - 0.2.8 alpha regression verify: 87 / 87 bun unit tests pass; the #201 delegation detection + #204
.mcp.jsonisolation fixes hold on Grok 0.2.8 alpha. Detail: tests/p-grok-028-regression-verify/report.md. - RFC-021 §12 / §13: ACP capability dossier updated with Path D (workspace setup + terminal bypass) + XSearch ACP exposure test (XSearch's backend tool is structurally not exposed via ACP on 0.1.219 → 0.2.12 alpha; long-term resolution sits in the upstream xAI PR #1302).
Install / Upgrade
Non-breaking; 0.2.8 alpha regression verified, safe to upgrade:
anet upgradeOr single-package: npm i -g @sleep2agi/agent-node@2.4.8
Full Changelog: https://github.com/sleep2agi/agent-network/compare/v0.10.11...v0.10.12
v0.10.11 — #204 grok-build-acp per-node identity isolation + #194 commhub broadcast attribution hotfix (2026-05-28) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.10← bumped (anet hub stop/anet hub statussubcommands #200 +anet hub startstderr inherit #199 silent-hang fix + PINNED commhub-server0.8.3→0.8.4)@sleep2agi/agent-node@2.4.7← bumped (#204 grok-build-acp per-node.anet/nodes/<alias>/runtime-cwd/isolation + #201 Grok delegate parser 3-layer broaden)@sleep2agi/commhub-server@0.8.4← bumped (#194 broadcastchannel_meta_jsonsender attribution hotfix —from_sessioninjection no longer overrides the real LLM agent alias)@sleep2agi/agent-network-dashboard@0.5.6← unchanged
🌟 Highlights
#204 — grok-build-acp per-node isolated cwd
Problem: grok-build-acp runtime nodes shared the .mcp.json discovery path, causing stale .mcp.json identity pollution — if a node's working directory carried an old .mcp.json, a newly started Grok node would be misidentified as that prior node.
Fix: Every node forks an isolated cwd (.anet/nodes/<alias>/runtime-cwd/), decoupled from the discovery path. This eliminates stale .mcp.json interference.
E2E verification: cross-node dispatch on a live Grok node — channel sender attribution correctly attributed to the sending node's alias, proving the LLM-layer attribution path is uncontaminated.
#194 — commhub broadcast sender attribution hotfix
Problem: On cross-node broadcast, the channel_meta_json sender field went through the from_session injection path, which overrode the real LLM agent name.
Fix: commhub-server 0.8.4 corrects the from-name injection logic to preserve the real sender alias.
🐛 Bugs Fixed
- #199 —
anet hub startsilent-hang fix:spawnstdiochanged from"pipe"to"inherit"— commhub-server bunx fetch failures are now immediately visible. - #200 —
anet hub stop/anet hub statussubcommands: users no longer need manuallsof + kill. Nowanet hub stop [--port <p>](SIGTERM → 3s grace → SIGKILL) +anet hub status(PID + port +/healthversion). - #201 — Grok runtime refusing to delegate: explicit delegation parser 3-layer wrapper broaden + prompt softening covers all cases.
📦 Install (fresh install)
npm i -g @sleep2agi/agent-network@latest
# Verify version
anet -v # Should show v2.2.10anet hub start auto-fetches commhub-server@0.8.4 (PINNED) + the first node start auto-fetches agent-node@2.4.7.
🔄 Upgrade (existing users)
anet upgrade
# Or manually
npm i -g @sleep2agi/agent-network@latestanet upgrade syncs agent-network + agent-node + commhub-server to the latest latest versions.
🙏 Credits
Shipped by the Agent Network team — design + lead review / agent-node #204 fix / agent-network release ops + commhub-server promote / testing + docs delivered end-to-end. Individual contribution detail on the v0.10.11 GitHub release page. LLM E2E attribution was verified on a live node via cross-hub dispatch.
Full Changelog: https://github.com/sleep2agi/agent-network/compare/v0.10.10...v0.10.11
v0.10.10 — Xiaomi MiMo full 5-model support + envRef wizard-to-start auto-link (2026-05-27) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.9← bumped (envRef Option A auto-source +anet -vnow shows full prerelease suffix + Grok delegation parser broadened)@sleep2agi/agent-node@2.4.6← bumped (envRef Option A implementation + Grok runtime stabilization continued)@sleep2agi/commhub-server@0.8.3← unchanged@sleep2agi/agent-network-dashboard← unchanged
P0 — Xiaomi MiMo Vendor Preset complete
- Added
mimo-v2.5-tts-voicedesign— the full official 5-model lineup is now in the picker anet node create→ pickclaude-agent-sdkruntime → "小米 MiMo" vendor → choose from 5 models:mimo-v2.5-pro(default) /mimo-v2.5/mimo-v2-pro/mimo-v2-omni/mimo-v2.5-tts-voicedesign- Endpoint
https://token-plan-cn.xiaomimimo.com/anthropicspeaks the Anthropic Messages protocol - 📌 Note:
voicedesignis a TTS speech-design model — Anthropic Messages text requests are likely vendor-unsupported. For text dialogue, use the first 4 models.
P0 — envRef wizard-to-start auto-link (#193)
Pain point: After anet node create, running anet node start in the same shell reported FATAL env var not set — you had to manually export ANTHROPIC_AUTH_TOKEN_N_<id>=... first.
New behavior:
- During
wizard create, the API key is written to.anet/nodes/<alias>/.env(mode 0600, auto-added to.anet/.gitignore) anet node startsources that.envfile at launch — no manualexportneeded- Cross-machine deployment still supported (the wizard still prints the
exportcommand once so it can be copied to another box) - Debug logs emit only
loaded N key(s) from .anet/nodes/<alias>/.env— the key value is never echoed - Backward compatible: existing
ANTHROPIC_AUTH_TOKEN_N_*shell exports keep working; legacy plainconfig.jsonmode also still works
Applies to every claude-agent-sdk node (MiMo / MiniMax / InternLM / GLM / any Anthropic-Messages-compatible vendor).
Bug fixes
- #192
anet -vno longer truncates the prerelease suffix — it now shows the full version (e.g.v2.2.9, including any-preview.Nsuffix when applicable) - #189 Grok runtime
grok-build-acpfully stabilized: the explicit-delegation parser was broadened to cover cases like "你和 X 沟通一下…" / "send_task X 一下…" (no-punctuation trailing body), so cross-node delegation routing is reliable.
Known Issues
The internal npx fallback inside agent-network still pins @sleep2agi/agent-node@preview — a future preview push could expose @latest users to an unstable build. There's no regression in this release (preview 2.4.6-preview.2 is content-equivalent to latest 2.4.6), but follow-up handling is queued under a future RFC (tracking issue to be opened; distinct from the same-numbered RFC-021 ACP capability profile expansion which targets X-search unlock).
v0.10.9 — Dashboard image sending + CommHub attachment metadata + codex-sdk image input (2026-05-25) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.7← bumped (pinned server moved to@sleep2agi/commhub-server@0.8.3)@sleep2agi/agent-node@2.4.3← bumped (codex-sdk runtime consumes structured image attachments)@sleep2agi/commhub-server@0.8.3← bumped (meta_jsonpersistence + MCP/REST attachment metadata)@sleep2agi/agent-network-dashboard@0.5.4← bumped (TaskChatPanel image upload/paste send path)
P0 — Dashboard command flow can send images
Vincent catch: Dashboard could upload and preview images, but tasks sent to agents only carried text paths. The codex-sdk runtime never received actual image input, so screenshots, design drafts, and error images could not be dispatched from the web/mobile command surface.
Implementation:
- Dashboard sends structured
attachmentsfor uploaded/pasted images while keeping text fallback paths and preview URLs. - Hub
send_taskand REST/api/taskacceptmeta.attachments, persist it toinbox.meta_jsonandtasks.meta_json, and return parsedmetafromget_inbox. - agent-node extracts local image paths from
meta.attachmentsand passes them into codex-sdk/studio image input. - Telegram image dispatch now passes image arguments in the correct position.
Rollout + Smoke
- Local CommHub and Dashboard were upgraded and restarted.
- 27 host codex-sdk agent-node processes were rolled to the new code.
- P0 smoke sent
/tmp/anet-image-smoke.pngtotest-node; node logs showed+1 image(s)/→ processing [codex] +1 image(s), with reply图片通道OK.
Known Limits
- Dashboard uploads currently hand off local file paths, best suited for same-host hub/agent deployments. Cross-host object-storage delivery remains future work.
- Existing old containers need reinstall/restart to pick up this release.
- This release fixes delivery into the runtime; rich media history and mobile IM polish remain dashboard follow-up work.
See the v0.10.9 tag.
v0.10.8 — Dashboard Servers panel UI copy fix + TopoGraph density-tier polish (2026-05-17) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.6(unchanged, v0.10.7)@sleep2agi/agent-node@2.4.2(unchanged)@sleep2agi/commhub-server@0.8.2(unchanged)@sleep2agi/agent-network-dashboard@0.5.3← bumped (UI copy + Playwright attrs + polish fold-in)
Fix — #157 Dashboard Servers panel UI copy fix (Root cause #1)
Vincent caught this in real testing (with dashboard screenshot): the Servers panel was rendering agent rollup pending hub ≥ 0.8.2-preview / disk metric pending hub ≥ 0.8.2-preview for every hub, even though every production hub is already at ≥ 0.8.2. The copy was outdated and misleading — for a moment Vincent thought the version dashboard data was completely broken.
Root cause #1 (this patch): ServersDrawer UI carried placeholder text introduced during the 0.8.2 upgrade window. 0.8.2 has long since shipped, but the placeholder text was never removed, so it kept rendering "pending" for ≥ 0.8.2 hubs and led users to believe the hub data was missing.
Implementation (app/components/ServersDrawer.tsx):
- <div ...>agent rollup pending hub ≥ 0.8.2-preview</div>
- <div ...>disk metric pending hub ≥ 0.8.2-preview</div>
+ <div ... data-server-agents-missing="true">agent rollup not reported by hub</div>
+ <div ... data-server-disk-missing="true">disk metric not reported by hub</div>The new copy accurately says "this hub didn't report it right now" instead of implying the hub version is too old. The new data-server-agents-missing / data-server-disk-missing Playwright hooks enable the next e2e round to validate hub-side telemetry coverage.
Root causes #2 + #3 located, deferred
- #2 (v0.10.9 candidate): missing dedupe when one hostname appears multiple times can double-count servers — the dashboard team's fix is queued for v0.10.9 ship.
- #3 (v0.11.0 candidate):
status=offlinevs telemetry mismatch (telemetry still reports but SSElast_seenhas timed out) — needs system-level status reconciliation.
Polish fold-in — TopoGraph density-tier (purely additive)
Dashboard team commit 3f73810 (0.5.3-preview.16) — the canvas state attribute data-topo-fleet-density-tier ∈ {empty, sparse, normal, dense, very-dense} exposes a 12th observable testing surface. Tier boundaries (sparse 1-3 / normal 4-15 / dense 16-30 / very-dense 31+) line up with the dense-layout collapse gate. Purely additive, no UX change. Paired with the numeric counts, e2e selectors now have a complete canvas-state snapshot.
Quality gates + lessons
- Source-grep verify: the lead's
grep -rh "not reported by hub"hits + the legacy copy only survives in JSDoc comments ✅ - Docker preview smoke:
docker run --rm node:24-slim sh -c "npm install -g @sleep2agi/agent-network-dashboard@0.5.3-preview.15 && grep..."✅ - JSX copy verified at source level: at
app/components/ServersDrawer.tsx— no dependency on the.next/serverbundled output - v0.10.x patch density of 8 patches in one day validates that the audit-first cadence is sustainable
Release stats — v0.10.8
- 18 cumulative
@latestpublishes (v0.9.0 → v0.10.8): 0 split-brain / 0 rollback / 0 retry - 2026-05-17 v0.10.x same-day ships: v0.10.1-8 = 8 ships in ~11 hours (audit-first cadence)
- Vincent catch + Vincent #158 LOCKED directive closed out in the same cycle
See the v0.10.8 release notes.
v0.10.7 — codex-sdk batch path yolo flags parity (2026-05-17) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.6← bumped (codex-sdk batch path yolo parity)@sleep2agi/agent-node@2.4.2(unchanged)@sleep2agi/commhub-server@0.8.2(unchanged)@sleep2agi/agent-network-dashboard@0.5.2(unchanged)
Fix — #156 codex-sdk batch path yolo flags parity
Vincent catch: "fast 也要开新一下默认 / codex 默认 fast 啊" (codex needs fast mode by default in the batch path too).
Pre-fix vs Post-fix matrix:
| Path | Pre-fix | Post-fix |
|---|---|---|
anet node create --runtime codex-sdk | ✅ 4/4 yolo flags (#149 v0.10.3 ship) | ✅ 4/4 yolo flags (unchanged) |
anet create --batch --runtime codex-sdk | ❌ only 1/4 (dangerouslySkipPermissions baseline only) | ✅ 4/4 yolo flags (matches single-node) |
anet [...] --runtime codex-sdk --no-yolo | (flag did not exist) | ✅ 1/4 baseline only (opt-out for CI/scripted) |
Implementation — clean helper extraction at bin/cli.ts:125-131:
function codexSdkYoloFlags(noYolo?: boolean): Record<string, string | boolean> {
if (noYolo) return {};
return {
approvalPolicy: "never",
sandboxMode: "danger-full-access",
skipGitRepoCheck: true,
};
}Single source-of-truth helper: both the single-node path (cli.ts:1146) and the batch path (cli.ts:6223) call the same function — eliminates the v0.10.6 1/4-vs-4/4 drift. dangerouslySkipPermissions: true is the baseline, set at each call site, 1+3=4 yolo flags total.
User impact
- Batch + codex-sdk users: previously, batch-wizard-created codex agents would block on tool-approval popups / sandbox / git checks, losing the yolo autonomous posture → now all 4 flags are set, autonomous behavior matches single-node.
- Single-node users: unaffected (path unchanged).
- CI / scripted users: the new
--no-yoloflag provides an explicit safe-mode opt-out. - Non-codex-sdk runtimes (claude / sdk): completely unaffected (helper is gated on
runtime === "codex-sdk").
Quality gates + lessons
- Source-grep verify:
grep -nagainstbin/cli.tsHEAD across 5 sites all PASS (helper + 2 call sites + wiring + field). - Docker container smoke: Cell A
anet loginsetup failed (test infra blocker, not a fix bug) → Gate 2 source-grep evidence accepted as substitute, per v0.10.6 precedent. - Docker smoke gets its token via direct
curlAPI calls (new): Docker smoke entry scripts must usecurldirect API calls to/api/auth/register+/api/auth/loginto obtain a token; do not use interactiveanet login(it stalls in non-TTY containers — the hub login call blocks).
Release stats — v0.10.7
- 17 cumulative
@latestpublishes (v0.9.0 → v0.10.7): 0 split-brain / 0 rollback / 0 retry - 2026-05-17 v0.10.x same-day ships: v0.10.1-7 = 7 ships in ~10 hours (audit-first cadence)
- 10 user-feedback items all closed-loop: including v0.10.7 #156
See the v0.10.7 release notes.
v0.10.6 — anet upgrade Option B detached spawn + anet create --batch wizard silent-exit fix (2026-05-17) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.5← bumped (CLI upgrade + wizard fixes)@sleep2agi/agent-node@2.4.2(unchanged, v0.10.3)@sleep2agi/commhub-server@0.8.2(unchanged)@sleep2agi/agent-network-dashboard@0.5.2(unchanged, v0.10.4)
Chicken-and-egg upgrade note — one-time manual install required
v0.10.4's #151 Option A only updated the verbiage (anet upgrade now shows "⚠️ NEEDS MANUAL UPGRADE"), but the chicken-and-egg deadlock wasn't fixed — your current 2.2.2 / 2.2.3 / 2.2.4 binary still falls back to the old "skipped (would replace running CLI)" behavior (that logic is frozen on the npm tarball).
npm install -g @sleep2agi/agent-network@2.2.5 # one-time manual install
anet --version # expect v2.2.5From the next release onward (e.g. 2.2.6+), anet upgrade will auto detached-spawn the install for you — no more manual install.
Fixes
- #154
anet upgradeOption B detached spawn enabled by default (Vincent catch): users sawanet (self): skipped (would replace the running CLI).+[anet] Done.and assumed success, but the anet binary never actually upgraded (chicken-and-egg deadlock — a Node process can't in-place replace its own binary).bin/cli.ts:3873-3874now doesspawn(forkScript, [], { stdio: "inherit", detached: true })+child.unref()+ main processprocess.exit(0); the detached child runsnpm installin the background. The new version takes effect 1-2 min later — no--selfflag needed. - #155
anet create --batchwizard silent-exit fix (Vincent catch): after the workdir-modeselect(),process.stdinstate changes and the readline-basedask()helper returns at EOF immediately → the entire wizard silently exits at theNode prefixprompt (same root cause as #137 in v0.9.2 preview.5 anet create regression, recurring in a different code path). Fix: migrate all post-select prompts toinquirer.input()so stdin handling stays uniform with the preceding select; the catch fallback retains the legacyask()for non-TTY / no-inquirer environments.
Quality gates + lessons
- Docker smoke gate is never skipped (Vincent): the v0.10.4 emergency trust path is SUSPENDED — the Docker smoke gate is never bypassed again.
- All test nodes run in Docker (Vincent): red-line — all test nodes go in Docker, must never connect to a host hub.
- dist is an obfuscated bundle — verify against source (new):
dist/bin/cli.jsis esbuild bundled + obfuscated (rotating string table, mangled identifiers, encoded string literals) — static grep on dist is useless. Code-path verification must grepbin/cli.tssource (HEAD = the preview build source).
Release stats — v0.10.6
- 16 cumulative
@latestpublishes (v0.9.0 → v0.10.6): 0 split-brain / 0 rollback / 0 retry - 2026-05-17 v0.10.x same-day ships: v0.10.1 + v0.10.2 + v0.10.3 + v0.10.4 + v0.10.5 + v0.10.6 = 6 ships in ~9 hours (audit-first cadence)
- 9 user-feedback items all closed-loop: Install/Upgrade docs split + #149 / #150 / #151 / #152 / #153 / #154 / #155 + red-line SOPs
See the v0.10.6 release notes.
v0.10.5 — anet create --batch wizard double-fix (2026-05-17) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.4← bumped (CLI wizard fixes)@sleep2agi/agent-node@2.4.2(unchanged, shipped in v0.10.3)@sleep2agi/commhub-server@0.8.2(unchanged)@sleep2agi/agent-network-dashboard@0.5.2(unchanged, shipped in v0.10.4)
Fixes
- #152
anet create --batchwizard now prompts for workdir mode (Vincent push): the--workdir-mode <shared|separate>flag has shipped since #55, but the interactive wizard never prompted — users had to know the flag name to change the defaultseparate.createBatchWizardCommandnow adds an inquirer select (separatedefault /sharedco-cwd), TTY-aware (flag set / non-TTY both fall back toseparatewith an INFO hint). agent-node / server / dashboard untouched — purely CLI wizard UX. - #153 codex-sdk / claude-code-cli runtime selection no longer falsely prompts for
ANTHROPIC_AUTH_TOKEN(Vincent push): the runtime-first wizard (#133) calledselectVendorAndModel()even when codex-sdk / claude-code-cli was picked (only claude-agent-sdk needs an API key). The wizard now skips the API key prompt for those runtimes and prints a one-linecodex auth login/claude auth loginhint instead.
See the v0.10.5 release notes.
v0.10.4 — anet upgrade UX warning + Dashboard orphan-band layout (2026-05-17) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.3← bumped (#151 anet upgrade UX)@sleep2agi/agent-network-dashboard@0.5.2← bumped (#150 orphan-band layout)@sleep2agi/agent-node@2.4.2(unchanged, shipped in v0.10.3)@sleep2agi/commhub-server@0.8.2(unchanged)
Fixes
- #151
anet upgradeself-skip warning is now explicit (Vincent push): the prioranet (self) — self-skiprow didn't spell out why or how; users walked the plan and didn't realize their own version wasn't bumped. Now adds an explicit warning + guides toward the--selfflag. - #150 Dashboard topology orphan nodes now collected into an "Others" cluster box (Vincent push): previously, orphan nodes (no prefix group) were scattered across the canvas and hard to find; they now collect into an "Others" cluster box rendered alongside the other groups.
Vincent emergency trust path
v0.10.4 was shipped via Vincent's emergency trust path, skipping the test-lead Docker smoke gate (the no-testing-on-prod rule was not waived, but Vincent took the lead-scope trust path). Docker smoke is still the release-gate playbook standard checkpoint, unchanged.
See the v0.10.4 release notes.
v0.10.3 — codex-sdk default model now gpt-5.5 + yolo flags visible in config (2026-05-17) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.2← bumped (cli.ts vendor preset)@sleep2agi/agent-node@2.4.2← bumped (codex-sdk runtime + flags)@sleep2agi/commhub-server@0.8.2(unchanged)@sleep2agi/agent-network-dashboard@0.5.1(unchanged)
Fixes
- #149 codex-sdk default model fix + yolo flags written into config (Vincent catch):
- cli.ts codex vendor preset default model placeholder
gpt-5.4→ realgpt-5.5 - codex-sdk runtime gains
yolo: trueflags (same concept as the Claude Code preset'sdangerouslySkipPermissions+teammateMode) — skips the permission-prompt for multi-agent batch runs - Flags are persisted in
config.jsonrather than as an ephemeral runtime arg, so users can inspect / edit them
- cli.ts codex vendor preset default model placeholder
See the v0.10.3 release notes.
v0.10.2 — Hero A disk telemetry + Hero D topology label UX (2026-05-17) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.1(unchanged —PINNED_SERVER_VERSIONstays at0.8.2)@sleep2agi/agent-node@2.4.1←2.4.0(Hero A disk telemetry, additive; commit50d25b2)@sleep2agi/commhub-server@0.8.2(unchanged)@sleep2agi/agent-network-dashboard@0.5.1←0.5.0(Hero D topology prefix-label Option C + disk render + 100+ rounds of polish)
Hero A — agent-node disk telemetry (#99 per-server daemon Phase 2 host metrics, final 10%)
agent-node/src/host-telemetry.ts adds readDiskStats() via execFileSync('df', ['-k', '/']) (+33 lines):
- POSIX
-kstandardizes KB output, so Linux and macOS share a single parse path - No shell pipe (per the recent shell-audit safety review) —
execFileSyncdirect call - Windows / parse failure: graceful null (the dashboard renders
—rather than a misleading0) HostTelemetryinterface gainsdisk_total_gb/disk_used_gb/disk_avail_gb;getHostTelemetry()composes disk viatoGb()on the same path as mem/cpu- Backward compat: older servers silently drop unknown keys; agents and servers upgrade independently
Wires through RFC-014 — GET /api/server/:host/health now returns disk's three fields, the 24h bucketed history includes disk_avail_min / disk_used_max, and alert_level adds disk < 1GB critical / < 5GB warn triggers (server/src/index.ts:253-258, pinned to commit 22ed1886; the file has since been split up and is only 16 lines on main, which is why this does not link to main).
Test lead Docker Linux smoke 3/3 PASS (disk 299.8 GB total / 216 used / 71.5 avail, alert green, backward compat verified).
Hero D — Dashboard topology prefix-label UX, Option C (dashboard 0.5.1)
#147 (acked 5/16) + Option C landed:
- Topology node prefix labels (the node→group edge labels' distinguishability) ship with the Option C design (dashboard team design pass)
- Disk telemetry hover-card rendering (
disk_total_gb/disk_used_gb/disk_avail_gbwired to theGET /api/server/:host/healthresponse) - 100+ rounds of typography + corner-radius cascade polish
Dashboard team design pass + 4/4 verify (commit 7de97ee + screenshot evidence, local ship f9c83cd).
Closed issues
- #99 per-server daemon Phase 2 close gate met (host metrics fully wired, Hero A disk shipped)
- #147 Hero D (5/16 ack → Option C shipped)
RFC artifacts preserved (v0.12.0 scope)
v0.10.2 is a hotfix scope (no v0.11.0-series RFC ship); three RFC artifacts are preserved as v0.12.0 candidates:
- RFC-013 v5 rename hot-reload (third-pass review complete)
- RFC-014 v2 daemon Phase 2 host metrics (Hero A final 10% shipped in v0.10.2)
- RFC-015 v2 #114 token-usage UI (first-pass REVISION complete)
Upgrade
anet upgrade # bumps agent-node 2.4.0 → 2.4.1 + dashboard 0.5.0 → 0.5.1
anet project restart # restart the project (pulls the new agent-node + dashboard)Migration / Breaking
- No breaking changes — the disk fields are additive (the
HostTelemetryinterface gains three fields, the server schema silently drops unknown keys for backward compat). Agent and server upgrade independently; for agents that don't emit the field, SQL staysNULLand the dashboard renders—rather than a misleading0.
Release flow follows the v0.9.0 split-brain lessons #126 two-phase publish SOP.
v0.10.1 — Hotfix: PINNED_SERVER_VERSION chain-bump after the v0.10.0 ship (2026-05-17) ✅ stable
Version alignment (npm latest tag):
@sleep2agi/agent-network@2.2.1@sleep2agi/agent-node@2.4.0(unchanged)@sleep2agi/commhub-server@0.8.2(unchanged)@sleep2agi/agent-network-dashboard@0.5.0(unchanged)
Fix
PINNED_SERVER_VERSION in agent-network/bin/cli.ts (pinned to commit 3a387204, line 61 at the time) was never bumped across the v0.9.x + v0.10.0 promotes — it stayed hardcoded at 0.8.0. That meant anet hub start was actually running bunx --bun @sleep2agi/commhub-server@0.8.0 (the bunx --bun @sleep2agi/commhub-server@… call site in cli.ts, same commit, line 2589) — the old server, not the v0.10.0-shipped 0.8.2. Direct impact:
- The #99 per-server daemon endpoints
GET /api/server/:host/health+GET /api/server/:host/agentsdon't exist in 0.8.0 → 404 - #142 server schema alignment for
process_telemetryisn't wired in 0.8.0 → the older schema silently drops the field - Dashboard
0.5.0§3.F server-health ring tint had no data source / §3.E hover cardprocess_telemetryrendered all-null
A v0.10.0-announced functionality regression on the default anet hub start workflow (manually launching bunx --bun @sleep2agi/commhub-server@latest was not affected).
Fix (commit 4d24024):
- const PINNED_SERVER_VERSION = "0.8.0";
+ const PINNED_SERVER_VERSION = "0.8.2";Upgrade
anet upgrade # bumps agent-network 2.2.0 → 2.2.1
anet project restart # restart the project (pulls the new commhub-server)Or fresh install:
npm install -g @sleep2agi/agent-network@latestLessons
- release-gate playbook now covers PINNED chain-bump — every promote-to-latest must chain-bump
PINNED_*_VERSION(server pin / dashboard pin / agent-node pin), or the default path keeps running the previous ship. Consistent with #80 PINNED bump SOP, but the Hero 4 release-gate playbook hadn't covered it; the case is now added (see lesson memory in methodology).
Release flow follows the v0.9.0 split-brain lessons #126 two-phase publish SOP.
v0.10.0 — Direct Runtime + Observability Foundations (2026-05-16) ✅ stable (Phase 1, 3-package promote)
Version alignment (npm latest tag, Phase 1):
@sleep2agi/agent-network@2.2.0@sleep2agi/agent-node@2.4.0@sleep2agi/commhub-server@0.8.2@sleep2agi/agent-network-dashboard@0.5.0✅ Phase 2 shipped
Theme: fix the root
v0.7 → v0.9.2 accumulated 11 releases; the 5-P0 ripple chain (#135-#139) surfaced a runtime architecture debt. v0.10.0 fixes the root — runtime debt (codex-sdk wrapper bypass, opt-in) + observability foundations (per-server daemon endpoints + per-agent process telemetry) + release-gate playbook. This is the groundwork for v0.11.0's 24/7 multi-vendor AI Agent society live stream. See the v0.10.0 release tracker #140.
5 features
A. #141 codex app-server stdio direct (opt-in ANET_CODEX_STDIO_DIRECT=1) The codex runtime previously went through the @openai/codex-sdk npm wrapper; the wrapper's --mcp-config HTTP transport bug is the root-cause family for the #102 hang. v0.10.0 adds a direct spawn('codex', ['app-server']) + minimal stdio JSON-RPC client (~155 LOC) path that bypasses the wrapper entirely, sidesteps that family bug, and exposes the full 67-method v2 protocol surface (thread / turn / item / realtime). v0.10.0 still defaults to the wrapper path (collecting preview feedback first); set ANET_CODEX_STDIO_DIRECT=1 to opt in. Default flip is planned for v0.11.0.
B. #99 Per-server daemon Phase 1 scaffold (monitoring-only) New server-side endpoint family (commit e575cc6):
GET /api/server/:host/health— host CPU / mem / disk / process healthGET /api/server/:host/agents— per-host agent list + telemetry history
Dashboard integration lands in Phase 2 (#119 ServersDrawer integration). The control layer (kill / restart / redeploy) is deferred to v0.11.0.
C. #142 Per-agent process telemetry agent-node now embeds process_telemetry in every commhub_report_status heartbeat: rss / cpu_pct / uptime_seconds / in_flight_count. Zero sysmon dependency, zero privilege. commhub-server schema is aligned on the wire (commit 209cac7); the dashboard hover-card rendering ships in Phase 2 (#119 sibling). Sibling to #119 host fields (host step 1 ✅ earlier; agent step 2 ships in this release).
D. Dashboard network/node front-end surface upgrade (Hero 3 — 8/8 surfaces complete, dashboard 0.5.0)
- §3.A prefix-group fix (Vincent #1 catch)
- §3.B sweep retire (legacy sweep path merged into grid)
- §3.C recent-panel hide
- §3.D grid default view
- §3.E hover detail card
- §3.F server-health ring tint (wired to #99 endpoint)
- §3.G fullscreen mode
- §3.I canvas brand mark
- (§3.H dropped per RFC Q2 review)
Ships alongside 19+ rounds of typography + corner-radius cascade polish (four typography families + systematic corner-radius cascade rework). Dashboard 0.5.0 is now on the npm latest tag, landing with this v0.10.0 Phase 2 docs sync.
E. Lightweight pre-release-gate playbook (release-gate Phase 1+2)docs/tests/release-gate-playbook.md — maintained by the test lead. Covers hub / dashboard / login / node lifecycle / runtime smoke / vendor verify. v0.10.0 is the first release to fully exercise this playbook; future latest promotes gate on it.
Breaking changes / Migration
codexruntime default behavior unchanged: still goes through the@openai/codex-sdkwrapper; setANET_CODEX_STDIO_DIRECT=1to switch to the direct stdio path. The preview-chainANET_CODEX_LEGACY_SDK=1fallback flag is renamed to the more direct opt-inANET_CODEX_STDIO_DIRECT=1for latest — same semantics, clearer name.- agent-node
commhub_report_statuspayload addsprocess_telemetrysub-object: commhub-server0.8.2schema is aligned; older server versions (≤0.8.1) silently ignore the unknown field and won't fail. /api/server/:host/health+/api/server/:host/agentsare new endpoints: rate-limit / auth behavior matches the existing/api/servers(admin or self-network member); no existing client is broken.
Known follow-ups
Phase 2 dashboard✅ shipped (dashboard0.5.0promote0.5.0landed with this v0.10.0 Phase 2 docs sync — 8/8 Hero 3 surfaces complete + 19+ rounds of polish)- Close evidence for #102 / #103 hang — Phase 1.5 in the preview chain already plans the regression replay against the new stdio path; we'll close them once the latest opt-in path passes the regression.
- Sessions NETWORK column display bug (Vincent catch) — deferred to a v0.10.x patch or v0.11.0.
- #117
anet project updetached-tmux follow-up (macOS bunsetRawModealready fixed by #136, but detached-mode follow-up still pending) — to be done with the v0.11.0 control layer.
Release flow follows the v0.9.0 split-brain lessons #126 two-phase publish SOP: publish each tarball with --tag preview first, curl-verify HTTP 200, then npm dist-tag add @<v> latest. Phase 1 three-package (agent-network / agent-node / commhub-server) clean-semver promote is complete; dashboard Phase 2 is pending §3.D/F/G.
Older releases
Entries for v0.9.2 (2026-05-16) and earlier, and the roadmap of that time, moved to the repository's changelog archive.
Next steps
- Upgrade guide — v0.7 → v0.8 behavior changes + standard steps
- Architecture — how each release accumulated into the current system
- npm version list and desktop releases
- RFC-001 — v0.8 ~ v1.0 master-token deprecation roadmap