关于 Zas
zas-agent 是一款 MCP 服务,让编码 Agent 与选定的 Zas 频道交换文件和笔记。它使用单独审批的 Agent 身份和按频道授权,并在上传前于设备上加密内容。
主要功能
- 01向频道发送笔记和文件
- 02列出并取回频道项目
- 03编辑笔记或替换已发送文件
- 04通过 Directo 实时传输文件
- 05配对并设置频道权限
- 06上传前在设备上加密内容
适用场景
- 01将编码 Agent 中的文件发送到 Zas 频道
- 02将频道项目取回到本地设备
- 03通过 Directo 实时交换文件
- 04将 Agent 权限限制在获批频道
MCP 相关
提供 13 个工具,供编码 Agent 在 Zas 频道中发送、接收、列出和编辑项目。配对会建立 Agent 身份,并授予其访问指定频道的权限。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
13收录的工具列表 · 更新于 2 周前
此工具无需参数。
详细介绍
zas-agent
一个 MCP 服务,可让编码 Agent — Claude Code、Codex 或任何支持 MCP 的工具 — 将文件和便笺发送到你的 Zas 频道,并从中读取内容。
什么是 Zas
Zas 可在你的设备和你选择的人之间传递内容:文件、照片、文本、代码。你在一台设备上将内容放入频道,然后在另一台设备上使用。未固定的内容会在几天后自动消失,因此之后无需整理。所有内容都会在设备上加密后再上传:数据库和对象存储接收的是加密字节,而不是文件名、内容或预览。
这个软件包让编码 Agent 能像你的其他设备一样使用频道,并拥有独立身份。你可以批准该身份,为它指定可访问的频道,也可以随时撤销。
功能
你的编码 Agent 可以使用 13 种工具。它可以将文件或便笺发送到你选择的频道,通过 Directo 实时发送或接收文件,列出频道中的内容,将某个项目下载回本地磁盘,还可以修改已发送的内容:项目标题或文本,或文件的字节内容,同时保留项目 ID。 它发送的所有内容都会先在你的设备上加密,然后才会离开设备并存入你的账户,且会在频道中标记为由该 Agent 发送。Agent 拥有独立身份,绝不会持有你的账户密钥:配对时会在此处生成密钥对,你通过 Web 应用批准该身份,此后 Agent 会签署质询以获取短期会话。
安装
先安装 Node.js LTS(22 或更高版本)和 Agent 的命令行工具。安装后重新打开终端。 在你使用 Agent 的计算机上运行以下命令。
选择你的 Agent 并完成配对。在 Windows(PowerShell 或 CMD)上:
Codex
npx.cmd -y zas-agent@latest pair --profile codex
Claude Code
npx.cmd -y zas-agent@latest pair --profile claude-code
打开显示的链接,批准频道;如果页面显示验证码,请在终端中输入。保持终端打开,直到配对完成。 然后运行对应的注册命令:
Codex
cmd /d /c codex mcp add zas "--" npx.cmd -y zas-agent@latest --profile codex
Claude Code
cmd /d /c claude mcp add zas "--" npx.cmd -y zas-agent@latest --profile claude-code
在 macOS、Linux 或 WSL 上,使用 npx 替代 npx.cmd,并省略
cmd /d /c 。请在同一环境中完成配对和注册。重启 Agent,然后让它向 Zas 发送内容。
如果命令无法识别,请安装 Node.js 或指定 Agent 的 CLI,然后重新打开终端。首次下载需要联网,可能需要几分钟。请按示例使用 @latest,以便 npm 获取已发布的软件包,而不是选择尚未构建的本地工作区。
配对的作用
zas-agent pair 会生成密钥对、注册公钥、在浏览器中打开审批页面并等待。终端会显示:
Open this page signed in to your Zas account:
https://zas.red/agents/pair?p=...#port=53211
Fingerprint: 1a2b 3c4d 5e6f 7a8b
Waiting for approval… (expires in 10 minutes)
登录后,为 Agent 命名并勾选它可以使用的通道——默认允许发送,读取则需要单独启用——然后批准。批准本身不会创建任何内容:页面会通过 127.0.0.1(链接中的端口)将一次性认领码交给此终端,只有终端使用该代码和 Agent 持有的密钥完成认领后,Agent 才会创建。如果链接被其他人打开并获批,他们的设备上没有程序监听该端口,认领码会过期,也不会创建任何内容。
如果浏览器无法连接终端——例如在手机上打开了链接,或浏览器拒绝了本地连接——页面会显示代码,终端也会提示输入。请只在终端中输入该代码,切勿在其他地方输入:持有该代码的人可以通过另一个已启动配对的终端完成认领。传入 --no-open 或设置 ZAS_NO_OPEN=1 可让浏览器保持关闭;无论哪种方式,都会打印链接。配对在批准前有效期为 10 分钟,批准后为 5 分钟;超过时限后,请重新运行命令。
你也可以通过编码 Agent 中的 zas_pair 工具启动此流程:首次调用会返回 URL,后续调用会告知审批是否已完成;如果页面显示代码,则可通过传入 code 的调用来认领。
更新
已发布的安装默认启用自动更新。Agent 运行时,会在后台检查 npm 的 latest 稳定版,最多每天检查一次。它会将较新版本安装到单独的目录中,并验证已安装的可执行文件报告了预期版本。下次启动 Agent 时会使用该版本。请重启 MCP 连接(或编码 Agent)以应用更新;更新程序绝不会重启正在进行的传输。配对和通道授权会保留,离线或更新失败时,当前版本仍可使用。
zas-agent updates # show the setting and any release ready to use
zas-agent updates off # disable automatic downloads and staged launch selection
zas-agent updates on # enable them again
zas-agent update # check and stage a release now
如果没有全局安装,请使用 npx -y zas-agent@latest 代替 zas-agent。zas_status 也会报告正在运行的版本和暂存的更新。ZAS_AGENT_AUTO_UPDATE=0 会停用内置更新程序;1 会启用它,并覆盖已保存的设置。即使关闭了更新,仍可通过显式的 update 命令下载版本,但只有重新启用更新后才会选用该版本。若要固定安装版本,请在启动命令中指定确切版本,并停用自动更新。即使内置更新程序已关闭,文档中的 npx ...@latest 命令仍会向 npm 请求最新软件包。
更新需要 npm,并会从 https://registry.npmjs.org 安装官方 zas-agent 软件包,包括其常规依赖安装脚本和 npm 完整性检查。无需管理员权限。暂存的软件包位于 ~/.zas/agent/.updates(或 ZAS_AGENT_HOME/.updates)下;旧安装会保留,可在停止 Agent 后删除。源码检出版本和预发布构建不会自行更新。现有安装需要先升级到包含此更新程序的版本,才能使用这些控制选项。
为什么你可以信任它
这里的每一行都是事实。关于此软件包的内容,你可以在此代码库中核实。对于由 Zas 服务强制执行的属性(该服务并非开源),句子中会明确说明。
- Agent 拥有自己的身份。
zas-agent pair会在你的机器上生成两对密钥——用于接收频道密钥的 X25519 密钥,以及用于签署登录信息的 P-256 密钥——私钥部分永远不会离开这台机器。Agent 从不持有你的账户密钥,密钥派生服务也会拒绝为 Agent 派生账户密钥(服务端)。 - 由你批准,并由你选择频道。 配对不会自动获批。批准页面会显示运行环境、主机和密钥指纹;在启动配对的终端使用只有批准页面收到的代码认领之前,不会创建任何内容(服务端)。他人发给你的配对链接不会在你的账户上创建任何内容。
- 每个获准的频道对应一把密钥,其他频道则没有密钥。 每项授权都会附带一把用 Agent 的 X25519 公钥加密封装的频道密钥。对于你未授权的频道,Agent 没有可用于解密的密钥;服务端会在每次请求时检查当前授权状态(服务端)。
- 没有密码,也没有 API 密钥。 登录时,Agent 会用签名质询换取有效期为一小时的令牌。磁盘上不会存储密码、API 密钥或刷新令牌;令牌过期后,Agent 会使用自己的 P-256 密钥重新签名。
- 它发送的所有内容都会明确标记为其所做的工作。 每条内容都会带有
>_Agent 标记和 Agent 名称;无论你在哪台设备上查看 Zas,频道中都会显示这些信息。 - 你可以随时撤销它。 设置 → Agent → 选择该 Agent → 撤销。会话将停止,其刷新令牌会被撤销(服务端);下次调用工具时会返回“所有者已撤销此 Agent”。它已经发送的内容仍会保留。你也可以只移除一个频道,同时保留其他频道。
- 内容会像应用一样,在离开你的机器之前加密。
src/shared/中的分块、清单和信封格式使用的模块,与 Zas Web 应用提供的模块相同。服务端存储的是密文,不会看到频道密钥、频道名称或条目明文(服务端)。 - 源代码就在这里,发布版本也由此构建。 每个 npm 版本都通过此代码库中的
release.yml工作流发布,并带有 npm 来源证明,因此可以将 npm 上的压缩包追溯到某次提交和工作流运行。
无法执行的操作
在发出请求之前,软件包本身就会拒绝其中一些操作。标注 (服务端) 的操作由 Zas 服务强制执行。
- 无法访问你未授权的频道。 无论是按名称还是按 ID。
- 无法访问你加入的共享频道,除非其所有者允许。 你可以授权自己加入的频道,但在该频道所有者于 Zas 中允许此 Agent 加入之前,授权会保持
grant_pending状态。套餐还会限制单个 Agent 可持有的这类频道数量:Free 套餐为 2 个 (服务端)。 - 无法访问工作区频道,除非组织允许 Agent。 由组织管理的频道,或你在其工作区内创建的频道,只有在组织处于活动状态且管理员已启用 Agent 时才能授权 (服务端)。
- 授权未允许读取时,无法读取。
read是与send分开的开关;未启用时,会拒绝zas_list_items和zas_get_item。 - 无法向仅查看频道或处于 Directo 模式的频道发送并存储内容。 两种情况都会在上传任何字节之前被拒绝。处于 Directo 模式的频道需要使用
zas_send_direct,这是一种不会存储内容的实时传输。 - 无法更改自己未发送的内容。
zas_edit_item和zas_replace_file只能操作带有此 Agent 标记的内容;其他内容会被标记为not_yours,服务端也会拒绝此类操作 (服务端)。替换操作仅供 Agent 使用:网页或移动客户端均无法执行。移除公开分享之前,不会替换带有公开分享的内容。 - 授权未允许读取时,无法接收。 通过 Directo 接收会将文件写入此机器,因此
zas_receive_direct与列出内容一样,需要启用read开关。它也只会在工具调用期间运行:Agent 不会监视你的频道,因此不会在未经请求时接收任何内容。 - 无法访问允许列表之外的内容。 API 会拒绝 Agent 访问未列入简短明确列表的所有路由;Firestore 规则会拒绝 Agent 访问你的账户文档、设备,以及没有有效读取授权的任何频道 (服务端)。
- 受服务端速率限制,使用独立的限流桶;密钥派生额度计入你的账户,因此 10 个 Agent 不会让你的个人额度消耗变成 10 倍 (服务端)。
- Agent 数量上限由你的套餐或组织规定 (服务端)。
- 文件最大为 5 GiB,但实际限制通常更低:Agent 会将文件读入内存以计算哈希,因此机器的内存才是真正的上限。
错误代码说明
Agent 只会返回一组固定代码。服务端路由返回的任何不在此集合中的内容都会归并为 upload_failed 或 network,因此原始服务端字符串绝不会显示在终端中。
| 代码 | 含义 |
|---|---|
not_paired | 此 Agent 尚未配对。 |
unsafe_endpoint | 端点或模拟器配置可能会泄露凭据。 |
identity_permissions | 密钥文件并非仅限其所有者访问。 |
secret_store_failed | 操作系统密钥存储无法保存或打开此配置文件。 |
invalid_voprf_configuration | 服务器选定的加密密钥没有有效的本地固定值。 |
invalid_voprf_proof | 加密服务响应未通过验证。 |
identity_corrupt | 磁盘上的身份文件已损坏。 |
agent_revoked | 所有者已撤销此 Agent。 |
agent_forbidden | 只有账户所有者才能执行此操作。 |
grant_missing | 此 Agent 无权访问该频道。 |
grant_pending | 该频道属于其他人,其所有者尚未允许此 Agent 访问。 |
send_forbidden | 此 Agent 无法向该频道发送内容。 |
read_forbidden | 此 Agent 无法读取该频道。 |
direct_mode | 该频道处于 Directo 模式。 |
not_direct_mode | 该频道未处于 Directo 模式。 |
not_claimed | 十分钟内无人接收文件;文件传输邀请已撤回。 |
no_offer | 呼叫等待期间,没有人通过 Directo 提供文件。 |
offer_taken | 另一台设备先接收了该文件。 |
direct_cancelled | 对方已取消文件传输邀请。 |
direct_failed | Directo 传输过程中失败。 |
direct_not_failed | 该任务不是一个在传输过程中失败的 Directo 传输任务。 |
file_changed | 自发出 Directo 邀请以来,文件已发生变化。 |
webrtc_unavailable | 无法在此机器上加载 WebRTC 引擎。 |
fallback_unavailable | 目前无法可靠地传送内容。 |
key_stale | 频道密钥已更改;所有者打开 Zas 即可刷新密钥。 |
quota_exceeded | 账户已达到存储空间上限。 |
plan_inactive | 组织的套餐未激活,因此已暂停向其频道发送内容;所有者或账单管理员可重新激活套餐。 |
rate_limited | 连续发送次数过多。 |
file_too_big | 文件超出套餐限制。 |
duplicate | 该项目已在频道中。 |
not_found | 该项目不在频道中。 |
not_yours | 该项目并非由此 Agent 发送;它只能修改自己发送的项目。 |
stale | 此 Agent 处理该项目期间,项目已发生变化;请重新读取并重试。 |
not_a_note | 该项目是文件,不是笔记;只能更改其标题。 |
not_a_file | 该项目是笔记,不是文件。 |
item_shared | 该项目已公开分享;所有者需先取消分享。 |
invalid_cap | 该文件已不可用。 |
write_failed | 无法写入下载目标位置。 |
pairing_expired | 配对已过期;请重新配对。 |
pairing_cancelled | 所有者已取消配对。 |
claim_mismatch | 代码不匹配。 |
pairing_not_approved | 尚无人批准此配对。 |
pairing_claimed | 此配对已被认领;请重新配对。 |
agent_limit | 账户无法再添加 Agent;所有者可前往 Settings → Agents 删除一个。 |
grant_limit | 套餐允许每个 Agent 访问的频道数少于此次配对授予的数量。 |
foreign_limit | 套餐允许此 Agent 访问的他人频道数少于此次配对请求的数量。 |
feature_disabled | 此账户尚未启用 Agent。 |
upload_failed | 上传失败。 |
oprf_failed | 准备文件时,Zas 未能正确响应。 |
network | 无法连接到 Zas。 |
sign_in_failed | Zas 未接受此 Agent 会话。 |
bad_signature | Zas 拒绝了此 Agent 的签名;请重新配对。 |
missing_token | 缺少会话令牌;请重新配对 Agent。 |
internal | Agent 内部发生错误。 |
每个代码都会返回一句英文句子,而不是堆栈跟踪。
工具
| 工具 | 功能 |
|---|---|
zas_status | 说明此 Agent 是否已与 Zas 账户配对,并列出它可以发送到或读取的所有者频道。 |
zas_pair | 将此 Agent 与 Zas 账户配对。首次调用会返回供所有者打开的 URL;之后调用会说明所有者是否已批准。如果页面显示代码,调用时传入 code 即可认领。如果配置文件已配对,批准操作会替换旧 Agent。 |
zas_send_file | 将此机器上的文件发送到所有者的某个频道。返回条目 ID;如果上传耗时超过一分钟,则返回作业 ID。 |
zas_send_note | 将便笺发送到所有者的某个频道,可以是纯文本,也可以是带语言标记的代码片段。 |
zas_send_direct | 通过 Directo 发送文件:以实时设备对设备的方式传输到 Directo 模式下的频道。不会存储任何内容。所有者需在十分钟内于另一台设备上按下 Receive;调用会返回结果,或在一分钟后返回作业 ID。 |
zas_send_direct_fallback | Directo 发送过程中失败后,通过可靠传送方式发送同一文件:在此机器上加密,存储在 Cloudflare R2 中,最长 24 小时,且不占用所有者的配额。这由所有者选择;模型会被告知需要询问。 |
zas_receive_direct | 将所有者通过 Directo 发送的文件接收到此机器上。等待发送请求、接收文件并将其写入磁盘。需要包含读取权限的授权,且频道必须处于 Directo 模式。返回写入路径,或在一分钟后返回作业 ID。 |
zas_receive_direct_fallback | Directo 接收过程中失败后,下载发送方选择存储的加密副本,并将其解密到同一目标位置。 |
zas_list_items | 列出所有者某个频道中最新的条目。需要包含读取权限的授权。 |
zas_get_item | 获取某个条目。便笺会以文本形式返回;文件会写入磁盘。不会覆盖文件,因此返回的路径可能与请求的路径不同。 |
zas_edit_item | 修改此 Agent 发送的条目,同时保留其 ID:可修改文件或便笺的标题,也可修改便笺的文本、语言和隐私遮罩。需要包含读取和发送权限的授权。所有者的活动日志会记录此操作。 |
zas_replace_file | 用此机器上的文件替换此 Agent 发送的文件内容,同时保留条目 ID、频道中的位置和置顶状态。返回条目 ID,或在一分钟后返回作业 ID。拒绝替换便笺、共享条目以及由其他人发送的条目。 |
zas_jobs | 按时间从新到旧列出此服务启动的发送和 Directo 传输及其各自到达的阶段;也会说明如何兑换长时间发送返回的 job_id。 |
channel 可接受频道名称或频道 ID。名称必须与已授权的某个频道完全匹配;如果恰好只有一项授权,zas_send_file、
zas_send_note、zas_send_direct、zas_receive_direct、zas_edit_item 和
zas_replace_file 可以省略该参数。
替换操作会运行与发送相同的流程——计算哈希、派生密钥、加密,
然后按块上传或提供证明——并提交新旧两组数据以供释放。服务会在一次事务中迁移两组数据、账户存储用量和条目,因此失败时一切保持原样;两个版本都包含的块既不会上传,也不会释放。这两个工具都会先读取条目,并且只会覆盖读取到的版本:如果条目在此期间发生变化,调用会返回 stale,不会丢失任何内容。
Directo 需要原生模块 node-datachannel,
即用于 Node 的 WebRTC。npm 会为 Windows、macOS 和 Linux 安装预构建二进制文件;
首次运行 Directo 工具时才会加载该模块;如果模块无法加载,机器会返回
webrtc_unavailable。其他工具都不需要该模块。
将模型连接到账户之前,有两件事值得了解:
zas_send_file和zas_send_direct会发送此进程能够读取的任何文件—— 包括~/.ssh/id_rsa和.env。发送机密、密钥或凭据前,请先征得所有者同意。工具描述中有说明,因此模型也能看到。zas_get_item和zas_receive_direct会在dest下写入新文件;如果省略dest,则会写入系统临时目录。 两者都不会覆盖现有文件:如果文件名已被占用,就会添加后缀,并且它们返回的路径就是实际写入文件的路径。
这些工具接触到的所有内容都保存在你自己的账户和机器上。撤销 Agent 的授权后,所有这些工具都会停止工作。
会发送哪些信息
此软件包会报告其使用情况,因此无法接收文件等缺陷(例如某个版本的问题)不会再被忽视。默认情况下,此功能处于开启状态,你可以自行关闭:
npx -y zas-agent telemetry off # and `on` again, and `telemetry` to see
ZAS_AGENT_TELEMETRY=0 和跨厂商的 DO_NOT_TRACK=1 都能达到相同效果,且不会写入任何内容。该设置保存在 ~/.zas/agent/settings.json 中,适用于此机器上的所有配置;重新配对不会重置它。
zas_status 始终会显示当前设置状态。
每份报告只包含以下信息,不含其他内容:运行的工具、工具是否成功、失败时的固定错误代码、耗时所属的四个区间之一,以及软件包版本。项目传输还会报告项目类别、传输方式、字节数、各阶段耗时,以及成功、失败或取消的状态,并通过每次尝试随机生成的 ID 关联这些信息。不含文件名、文件内容、路径、频道名称、错误消息或堆栈信息。
报告发送到 Zas,绝不会直接发送给分析服务。此软件包不包含分析令牌,也不会与第三方建立连接,因此你的任何地址都不会传给第三方。报告会关联到 Agent 所配对的 Zas 账户,服务器会从会话中读取该账户信息——请求中不包含账户标识符或内容标识符。配对前不会发送报告,因为在此之前报告无从归属。
报告绝不会影响任何操作:它会在响应之后发送,等待时间最多为 5 秒,只会尝试一次;如果发送失败,就会静默丢弃。
磁盘上的数据
每个配置文件对应一个目录,因此一台机器可以同时保存 Claude Code Agent 和 Codex Agent,彼此不会读取对方的密钥:
| 操作系统 | 路径 |
|---|---|
| macOS、Linux | ~/.zas/agent/<profile>/ |
| Windows | %USERPROFILE%\.zas\agent\<profile>\ |
配置文件元数据通过临时文件写入,再重命名到目标位置,因此即使写入过程中发生崩溃,也不会留下不完整的文件:
identity.json— Agent 的 uid、所有者 uid、名称,以及两组密钥对。请像备份私钥一样备份此文件,或者删除它并重新配对。pending.json— 尚未认领的配对信息。配对完成、过期或取消后都会移除此文件。grants.json— 对GET /v1/agents/me的一分钟缓存:包含哪些频道,以及每个频道对应的密封密钥。频道名称在此处仍保持加密状态。可随时删除。fingerprints.json— 最近十分钟内相同发送操作所产生结果的哈希值,这样重试工具调用时无需访问网络即可返回结果。此文件只存储哈希,不存储标题或笔记的首行。可随时删除。
配置文件目录旁边还会有一个文件,位于 ~/.zas/agent/:
settings.json— 此机器是否报告用量,以及上方提示上次打印的时间。此设置属于机器,而非配置文件,因此一个选择适用于该机器上的所有 Agent。
私钥、轮询密钥和旧版配对码会在下次启动时从旧 JSON 文件迁移出去。只有在存储成功后,才会提交替换后的元数据。Windows 使用当前用户的 DPAPI 和不继承权限的仅所有者目录 ACL。macOS 使用 Keychain;Linux 在桌面会话和 secret-tool 均可用时通过 secret-tool 使用 Secret Service。若桌面存储已锁定或发生故障,必须先解锁或修复,然后才能重试。无桌面环境的 Linux 会在 0700 权限的目录中使用 0600 权限的文件。POSIX 系统上的密钥读取会拒绝所有者为其他用户的文件、符号链接、硬链接以及组或其他用户可访问的文件;错误信息中包含 chmod 600 修复命令。zas_status 会报告存储状态。
较旧版本的 Agent 无法读取迁移后的密钥引用;迁移后请继续安装更新后的 Agent。受操作系统保护的配置文件不能用作可移植备份。请在另一台机器上配对新的配置文件;不要复制其 JSON 文件并期望它们能用于登录。操作系统保护无法阻止已以你的用户身份运行的进程使用你的密钥。
删除目录会移除本地引用。Keychain/Secret Service 中可能仍保留 red.zas.agent 服务下的条目;丢弃配置文件时,请使用操作系统的凭据管理器移除这些条目。这不会撤销任何内容:请在 Web 应用中通过 Settings → Agents → Revoke 关闭账户端的访问。
再次配对
配对针对的是一个配置文件的密钥对,而非整台机器或程序。一个配置文件只对应一个 Agent。在已配对的配置文件中运行 zas-agent pair 会启动替换流程:终端使用旧身份为请求签名,审批页面会显示将要替换的 Agent,并自动填入其名称和频道;创建新 Agent 的同时,旧 Agent 会被撤销。旧 Agent 的条目会继续显示在 Settings → Agents 下,状态为已撤销,直到你将其移除;在此之前,它仍会占用一个名额。如果旧 Agent 已被撤销或移除,pair 会说明这一点并创建新的 Agent。
一台同时运行 Claude Code 和 Codex 的机器会有两个配置文件(claude-code 和 codex)、两个 Agent、两次审批和两个条目。撤销其中一个不会影响另一个。两个指向同一个 --profile 的程序会作为同一个 Agent 运行:密钥相同、频道相同,且只对应一个条目。
配置
| 设置 | 默认值 | 更改内容 |
|---|---|---|
--profile <name> | claude-code | 此进程使用的身份目录。可包含字母、数字、.、_ 和 -,长度最多为 64 个字符,且不能以点号开头。 |
ZAS_AGENT_HOME | ~/.zas/agent | 配置目录所在的位置。 |
ZAS_AGENT_TELEMETRY | 未设置 | 设为 0 可关闭此进程的使用情况报告,设为 1 可开启。此设置优先于已保存的选择。 |
DO_NOT_TRACK | 未设置 | 设为 1 可关闭使用情况报告。仅用于关闭报告。 |
ZAS_WEB_BASE | https://zas.red | 配对 URL 指向的 Web 应用。 |
ZAS_API_BASE | https://zas.red/api | API。 |
ZAS_TOKEN_BASE | https://zas.red/anon-token | 挑战和令牌路由。 |
ZAS_OPRF_BASE | https://zas.red/oprf | 盲密钥派生服务。 |
ZAS_FIREBASE_PROJECT | zas-me | 读取路径查询其 Firestore 的项目。 |
ZAS_ALLOW_INSECURE_DEV | 未设置 | 设为 1 后,仅允许在 localhost、127.0.0.1 或 ::1 上使用 HTTP。 |
ZAS_VOPRF_PUBLIC_KEYS | 未设置 | 由运营方提供的 JSON 映射,将密钥 ID 映射到固定的 base64 VOPRF 公钥。服务器选择模式 1 时必需。 |
ZAS_FIREBASE_API_KEY | 公开 Web 密钥 | 用于将自定义令牌兑换为会话的密钥。 |
手动设置时,只有 --profile、ZAS_AGENT_HOME 和两个遥测开关值得设置。其余设置仅用于将软件包指向测试部署。
每次加载时都会验证已保存的 API、令牌和 OPRF 基础 URL。即使启用了开发标志,也会拒绝非回环 HTTP。要运行 Firebase 模拟器,请将 FIREBASE_AUTH_EMULATOR_HOST 和 FIRESTORE_EMULATOR_HOST 都设为回环主机,将 Zas 的三个服务基础 URL 都设为回环地址,将 ZAS_FIREBASE_PROJECT 设为 demo-* 项目,并设置 ZAS_ALLOW_INSECURE_DEV=1。生产配置无法使用这些模拟器。携带凭据的请求会拒绝重定向。开发时请使用单独的配置;加载旧配置前,请先修复其中不安全的基础 URL。
开发
git clone https://github.com/soke1556/zas-agent
cd zas-agent
npm ci
npm test
npm run typecheck
npm run build
node dist/cli.js --version
此仓库是 Zas 私有单体仓库中 agent/ 软件包的公开镜像。它由 scripts/export-public.mjs 生成:该脚本使用 esbuild 构建软件包,并依据构建自身的元文件决定要复制哪些内容:src/、test/、软件包文件,以及 Agent 导入的 src/shared/* 模块。这些共享模块是客户端加密和格式处理代码,包括分块器、清单、信封和密钥派生;Zas Web 应用也会发布这些模块,因此 Agent 执行的加密与应用执行的加密相同。Zas 服务端不开源。
欢迎向此仓库提交拉取请求。维护者会将被接受的更改应用回单体仓库,并在下一次导出时带到此处。请参阅 CONTRIBUTING.md。
shared-source.json 将共享模块和互操作性测试数据固定到 zas.web 的提交 46d727a870c64728b42b768950d55d7d7a575181。CI 会运行 npm run check:shared,使用上游 Git Blob ID 检测偏差。拥有私有代码库副本的维护者可以运行 npm run check:shared -- --source ../zas.web,根据实际提交验证固定版本。请在下一次导出前将这些 Agent 更改应用回单体仓库。
此版本跟进 Web 读取阶段:可以读取旧版/v1 和已认证的 v2 信封;应用写入端仍会生成 v1。VOPRF 模式由 GET /v1/agents/me 选择;模式 1 要求本地固定公钥并提供有效的批量证明,失败时不会降级。启用生产环境的 v2 写入,以及协调各客户端采用 VOPRF,仍属于独立的发布工作。
安全
请私下报告漏洞。SECURITY.md 说明了报告方式和预期流程。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。