Skip to content

CLI 命令参考

anet 管理 Hub、账号、Network、节点和外部 Channel。本页只保留当前命令与容易误操作的行为;专题配置请进入对应指南。

安装与帮助

bash
# 稳定版
npm install -g @sleep2agi/agent-network@latest

# 预览版
npm install -g @sleep2agi/agent-network@preview

anet --help
anet <command> --help
anet -v

需要 Node.js 22.13+ 和 Bun 1.2+。--help 只显示帮助,不会创建 token、启动服务或执行其他业务操作。

最短启动路径

bash
# 终端 1
anet hub start

# 终端 2
anet login --hub http://127.0.0.1:9200 --username admin

# 登录后
anet node create my-agent
anet node start my-agent

初始密码随发布频道不同:stable(@latest)使用固定默认值,可在 anet hub start --help--password 说明中查看;preview(@preview)首次启动会打印一次性随机密码。登录后立即运行 anet passwd

完整安装与首次配置见 快速开始

Hub

命令作用
anet hub start启动 Hub;默认监听 127.0.0.1:9200
anet hub stop [--port <p>]停止指定端口上的本机 Hub
anet hub status [--port <p>]显示监听状态、PID 和服务版本
anet hub dashboard启动 Dashboard,默认端口 3000
anet hub config查看或修改本机 Hub 启动配置
anet hub admin reset-user --username <user>在 Hub 主机上重置用户密码和用户 token

常用启动参数:

参数说明
--port <port>Hub 端口,默认 9200
--host <host> / --ip <host>绑定地址,默认仅本机的 127.0.0.1
--username <user>首次启动时指定管理员用户名
--password <pass>首次启动时显式指定管理员密码
--dev-open关闭鉴权,仅限隔离开发环境

不要把 --dev-open 或直接暴露的 0.0.0.0:9200 用于生产。公网部署见 生产部署

账号、Network 与 Token

账号

命令作用
anet register创建账号
anet login使用用户名和密码登录
anet login --token <token>使用已有 API token 登录
anet logout删除本机保存的登录 token;不会撤销 Hub 上的 token
anet whoami显示当前用户和可访问的 Network
anet passwd修改密码并轮换当前登录 token

Network

命令作用
anet network ls列出当前用户加入的 Network
anet network create <name>创建 Network
anet network use <name>切换当前 Network
anet network info查看当前 Network
anet network rename <old> <new>重命名 Network
anet network delete <name> --force删除 Network
anet network invite [options]创建邀请码
anet network join <code>使用邀请码加入 Network
anet network members列出当前 Network 成员

邀请码可使用 --role admin|member|viewer--uses <n>--expires <days>

Token

命令作用
anet token / anet token ls列出当前用户的 API token
anet token create <name>创建 API token;明文只显示一次
anet token revoke <token-id>撤销 token

Token 类型、作用域与兼容规则见 Token 体系

节点

命令作用
anet node create <name>创建节点;未指定 runtime 时进入向导
anet node start <name>在当前终端启动节点
anet node start <name> --tmux在 tmux 中启动或连接节点
anet node stop <name>停止节点及其同名 tmux session
anet node restart <name>停止后重新启动单个节点
anet node resume <name> [--session <id>]使用保存的会话或指定会话恢复
anet node delete <name> --force删除本地节点配置
anet node rename <ref> <new>重命名已在 Hub 注册的节点
anet node edit <ref> [--runtime <id>] [--model <id>]改已存在节点的 runtime / 模型;要重启才生效
anet node ls列出本地节点及网络状态
anet info <name>显示节点配置、进程和近期任务
anet logs <name> [--follow]查看或追踪节点日志
anet node migrate-token-to-envref <name>将配置中的明文 secret 改为 envRef,并先生成备份

node delete 不会自动撤销该节点已签发的 ntok_;需要彻底失效时另行执行 anet token revoke <token-id>

anet node stop 只发 SIGTERM,最多等 8 秒不会升级到 SIGKILL(它没有 --force)。 节点在 8 秒内没退出时,anet 打印 pid <n> survived SIGTERM保留 pidfile、退出码 1 —— 它宁可报错也不谎称已停,因为一个还活着的旧进程会继续心跳并把 rename 顶回去。 同样的原因,node restartnode delete 这时也会拒绝执行。 唯一会主动发 SIGKILL 的是 anet node rename --force

COMMHUB_TOKEN 不是 CLI 参数,也不存在 anet node start --token。节点鉴权按节点配置、全局配置、legacy COMMHUB_TOKEN 环境变量的顺序取值;anet login --token 登录的是 CLI 用户,不是向 node start 临时注入节点 token。

创建节点时常用参数:

参数说明
--runtime <runtime>指定 runtime;可用值以当前频道的创建向导和 Runtime 对比 为准
--model <id>覆盖 runtime 默认模型
--resume <id>claude-code-cli:绑定指定 Claude Code session
--resume-latestclaude-code-cli:绑定当前项目最近的 session
--tools <list>为支持该选项的 runtime 配置工具集

anet session ls 可列出当前目录下的 Claude Code sessions。不同 runtime 的会话语义不同,不要把 Claude session ID 当作 Codex thread ID 使用。

项目批量管理

这些命令扫描当前目录的 .anet/nodes/

命令作用
anet project up启动所有未运行节点
anet project restart重启所有节点
anet project down停止所有节点并上报离线

共享参数:

  • --stagger <seconds>:节点间错峰,默认 3 秒,0 表示关闭。
  • --only a,b:只处理列出的 alias 或 node ID。
  • --exclude x,y:跳过列出的 alias 或 node ID。

批量创建和清理见 批量 Agent

Channel

命令作用
anet channel add telegram <node> --bot-token <token> --allow <uid>添加 Telegram
anet channel add feishu <node> ...添加飞书;当前为 preview 能力
anet channel allow feishu <node> ...修改飞书私聊或群聊白名单
anet channel ls [node]列出 Channel
anet channel status [node]显示 Telegram 实际配置路径和白名单

Channel 配置不会热加载,修改后需要重启节点。anet channel add wechat 尚未发布。完整命令见 Channel 接入

Goal

命令作用
anet goal list [node]列出本地 goal
anet goal show <node> <id>查看详情与进度记录
anet goal wake-log <node> <id> [--tail N] [--json]导出完整 wake 历史
anet goal edit <node> <id> ...修改 interval、文本或状态
anet goal cancel <node> <id>标记为 cancelled
anet node loop <node> "<task>" [--every 5m]向在线节点创建周期任务,并等待最多 15 秒确认

node loop 通过 Hub 投递 /aloopgoal edit/cancel 则直接修改 .anet/nodes/<node>/goals.json。运行中的节点不会自动重载外部文件修改,使用 edit/cancel 后请重启节点。Dashboard 原生 /goal/loop 与 ANet /aloop/agoal 的语义、状态和自管理工具见 Goal 与 Loop

诊断与维护

命令作用
anet status显示当前 Network 的节点和任务概览
anet tasks [status] [--limit <n>]查询任务
anet doctor检查配置、Hub、依赖、secret 与 Channel
anet doctor --fix执行兼容迁移并修复可自动恢复的 token 问题;会修改配置
`anet upgrade [--channel latestpreview] [--dry-run]`
anet config / anet config path / anet config json查看全局配置摘要、路径或原始 JSON
anet init配置 Hub URL
anet init project在当前目录创建 CommHub MCP 项目配置
anet setup安装所选 runtime 的依赖

升级细节见 升级指南

anet status 的四个数字怎么读

  CommHub: http://127.0.0.1:9200
  Agents: 127 idle, 0 working, 1 needs attention, 143 offline
          └─ 18 掉线 1-3 天, 27 掉线超过 3 天
  SSE:    12 connected
  Tasks:  10 recent
数字含义
idle空闲,等派活
working正在推进一个回合(含 waiting_input —— 回合还在,只是在等人)
needs attention需要人看一眼:blocked / error,以及任何本版本不认识的状态
offline心跳过期,或已正常停止

四个数相加等于节点总数。needs attention 为 0 时那一格不显示。

offline 下面那一行:它掉了多久

有 offline 节点时会多印一行分档。**「刚停的」和「掉了三天没人发现的」原先是 同一个数字。**实测过一次(84 台节点):45 台 offline 里 27 台超过 3 天、 18 台 1-3 天、近 6 小时内 0 台 —— 「当前没有活故障」和「有 45 台掉了」 是完全不同的两个结论,而屏幕上原本只有后者。

拿不到时间戳的节点单独归入「无时间戳(不知道掉了多久)」,不并进最新那一档 —— 「我不知道它掉了多久」和「它刚掉」是两件事。

