Changelog
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 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: v0.10.13 (2026-06-08, shipped via npm
latesttag; v0.8.1 was the first Apache 2.0 OSS release). - Older entries kept for git-blame continuity — see v1.0.0-preview / v2.1 / v0.x sections below.
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. ai-insight's A站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
A站Groknode passed UAT after installing2.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 + Vincent's A站Grok 47 s pilot; 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.pngto通信测试牛; 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).
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
agent-network/bin/cli.ts:61 PINNED_SERVER_VERSION 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 (cli.ts: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.
v0.9.2 — Patch: Auth fast-fail + fan-out retry + wizard redo + #122 default-tmux reverted (2026-05-16) ✅ stable
Version sync (npm latest tag):
@sleep2agi/agent-network@2.1.15@sleep2agi/agent-node@2.3.10@sleep2agi/commhub-server@0.8.1(unchanged)@sleep2agi/agent-network-dashboard@0.4.6(unchanged)
The release flow follows the v0.9.0 split-brain lessons (#126) two-phase publish SOP (first
--tag previewto upload + curl-verify the tarball returns HTTP 200, thennpm dist-tag add @<v> latest), which avoids thenpm publish --tag latestdirect path's split-brain in the CDN async window. The version numbers themselves are clean semver (no-preview.Nsuffix — easier foranet upgradecomparison + npm range resolution).
5 P0 fix chain
1. #129 Vendor API auth fast-fail + vendor-specific URL hint (9840cf3) Background: when an intern key expired, agent-node previously silently waited 120s then printed a generic "claude-agent-sdk 调用超时" error. Now the isAuthError(msg) heuristic covers the Anthropic standard (401/403, invalid_api_key, authentication_error) plus intern's A02xx family (user_token_expired) plus generic OpenAI-compat 401 envelopes (unauthorized / expired_token); on hit it short-circuits the retry loop (retrying with the same bad key just wastes the backoff window) and prints a vendor-specific URL hint based on ANTHROPIC_BASE_URL host (intern → chat.intern-ai.org.cn, minimax → platform.minimaxi.com, anthropic → console.anthropic.com, otherwise generic). The clear error returns in under 5 seconds instead of the 15 minutes pre-v0.9.1 took. Full write-up: troubleshooting → Vendor API auth failure.
2. #132 Tier 1 Fan-out timeout + retry-with-backoff (same commit 9840cf3) The SDK concurrency investigation Phase 3: in a 30-agent papercope fan-out demo, intern API per-request latency stretched to 17-37s (10-20× the 1.57s single-agent baseline), so the old 120s timeout fired mid-stream and 25 / 30 sub-agents silently failed. Two changes:
CLAUDE_TIMEOUT_MSdefault 120000 → 300000 (300s, leaves room for the intern queue to drain)- New
CLAUDE_MAX_RETRIESenv var, default2(3 attempts total); on transient errors / timeouts, backoff4s, 8s + 0-1s jitter(jitter spreads herd retries across the recovering vendor queue); auth-class errors do not retry (handled by #129 fast-fail above)
Set CLAUDE_MAX_RETRIES=0 to revert to the v0.9.1 no-retry behavior.
3. #133 anet node create runtime-first wizard (29fd290) Vincent catch: the old vendor-first selector enumerated only claude-agent-sdk vendors (intern / MiniMax / Claude / GLM / ...), leaving users who want claude-code-cli (Anthropic Max plan + local claude CLI login) or codex-sdk (OpenAI codex auth login) implicitly stuck — they had to know to pass --runtime codex-sdk to skip the vendor picker. New flow:
selectRuntime()3-way picker:claude-agent-sdk/claude-code-cli/codex-sdkclaude-agent-sdk→ continues intoselectVendorAndModel()(existing flow)claude-code-cli→ printsclaude auth loginhint, skips vendorcodex-sdk→ printscodex auth loginhint, skips vendor
Backward-compatible: explicit --runtime <X> still skips the picker; demo / batch / scripted callers that already inject credentials via --env are unaffected.
4. #136 Revert v0.9.0 #122 default-detached-tmux (a3a3fd4) Background: detached tmux + bun claude-code-cli calling setRawMode triggers errno 5 (EIO) on macOS — the detached child's stdio is not a real PTY. Reverts the brief v0.9.0 four-condition wrap matrix:
anet node start <alias>→ foreground by default (fixes the macOS bug)anet node start <alias> --tmux→tmux new -As <alias>in attached mode (keeps the PTY chain intact, no setRawMode bug)
Removes the --foreground / --no-tmux / --attach flags (foreground is the default; --tmux already attaches). anet project up's internal startNodeTmuxSession path still uses detached (which can re-trigger setRawMode on macOS bun — follow-up tracking).
5. Wizard silent-exit fix chain #135 / #138 / #139
- #135 Node v24 top-level-await warning (
fa08eb4v3): wrap dispatch in anasync main()to fix the root cause - #138
@inquirer/prompts+readlineask() stdin mismatch (b8c5885preview.5 +596cfe9preview.6): the wizard silently exiting afterselect()is fixed +launchAgentnowawaits its child before the parent exits - #139 dispatch — add
awaitto 5 async commands (15cf6depreview.7)
Pairs with #133's runtime-first wizard to keep the interactive wizard stable on Node v24.
6 SOP updates
- Two-phase publish SOP continues (v0.9.0 split-brain lessons #126) — avoid the
npm --tag latestdirect path - macOS PTY edge case enters the release smoke checklist (detached tmux + setRawMode)
- Fan-out / high-concurrency timeout tuning is documented: troubleshooting Vendor API timeout section + agent-node.md env table
- Runtime-first wizard split:
anet createvs--batch— the batch wizard is still vendor-first (it usesselectVendorAndModel()but does not go throughselectRuntime()), and the docs now disambiguate explicitly CLAUDE_MAX_RETRIES=0opt-out — keeps a path back to v0.9.1 no-retry behavior for debugging / legacy scripts- Vendor-specific remediation-hint routing is now a design principle — every newly verified vendor must ship a remediation URL hint
Breaking changes / Migration
- ⚠
anet node startdefault behavior swung again (v0.9.0 → v0.9.1 brief detached → v0.9.2 reverted to foreground): the--foreground/--no-tmuxflags scripts/CI added in v0.9.1 are removed in v0.9.2 (foreground is the default, no flag needed); for tmux, opt in with--tmux(attached mode) - ⚠
anet node createinteractive flow changed (vendor-first → runtime-first): scripted--runtime <X>still skips the picker, so no backward-compat issue; the interactive UX improves (all 3 runtimes are first-class) - ⚠
CLAUDE_TIMEOUT_MSdefault 120 → 300: scripts that already explicitly override to a shorter timeout are unaffected; the default is more tolerant of fan-out scenarios - ✅ New
CLAUDE_MAX_RETRIESenv var: default2(3 attempts total). Set0to revert to v0.9.1's no-retry behavior
v0.9.1 — Patch: #130 intern tool-calling hotfix promoted (2026-05-15) ✅ stable
Version sync (npm latest tag):
@sleep2agi/agent-network@2.1.14(version-only bump, no source changes; letsanet upgradeshow a v0.9.1 line that aligns with agent-node 2.3.9 + dashboard)@sleep2agi/agent-node@2.3.9(promotes the #130 hotfix to latest)@sleep2agi/commhub-server@0.8.1(unchanged)@sleep2agi/agent-network-dashboard@0.4.6(unchanged)
Fixes
- #130 intern-s2-preview tool calling now works (commit
4cd0024+ two-phase publish promote) — in v0.9.0 the intern-s2-preview endpoint, on the Anthropic protocol withtool_choice: "auto", defaulted to verbose Thinking Process text and did not emittool_usecontent blocks. Forcingtool_choicewas rejected with-20077. Hotfix: whenANTHROPIC_BASE_URLmatchesintern-ai.org.cn/chat.intern-ai, a short system-prompt bias is prepended that nudges the model to emittool_usedirectly. Direct-curl A/B verified:stop_reason: max_tokens → tool_use,output_tokens: 1024 → 122. See Vendor Adapters for the full mechanism, the 5 side effects, and the opt-out path.
Known gaps (non-blocking)
- The vendor adapter relies on a URL regex to detect the vendor — self-hosted lmdeploy / proxied intern endpoints / aggregator routes will not trigger the bias and need a manual
--prompt. See Vendor Adapters — Side effects. - The
--no-vendor-biasflag is not yet implemented (P1 polish gap, planned alongside abias_activeinfo-display follow-up).
Release process
Per the v0.9.0 split-brain lessons (issue #126), uses the two-phase publish path:
1. version bump → preview.N+1
2. npm publish --tag preview → tarball uploaded
3. curl tarball URL → HTTP 200 confirmed
4. npm dist-tag add @<pkg>@<v> latest
5. npm view dist-tags.latest → verifies "<v>"This avoids the direct npm publish --tag latest path that splits during the CDN async window, where the latest tag points at a version whose tarball is not yet served everywhere.
v0.9.0 — Recovery & Observability (2026-05-15) ✅ stable
@sleep2agi/agent-network@2.1.13@sleep2agi/agent-node@2.3.8@sleep2agi/commhub-server@0.8.1@sleep2agi/agent-network-dashboard@0.4.6
🎯 Theme: Recovery & Observability
The full zero-keystroke recovery loop for 22-node reboots + transparent default toolset behavior + server-level aggregate observability.
New features — Recovery chain
anet project up / restart / down(issue #117) — cwd-wide node orchestration; scans.anet/nodes/and starts / restarts / stops every node. Shared options:--stagger <seconds>(default 3) /--only a,b,c/--exclude x,y.downcaps the hub-offline notify at a 2-second race so a crashed-hub teardown for 22 nodes doesn't deadlock.anet node create --resume <id>/--resume-latest(issue #115) — bind an existing Claude session at node-create time; TTY mode launches an interactive picker listing~/.claude/projects/<cwd>/*.jsonl(age / size / 60-char first-line preview).anet session lsand the picker share the samelistClaudeSessions()helper.- Zero-keystroke recovery (#115) —
anet node startinjectsCLAUDE_CODE_RESUME_THRESHOLD_MINUTES=999999999into theclaudespawn env, skipping Claude Code's default 70-minute session-age threshold for the "Resume from summary / full / Don't ask again" interactive prompt. Per-spawn, does not pollute~/.claude/settings.json, respects an explicit user override. Resume restores the full session as-is (no per-invocation flag forces a compact summary; restart-recovery is safer without surprise compaction). anet node startauto-wraps into detached tmux (issue #122, ⚠ reverted in v0.9.2, see #136) — v0.9.0 briefly introduced a 4-condition wrap matrix (TTY +$TMUXnot set + tmux installed + no same-name session) with--foreground/--no-tmux/--attachflags and a two-layer recursion guard. v0.9.2 reverts: macOS bun triggeredsetRawMode errno 5under detached tmux (the detached child's stdio isn't a real PTY), so the new design is foreground-by-default +--tmuxopt-in attached mode (keeps the PTY chain intact).anet node stopstill kills the tmux session before SIGTERM.anet upgradeoverhaul — 4 packages, dual-channel, dry-run, self (issue #88) — coversanet self/agent-node/commhub-server/dashboard. Channel auto-detected (prerelease tag → preview, else latest);--channeloverrides.--dry-runprints the plan only.--selfis an opt-in detached spawn (default prints the manual command to avoid replacing the running CLI mid-upgrade). Plan rows carry action badges:upgrade/up-to-date/lazy via npx skip/self skip/lookup failed. Thecommhub-serverrow always showsPINNED_SERVER_VERSION = 0.8.0as a reminder thatanet hub startruns the pinned version regardless of what's globally installed.anet.shinstall / upgrade scripts sync (issue #123) — the anet.sh one-shot scripts now match npm's dual-channel layout, with the Node 22.13 engine check baked in.
New features — Runtime default-behavior transparency
claude-agent-sdkdefault = Claude Code preset (issue #101 Option B) — root-cause fix: with notoolsfield inconfig.json, agent-node was passing the SDKoptions.tools = undefined, giving the agent zero built-in tools and producing hallucinated "network restricted" responses. Now agent-node falls back to the SDK{ type: 'preset', preset: 'claude_code' }sentinel — every agent gets WebFetch / WebSearch / Bash / Read / Write / Edit / Glob / Grep / Task / NotebookEdit by default.--tools "all"routes to the same preset (replaces the old hardcoded 8-tool list as the single source of truth).- Behavior-disclosure banner (#101, per Vincent) —
anet node createprints a banner with the built-in tools + MCP tools +dangerouslySkipPermissions=truewarning + restrict-tools / disable-auto-skip / inspect-current-set hints.anet info <alias>displaystools:+flags:lines for ad-hoc audits. anet ls -v/--verbose(companion to #101) — prints a second line per node withtools=... permGate=on/off.
New features — Security hardening
- Vendor token envRef mode (issue #125, v0.9.0 P0 gate #2) — the
config.jsonenv map now accepts a tagged union:string(legacy, still works, with a one-shot deprecation banner) or{ "_envRef": "VAR_NAME" }(recommended — the secret stays in process.env and never touches disk). agent-node refuses to start (FATAL with remediation hint) if a referenced env var is unset — no more silent broken startup. anet node createauto-rewrites secrets —saveCreatedNoderunsrewritePlainSecretsToEnvRef()before the first write. The detection heuristic — key suffix/_TOKEN|_KEY|_SECRET|AUTH$/or value prefix/sk-|utok_|ntok_|atok_|ak-|gsk_|key-|Bearer/— flips matching values to envRef, drops the original into the currentprocess.env(so the immediate spawn works), and printsexport NAME='value'lines for the user to persist in~/.bashrc.anet node migrate-token-to-envref <alias>— new command for migrating existing nodes in place. Writesconfig.json.bak-<ts>, rewrites + prints export lines; idempotent (non-secret and already-migrated values are left alone).anet doctorenumerates plain-secret nodes — passive scan + migrate suggestion (no--fix; per-node opt-in).
New features — Observability
GET /api/serversREST endpoint (issue #119, server commit 11a3018) — aggregates agents byhostname+ipand returns live host telemetry, used by the dashboard's "Servers" sidebar. Returns a bare JSON array (not the{ok, ...}wrapper). Marks 10-min-stale sessions offline before aggregating; network-scoped viaaddNetworkScope. Fields:hostname/ip/agent_count/cpu_load_1min/cpu_cores/mem_avail_gb/mem_used_gb/last_seen.- agent-node host telemetry (#119 step 1, commit 5364931) — each
report_statuscall now carrieshostfields. On Linux:/proc/loadavg+/proc/meminfoMemAvailablefirst. On macOS/Windows: falls back toos.loadavg()/os.totalmem()/os.freemem(). Windows[0,0,0]is actively coerced tonull. A 10-second cache prevents burst reports. - Dashboard ServersDrawer (#119 step 3) — UI sidebar shows aggregated agent counts per physical machine alongside live CPU / RAM bars.
- Dashboard topology redo + 38 rounds of polish (issues #112 + #116) — grid + ring dual views; mount fade-in; hover ring focus; click ripple; label scaling; arrow tiers; offline dim; group-box hover; minimap; cwd tooltip; and 9+ further rounds of interaction polish.
Documentation
- GitHub README front-page overhaul (issue #118, commit
2dd646d) — Hero / Quick start / Demo / CTA promoted to the top; anet vs LangGraph/AutoGen/CrewAI 5×4 comparison table; trust signals (4 new badges + Star History chart); mermaid architecture diagram + node onboarding flow; ZH + EN parity. - docs-site catch-up sweep (issue #124) — bulk-syncs every new feature shipped today to anet.sh:
cli.md/upgrade.md/security.md/rest.md/CHANGELOG.md, all ZH + EN.
Breaking changes / Migration
- ⚠
anet node startdefault changed (v0.9.0 only, reverted in v0.9.2) — v0.9.0 briefly auto-wrapped into a detached tmux session (v0.8 ran foreground), but v0.9.2 via #136 reverts to foreground default (macOS bun setRawMode bug). Scripts/CI on v0.9.1 still need--foreground/--no-tmux; v0.9.2+ is foreground by default with no flag needed. For tmux, opt in with--tmux(attached mode). - ⚠
claude-agent-sdknode default toolset changed — from empty to the full Claude Code preset (Bash / WebFetch / Write / …). Existing nodes with an explicittoolsallowlist keep their old behavior; for new nodes, decide whether you need to narrow with--tools Read,Glob,Grep. - ⚠ Vendor secrets no longer persist plain in
config.json— newly created nodes go through envRef automatically; for existing plain-secret nodes runanet node migrate-token-to-envref <alias>for a one-shot migration. The plain-string path stays compatible for now (with a deprecation banner). - ✅ Preview version-number rule (per Vincent) — bump the
-preview.N+1suffix within a preview chain; do not bump the patch and reset preview.0 (avoids "backwards-looking" version numbers).
Smoke validation (before promote)
1. plain fallback — old config with "sk-..." still starts + shows the deprecation banner
2. envRef happy path — { _envRef: "TEST_TOKEN" } + export TEST_TOKEN=fake → node receives the correct token
3. envRef missing var FATAL — case #2 without the export → startup FATAL + remediation hint
4. anet doctor scan — mix of plain + envRef nodes → only plain ones surface under the warning
5. migrate idempotent — plain → migrate → second run is a no-op + `.bak-<ts>` exists + export lines printed
6. anet node create auto — `--env ANTHROPIC_AUTH_TOKEN=sk-fake` → config.json contains envRef, not literal sk-fakeSee issue #125 for full repro steps.
2026-05-14 — v0.8.3 stable release batch primitive + multi-demo + P0/UX fixes ✅ stable
Version sync (npm latest tag):
@sleep2agi/agent-network@2.1.9@sleep2agi/agent-node@2.3.1@sleep2agi/commhub-server@0.8.0(unchanged)@sleep2agi/agent-network-dashboard@0.4.5
Note: agent-network 2.1.8 was skipped (an earlier stale build occupied the version); the stable release is 2.1.9.
New features
anet create --batchbatch agent primitive (issue #55) — spin up N identity-bearing agents in one line,--prefixauto-numbering, per-node working dir + config + tmux session;anet batch <verb>for lifecycle management (list/stop/cleanup/start/restart).anet demo sci-team(issue #51) — research-squad demo: 1 leader + N-1 workers with active fan-out collaboration.anet demo pr-review(issue #41) — 4-agent PR review room demo.anet loginfirst-time login guidance (issue #58) — on auth failure, points to register / default account / hub admin reset-user.- claude-agent-sdk model dropdown verified vendor presets (issue #48) — MiniMax + Intern (书生).
- SDK upgrades — codex-sdk / claude-agent-sdk / inquirer dependency bumps.
Fixes
- batch node identity injection (issue #93, P0) — batch-created nodes previously didn't know their own alias; now per-node identity prefix is injected.
anet hub dashboardnpx cache self-heal (issue #89, P0) — auto-cleans stale staging dirs before spawn.anet hub dashboardrelease channel matching (issue #61) — dashboard version now dynamically matches the anet channel.anet inittoken prompt UX + session count (issue #56).- shell removed from process spawn (issue #36) — eliminates command injection surface.
- claude-agent-sdk env injection + timeout guard (issue #98, partial fix) — config.json env block now injected on the
--configstartup path; claude calls get a wall-clock timeout guard so hangs surface as visible timeout errors. - PINNED commhub-server → 0.8.0 stable.
Package change details
- agent-network 2.1.7 → 2.1.9 (13 preview iterations accumulated)
- agent-node 2.3.0 → 2.3.1 — claude-agent-sdk / codex-sdk dependency bumps + #98 fixes
- commhub-server 0.8.0 (unchanged)
- agent-network-dashboard 0.4.2 → 0.4.5 — tri-ring layout / alias avatars / fullscreen zoom / prefix grouping / Intern avatars / label-overlap fix / trial badge removal
2026-05-12 — v0.8.2 stable release telegram channel + claude-code-cli session resume ✅ stable
Version sync (npm latest tag):
@sleep2agi/agent-network@2.1.7@sleep2agi/commhub-server@0.8.0(unchanged)@sleep2agi/agent-node@2.3.0(unchanged)
Related: issue #13 (closed) · issue #14 · commit 143b2a1 (release: 2.1.7 stable) · commit f1e3d9c (fix(cli): bind claude code sessions on first start)
New features
anet channel add telegramone-shot bind — attaches a Telegram bot token + allow-user to an existing node, auto-generates thechannels/telegramconfig (see cases/telegram-squad for details).
Fixes
claude-code-cliruntime now pre-generates a Claude session UUID when creating a node.- First start binds a fixed session with
claude --session-id <uuid>; once~/.claude/projects/<cwd>/<uuid>.jsonlexists on the local machine, subsequent starts switch toclaude --resume <uuid>to continue the same conversation —anet node startno longer accidentally opens a new chat. anet node start --new-sessiongenerates and saves a fresh session UUID.
2026-05-11 — v0.8.1 patch Dashboard SSE-online global fix ✅ stable
Version sync (npm latest tag, git tag v0.8.1):
@sleep2agi/commhub-server@0.8.0(unchanged)@sleep2agi/agent-network@2.1.5@sleep2agi/agent-network-dashboard@0.4.2@sleep2agi/agent-node@2.3.0(unchanged)
Fixes
- Dashboard
/nodes,/admin, and/api/hub/sessionall showed every agent as offline because the SSE key in server v0.7+ becamenetwork_id:alias. The 0.4.1 fix missed these three; 0.4.2 adds alias-fallback to all global SSE lookups. - CLI bumps
PINNED_DASHBOARD_VERSIONto 0.4.2 soanet hub dashboardpulls the patched version.
2026-05-11 — v0.8.0 stable release 🎉 RFC-001 phase 2 landed ✅ stable
Version sync (git tag v0.8.0):
@sleep2agi/commhub-server@0.8.0@sleep2agi/agent-network@2.1.4@sleep2agi/agent-network-dashboard@0.4.1@sleep2agi/agent-node@2.3.0(unchanged)
Auth changes
COMMHUB_AUTH_TOKENis now soft-deprecated: v0.8 keeps only/api/*read-side compat and logs a warning; v1.0 removes it entirely.- First
anet hub startbootstraps a default admin account (admin / anethubquick-start default) and writes a local recovery adminutok_to~/.anet/server/admin-utok.json(chmod 600). Public deployments must immediatelyanet passwdto a strong password. - Subsequent
anet hub startis idempotent: ifadmin-utok.jsonexists it skips bootstrap and no longer prompts. - Dashboard moved to browser-cookie passthrough (thin proxy mode — the full 0-token model lands later in v0.8.x).
- tmux and admin endpoints now require an admin
utok_.
Password management
anet passwdprompts for old / new / confirm by default;--old/--newstill supported.- Successful change rotates the current device's
utok_; other devices lose theirutok_automatically. Agentntok_are unaffected. - New:
anet hub admin reset-user --username <u>— hub-host-only recovery for non-admin users, emits apassword_reset_by_adminaudit event. - User-chosen passwords require ≥ 8 chars + are checked against the top-1000 weak-password dictionary. The first-run bootstrap admin password is exempt (≥ 4 is accepted) since it must be rotated immediately anyway.
Doctor enhancements
anet doctor --fixnow actively probes every node'sntok_against the hub. On 401/403 it auto-reissues a freshntok_from the currentutok_and patches the file in place —session_id/channels/runtime/roleare all preserved. This covers the "hub DB wiped / token revoked" failure mode.
CLI / UX
anet hub startis silent auto-generate by default and no longer interrupts startup with prompts.anet loginprints ✅ and a next-step hint; double-colon prompt bug fixed.- CLI error output switched from the flat
[anet]prefix to ✅ / ❌ visual markers.
Dashboard 0.4.1
- Fixed Command Mesh's
sse:undefined: SSE key in server v0.7+ becamenetwork_id:alias; dashboard now queries with the double-layer key, with alias-only fallback for older hubs. - Light / Mint theme solid-button polish (regressions since 0.3.4).
2026-05-10 — v2.1 stable release
Version sync (git tag v2.1.0):
@sleep2agi/agent-network@2.1.0@sleep2agi/commhub-server@0.6.0@sleep2agi/agent-node@2.3.0@sleep2agi/agent-network-dashboard@0.3.0
Install
npm install -g @sleep2agi/agent-networkNo more @preview tag needed — latest is now the stable line.
What's new
anet doctor --fix auto-migrates legacy V2 nodes Frontline pain point: claude-code-cli runtime hit many V2-era node configs (with alias/resume/no token / dev IP for hub) that throw utok_ but SSE needs ntok_ against the V3 hub. doctor now:
- Detects 6 classes of legacy config issues (renamed fields, runtime rename, stale hub, missing token, unprefixed token, missing node_id)
- One-shot
--fixmigration; preserves the session field so chat history is not lost, re-issuesntok_
anet demo subcommand family
anet demo ls— list demosanet demo debate— 6-agent, 9-step debateanet demo socialmedia— 4-agent social media content factory (Xiaohongshu / Twitter / WeChat / LinkedIn)- Defaults to a standalone
demo-<suffix>network, auto-cleaned afterwards — never pollutesdefault
Hub telemetry fixes
POST /api/tasknow double-writes the inbox + tasks tables (previously only the inbox, which left the Dashboard Tasks page empty andsend_replyunable to find tasks)- Dispatching a task immediately UPDATEs
sessions.task+updated_atso the Dashboard Overview reflects "task in flight" in real time
Dashboard theming
- 4 themes: Cyber (default dark) / Light / Mint / Sunset, switcher bottom-right, persisted in localStorage
- Fixed the
useSSEreconnect loop (the hub used to receive 1500+ admin SSE reconnects that DoSed mcp) COMMHUB_URLfallback restored to127.0.0.1:9200(was a leftover dev IP)
CLI
--runtime http-apino longer falls into the Claude CLI branchagent-nodeHTTP runtime now also readsANTHROPIC_AUTH_TOKEN(previously onlyANTHROPIC_API_KEY)- Demo subcommands no longer trigger 6 "select provider" interactive prompts when calling
createCommand
One-shot deploy scripts
hub-only.shrewritten: 4G swap + sudoers NOPASSWD + enable-linger + systemd autostart +AUTOSTART=1agent-only.shupdated to match
Upgrade path
# 1. Upgrade the CLI
npm install -g @sleep2agi/agent-network # or: npm update -g
# 2. Restart the hub (so the new commhub-server takes effect)
# tmux: tmux kill-session -t hub; tmux new -d -s hub 'anet hub start'
# systemd-user: systemctl --user restart anet-hub
# 3. In every legacy project directory, run doctor --fix
cd <project-dir>
anet doctor --fix
# 4. Restart agents
kill <claude-pid> && anet resume <node-name>See the Upgrade Guide for details.
2026-05-03 - anet demo subcommands and bug fixes
Version sync: anet@2.0.3-preview.4 / agent-node@2.2.0-preview.1 / dashboard@0.2.1-preview.1 / commhub-server@0.5.3-preview.0
New Features
anet demo ls- list available demosanet demo debate- one-command 6-agent debate demo--topic "..."debate topic--key sk-cp-xxxMiniMax API key, defaulting to$MINIMAX_KEY--quickshortened 4-step run--keepkeep temporary agents and network after the run--out path.mdtranscript output path
anet demo monitor- kept as the oldanet demo --livealias
Fixes
- anet CLI:
--runtime http-apinow starts throughagent-nodeinstead of falling into the Claude CLI branch. - agent-node: HTTP runtime reads
ANTHROPIC_AUTH_TOKENfor MiniMax-compatible configs. - dashboard: fixed repeated SSE reconnects caused by inline
onEventcallbacks. - hub-only.sh: rewritten with swap setup, sudoers NOPASSWD, linger, and optional systemd user autostart.
2026-04-30 - Parent Task Lineage + Auto-Chain Reply
commhub-server@0.5.3-preview.0
- Added
parent_task_idto tasks andchainReplyToParent()to keep multi-agent chains connected. send_taskacceptsparent_task_idand can infer it from the caller's recent open task.send_reply/report_completionforward results up the parent chain automatically.agent-nodeinjectsCURRENT_TASK_IDand prompts the LLM to passparent_task_id.
2026-04-26 - Hub Server Logs Page + V2 Lineage Foundation
commhub-server@0.5.2-preview.0 / dashboard@0.2.1-preview.0 / anet@2.0.3-preview.1
- Dashboard
/server-logspage for live hub stdout. - REST
GET /api/server-logsfor admin users. - Hub banner and
/healthshow the published version.
2026-04-15 - V3 Stable: Multi-Network + User System + Trial License
Agent Network V3 - Multi-Network + Commercial Ready (commhub-server 0.5.x, anet 2.0.x)
- Multi-network isolation for nodes, tasks, and sessions.
- Username/password accounts, JWT, and the
utok_+ntok_token system. - 14-day trial licensing and Pro activation.
- 39 CLI commands, 17 MCP tools, and 17 REST endpoint families.
- 3 runtimes:
claude-agent-sdk,codex-sdk, andhttp-api. - Audit logs, rate limiting, and PostgreSQL support through the
DbAdapter.
v1.0.0-preview.25 (2026-04-11)
PostgreSQL + Adapter Architecture
New features:
- PostgreSQL support: Enable via
DATABASE_URL=postgres://...(SQLite remains the default) - DbAdapter interface: Unified database abstraction layer (SQLiteAdapter + PgAdapter)
- SQL auto-translator:
sqliteToPostgres()handles datetime->NOW, ?N->$N, AUTOINCREMENT->SERIAL - 34 CLI commands: Added passwd, token (create/ls/revoke), network (info/rename/delete), demo, config, license, activate, hub start
- 17 REST endpoints: Added PUT /api/networks/:id, DELETE /api/networks/:id, POST /api/auth/password, token CRUD
- One-click demo:
bash examples/demo-one-click.sh-- 60-second automated demo - createAdapter() factory: Environment-driven database selection
Architecture improvements:
- All 85+
db.query()calls migrated to adapter methods (db.get(),db.all(),db.run()) - All 7 manual
BEGIN/COMMIT/ROLLBACKtransactions converted todb.transaction() - Zero raw database access -- all code goes through the
DbAdapterinterface - SQL translator handles 161 SQL fragments across 4 source files
Testing:
- 200 Docker E2E tests (137 core + 25 auth + 22 network + 16 config)
- 19 adapter-specific E2E tests
- 10 SQL translator unit tests
v1.0.0-preview (2026-04-10)
Agent Network V3 -- Multi-Network + Commercial Ready
New features:
- Multi-network support: Create isolated networks, each with independent nodes/tasks/sessions
- User system: Username + password registration/login, API token authentication
- Trial licensing: 14-day free trial, license key activation for Pro
- 39 CLI commands: quickstart, login, register, passwd, token, network (create/ls/use/info/rename/delete), status, tasks, doctor, info, logs, demo, config, license, activate, hub start...
- 17 MCP tools: send_task, send_reply, retry_task, cancel_task, reassign_task, list_tasks, get_task...
- 17 REST endpoints: /api/auth/, /api/networks/, /api/tasks, /api/nodes, /api/stats, /api/audit-log, /api/license...
- 2 AI runtimes: codex-sdk (OpenAI Codex / GPT-5), claude-agent-sdk (Claude / MiniMax / OpenAI-compatible)
- Audit logging: All user operations + task state changes recorded
- Rate limiting: Registration 30/min, login 10/min per IP
Security:
- MCP/SSE/WebSocket authentication
- Server-side enforced network_id (token-bound, client cannot override)
- SQL injection fix (all parameterized queries)
- Network ownership checks (cross-user access returns 403)
- Password hashing (SHA-256)
- Localhost rate limit exemption (dev/testing)
Database (13 tables): sessions, inbox, tasks, nodes, completions, task_events, users, networks, api_tokens, audit_log, licenses, network_members, network_invites
Testing (200 regression tests):
- Core E2E: 137 tests (node lifecycle, message lifecycle, auth, authorization, SSE, concurrency)
- Auth suite: 25 tests (registration, login, token, profile, password, audit, rate limiting)
- Network suite: 22 tests (CRUD, isolation, ownership, rename, delete, cross-user)
- Config priority: 16 tests (CLI > env > project > global)
- Real AI: Codex (GPT-5) + MiniMax (Anthropic API) verified
- 10-agent idiom chain (mixed codex + minimax)
npm packages:
- @sleep2agi/agent-network (anet CLI)
- @sleep2agi/agent-node (Agent runtime)
- @sleep2agi/commhub-server (Communication hub)
v0.x (2026-03 ~ 2026-04-09) -- Pre-V3
Core Feature Development
- CommHub Server: MCP + SSE-based communication hub
- agent-node: Dual-engine runtime (Claude + Codex)
- anet CLI: create / start / resume / channel and other basic commands
- Dashboard: Initial version
- Message types: task / reply / message / ack type differentiation
- Channel plugins: Claude Code CommHub integration
Early Milestones
| Version | Date | Content |
|---|---|---|
| v0.1 | Early 2026-03 | Basic CommHub + SSE |
| v0.3 | Mid 2026-03 | agent-node dual engine |
| v0.5 | Late 2026-03 | anet CLI + Channel |
| v0.7 | Early 2026-04 | Dashboard + message types |
| v0.9 | 2026-04-09 | Multi-model support (MiniMax, InternLM) |
Roadmap
v0.9 — Security hardening
- Argon2id password hashing (currently SHA-256)
utok_/ntok_TTL + revoke-all- Install-script checksum verification
- Dashboard full 0-token model finishing touches
v1.0 — Cleanup + public networks
- Remove
COMMHUB_AUTH_TOKENcompat path entirely - Token scope (full / agent / readonly) full implementation
- Public / invite-hybrid networks (member application + owner approval flow)
- Per-role button visibility in Dashboard
Later
Continued PostgreSQL adapter improvements— adapter interface kept as extension point, but v0.8+ product direction is SQLite only (see docs/v3-postgresql-design.md banner)- SSO integration
- Webhook callbacks
- Cron-style task scheduling
Next steps
- Upgrade guide — v0.7 → v0.8 behavior changes + standard steps
- Architecture — how each release accumulated into the current system
- GitHub Releases — per-tag release notes
- RFC-001 — v0.8 ~ v1.0 master-token deprecation roadmap