持久投递,状态明确
Web 中继先持久化,再向 Matrix 确认;Hagency 先持久化,再确认投递租约。重放 ID 和内容摘要用于防止重复接纳,冲突内容会被拒绝。处理、分配和完成状态与这两种确认分别记录。
从 Matrix 对话,到编程 Agent 的工作目录。探索 Robrix2、Palpo 及其配套 Web 服务如何与 Hagency 协作。
下方提供完整架构说明,交互图将在浏览器模块加载后显示。
阅读连接说明下方提供完整架构说明,交互图将在浏览器模块加载后显示。
阅读连接说明出站传输与配套管理应用描述已核验的开发集成,不代表所有发布包都包含这些能力。图表用于说明,不连接真实服务。
贡献方机器可以位于 NAT 后。Hagency 桥接主动向公开的 Palpo Web 传输入口发起 HTTPS 连接;Matrix homeserver 则通过服务器网络访问同侧中继。
| 操作 / API | 方向 | 含义 |
|---|---|---|
发布能力与状态POST /api/fleet/v2/{fleetId}/updates | Hagency → Palpo Web | 带序号的发件箱承载心跳、资源快照与申请观察状态;响应丢失时重试相同序号和内容。 |
接收 Matrix 事务GET /api/fleet/v2/{fleetId}/poll?lane=matrix | Hagency 发起请求 → Web 响应 | 长轮询从持久 Matrix 队列租赁原始 AS 事务,HTTP 连接由 Hagency 发起。 |
接收工作请求GET /api/fleet/v2/{fleetId}/poll?lane=work | Hagency 发起请求 → Web 响应 | 独立队列承载包含来源事件及权限绑定的申请与探测工作,不绕过本地接纳检查。 |
确认接收保管POST /api/fleet/v2/{fleetId}/ack | Hagency → Palpo Web | 本地持久化后,ACK 指定投递、队列和当前租约令牌;它表示接收,不代表资源审批、任务完成或工具执行授权。 |
投递 Appservice 事务PUT /api/relay/v2/{fleetId}/_matrix/app/v1/transactions/{txnId} | Palpo homeserver → 服务器侧 Web 中继 | 中继校验 hs_token,持久化事务后返回 HTTP 200。这是 Matrix AS 链路,不是对 Hagency 的入站调用。 |
Web 中继先持久化,再向 Matrix 确认;Hagency 先持久化,再确认投递租约。重放 ID 和内容摘要用于防止重复接纳,冲突内容会被拒绝。处理、分配和完成状态与这两种确认分别记录。
当前 generation 的确切 Matrix 探测建立连接,之后由后台心跳维持活性。旧申请观察不会因为较晚到达的心跳或重传而变成“当前就绪”。已有回调机群需要明确迁移,图中展示当前出站路径。
Matrix 定义应用服务注册;Palpo 配套 Web 应用自动安装注册,并在其周围实现所有者配对和机群传输。
Palpo 管理员选择活跃的本地所有者和出站传输。配套服务在联系 homeserver 前持久化操作 ID、随机机群 ID 与生成的注册;重试复用原操作,内容变化则报告冲突。
配套服务以管理员权限调用 POST /_palpo/admin/v1/appservices,生成代表身份的 localpart、独占本地用户命名空间、as_token 和 hs_token。注册 URL 指向服务器侧中继,而非贡献方电脑。
服务回读注册并比较 ID、URL、令牌、发送者与命名空间。在核验的 Palpo 实现中,带 user_id 的 AS 认证 whoami 请求会创建代表身份,随后检查准确的 MXID 和 appservice 归属。这种创建行为是 Palpo 特有实现。
只有指定所有者可以下载该机群配置,并通过 Hagency 项目方接入流程导入。配置包含限定范围的 Matrix 注册和独立出站机器凭据,不会把 Palpo 管理员令牌交给 Hagency。
Hagency 启动独立的 matrix/work 轮询循环,在本地保存投递,确认租约,并发布能力、心跳与申请观察结果。即使贡献方离线,Web 服务也能从存储状态提供信息。
所有者的连接操作创建或恢复接待房间,并发送 com.hagency.connection.probe.v1。Palpo → 中继 → Hagency 必须投递该确切事件;当前 generation 的事务接收记录与 Hagency 验证结果共同建立连接,单独心跳不能证明初次就绪。
项目注册绑定所有者与目标房间,并建立独立私密审批房间。具名 Agent 申请仍需资源贡献方接纳和分配检查;完成资源交付且核验实际目标房间成员后,门户才报告可用。
# Illustrative values; generated separately for every fleet.
id: hf_0123456789abcdef0123456789abcdef
url: http://palpo-web:8090/api/relay/v2/hf_0123456789abcdef0123456789abcdef
as_token: <APP_SERVICE_SECRET>
hs_token: <HOMESERVER_SECRET>
sender_localpart: hf_0123456789abcdef0123456789abcdef_representative
namespaces:
users:
- exclusive: true
regex: '^@hf_0123456789abcdef0123456789abcdef_[a-z0-9_]+:example\.org$'
aliases: []
rooms: []
rate_limited: true
receive_ephemeral: false中继 URL 供 homeserver 访问;本地用户正则限定到一个机群和一个 Matrix 服务器身份。这段 YAML 展示字段,配套服务通过 Palpo 管理 API 安装等价 JSON。
Robrix 直接连接 Matrix homeserver,其对话通过 Matrix 事件、房间绑定和桥接到达 Hagency。
Robrix 以所选 homeserver URL 或服务器名称构建 matrix-sdk Client,使用账户支持的登录方式或恢复已有设备会话。Matrix API 入口与配套管理门户可以使用不同 URL。
Makepad 界面将 MatrixRequest 操作交给 Tokio 工作线程;matrix-sdk-ui SyncService 发现原生 sliding sync,并将房间列表和各房间时间线更新交回界面。媒体、输入状态、回执和成员关系使用 SDK 对应的 Matrix 操作。
消息与回复使用 Matrix 事件和线程关系。Hagency 验证实际发送者及存储的房间线程绑定,显示名称或文本提及不是授权凭据。
Robrix 在本地持久化设备与加密状态。Hagency 的受支持加密路径使用自己的真实 Matrix 设备及持久加密存储。AS 注册或服务器中继本身不会提供读取加密房间的密钥。
房间权限等级可以赋予人和 Agent 相同的房间能力,但编程工具执行仍需 Hagency 自身的运行时授权。 了解 Matrix 权限模型 →
Hagency 协调真实编程 Agent 进程,重建上下文、选择符合条件的适配器、授予限定范围工具、观察执行,并将结果送回原始会话。
claude -p · stream-json每次调度启动受管理的新进程,通过 stdin 传入提示词,流式输出活动与结果,并提供限定范围的 MCP 服务。上下文来自 Hagency 持久状态。
权限检查遵循 Claude 运行时集成与配置的工具策略。
codex app-server --stdioinitialize → thread/start → turn/start。新 App Server 线程接收重建上下文,通知和原生审批请求绑定到本次调度。
命令、文件、权限及受支持的 MCP 审批,均需核验操作身份与所有者决定。
octos acp --profile coding-fullACP initialize → session/new → session/prompt。核验的适配器要求在 Octos 自身配置中声明 MCP 服务,并忽略 session/new 的 mcpServers。
核验能力声明不支持加载会话,也不会阻塞等待 request_permission;启动时的沙箱策略仍是实际控制。
hermes-acp接受会话 MCP 配置,同时需要安装 ACP 与 MCP 扩展;模型选择遵循 Hermes 自身配置。
Hagency 不发送不受支持的 --model 或 --cwd 参数;声明的会话能力不代表任务运行器完全等价。
codex-acp独立适配器包装 Codex,通过 stdio 讲 ACP,接受会话 MCP 配置,并通过 session/update 报告进度。
与 codex app-server 区分。核验的适配器未接收文件系统沙箱参数;Hagency 的 ACP 权限回调限制工具批准。
ACP 是 Hagency 与兼容编程适配器之间的会话协议;MCP 向编程 Agent 提供 Hagency 工具;Agent 再独立连接其配置的模型服务。Octos 基于自身配置注入 MCP,Hermes/Codex ACP 基于会话注入,这是明确的适配器差异。
后端拥有 Agent、房间、范围和线程身份,以及已接纳输入、摘要和调度状态。新工作进程接收有界重建上下文;编程工作需要任务和真实 Matrix 线程根。保留的 tmux 窗格及运行时进程 ID 不能替代这一权威状态。
人与 Agent 可以使用相同的房间权限模型。以下凭据则分别对应不同网络与执行边界。
| 凭据 | 调用方 → 服务 | 范围 |
|---|---|---|
as_token | Appservice → Matrix 服务器 | 为已注册命名空间中的获授权本地身份执行操作,不是 Palpo 管理员令牌。 |
hs_token | Matrix 服务器 → AS 中继 | 认证向已注册中继的事务投递,不是机群机器令牌。 |
Machine token + generation | Hagency → Palpo Web 传输 | 授权单个机群的轮询、ACK 和状态发布;轮换改变 generation,并使旧传输权限失效。 |
Matrix user / device token | Robrix 或 Agent 设备 → homeserver | 标识真实用户与设备会话;房间成员、权限等级和加密密钥仍然适用。 |
Browser session + CSRF | 浏览器 → Palpo 配套应用 | 授权已登录用户的网页操作;管理调用仍需对应服务器权限。 |
Dispatch capability | 编程运行时 / MCP → Hagency | 将任务和工具操作限定在本次调度;运行时执行审批独立于 Matrix 房间角色。 |
Provider credentials | 编程 Agent → 模型入口 | 在所选服务提供方授权模型调用;具体数据目的地由该 Agent 配置决定。 |
本地会话与加密数据库、房间和时间线缓存。
服务器侧 Matrix 账户、房间状态与事件、成员关系,以及按服务器部署配置保存的媒体。
私有 SQLite 状态,保存注册、机群凭据、项目操作、持久传输与审计记录。
资源与接洽状态、房间任务会话绑定、收发件箱与调度账本,以及独立设备加密存储。
分配的代码仓库、工作文件与任务产物;模型上下文在配置预算内重建。
其他 homeserver 上的用户可以参与获授权的联邦房间。其服务器使用 Matrix 服务器间 API 与 Palpo 交换房间事件。这不会暴露 Hagency 本地 API 或共享其文件系统。房间数据、加密可用性及模型服务的数据披露仍取决于实际房间、设备与部署。
与交互图对应的连接说明,无需 JavaScript 即可阅读。箭头标识调用方与接收方,轮询响应则将投递内容返回 Hagency。
HTTPS · Matrix user/device tokenRobrix 向 Palpo 认证、发送消息和媒体,并通过 SDK 同步接收房间更新;它不直接连接 Hagency 后端。
HTTPS · session cookie + CSRF用户以自己的 Matrix 身份使用配套应用;服务端验证身份及各操作所需权限。
POST /_palpo/admin/v1/appservicesWeb 服务以服务器管理员权限安装按机群隔离的注册,再回读核验完整配置。这是 Palpo 管理 API。
PUT …/_matrix/app/v1/transactions/{txnId} · hs_tokenPalpo 向同侧中继推送事务;中继校验 hs_token,保存原始 ID 和内容后确认。这一跳位于服务器侧。
GET /poll · POST /ack · machine token + generationHagency 主动发起 HTTPS 请求,投递内容随轮询响应返回。matrix/work 队列分别使用租约;先写本地 SQLite 再 ACK,ACK 不代表审批。
POST /updates · machine token + generationHagency 从带序号的持久发件箱发布资源快照、心跳和申请观察结果;重试旧观察不会让它变成新状态。
Authenticated local API桥接验证发送者、房间、命名空间和项目绑定;控制平面保留资源方审批、额度、任务归属和执行权限检查。
Console server proxy → Hagency API资源配置与接洽决定调用经过认证的本地后端;浏览器代码不是后端权限来源。
Guarded subprocess / selected transport后端选择符合条件的 Agent 和传输方式,验证调度,并以数据形式传递上下文,而不是可执行 shell 文本。
Provider-specific endpoint + credentialsAgent 运行时独立于 Matrix 传输连接配置的模型服务;该 Agent 支持时也可使用本地入口。
Matrix device token · sync + media + crypto真实设备客户端维护受支持加密消息和私密审批的密钥与会话存储;服务器中继持有消息不等于持有解密密钥。
Matrix Server–Server API · signed requests独立服务器交换获授权的房间事件;接收方执行 Matrix 事件与成员规则,运行时权限仍由 Hagency 本地掌握。
HTTPS · session cookie + CSRF用户以自己的 Matrix 身份使用配套应用;服务端验证身份及各操作所需权限。
POST /_palpo/admin/v1/appservicesWeb 服务以服务器管理员权限安装按机群隔离的注册,再回读核验完整配置。这是 Palpo 管理 API。
PUT …/_matrix/app/v1/transactions/{txnId} · hs_tokenPalpo 向同侧中继推送事务;中继校验 hs_token,保存原始 ID 和内容后确认。这一跳位于服务器侧。
GET /poll · POST /ack · machine token + generationHagency 主动发起 HTTPS 请求,投递内容随轮询响应返回。matrix/work 队列分别使用租约;先写本地 SQLite 再 ACK,ACK 不代表审批。
POST /updates · machine token + generationHagency 从带序号的持久发件箱发布资源快照、心跳和申请观察结果;重试旧观察不会让它变成新状态。
Console server proxy → Hagency API资源配置与接洽决定调用经过认证的本地后端;浏览器代码不是后端权限来源。
Authenticated local API桥接验证发送者、房间、命名空间和项目绑定;控制平面保留资源方审批、额度、任务归属和执行权限检查。
Persistent device/crypto state桥接启动并监管专用 Matrix 设备客户端,并按相同绑定规则接纳其解密消息。
Matrix device token · sync + media + crypto真实设备客户端维护受支持加密消息和私密审批的密钥与会话存储;服务器中继持有消息不等于持有解密密钥。
HTTPS · Matrix user/device tokenRobrix 向 Palpo 认证、发送消息和媒体,并通过 SDK 同步接收房间更新;它不直接连接 Hagency 后端。
PUT …/_matrix/app/v1/transactions/{txnId} · hs_tokenPalpo 向同侧中继推送事务;中继校验 hs_token,保存原始 ID 和内容后确认。这一跳位于服务器侧。
GET /poll · POST /ack · machine token + generationHagency 主动发起 HTTPS 请求,投递内容随轮询响应返回。matrix/work 队列分别使用租约;先写本地 SQLite 再 ACK,ACK 不代表审批。
Authenticated local API桥接验证发送者、房间、命名空间和项目绑定;控制平面保留资源方审批、额度、任务归属和执行权限检查。
Guarded subprocess / selected transport后端选择符合条件的 Agent 和传输方式,验证调度,并以数据形式传递上下文,而不是可执行 shell 文本。
Matrix Client–Server API · as_token + scoped user_id桥接可凭 Appservice 认证,以命名空间内已注册的本地身份发言;受支持的加密路径则使用真实设备会话。
Provider-specific endpoint + credentialsAgent 运行时独立于 Matrix 传输连接配置的模型服务;该 Agent 支持时也可使用本地入口。
Assigned cwd + runtime tool policy代码和任务产物写入分配的工作目录;向房间发布文件是明确授权的操作。
Matrix device token · sync + media + crypto真实设备客户端维护受支持加密消息和私密审批的密钥与会话存储;服务器中继持有消息不等于持有解密密钥。
Verified Matrix owner binding审批请求与决定经过验证的所有者通道;授予 Matrix 房间角色不能绕过执行检查。
SQLite transactions / dispatch ledger会话身份和任务状态在运行器退出后仍然保留;上下文由已接纳输入、摘要和房间线程绑定重建。
claude -p · stream-json为本次调度启动受管理的 Claude 子进程,流式读取活动与输出,再按账本结算或记录不确定失败。
JSON-RPC / stdio执行 initialize、thread/start、turn/start,并把通知与审批响应关联到当前调度。每个工作进程创建新的 App Server 线程。
Agent Client Protocol / stdio使用明确选择的 Octos、Hermes 或 Codex ACP 适配器;session/update 报告进度,request_permission 行为因适配器而异。
tmux runtime interface保留的终端 Agent 使用窗格输入与捕获;该方式不会被视为无界面运行器或 ACP 会话的隐式替代。
MCP / stdioClaude 项目配置指向 mcp-server.js;调度凭据随进程启动传入,不写入公开配置。
MCP / stdioApp Server 启动时注入 Hagency MCP 配置和允许的环境变量名称,并为特权工具调用核验操作身份。
session/new mcpServers or agent-side configHermes 与 Codex ACP 接受会话 MCP 配置;核验的 Octos 适配器则需要自身配置和 coding-full 配置档。
Authenticated backend API + dispatch capabilityMCP 请求转换为经过检查的任务、会话、消息和文件操作;权限取决于调度与操作,而非模型写出的文字。
Native JSON-RPC approval request命令、文件修改或其他受支持的原生请求等待已绑定的所有者决定。审批卡片负责展示,后端验证答案。
核验于 2026 年 9 月的本地开发源码。仓库链接指向上游项目,不将这些本地版本与集成等同于最新发布版或当前部署二进制。
核验本地开发版本 05dc46b:fleet-outbound-client/config/store、Matrix 桥接、router/src/runner.ts 与框架清单。
核验本地版本 8a0908cd:web-admin 服务、出站传输、中继路由与动态 Appservice 管理 API。
核验本地版本 d5523276:客户端构建、MatrixRequest 工作线程、SyncService、消息发送与持久加密。
标准注册字段、命名空间范围、事务投递与令牌方向。
客户端认证、房间事件、成员关系、媒体与加密相关 API。
独立 homeserver 之间的联邦通信。
机群 /api/fleet/v2 传输、Palpo 管理注册入口与配套应用属于项目扩展;标准 Matrix 提供客户端服务器通信、Appservice、房间权限和联邦。
从一个项目开始,在团队需要时连接整个生态。