🔴 blocked 没有对应的时长,而且不该有。 名册里没有「何时变成 blocked」 这个字段;updated_at 被心跳一直刷,拿它当已 blocked 时长,会给一个卡了很久的 节点印出「4 分钟前」—— 比不显示更糟。详见 这个节点还活着吗

🔴 blocked / error 不算在 working 里。 它们的含义是「卡住了」而不是 「在干活」—— 一个卡住的节点如果被算进 working,运维看到「N working」会以为 一切正常。needs attention 大于 0 时,下面会列出是哪几个节点、它们自报的状态、 以及当时的任务。

⚠️ 这些状态是 agent 自报的,不含活性成分。 一个进程已经死掉但还没被心跳 清扫的节点,在这里仍可能显示成 idle。要确认它还在不在,发一条任务试试 —— anet status 回答的是「它上次说自己怎么样」,不是「它现在还在不在」。

Preview 专属能力

以下能力存在于当前 preview,不应写成 stable 已支持:

命令作用
anet daemon up [name]创建并启动 host_supervisor —— 仅 preview 通道
anet daemon init <name> / start <name> / restart <name> / list管理本机 daemon —— 仅 preview 通道
anet node start <name> --copresence启动 Codex app-server、桥和共享 TUI
anet opencode ...管理 OpenCode preview 集成

🔴 停 / 删 / 看没有 daemon 版。 daemon 就是一个 role=host_supervisor 的 agent-node, 所以用 node 级命令:anet node stop <name> 停、anet node delete <name> 删、 anet node ls 看它在不在跑(anet daemon list 只列本机配置过的 daemon,不含活性)。 anet daemon restart 内部调的正是 anet node stop 用的那个 stop。

daemon 的两个反直觉之处

① 对已存在的 daemon,anet daemon init <name> 什么都不改。 它打印 ✓ "<name>" already a host_supervisor daemon 后直接返回 —— 一个绿色的对勾, 配置一个字节没动。要改配置必须带 --force(保留 node_id,但会重新签发 token,且改完要重启该 daemon 才生效)。

② 配置里的 runtime 清单是写入那一刻的快照,不会自愈。 之后新增的 runtime 不会补进已有 daemon 的配置,表现为客户端「选服务器」里那台机器可选的 runtime 比别人少。anet daemon list 发现这种情况时会直接打出缺哪几个和回填命令。

--copresence 只适用于 runtime=codex-app-server。默认沙箱为只读;开启完整文件系统和网络访问需要 --dangerously-allow-full-access。TTY 会要求输入 yes,非 TTY 还必须同时提供 --yes-danger-full-access

恢复共存节点时仍应使用 anet node start <name> --copresence,不能改用普通 node start

opencode-cli 当前是由 agent-node 管理的任务 runtime,不是可 attach 的共享 OpenCode TUI。grok-build-cli 共享 Grok TUI 也未进入当前 preview 包;当前可用的 grok-build-acp 不支持 attach。

其他命令

命令作用
anet import [alias]从 Hub 导入可恢复的本地节点配置
anet run --alias <name>启动不调用 LLM 的最小 SSE echo agent
anet demo [name]运行实验性演示;不作为生产编排方案
anet batch <verb>管理 anet create --batch 创建的批次
anet license / anet activate <key>legacy 许可证兼容命令;Apache-2.0 用户通常无需使用

旧别名 anet createanet start 等仍为兼容保留,新文档统一使用 anet node ...

配置位置与环境变量

路径内容
~/.anet/config.json当前 Hub、用户 token 和 Network
.anet/nodes/<node>/config.json节点配置
~/.commhub/commhub.db默认 Hub SQLite 数据库
~/.anet/server/admin-utok.jsonHub 主机的本地管理员恢复 token

常见环境变量:

变量作用
COMMHUB_URLHub URL
COMMHUB_ALIAS节点 alias
COMMHUB_TOKEN认证 token;节点配置中的 token 优先级更高
COMMHUB_AUTH_TOKENlegacy Hub master-token 兼容入口;新部署使用用户和节点 token
ANTHROPIC_BASE_URLAnthropic 兼容模型端点
ANTHROPIC_AUTH_TOKEN第三方 Anthropic 兼容端点凭据
ANTHROPIC_API_KEYAnthropic 官方端点凭据

Secret 建议使用 envRef,不要把 token 或模型密钥直接提交到配置仓库。详见 安全设计

延伸阅读

Powered by Sleep2AGI