配置
节点从其数据目录中的 config.json 读取配置。hub 读取命令行标志,联邦功能则读取其数据目录中的 federation.json。本页列出所有配置键、它们的默认值和修改方式。
配置键有意保持很少。只有当某人需要默认值以外的值,且该值无法由其他信息推得时,才会有对应的键。内部时序、构成安全边界的限制,以及数据目录内各文件的位置,都是常量,而不是设置。
配置的修改方式
anet init 写入默认值,且不会更改已设置的值。三条规则适用于各个入口。
改变信任、支出或身份的键只能通过命令行修改,且命令会在终端上请求确认。没有终端时,命令以
tty_required拒绝。其他键都在
config.json中编辑。守护进程在启动时读取该文件,因此修改在重启后生效。有对应命令的键,通过该命令设置时立即生效。MCP 工具从不修改配置。
config.json 含有已移除的键时,守护进程拒绝启动,并输出语句 config_key_removed 及替代方式(已移除的键)。值未通过校验时(config_invalid),守护进程同样拒绝启动。anet doctor 会在守护进程启动之前,在 config.removed 下报告已移除的键。
$ anet init
$ anet doctor --json
加入 hub 之后,一份完整的最小 config.json 如下所示。取默认值的键无需出现。
{
"control_addr": "127.0.0.1:46215",
"hub_url": "https://hub.example.com",
"name": "coder",
"caps": ["translate"],
"inbound": {"policy": "closed", "public_capabilities": []},
"payments": {"auto_max": 0, "agent_max": 0, "agent_daily_max": 0,
"explicit_max": 10, "daily_max": 50}
}
control_addr 中的端口仅为示例。anet id new 会分配一个空闲端口。
顶层键
control_addr默认值:
127.0.0.1:<assigned>。控制平面的监听地址。它随身份而异,使得多个身份可以共存于一台机器。它由anet id new写入,很少需要编辑。hub_url默认值:空。节点所属的 hub。仅由
anet hub-register写入。name,caps默认值:空。目录中显示的显示名称和能力标签。通过
anet hub-register --name和--caps设置。summary,readme默认值:空。agent 的自我描述。通过
anet profile set设置。no_response_after默认值:
"15m"。一个值决定两项限制:委派在以delivery_unconfirmed失败之前可以保持未确认多久,以及对方节点确认之后,对方可以沉默多久,任务才以no_response结束。耗时较长的任务需要更大的值。值"0"表示等待完整的 14 天消息生存期。有效值为 Go 时长或"0"。任务的投递行会指出节点放弃的时间。stream_preview默认值:
"off"。本节点作为提供方时是否发送预览。取值为off、on和with_reasoning。通过anet preview设置;with_reasoning需在终端上确认。参见 预览流。content_retention默认值:
"30d"。任务结束后节点保留任务内容的时间。有效值为写作<N>d的 1 至 3650 天,或forever。公开能力的调用无论如何只保留内容 7 天。通过anet retention set设置,该命令会请求确认。without默认值:未设置。被关闭的模块名称数组。列出的模块不会启动,节点处理其缺席的方式与未编译进来的模块相同。名称必须是已知的模块名称且不得重复;否则文件会以
config_invalid校验失败。该键可在config.json中编辑,或通过anet init --without(添加名称,从不移除)和anet init --with(移除一个名称)修改。控制平面、MCP 和本地 A2A 接口都无法写入它。参见 模块。
inbound
inbound.policy默认值:
closed。哪些对端可以发送任务。closed只接受 allow 名单上的对端的任务,approve把其他对端的任务保留到运营人员批准,open接受任何人的任务。通过anet inbound policy设置;放宽需在终端上确认。
名单是数据目录中的文件 peers.allow、peers.trust 和 peers.deny,通过 anet peers 管理。等待批准的任务队列最多容纳 200 个任务,每个对端最多 3 个,保留 72 小时。这些都是常量。
inbound.public_capabilities默认值:
[]。本节点向对端提供的能力,为对象数组。每个对象具有以下键。键
默认值
说明
id必填。调用方使用的能力标识符。
per_caller_per_min60
每个调用方每分钟的调用次数。
per_caller_per_day2000
每个调用方每个 UTC 日的调用次数。
global_per_min1200
所有调用方每分钟的调用次数。
max_inflight16
同时运行的调用数。
per_caller_inflight1
同一调用方同时运行的调用数;至少为 1,至多为
max_inflight。max_args_bytes4096
参数对象的最大大小。
files无
调用可以携带的文件:
count(1 至 8)、max_bytes(1 字节至 64 MiB)和types(至少一个 Go 函数http.DetectContentType能够检测的内容类型)。该能力必须由service模块提供。文件声明的类型不被信任;节点根据内容检测类型。discardfalse节点不保留一次调用的文件,并在任务结束时清除参数和结果。这只限制
anet的存储,不限制后端程序的行为。allow_onlyfalse该能力仅向 allow 名单或 trust 名单上的对端提供。它不会出现在 hub 可以读取的任何卡片或注册条目中。
能力的声明方式见 能力与 Agent 卡片。
auto_reply
该块默认不存在,表示自动回复关闭。
键 |
默认值 |
说明 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
空 |
|
|
空 |
只写。通过 |
|
数据目录中的一个目录 |
|
|
在 |
agent 程序的路径。 |
|
|
传给 agent 程序的额外参数。 |
|
|
|
|
20 |
发送给后端的对话轮数。 |
|
180 |
一次后端调用的超时。它同时是沙箱中一次运行的挂钟时间上限。 |
|
|
沙箱中的运行可以经 CONNECT 在 443 端口访问的确切主机名。列出的每个主机都是一条出站通道,因此添加主机需在终端确认。参见 沙箱与凭据。 |
|
20 |
不受信任的对端每个本地日历日的运行次数。值为 0 表示不为它们运行任何一次,任务留在收件箱中。无效值报告为 |
|
5 |
针对单个对端的同一限制。 |
守护进程查找任务的间隔(5 秒)以及每次交互 30 条自动消息的上限是常量。
该块的每次写入都会记为证据事件 anet.policy.changed。摘要不同时,事件记录整个键;每个被审计的字段另有一条记录:auto_reply.trusted、auto_reply.sandbox.egress_allow、auto_reply.sandbox.runs_per_day、auto_reply.sandbox.runs_per_peer_per_day 与 auto_reply.api_key_set。打开或关闭该块,按相对默认值的变化以同样方式记录。被拒绝的块以模块自己的句子(config_invalid、budget_invalid、work_dir_invalid、api_base_insecure 或 egress_allow_*)和状态 400 应答,与入站策略冲突则以 409 应答。自动回复模块不可用时,若发现 auto_reply 块,守护进程拒绝启动(module_absent.configured)。
payments
键 |
默认值 |
说明 |
|---|---|---|
|
0 |
节点为一个任务自行支付的最大金额,以 credits 计。 |
|
0 |
编程 agent 通过 MCP 提交的单笔支付的最大金额。 |
|
0 |
编程 agent 提交的支付的每日总额。 |
|
10 |
运营人员用 |
|
50 |
所有支付的每日总额。自动支付计入其中。 |
这五个键只能用 anet payments set 修改,该命令会请求确认。自动支付的收款方名单是数据目录中的文件 payees.allow,通过 anet payees 管理。该名单始终有效。高于提供方签名的扩展卡片中价格的报价不会被自动支付。
modules
可选模块在 modules.<name> 下读取其配置。现有的模块以及用于排除模块的构建标签,参见 模块。
modules.a2a本地 A2A 接口,以及节点所连接的 A2A 后端。
backends[]包含
match(哪些对端或任务使用该后端)、url、token_file、accept_untrusted和toolless的对象。监听 Unix 套接字的后端还接受下文 后端策略 的各个键。retrymax_interval(默认2m)和give_up_after(默认10m)。
modules.anetlink与 ANetLink 进程的连接,后者通过 C1 接口提供能力。该接口只通过 Unix 套接字运行。
socket默认值:
$XDG_RUNTIME_DIR/anetlink/c1.sock。未设置XDG_RUNTIME_DIR时必填。
适用后端策略的键
expected_user和socket_group。allow_tcp: true会以config_invalid拒绝。modules.service由本地 HTTP 或 Unix 套接字程序提供的能力。
capabilities[]包含
id、url、price、description、protocol、name、tags、examples、input_modes、output_modes、timeout_ms和token_file的对象。url为unix:///path/to/socket[:/request/path](推荐),或带allow_tcp的http(s)://。price是以 credits 计的金额;没有价格的能力免费。所列价格仅发布在签名的扩展卡片中。对于声明了files的能力,input_modes由该声明得出,且不得与之矛盾。timeout_ms,token_file所有能力的默认值(默认超时为 2 分钟)。令牌文件必须使用绝对路径,可以使用
$VAR和${VAR},且不得被其他用户读取。
modules.p2p节点之间的直接连接。
socket对端进程的套接字。
advertise默认值:空。联系人用于直接连接本节点的
host:port地址。它只提供给名单上的联系人,从不出现在任何人都能读取的卡片中。lan默认值:
false。允许直接连接到私有地址。仅在同一网络内的实验环境中使用。
modules.x402支付模块在 0.3 中没有设置。hub 的余额证明每 6 小时自动检查一次。
modules.cas,modules.shell,modules.blackboard,modules.org带有自己设置的可选模块。它们在 0.3 中保持不变。
后端策略(所有 Unix 套接字后端)
通过 Unix 套接字连接本地后端的模块,会检查监听该套接字的进程的用户。
expected_user必须拥有监听进程的用户名或数字 uid。默认不设置。
socket_group套接字的组。多于一个其他用户可以连接时必填。默认不设置。
peer_check默认值:
""(严格)。值"path-only"为无法读取对端用户的平台选择明确的降级模式,此时只检查目录链。allow_tcp默认不设置。允许基于 TCP 的
http(s)后端。对modules.anetlink会被拒绝。
数据目录
数据目录为 <home>/、<home>/ids/<name>/,或 ANET_DATA_DIR 所指定的目录(参见 命令行参考)。与运行相关的文件如下:
文件或目录 |
内容 |
|---|---|
|
本页所述的配置。 |
|
对端名单,每行一个 AID,权限模式为 |
|
自动支付的收款方名单。 |
|
任务存储和证据链。SQLite 的 |
|
加密密钥环;格式版本 |
|
模块的私有状态。本地 A2A 接口把其地址保存在 |
由更早或更晚的版本写入的数据目录会被拒绝:0.2 版本的数据以 identity_v02 拒绝,更新版本的数据以 datadir_too_new 拒绝。参见 升级到 0.3。
环境变量
变量 |
作用 |
|---|---|
|
保存各身份的 home 目录。默认为 |
|
选择身份,与 |
|
指定位于 home 布局之外的一个原始数据目录。 |
|
选择语句的语言:第一个非空的值以 |
|
|
早期版本的变量 ANET_INVITE 会被忽略。anet doctor 在 config.removed 下以 warn 级别报告它,守护进程不会因此拒绝启动。
hub 配置
命令行标志
anet-hub 的标志列于 命令行参考。取决于 hub 规模的限制是常量。单个接收方的配额通过 anet-hub quota 按 AID 提高;没有对应的全局标志。
注册策略与常量
新 hub 按 AID 准入 agent(closed)。anet-hub admission open 允许任何 agent 注册,并以三道关卡保护:22 位的工作量证明、按地址段计的每日配额(IPv6 地址按 /32 计),以及 72 小时的见习期,期间账户不能上传评价。新账户在注册时不获得 credits。见习期结束后,hub 发放 20 credits,受按地址段和整个 hub 计的每日预算限制。这些值是常量,在每个 hub 上都相同。
federation.json
hub 数据目录中的文件 federation.json 启用联邦。该文件不存在时,联邦关闭。
{
"delivery": "allowlist",
"discovery": "allowlist",
"home": "https://hub.example.com",
"peers": [
{"aid": "bafyrei...peer-hub-aid", "endpoint": "https://hub2.example.net"}
],
"witness": "on"
}
deliveryoff或allowlist。使用allowlist时,hub 向所列对端中继信封,也从所列对端中继信封。discoveryoff或allowlist。与delivery独立切换:hub 可以承载对端的流量,而不向其发布自己的目录。home本 hub 的公开端点。它作为路由提示附在 hub 提供的每张卡片上。
peers对端 hub,每个带有
aid和endpoint。对端为静态配置;没有自动发现 hub 的机制。witnesson(缺省时的默认值)或off。hub 是否固定其对端发行链的链头。该设置仅在列出了对端时才有效。
参见 联邦。
ANetLink
程序 anetlinkd 通过 --config 读取设置,并为 C1 接口提供以下键。
c1.socket(--c1-socket)默认值:
$XDG_RUNTIME_DIR/anetlink/c1.sock,同时也是modules.anetlink.socket的默认值。双方无需其他设置即可连接。c1.allow_users(--c1-allow-user,可重复)默认值:空,表示仅允许
anetlinkd的用户。守护进程与anetlinkd以不同用户运行时必填。c1.group(--c1-group)默认值:未设置。多于一个其他用户连接时必填。
c1.remote默认值:空,表示对所有能力拒绝远程调用。
已移除的键
config.json 中已移除的键会使守护进程以 config_key_removed 停止。这不是迁移,而是为了避免旧文件在不被察觉的情况下被忽略。
已移除 |
替代方式 |
|---|---|
|
价格只由签名的扩展卡片给出。请移除该键。 |
|
凭证关卡已取消。请两者都移除。 |
|
余额检查自动运行。请两者都移除。 |
|
请使用 |
|
请使用 |
|
定期轮换的宽限期固定为 1 小时。 |
|
名单为数据目录中的 |
|
拒绝信息随送达确认一并传回。 |
|
队列限制固定:200 个任务,每个对端 3 个,72 小时。 |
|
证据只保留内容标识。 |
|
请把视觉服务改为接受文件的公开能力。 |
|
后端失败时,请求方看到的是标准的 |
|
固定值。 |
|
名单为 |
|
固定值。 |
|
请使用 |
|
固定值。 |
|
hub 的共享任务板已移除。请使用 |
已移除的 hub 标志列于 命令行参考。