它是什么
treg 用一个 token 提供两样东西:一个在服务端注入 provider 凭据的托管代理,以及一个让团队共享自有 endpoint、厂商 CLI 与 skill 的注册表。仓库自称「agent 工具的 OpenRouter」;托管服务是 treg.to,代码本身也设计成可以自建。
最需要纠正的误读是「注册表」这个名字——那只是较小的一半。真正承重的一半是中转:agent 照常拼一个上游请求,在前面加上 https://treg.to/call/,treg 按 host 解析出对应工具,解密匹配的凭据,然后把字节转发出去。
凭据到底存在哪里
装之前先看这一段。下面的流向来自源码与文档,而不是宣传段落。
- agent 用的 token 存在你本机。
treg login把一个身份 token 写入~/.treg/config.json,文件权限0600、所在目录0700(也可以从TREG_TOKEN环境变量读取)。它代表一个(user, org)成员身份,不是 provider 密钥。 - provider 凭据存在服务端。
SECURITY.md:存储的密钥用 Fernet 加密,密钥只存在于服务端环境变量中,且「代理从不把密钥交给调用方」——对 HTTP 工具而言,「注册表在服务端注入凭据并发出上游调用;调用方的 token 只负责授权」。 - 调用走 treg,不直连 provider。 架构文档明确否定了另一条路:竞争方案的网关「在笔记本上解密密钥」,treg 把这称为「treg 存在的意义就是要避免的情况」。
- treg 会把自家 header 去掉再转发。
x-treg-token与x-treg-org都在丢弃列表里,所以你的 token 也不会泄漏给 provider。treg run更进一步:在本机以一个受限的treg-run用户身份执行厂商 CLI,并施加出网白名单。
也就是说,默认路径既不把 provider 密钥存在你本机,也不从你本机发出。文档记载的唯一例外是走 OAuth 的 treg run:服务端只把短期叶子 access token 交给本地沙箱,refresh_token 与 client_secret 始终留在服务端。
treg 能看到什么
中转方必然看得见它中转的内容。来源在这一点上异常直白,而且两个方向都值得一读。
- 成功的调用不留内容。「中继只转发字节,审计行只记录状态码、大小与耗时。」
- 失败的调用会保留脱敏证据。
CallRecord.error_request/error_response会留下调用方发出的内容和 provider 回应的「脱敏、截断副本」,脱敏在截断之前执行,管理端视图 14 天后清除。 - 响应会被归档。 每个答案的每个版本都连同时间戳保留,文档称这是有意为之——「未来的数据产品」。团队可以读回自己那次调用收到的答案。
- 请求体会被限制。 在非计费路径上,只有声明了
Content-Length且不超过 64 KiB 的调用方请求体才会被保留;更大或分块的上传只留下 query 参数那一半。
treg 不需要你的请求体也能工作,但它确实能看见,而 provider 的答案会留在注册表上。
哪些免费、哪些需要账号
- 目录(catalog)是免费那条路。 匿名调用——走已验证的公共路由、不需要 provider 密钥——免费,也不需要 provider 账号。付费目录端点要么用团队预付余额(用 treg 自己的密钥),要么用团队自己存的密钥;调用方自己的密钥永远优先,且这类调用不计费。treg 没有公布价格的端点会被拒绝,而不是免费提供服务。
- 你自己的工具需要账号和团队:
treg secret add、treg add <tool> --base-url、treg upload(扫描.env并对照约 80 个已知 provider,同时扫描 skill 目录与已安装的目录 CLI),以及treg skill install。团队是作用域单位,支持按成员配置工具白名单。自建也受支持并被鼓励:PyPI 基础包只是 CLI,要跑注册表需要pip install "tools-registry[server]"。
DSH bundle 实际装了什么
package.json 里声明的是 "dsh": { "bundle": { "patch": "./dsh/cordis.patch.yml" } },而那份 patch 只贡献两行:
treg-skill—— 始终启用,不需要 token。它挂载treg-dsh,后者的dsh/index.js注册了一个ctx.skillsprovider,用于发布打包进来的dsh/skills/treg/SKILL.md。treg-mcp——@deepseek-ai/dsh-mcp-client,指向https://treg.to/mcp/,走 streamable HTTP,Bearerheader 从环境变量读取。它默认是关闭的:disabled: !!js (process.env.TREG_TOKEN ?? '') === ''。
所以准确的说法是:装完之后,dsh 不会注册任何联网的 treg 工具——你只得到一个 skill。把 TREG_TOKEN 导出到环境里并重启 dsh,MCP 那一行才会启用,之后才会出现 mcp__treg__catalog_search、catalog_get、call、balance 与 my_tools。这个表达式是在启动时求值的,所以对已经跑起来的 harness 再导出 token 不会有任何变化;打包的 skill 也明确写了这一点。docs/DSH-PLUGIN.md 还解释了为什么这个 bundle 是纯 JavaScript、没有构建步骤、也不依赖 @deepseek-ai/*:dsh plugin add github:... 拉取的是源码而不是构建产物,而一个 prepare 脚本会让文档里的安装命令在 pnpm ≥10 下直接失败。
运行要求
- 安装写法:文档中的命令是
dsh plugin --profile <name> add github:superdesigndev/treg,profile 名字在那份文件里是占位符。这个 bundle 没有发布到 npm——package.json里的名字是treg-dsh,而这个名字在 npm 上不存在。 - 没有安装期脚本。
package.json没有scripts字段——没有preinstall/install/postinstall/prepare——也没有声明任何 dependencies 或 peer dependencies。 - CLI:Python
>=3.12,<3.14,来自 PyPI 发行包tools-registry(0.19.1);server extra 会额外装上 FastAPI、数据库驱动与cryptography。bundle 清单里没有engines字段。另有一个独立的 npm 启动器@superdesign/treg(与本 bundle 无关)声明node >=18。 - harness 版本:没有声明。
package.json、README、docs/DSH-PLUGIN.md与打包的SKILL.md都没有写出受支持或已测试的 DSH 版本,因此本条目不写dshTarget,verification为 L2 而不是 L3。 - 遥测有文档,而且能关。 指向 treg.to 时,CLI 会向 PostHog 发送匿名命令用量——命令名、退出码、耗时、CLI 版本、操作系统,以及一个随机本地安装 ID——不含参数、凭据、内容与身份标识。可以用
TREG_TELEMETRY=0或DO_NOT_TRACK=1关闭;自建注册表默认不开分析。 - 网络行为随功能而定:CLI 通过 HTTPS 访问你的注册表;local-proxy 模式会设置
HTTPS_PROXY,并用生成的 CA 签发叶子证书。
已知限制
- 它和「自带密钥」型工具正好相反。 如果你的要求是任何第三方都不得持有 provider 凭据、也不得看到请求体,那 treg 在架构上就不合格——这不是一个开关能解决的问题。
- treg.to 一旦故障,调用就中断——文档没有给出 agent 绕过它直连 provider 的路径。
- 各来源给出的目录数字并不一致:README 写「3,000+ catalogued endpoints across 60+ providers」,打包的
SKILL.md写「3,300+ endpoints across 74 providers」,而package.json写「2,896 agent-friendly tools」。 - 许可证不是标准 SPDX 许可证。 GitHub API 报
NOASSERTION,而package.json写的是Apache-2.0。LICENSE原文是 Apache-2.0 外加附加条款,禁止未经书面授权把本软件用于「向第三方提供托管、代管或嵌入式服务」。团队内部(含商业用途)自建是允许的,从自己的产品里调用托管的 treg.to API 也写明无需授权。若你打算转售,请读文件本身,而不是那个字段。 - 本条目的条目没有做过沙箱验证——
security: unverified就是这个意思。仓库当前有 57 个 open issue,项目约两个月大且处于 pre-1.0,SECURITY.md说明修复只落在main。
什么时候用它、什么时候不要用
当工作需要一个你团队并没有采购的商业数据源——SERP 与反链数据、信息补全、广告素材库——而你宁愿按次付费,也不愿再多一份订阅、再多一把密钥散落在每台开发机上时,用它。共享注册表那一半是更耐久的功能:一个同事注册好 endpoint 或厂商 CLI,所有人的 agent 就能用一个 token 调用,而这个 token 本身从不包含凭据。
如果密钥本身就是重点,就不要用它。一个认为凭据必须留在笔记本上、或认为任何中间方都不得记录请求的团队,不该装它——中继就是这个产品。免费层也要留神:匿名调用之所以免费,恰恰因为它不带 provider 凭据。如果你是在评估 DSH bundle,也请注意它真实的暴露面——在你提供 token 之前,只有一个 skill。
FAQ
treg 会把我的 API 密钥存在本机吗?
不会。treg login 只在 ~/.treg/config.json(0600)里存一个身份 token;provider 凭据在注册表数据库里以 Fernet 加密保存。例外是走 OAuth 的 treg run:服务端只把短期叶子 access token 交给本地沙箱进程。
agent 调用工具时,凭据是直达 provider 的吗?
不是。你的机器把请求发到 https://treg.to/call/<upstream-url>,带上 X-Treg-Token;服务端解密匹配的凭据、注入后转发给 provider——转发前会先剥掉自家的 x-treg-token / x-treg-org,所以你的 token 同样不会到达 provider。
treg 能读到我的请求和响应内容吗?
它做中转,所以能——文档也直接承认,而不是否认。成功调用除状态码、大小、耗时外不留内容;失败调用会保留脱敏、截断的副本,管理端 14 天后清除。provider 的响应还会作为版本化历史被归档。
装完 dsh 后 treg 工具立刻可用吗?
不是。bundle 里有一行始终启用的 skill,以及一行带 disabled: !!js (process.env.TREG_TOKEN ?? '') === '' 的 MCP。dsh 启动时环境里没有 TREG_TOKEN,就不会注册任何 mcp__treg__* 工具;有 token 则会出现五个。由于表达式在启动时求值,之后再导出 token 需要重启 dsh。
treg 用的是什么许可证,NOASSERTION 是什么意思?
LICENSE 原文是 Apache-2.0 附加条款,因此 GitHub API 无法匹配到标准 SPDX 标识,只能报 NOASSERTION,而 package.json 写的是 Apache-2.0。附加条款禁止未经书面授权把本软件作为托管或嵌入式服务提供给第三方;自建给自家团队用是允许的。
CLI 会回传数据吗?
指向 treg.to 时会——向 PostHog 发送匿名命令用量:命令名、退出码、耗时、CLI 版本、操作系统和一个随机本地安装 ID,不含参数、凭据与内容。可用 TREG_TELEMETRY=0 或 DO_NOT_TRACK=1 关闭;自建注册表除非你自己配置 PostHog key,否则不发送任何东西。