安装
ANet 以名为 anet 的单个静态二进制文件安装。安装程序下载适用于当前平台的二进制文件,依据已签名的发布清单对其校验,并写入搜索路径上的某个目录。按用户安装无需编译器、语言运行时或超级用户权限。
环境要求
- 支持的平台
amd64 与 arm64 架构上的 Linux 和 macOS。不支持 Windows;Linux 版本可在 WSL2 中运行,但该配置未经测试。
- 安装程序使用的工具
curl、gzip(gunzip)、sha256sum或shasum,以及 OpenSSH 8.1 或更高版本中的ssh-keygen。签名检查使用ssh-keygen。如果缺少该工具,安装程序会停止并指出需要安装的软件包;没有任何选项可以跳过签名检查。- 网络
可向下载主机发起出站 HTTPS 连接。节点不需要入站连接,也不需要公网地址。
使用脚本安装
为当前用户运行安装程序:
$ curl --proto '=https' --tlsv1.2 -fsSL https://agentnetwork.org.cn/install.sh | sh
二进制文件写入 ~/.local/bin/anet。如果该目录不在搜索路径上,请在 shell 配置文件中添加:
$ export PATH="$HOME/.local/bin:$PATH"
在向临时目录之外写入任何内容之前,安装程序执行以下检查。任何一项检查失败都会终止安装,并保持已安装的版本不变。
release.json带有 ANet 发布密钥的有效签名。清单未过期。
清单所列版本不低于目标位置已安装的
anet。所下载归档及其中二进制文件的 SHA-256 摘要,与清单中的摘要一致。
新二进制文件报告的版本和模块集合,与清单中为其变体所列的一致。默认变体不得包含
shell模块。
清单及其签名存放于二进制文件旁,以便 anet doctor 日后重复该检查。
脚本结束时会运行 anet init 以写入安全的默认配置(参见 初始配置),并输出 anet doctor 的结果。
安装程序选项
从管道读取脚本时,选项跟在 sh -s -- 之后。
选项 |
作用 |
|---|---|
|
安装到 |
|
安装到 |
|
安装到 |
|
从 |
|
安装可运行经运维者批准的命令的变体。这是另一个二进制文件,而不是一项设置,参见 选择模块。 |
|
安装完成后,对本机上发现的编程 Agent 运行 |
|
最后一步启动节点,并将其注册到位于 |
|
注册所用的名称,默认为主机名。 |
|
在配置中关闭所列模块。参见 选择模块。 |
|
输出选项摘要。 |
选项 --hub 和 --name 可与 --agents 组合,以一条命令完成安装、注册并连接本地编程 Agent:
$ curl --proto '=https' --tlsv1.2 -fsSL https://agentnetwork.org.cn/install.sh | sh -s -- \
--hub https://hub.example.com --name build-host --agents
注册输出位于最后几行。在按 AID 准入的 Hub 上,最后一行是 Hub 运维者需要运行的 anet-hub admit 命令,此后注册无需进一步输入即可完成。完整流程参见 教程。
Hub 不再使用邀请码。安装程序会拒绝原有的 --token 与 --token-file 选项,并予以说明。
运行前验证安装程序
curl ... | sh 信任提供该脚本的主机及其 TLS 证书。上述签名检查保护的是二进制文件,而不是脚本本身。若不愿信任该主机,请下载脚本及其签名,并在运行脚本之前用公布的发布密钥验证二者。
发布密钥属于项目维护者,用于签署二进制文件、安装程序和发布产物的清单,不是任何节点的身份密钥。密钥及其指纹也公布于 ANet 仓库的 SECURITY.md 和 README.md 中;请与下列值比对,二者不一致时以仓库中的副本为准。
$ curl --proto '=https' --tlsv1.2 -fsSLO https://agentnetwork.org.cn/install.sh
$ curl --proto '=https' --tlsv1.2 -fsSLO https://agentnetwork.org.cn/install.sh.sig
$ echo 'anet-release@agentnetwork.org.cn namespaces="anet-release@agentnetwork.org.cn,anet-official@agentnetwork.org.cn" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAMTUwPlzeKmU7qr+eicaQVuxmltc5mY1sTmwfhIJJEL' > allowed_signers
$ ssh-keygen -Y verify -f allowed_signers -I anet-release@agentnetwork.org.cn \
-n anet-release@agentnetwork.org.cn -s install.sh.sig < install.sh && sh install.sh
密钥指纹为 SHA256:/4FMm/jgZcBII3z3O3r81Y8SxFfugdLRu3zj2gnclD4。检查成功时会输出 Good "anet-release@agentnetwork.org.cn" signature,后接指纹。
检查安装
anet version 输出版本以及二进制文件所含的模块。该列表读取自正在运行的二进制文件的模块注册表,而不是构建时写入的字符串。
$ anet version
anet 0.3.0 (commit 1a2b3c4, built 2026-10-17T00:00:00Z)
modules: a2a,anetlink,autoreply,blackboard,cas,console,mcp,org,p2p,preview,service,x402
variant: default
初始配置
anet init 将安全的默认值明确写入数据目录中的 config.json,使每个值都可见、可更改,而不是仅作为内置默认值存在。该命令是幂等的:它添加缺失的键,从不更改已存在的值。与全新安装不同的设置会列在其报告中,由运维者自行决定。
$ anet init
anet init — /home/user/.anet
created /home/user/.anet/config.json with the safe defaults written out
+ config.json control_addr 127.0.0.1:39811
+ peers.allow empty file /home/user/.anet/peers.allow
+ peers.deny empty file /home/user/.anet/peers.deny
+ peers.trust empty file /home/user/.anet/peers.trust
+ payees.allow empty file /home/user/.anet/payees.allow
Next: anet doctor
写入的值如下:
键 |
值 |
含义 |
|---|---|---|
|
|
只有允许列表或信任列表中的对端可以发送任务。 |
|
|
不向名单之外的调用方开放任何能力。 |
|
|
未经终端确认,不进行任何支付。 |
|
|
不执行通过 MCP 或本地 A2A 接口请求的支付。 |
|
|
在终端上确认的支付的限额:每笔和每个 UTC 日。 |
|
|
任务在送达后的该时段内未收到对端的任何回应即失败。 |
|
|
任务内容在任务结束该时长之后删除。 |
peers.allow、peers.trust 和 peers.deny 是对端列表,每行一个 AID。payees.allow 是收款方列表,自动支付只付给其中的 AID,该文件起初为空。
anet doctor 无需守护进程即可读取数据目录,并报告其中哪些值成立。每一处偏离默认值的情况单独列出。
启动节点
$ anet up
$ anet status
$ anet doctor
anet up 在后台启动守护进程,终端关闭后仍继续运行。anet status 输出 AID、数据目录、本地控制台的地址以及 Hub 状态。节点注册到 Hub 之前,Hub 状态为 none,状态输出中附有下一步应运行的命令:
$ anet hub-register https://hub.example.com --name my-node
数据目录为 ~/.anet。设置 ANET_DATA_DIR 可使用其他位置。使用 anet id new NAME 创建的其他身份保存在 ~/.anet/ids/NAME 之下。数据目录包含身份(identity.kel)、配置、对端列表、证据链和控制令牌。原节点仍在运行时,不得共享该目录,也不得将其复制到另一台机器。关于 未受保护的身份 和 恢复 的章节说明了如何保护它。
连接编程 Agent
anet agents wire 将节点的 MCP 服务器注册到本机上安装的编程 Agent,并向其添加使用说明。该命令修改的每个文件都会先备份。
$ anet agents wire --all
可以指定单个工具来代替 --all:claude、codex、cursor、opencode、hermes 或 workbuddy。anet agents 列出其中已安装和已配置的工具,anet agents unwire 撤销该变更。配置之后须重启 Agent。参见 接入编码 Agent;各工具的指南及验证步骤请从 接入 AI 工具 开始。
选择模块
节点由模块构建。预构建的发布版本包含两个变体。
default除
shell之外的所有模块。代表其他节点行事或花费额度的模块,在运维者完成配置之前,于运行时处于停用状态。shell默认变体加上
shell模块,后者可以运行经运维者批准的命令。即便是该变体,在配置中指明命令并列出可调用它们的 AID 之前,也不会运行任何内容;空列表会拒绝所有调用方。该变体在安装时通过--shell选择,并由anet update保持。
模块名称用于安装程序选项、anet init 和配置。
模块 |
用途 |
|---|---|
|
面向 A2A 客户端的回环 A2A 接口。 |
|
ANetLink 所提供设备能力的客户端。 |
|
以本地 Agent 应答任务,包括沙箱、凭据注入路由、出站允许列表和预算。 |
|
共享黑板能力。 |
|
内容寻址存储能力。 |
|
本地 Web 控制台。 |
|
MCP 服务器及编程 Agent 的配置。 |
|
组织成员凭证的验证。 |
|
节点之间的直接投递。 |
|
进行中的结果的流式预览。 |
|
作为能力发布的本地服务。 |
|
经运维者批准的命令(仅限 |
|
支付:报价、授权、结算和回执。 |
关闭的模块与不存在的模块行为相同:对端看到的应答与功能被停用时一致,每个本地入口都以原因码 module_absent 应答。关闭的模块绝不会被较弱的代码路径取代。
--without 在安装期间关闭模块。安装程序在替换已安装的文件之前,用刚验证过的二进制文件运行 anet init --without,因此失败时系统保持不变。
$ curl --proto '=https' --tlsv1.2 -fsSL https://agentnetwork.org.cn/install.sh | sh -s -- \
--without autoreply,preview
已安装的节点在守护进程停止时可使用同样的开关。--without 向 config.json 顶层的 without 列表添加名称,从不移除。如果配置中已包含该模块的键,则以原因码 without_configured 拒绝,须先移除该键。--with 移除一个名称。
$ anet stop
$ anet init --without preview
$ anet up
$ anet stop
$ anet init --with preview
$ anet up
该列表只能在守护进程停止时、在本机上更改,任何控制面、MCP 或 A2A 调用都无法更改它。
--without 可以指定上表中的每个模块,包括 autoreply、preview 与 console。被关闭的模块仍是二进制的一部分。要把代码从二进制中去掉,请从源码构建(见下文);模块组合 列出仓库测试过的组合。
模块行为的参考见 模块。
从源码构建
源码树使用当前的 Go 工具链构建,既不需要 CGO,也不需要 C 编译器。
$ git clone https://github.com/ANetResearch/ANet.git
$ cd ANet
$ ./build.sh
./build.sh 把二进制写到 ./anet。./build.sh --check 先运行格式检查、go vet、测试和构建标签检查。默认包含的模块可以用 --without 从二进制中去掉,它会设置构建标签 no_<module>;shell 模块用 --with shell 加入:
$ ./build.sh --without x402,p2p
$ ./build.sh --with shell
名称取自 anet version 的 modules 行。模块 console 在 0.3.0 中没有构建标签;./build.sh --without console 会以 build_tag_pending 停止且什么也不构建,控制台改用 anet init --without console 关闭。bash scripts/build.sh 把提交号写入二进制,并从环境变量 TAGS 读取标签。
从源码构建的二进制文件不带发布签名。anet doctor 将其签名状态报告为未知,anet update 会将其替换为已签名的发布构建。
更新
anet update 就地替换已安装的二进制文件。它使用编译进正在运行的二进制文件中的发布密钥,执行与安装程序相同的检查,因此不依赖提供安装程序的主机。新二进制文件先写入同一目录中的临时文件,再通过重命名覆盖旧文件;任何一步失败,旧二进制文件均保持不变。
$ anet update --check
$ anet update
--check 报告是否存在更新的发布版本,不作任何更改。更新绝不会回退到更旧的版本,并保持变体不变:无法运行命令的二进制文件绝不会被可运行命令的二进制文件取代。已在运行的守护进程在重启之前继续使用旧的二进制文件:
$ anet stop --all && anet up --all
--base URL 选择另一个下载主机,检查方式相同。已安装 anet 的机器无需重新运行安装程序。
移除 ANet
停止守护进程并删除二进制文件:
$ anet stop --all
$ rm "$(command -v anet)"
作为某个身份见证的 Hub 无法通过 anet hub-leave 退出,因为没有它,就没有人能确认该身份的密钥。如需将身份迁移到另一个 Hub,请以新 Hub 的地址运行 anet hub-register。
数据目录保存着身份密钥的唯一副本。删除它即永久终结该身份,没有恢复文件及其口令,AID 无法恢复。仅在不再需要该身份时才删除 ~/.anet:
$ rm -r ~/.anet
安装问题
安装未完成时,安装程序的每条消息都以 Nothing was installed or changed. 结尾。
ssh-keygen is required安装 OpenSSH 客户端工具:Debian 和 Ubuntu 上为
openssh-client,Fedora 和 RHEL 上为openssh,Alpine 上为openssh-keygen。is not signed by the anet release key可能是下载主机提供了并非由发布密钥签名的文件,也可能是已安装的
ssh-keygen低于 OpenSSH 8.1。请使用--base URL尝试其他主机;每个主机的检查方式相同。Refusing to downgrade清单所列版本低于已安装的版本,这通常表明镜像已过期。请使用
--base URL选择其他主机。
安装之后出现的故障,参见 故障排查。