10 分钟跑通第一个节点
从启动 Hub 到在 Dashboard 里和第一个 Agent 对话,4 步。每步一条命令 + 一句验证。
开始之前:按安装装好 Node.js ≥ 22.13、Bun ≥ 1.2 和 anet,anet -v 能正常输出。已经装过、只想升级的,走升级指南。
最快路径(推荐):有 Claude 订阅就零配置
本机装好 Claude Code CLI(npm i -g @anthropic-ai/claude-code)并 claude auth login 后,第 3 步选 claude-code-cli runtime:不用填 API key、不用选模型。没有 Claude 订阅就用 claude-agent-sdk + 一个模型 API key(MiniMax / DeepSeek / 书生 / 小米),见第 3 步。
1. 启动 Hub
打开第一个终端, 保持开着:
anet hub start启动后默认监听 http://127.0.0.1:9200, SQLite 数据库在 ~/.commhub/commhub.db, 并自动创建管理员 admin,密码是一个随机生成、只打印这一次的 anet-xxxxxxxx… 串(latest 与 preview 两条通道都是这样)。当场把它存下来,第 2 步登录要用。
公网部署立刻改密
首次登录后会提示你改掉这个随机密码。任何 --host 0.0.0.0 公网部署都要立刻 anet passwd 改成自己的强密码。想自己指定初始密码:anet hub start --password <pass>,或设环境变量 ANET_HUB_BOOTSTRAP_PASSWORD。
停止 / 查看状态
anet hub status / anet hub stop(不用 lsof + kill)。
2. 启动 Dashboard 并登录
开第二个终端, 保持开着:
anet hub dashboard浏览器访问 http://localhost:3000, 用 admin 加你自己那次 anet hub start 打印的密码登录。
密码从 anet hub start 的输出里取,不要照抄这里
anet hub start 第一次跑的时候会打印一次管理员凭据:
✅ Admin account created
username: admin
password: <这里打印的那个串>
Store this password now; it will not be shown again.已核对的 latest(2.3.0-preview.221)打印随机密码(该路径自 .181 起未改),形如 anet- 加 22 位十六进制字符。已发布的 CLI 2.3.0-preview.228 只改配对常量:指向 agent-node 2.5.0-preview.196(该运行时让思考档位写入等这一轮结束再落,而不是立刻拒绝);已发布的 CLI 2.3.0-preview.227 新增 anet pair(打印精确配对的唯一安装命令),并让节点自报启动它的 CLI 版本(launched_by_cli_version);已发布的 CLI 2.3.0-preview.226 只改配对常量:指向 agent-node 2.5.0-preview.194(该运行时在当前模型不支持思考档位时也上报会话的生效模型 model_effective,客户端切模型后能确认成功);已发布的 CLI 2.3.0-preview.226 只改配对常量:指向 agent-node 2.5.0-preview.194(该运行时在 stock 构建上优先用空闲闸门写入器,不再被 test 控制器误判 unsupported);已发布的 CLI 2.3.0-preview.224 只改配对常量:指向 agent-node 2.5.0-preview.192(该运行时让普通构建也能上报档位能力:能力读回改用不绑 test-build 身份的 scoped 请求,写入仍走空闲闸门);已发布的 CLI 2.3.0-preview.223 只改配对常量:指向 agent-node 2.5.0-preview.191(该运行时让思考档位在普通构建上可切换:我方有在飞轮次时拒绝、写后必回读;OpenCode 没有会话 busy 标记,故为 best-effort,不是原子切换);已发布的 CLI 2.3.0-preview.222 只改配对常量:指向 agent-node 2.5.0-preview.190(该运行时把会话控制请求超时放宽到 20 秒并给 fork 单独一条处理链,daemon 拉起的子节点继承 NODE_USE_ENV_PROXY);已发布的 CLI 2.3.0-preview.221 只改配对常量:指向 agent-node 2.5.0-preview.187(该运行时把 OpenCode V2 历史读取超时从 10 秒放宽到 60 秒并加退避,避免 serve 忙时节点卡在「工作中」;fork 读取兼容只有 node_name 的手动节点);已发布的 CLI 2.3.0-preview.220 只改配对常量:指向 agent-node 2.5.0-preview.186(该运行时让 daemon 能收编手动启动的 OpenCode V2 共存节点——只登记、不碰进程——从而可以 fork);已发布的 CLI 2.3.0-preview.219:配对常量指向 agent-node 2.5.0-preview.185(该运行时会自动中断卡死超时的 OpenCode V2 本节点轮次,并且 Hub 为 http 时 fork 预览不再让 daemon 退出),并让 claude-code-cli 节点支持在应用里保存独立节点密钥;已发布的 CLI 2.3.0-preview.218 只改配对常量:指向 agent-node 2.5.0-preview.184(该运行时把 OpenCode V2 的 agent 热切换做完并上报 opencode_agent_config_capable,切换判据是「回读一致」而不是 204);已发布的 CLI 2.3.0-preview.217 只改配对常量:指向 agent-node 2.5.0-preview.183(该运行时把 OpenCode V2 的 agent 列表与当前会话 agent 上报给 Hub,字段为 opencode_agents / opencode_agent_current / opencode_agents_seen_at;空数组合法,读不到一律留空,不猜默认 agent);已发布的 CLI 2.3.0-preview.216 只改配对常量:指向 agent-node 2.5.0-preview.182(该运行时把 claude / codex / opencode 三种运行时的 token 用量按增量报给 Hub,cache 单列);2.3.0-preview.214 加一条丢键告警:profile 序列化是白名单,名单外的键会静默消失(#3418 的生产事故就是这么漏的);现在保存 profile 时会把「磁盘上有、这次要写没」的键打一行 warn;2.3.0-preview.213 修一处白名单丢键:opencodeConfiguredModelAtLastOpen(节点运行时写的对账 marker)此前不在 profile 序列化白名单里,每次 anet node start 保存 profile 都会把它丢掉,导致「清空 marker 以触发对账」的信号到不了 agent-node;2.3.0-preview.212 相对 .211 只改配对常量(→ agent-node 2.5.0-preview.179,该运行时在打开共存运行时前打印对账判据的三格输入,用于定位「发现漂移却修不上」);2.3.0-preview.211 相对 .210 只改配对常量(→ agent-node 2.5.0-preview.178,该运行时在会话模型漂出配置时会武装一次对账,下次启动自愈);2.3.0-preview.211 相对 .208 只改配对常量(指向 agent-node 2.5.0-preview.177,该运行时给飞书入站加了队列把手:/q 看队列、/cancel 撤掉未开始的、/prio 提权);2.3.0-preview.208 相对 .207 只改两处:配对常量指向 agent-node 2.5.0-preview.176(该运行时带飞书渠道的角色闸门、聊天上下文与跨机凭据),以及修掉 bridge 文件头一句会把模式选错的过期注释(写着「commhub 是默认」,而代码默认是 direct);2.3.0-preview.207 相对 .206 只改一处:写节点 profile 时只写声明要改的那几格(以磁盘当前内容打底),不再用进程内存里的旧快照整份回写——长命进程(共存桥)握着一份启动时的 profile,回写时会把期间 Hub 改过并已 applied 的 model 一起抹掉(生产实测丢过一次);2.3.0-preview.206 相对 .205 只改配对常量(指向 agent-node 2.5.0-preview.171)并修正构建标识:.205 的 build-info.json 写的是事件 sha(644c95cd)而不是被打包的树(9bb1a399)—— 那种「标识说错了对象」的状态现在会在 event_sha 里如实分开记录;.205 相对 .204 只改配对常量,指向 agent-node 2.5.0-preview.170(该运行时把构建标识随 report_status 上报 —— 节点身份从「哪个标签」变成「哪一份字节」,前提是 Hub 侧也升到会投影它的版本);.204 相对 .203 只加一件事:anet --version 多一行 build 标识(同一版本号的两份安装从此可分;四种形态分别是干净树 / 脏树 / 没有 build-info.json / 有但写坏了,后两者必须能分开);.203 相对 .202 只改配对常量,指向 agent-node 2.5.0-preview.169(该运行时把「共享会话是否活着」的判据从粘滞布尔改成30 秒时间窗:一次瞬时断连不再让热切模型永久降级;并且热切失败时改为降级重启而不是 ack rejected —— 用户点「切模型」要的是结果);.202 相对 .201 只改一处行为:非交互环境(客户端 / 管道 / CI)里不再发起提问——以前它会打印提示串然后永远等下去(客户端看到的是「卡住,而且没有任何原因」),现在有默认值就用默认值并在 stderr 说明,没有就报错并给出该传哪个参数;anet init 直接给出 --hub。.201 相对 .200 只改配对常量,指向已发布的 agent-node 2.5.0-preview.166(该运行时带三处改动:排队阶段单独设上限,不再吃掉回复预算;已 replied 的任务不再接收迟到补发,避免重复投递;迟到结果落盘改用 Windows 安全的重命名重试)(该运行时带两条改动:一是把「等子任务时 get_task 至少隔 60 秒、结果会经 parent_task_id 自动 chain 回上游」写进提示词,实测一个节点曾在空闲等待里以 13 次/分钟连拉 8 小时;二是超时之后那一轮才结束时,把结果作为迟到结果补发回 Hub,不再直接丢弃——Hub 侧 .213 起已能接收)(含心跳与首次 SSE 重连的抖动:周期性状态上报、以及 Hub 重启后的重连都被摊开,不再同一秒一起到达——Hub 侧实测那一波曾产生 308 个在飞请求);这两个精确版本已核实可从 npm 查询。.156 相对 .155 新增一个默认关闭的能力:设 ANET_TEAM_RULES=1 时,节点在完整启动读一次 Hub 的网络规则,并在 CLAUDE.md/AGENTS.md 顶部维护一个受管块(块外逐字节不动;标记残缺拒写;同 revision 不产生 diff;Hub 不可达保留原文件且不阻塞启动)。另含三条只改测试的修复(Windows 用例显式 60s 超时、探针失败打印 probe=、出生查询测时与重试)。**不设该环境变量时行为与 .155 完全一致;这一版只注入 Hub 一层,Daemon 层与层间冲突裁决仍未实现。**默认初始化 / 随机密码路径未改动。 精确版本已发布不代表通道标记永远指向它,也不代表现役节点已升级。当前通道版本请运行 npm view @sleep2agi/agent-network dist-tags 查询。 固定的 admin / anethub 只存在于 2.2.x 及更早的版本,新装的 Hub 上用它登不进去。
凭据也落在 ~/.anet/server/admin-utok.json,里面只有 username / user_id / token / created_at —— 密码不在里面,所以错过了那次输出 就只能重新 bootstrap(或在 Hub 所在机器上跑 anet hub admin reset-user)。
第三个终端给 CLI 也登录一次(后续 anet node ... 命令带凭证):
anet login --hub http://127.0.0.1:9200 --username admin --password <anet hub start 打印的密码>anet whoami 确认身份。
3. 创建并启动节点
anet node create my-bot向导按这个顺序问你:runtime → (仅 claude-agent-sdk) vendor → model → API Key。
新手最省事 — 手动选 claude-code-cli
向导默认高亮 claude-agent-sdk, 一路 Enter 会落到要填 vendor + API Key 的复杂路径。如果已经 claude auth login, 手动选 claude-code-cli = 零配置最快路径。
anet node create 的选单列出全部 7 个 runtime(4 个正式:claude-agent-sdk / claude-code-cli / codex-sdk / grok-build-acp;3 个预览:codex-app-server(选单里叫 codex-cli)/ grok-build-cli / opencode-cli);完整对照见 Runtime 对比。
OpenCode V2 不是第 8 个 runtime,向导也不会默认选它。它仍是 opencode-cli,要显式 --opencode-generation v2 --opencode-unsafe-tools,并且只做人机共存。成熟度仍是 preview(npm latest 上还没有这条创建标志)。步骤、Hub 对话和还没接上的模型目录见 OpenCode V2。
启动节点:
全新安装选了 claude-agent-sdk / codex-sdk?先装 agent-node
这两个 runtime 依赖 agent-node 包。首次 node start 的 npx 自动拉取需要约 1 分钟,而 ≤ 2.3.0-preview.37 的构建(含旧的 2.2.21)的启动检查不等它拉完就报 agent-node is not installed or cannot report a version 退出(#450)。修复见 PR #239,自 2.3.0-preview.38 起含在构建里,现在两条通道都已越过这条下界(查自己装的:anet -v;查通道当前指向:npm view @sleep2agi/agent-network dist-tags)。如果你装的是更早的构建:anet upgrade;或先跑一句让二进制预先就位:
npm install -g @sleep2agi/agent-nodeanet node start my-bot看到 SSE connected 即上线, 终端保持开着。
vendor 选择中段 Ctrl+C 可能留半成品节点
半成品节点用 anet node delete <alias>(不带 --force 先看 will-delete 预览, 再加 --force 真删)清掉重来。
4. 从 Dashboard 派任务
回浏览器 http://localhost:3000:
- 进 Overview, 点击在线的
my-bot卡片,打开内嵌 ChatPanel(Dashboard 没有单独的 Chat 导航页) - 输入框写一句话("现在几点?" / "做个 hello world"), 回车
- 自己消息立刻乐观回显(
You标签) - Agent 调用 LLM 后回复, markdown 完整渲染(
↳ my-bot标签)
刷新页面, 聊天历史保留。
✅ 跑通了。
下一步
进阶:
- 多 Agent 协作 — peer agents 通过
get_all_status/send_task/get_task自治协调 - 批量节点管理
anet project up/restart/down— cwd 下所有节点一键起停, reboot 后零键盘恢复 - 局域网共用 Hub —
anet hub start --host 0.0.0.0让其他机器加入
实战 demo(实验性,仅供体验):
anet demo # 列出可用 demo
anet demo pr-review # PR 评审室 — 3 reviewer(安全/性能/风格)+ judge深入: