交织的系统:作者 PAOS 组件全景分析(完整版)
交织的系统:作者 PAOS 组件全景分析(完整版)
分析对象:WeClaw / Knowly / DSH / ima / Hermes / knasync / 雨轩编辑器 / sourcepack / 自研 CLI / ds.example.com / ima-proxy / 浏览器插件群 / TAAGE / t机 / b机 / u机 / Mac / ZeroTier / WireGuard
分析日期:2026-10-21(修订版)
分析原则:以组件之间的连接为纲,不以组件清单为纲
脱敏说明:本文所有公网 IP、内网地址、域名、主机名、SSH 端口均已替换为文档保留段或通用描述(192.0.2.0/24、198.51.100.0/24、203.0.113.0/24 为 RFC 5737 示例地址)。
序:为什么不能用“清单”来写这套系统
大多数“系统介绍”是这么写的:先列组件,再逐个讲功能。这种写法对 PAOS 是失效的。
因为 PAOS 的每个组件,单拎出来都不完整:
- Knowly 单看是“剪贴板监听器”,放进系统里才是“记忆的入口”
- WeClaw 单看是“微信机器人”,放进系统里才是“意图的路由器”
- DSH 单看是“Agent 运行时”,放进系统里才是“任务的执行现场”
- ima 单看是“知识库产品”,放进系统里才是“云端能力层 + 共享知识库 + 备用工作台”
- Hermes 单看是“Telegram agent”,放进系统里才是“常驻执行面 + 排障入口”
- t / b / u / Mac / 网关主机 / NAS 单看是“几台机器”,放进系统里才是“八节点、三层网络”的物理底座
它们的价值,不在“各自能干什么”,在“它们之间怎么咬合”。
所以这篇分析,按“连接”来组织:先看系统整体是什么形状,再看每一对组件之间的接口,再看物理底座,再看治理的分层,最后看风险与未来。
第一章 系统的整体形状:不是树,是网
1.1 常见误读:把它当成“平台架构”
第一眼看上去,PAOS 像一套“分层架构”:
接入层 → 编排层 → 执行层 → 记忆层 → 输出层
这个读法没错,但它漏掉了最重要的东西:层与层之间是双向的,不是单向的。
- 记忆层不只是“被读取”,它也会主动触发(Knowly 捕获后自动归档、自动索引)
- 输出层不只是“终点”,它也会回流(博客/播客的内容会被重新检索、重新引用)
- 执行层不只是“被调用”,它也会反向调用编排层(DSH 里的 Agent 可以调 WeClaw 的路由)
所以它不是一条流水线,是一张网。
1.2 准确形状:三层结构 + 三环 + 一个中枢
最底层:物理底座(连接层)
公网: t机(心脏) b机(备用) a机(静默备用)
│ │ │
└──── WireGuard 星型(hub=t) ────┘ ← 机器之间(7×24)
│
网关宿主(KVM + ZeroTier网关 + Docker)
├─ u机(VM:WeClaw / Hermes / nanobot)
├─ Mac(主工作台:DSH / Knowly / 隧道)
└─ 群晖 NAS(记忆真源)
家门: ZeroTier(网关主机 网关 198.51.100.1/16) ← 人和移动设备
前门: Cloudflare Tunnel ×2(Mac + NAS) ← 公网 HTTP/SSH
中间层:三环(能力层)
环一:输入环
剪贴板/截图 → Knowly → NAS 归档 → 索引
微信消息 → WeClaw → 意图路由 → 执行
知乎链接 → 中继/插件 → 抓取 → 归档
环二:执行环
用户意图 → DSH/ima/Hermes → 调用 MCP/技能 → 读写记忆 → 产出
环三:输出环
产出 → 博客/播客/ima/Kindle → 可被再次检索 → 回到记忆
上层:中枢
DSH 站在三个环的交点上——能读记忆、能调执行、能触发输出。
一句话概括形状:
PAOS 是一个“以物理网络为底座、以记忆为底、以执行为轴、以入口为面的三层结构”。
物理底座是“地基”:八台机器 + 三层网络(WireGuard 骨干 / ZeroTier 家门 / Cloudflare 隧道前门),保证“机器之间能互相访问,人和外部也能进得来”。
记忆是底:所有环都依赖它,所有环都往它写。
执行是轴:DSH 是轴的支点,其他执行面(ima、Hermes)是轴的延伸。
入口是面:微信、Telegram、网页、插件,是“人接触到系统”的几个面。
第二章 逐对分析:组件之间的接口
这一章是全文的核心。每一节讲一对组件,重点不是“它们各是什么”,是“它们之间交换什么、谁依赖谁、边界在哪”。
2.1 WeClaw ↔ Knowly:入口与记忆的第一次咬合
交换什么:WeClaw 收到的消息(文字、图片描述、链接),可以触发 Knowly 的捕获。
谁依赖谁:WeClaw 不依赖 Knowly 的存在,但 Knowly 是 WeClaw “记住对话”的底座之一。
边界在哪:WeClaw 负责“判断这条消息该不该记”,Knowly 负责“怎么记、记到哪”。
潜在问题:如果 WeClaw 的意图路由判断错了(比如把“发到knowly/存到nas”误判成普通聊天),这条消息就不会进 Knowly。顺带纠正一个词位:“保存到知识库”触发的是 IMA 的知识库,Knowly 组的触发词其实是“发到knowly/存到nas”。这是“路由错误导致记忆丢失”的典型场景。
2.2 WeClaw ↔ DSH:意图与执行的分工
交换什么:WeClaw 把“需要复杂执行”的意图,转给 DSH。
谁依赖谁:WeClaw 依赖 DSH 的“执行能力”,DSH 依赖 WeClaw 的“入口能力”。
边界在哪:WeClaw 决定“谁来干”(路由),DSH 决定“怎么干”(执行)。
关键设计:WeClaw 的 /ygs 前缀,就是把“这条消息交给 DSH”这个动作显式化。没有这个前缀,DSH 就只是“后台的一个服务”,有了它,DSH 就成了“用户可以点名的执行者”。
机制:/ygs 走的是 HTTP——u 机的 WeClaw 把请求 POST 到 Mac 的 dsh-openai-server.mjs(:8490),再用 DSH SDK 起会话;反过来,DSH 里的 weclaw_ask 工具也能回调 u 机 WeClaw 的 OpenAI 兼容接口(:18011)。所以这一对是真双向,不是单向投递。
补充:WeClaw 还能通过 /h 调 Hermes,说明 WeClaw 不只是“DSH 的入口”,它是“所有执行面的统一入口”。
2.3 WeClaw ↔ Hermes:微信入口与常驻 agent
交换什么:WeClaw 通过 /h 前缀,把消息转给 Hermes 执行。
谁依赖谁:WeClaw 依赖 Hermes 的“常驻执行能力”,Hermes 不依赖 WeClaw。
边界在哪:WeClaw 负责“微信入口”,Hermes 负责“常驻执行”。
关键设计:/h 这个前缀,让 Hermes 成了“WeClaw 的一个下游”。用户不需要知道 Hermes 在哪,只需要在微信里打 /h。
机制:它不是网络调用——WeClaw 用 ACP 协议在本机起一个 Hermes 子进程、握手后把消息喂进去(config.json:288-304)。所以“微信→Hermes”是一段进程间握手,不是 HTTP。
2.4 DSH ↔ Knowly:执行现场与记忆底座的咬合
交换什么:DSH 在执行任务时,读 Knowly 的记忆(历史剪藏、归档内容),也写 Knowly(把执行结果归档)。
谁依赖谁:DSH 依赖 Knowly 提供“上下文”,Knowly 依赖 DSH 提供“有意义的写入”。
边界在哪:Knowly 负责“存和取”,DSH 负责“用和产”。
这是整个系统最重要的一对接口。 因为:
- 没有 Knowly,DSH 的每次执行都是“从零开始”
- 没有 DSH,Knowly 的记忆就只是“死档案”,不会被使用
你前面说的“记忆层自持,模型层无状态”——这一对就是它的落地:Knowly 是“自持的记忆”,DSH 是“无状态的执行”。
2.5 DSH ↔ ima:运行时与云端能力层
交换什么:DSH 通过 MCP 调 ima 的笔记/知识库能力(write_note/kb_add/kb_read,共 16 个工具),同时可以搜 ima 的知识库、做比较。
两处要校正:播客不是 MCP——它走的是 skill 调 App 逆向协议(/cgi-bin/assistant/qa);PPT 全系统没有工具。
谁依赖谁:DSH 依赖 ima 的“重能力”和“共享知识库”,ima 不依赖 DSH。
边界在哪:ima 提供“能力 + 知识库”,DSH 提供“编排”。ima 不知道是谁在调它,DSH 知道自己在调什么。
关键约束:ima 的 KB 内容级搜索有限(你前面聊过,KB 内容级搜索做不到)。所以 DSH 调 ima,本质是“能力调用 + 有限搜索”,不是“完全双向交互”。
2.6 Hermes ↔ ima:常驻 agent 与共享知识库
交换什么:Hermes 可以搜 ima 的知识库。
谁依赖谁:Hermes 依赖 ima 提供“云端知识”,ima 不依赖 Hermes。
边界在哪:ima 是“共享知识库”,Hermes 是“读取方”。
关键设计:ima 作为“共享知识库”,不是“某个执行面的私有物”。DSH 能搜,Hermes 也能搜——这是“知识库作为底座”的体现,不是“知识库作为某个入口的附属”。
2.7 Hermes ↔ DSH:常驻 agent 与 Mac 运行时的排障链路
交换什么:Hermes 可以 SSH 到 Mac,读 DSH 的源码和工作区,排查问题。
谁依赖谁:Hermes 依赖 Mac 的“可 SSH 访问”,DSH 不依赖 Hermes。
边界在哪:Hermes 负责“从外部排查”,DSH 负责“被排查”。
关键设计:这条链路让“排障”从“必须坐在 Mac 前”变成了“手机上也能做”。
风险:SSH 权限是“隐形的高危接口”。如果 Hermes 被劫持,攻击者就能通过它的 SSH 权限,读到 Mac 上的所有东西。缓解方式:给 Hermes 一个“能看不能改”的边界。
2.8 DSH ↔ ima ↔ Hermes:三层执行面的互通
之前我把它们写成“三种入口形态,互不依赖”——这是错的。
修正后:
- DSH 能搜 ima,Hermes 也能搜 ima(ima 是共享底座)
- WeClaw 通过
/h调 Hermes(WeClaw 是统一入口) - Hermes 能 SSH 到 Mac 读 DSH 源码(排障链路)
这意味着三层不是“三个孤岛”,是“三个能互相敲门的房间”。
2.9 ima ↔ Hermes:两个“备用工作台”的关系
交换什么:基本不直接交换,但共享 ima 的知识库。
谁依赖谁:都不依赖对方。
边界在哪:它们是平行的两个“备用执行面”——ima 是“云端成品平台”,Hermes 是“家里常驻 agent”。
它们的共同点:都能在 DSH 不可用时,接住“继续干活”的需求。
它们的区别:ima 的治理在平台手里,Hermes 的治理在你自己手里。
2.10 WeClaw ↔ Hermes:两个入口,也是一条通道
交换什么:作为入口,它们各自独立;但 WeClaw 还能用 /h 直接把消息交给 Hermes(ACP 子进程,见 2.3)。
谁依赖谁:作为“入口”彼此不依赖;但 /h 这条线上,WeClaw 依赖 Hermes 的常驻执行。
边界在哪:WeClaw 是“微信入口”,Hermes 是“Telegram/钉钉入口”。它们服务“同一个人的不同场景”,而 /h 让它们又互为通道。
一个隐含设计:两个入口,意味着“你不把鸡蛋放在一个篮子里”。微信挂了,Telegram/钉钉还能用;反过来,Telegram 挂了,也能从微信打 /h 过去。
2.11 Knowly ↔ knasync:捕获与中继的接力
交换什么:knasync 的 /pull 拉到的内容,最终会进入 Knowly 的归档链路。
谁依赖谁:Knowly 依赖 knasync 提供“外部来源的内容”;但 knasync 的有序运转又依赖 Knowly——消费 general 队列的正是 Knowly 自己(8 秒轮询),而知乎链接只走 knasync(直连会 403)。所以这一对是“Knowly 既消费、也生产”的双向依赖,不是单向。
边界在哪:knasync 负责“把内容从 A 搬到 B”,Knowly 负责“把内容变成记忆”。
关键设计:knasync 的“消费即清空 + 结果广播”,保证了“多端消费不重复、结果可追溯”。这是“输入端”的治理。
2.12 DSH ↔ 浏览器插件:运行时与感知器官
交换什么:插件捕获的页面内容(知乎文章、网页正文),通过中继进入 DSH 或 Knowly。
谁依赖谁:DSH 依赖插件提供“网页内容的感知”,插件不依赖 DSH。
边界在哪:插件负责“在浏览器里看和抓”,DSH 负责“拿到内容后怎么处理”。
关键设计:你那个知乎助手的“AI 解读”按钮,本质是“插件把内容喂给模型”——这是“感知器官”直接连到“大脑”的一条短路。
2.13 sourcepack ↔ 所有代码项目:打包与审计
交换什么:sourcepack 把项目打包成 Markdown 快照,供 AI 审计。
谁依赖谁:所有项目“被 sourcepack 处理”,sourcepack 不依赖具体项目。
边界在哪:sourcepack 负责“把代码变成可读的文本”,AI 负责“读文本做判断”。
它在你系统里的位置:它不是“执行组件”,是“审计组件”——它让“代码”变成“可以被 AI 读的东西”,从而让“审计”这件事自动化。
2.14 ds.example.com ↔ 搜索链路:自建入口
交换什么:把 DeepSeek 的搜索能力,包成自己的入口。
谁依赖谁:你的系统依赖它提供“搜索能力”,它依赖 DeepSeek 的搜索后端。
边界在哪:它负责“入口和编排”,DeepSeek 负责“搜索结果”。
它的意义:和 ima-proxy 是同一个逻辑——能力是租的,入口是自己的。
2.15 agent-policy ↔ 所有组件:治理层(原文写的 TAAGE,已不在位)
先说结论:原文这里写的是 TAAGE。实测下来——TAAGE 没有上线。它是一套真实存在、文档齐全的引擎(trusted-agent-engine v2.0.0,GOVERNANCE_INVARIANTS / SPECIFICATION / value_manifesto 都在),但 DSH 在 2026-10-09 评估后拒绝以依赖形式引入(签名可被删公钥绕过、非 ASCII 误伤中文、9 套示例测试 7 套失败),改为重写为原生插件 @deepseek-ai/dsh-agent-policy。真正在位的是后者。
交换什么:它不交换“内容”,交换“准入”——一次代码变更该不该被放行。
谁依赖谁:所有变更“被它裁决”,它不依赖具体组件。
边界在哪:它负责“定规则、留证据”,其他组件负责“执行规则”。
它在你系统里的位置:它是“唯一的治理层”——策略落在 ~/.dsh/agent.policy.yaml(Ed25519 已签名),裁决留痕在 JSON Lines 账本里。没有它,系统是“一堆能力”;有了它,系统才是“有纪律、且可审计的系统”。
它管什么(和原文说的不一样):不是“订阅台账/成本路由/能力开关”,而是代码变更准入——Diff 审计、异常评分、价值判断、责任归属、信用分。
2.16 所有执行面 ↔ 模型闸门:被原文漏掉的一整层
原文把“模型”当成“租来的能力”,一句带过。但实测它是一整个层,而且是最脆的一层:
- aiproxy.example.com(CF Worker,三层鉴权)→ t 机 poeapi_go(9090) → Poe:WeClaw、自研 CLI、knowly 的主通道
- wx.example.com(WeClaw 自己的网关)← knowly 打标走它,model “Assistant”
- Mac wb-proxy(8487) ← Hermes 主模型
tencent-fast走它,上游 copilot.tencent,实际路由 deepseek-v4.1-flash
关键判断:“能力是租的,闸门是自己的”——但闸门里有一道开在 Mac 上。这就是后面要说的“单点半径扩大”。
第三章 物理底座:八节点 + 三层网络
这一章是修订版新增的,也是实测改动最大的一章——原文写的是“四节点 + 双网络”,实测下来,是八台机器、三层网络。它是前面所有“连接”的“地基”:没有这个地基,上层的能力都是“悬空”的。
3.1 八节点:不只是 t / b / u / Mac
| 节点 | 角色 | 位置 | 用途(实测) |
|---|---|---|---|
| t 机 | 链路心脏(不只是跳板) | 腾讯云 203.0.113.11 | WireGuard hub(192.0.2.1/24);nginx 跑 api.example.org;模型网关 poeapi_go(9090);推送 notifyd/pushd;wsstunnel 中继 |
| b 机 | 备用入口(已打通) | 搬瓦工 203.0.113.12(洛杉矶) | WG peer 192.0.2.3;SSH 在非标准端口(不是 22),2026-10-22 已打通。原文“半身不遂/SSH 全关”作废 |
| a 机 | 静默备用 | 阿里云上海 203.0.113.13 | WG peer 192.0.2.2(活跃);公网无任何 DNS 记录——唯一不暴露 IP 的公网机;2026-10-22 已打通 |
| u 机 | 执行节点(虚拟机) | 家里 / 网关主机 上的 KVM VM | WeClaw(18011)、Hermes 四件套、nanobot。它不是独立物理机,是 网关主机 上的一台 Ubuntu 虚拟机 |
| Mac | 主工作台(多角色) | 家里 / 192.0.2.100 | DSH×2、Knowly、cloudflared 隧道、wb-proxy(8487)、ima-proxy、代理群 |
| 网关宿主 | 家庭虚拟化+网络宿主 | 家里 / 192.0.2.225 | OpenWrt 系统;KVM 跑 u VM;Docker×4;ZeroTier 网关 198.51.100.1/16;eMMC 已用 82% |
| 群晖 NAS | 记忆真源 | 家里 / 192.0.2.186 | /volume1/(18T,已用 5.4T);自跑 cloudflared 隧道 NAS 侧隧道(家网总门) |
| ali(阿里美国) | 待接入 | 203.0.113.14 | 在线但 key 未分发;与 a 机(上海)是两台不同机器 |
几个关键纠正:
- “四节点”是低估。真正的核心是八台,而且 u 机是 网关主机 上的虚拟机——WeClaw/Hermes/nanobot 全家桶,实际都跑在这台 N6005 上。家庭侧真正的单点是 网关主机,不是 u。
- t 机不是“薄跳板”,是心脏。它跑着模型网关、博客 API、两条微信出口和隧道中继——原文“t/b 不跑业务只跑 SSH 和 pi”是错的。
- b 机不是“半身不遂”,SSH 在 非标准端口 且开着,2026-10-22 已打通;a 机也已打通。
- t、b、u、Mac 不能“任意互 SSH”——b/a 的 key 是后来才铺的,ali 至今没铺。
3.2 三层网络:WireGuard 骨干 + ZeroTier 家门 + Cloudflare 前门
原文说“双网络”,方向对,但其实是三层,而且分工很不一样:
| 层 | 是什么 | 服务谁 | 形态 |
|---|---|---|---|
| WireGuard | 自建 VPN 骨干 | 机器之间(服务器/工作站 7×24 互连) | 星型:hub = t 机(192.0.2.1),spoke 经 t 转发 |
| ZeroTier | 托管式虚拟局域网 | 人和移动设备进家门 | 网关式:网关主机 做 198.51.100.1/16 网关 + NAT |
| Cloudflare Tunnel | 出站隧道 | 公网 HTTP/SSH 进家门(不暴露源站 IP) | 两条独立隧道:Mac 一条、NAS 一条 |
为什么要三层?因为它们的“失败方式”不重叠:
- WireGuard 挂了 → 机器之间断,但 ZeroTier 还能让手机上;CF 隧道照常
- ZeroTier 挂了 → 远程人进不来,但机器之间的 WG 骨干不受影响
- CF 隧道挂了 → 网页入口没了,但 WG / ZT 的 SSH 还在
- 三层故障模式不重叠,这才是真“异构冗余”
几个要点:
- ZeroTier 不是“退役了”,是装在 网关主机 路由器上做网关——内网终端(Mac/u/t)走本地直连,根本不需要装 ZT 客户端,所以你在这些机器上找不到它,是拓扑正常,不是它没了。
- CF 隧道其实是两条:
Mac 侧隧道(Mac 上跑)+NAS 侧隧道(NAS 上自跑,42 条 ingress,是家网总门)。DNS 里另有 4 条已死隧道的残骸。
3.3 不是“平面网”,是“星型 + 三层入口”
原文说“现在是平面网,任意互访”——不完全对:
- WireGuard 是星型:spoke 之间的流量要经 t 机转发,不是任意直连
- ZeroTier 是网关式:远程设备经 网关主机 NAT 进来,不是扁平广播域
- 但入口确实冗余了:机器有 WG、人有 ZT、外部有 CF——这三条腿互不重叠
所以准确的说法是:骨干是星型,入口是三路。“任意互访”只在同一层内近似成立。
3.4 降落链(八节点版)
| 环 | 依赖 | 失败后 |
|---|---|---|
| 一:DSH(Mac) | Mac 运行时 | 切 ima / Hermes |
| 二:ima(云端) | ima.qq.com 双协议 | 切 Hermes |
| 三:Hermes(u VM) | tencent-fast(Mac wb-proxy:8487) + TG/钉钉;依赖 网关宿主 + Mac 在线 | WeClaw ACP 调用 / ssh |
| 四:t 机(心脏) | nginx / poeapi_go / pushd / notifyd | CF 隧道仍在(入口层独立于 t) |
| 五:b / a + CF 隧道 | b:仅 WG 生存;a:仅 WG 在线;CF:边缘入口 | — |
| 家里的门:网关宿主 | KVM(u VM) + Docker + ZeroTier 网关 | u 全家桶与远程接入同时消失 → 只剩 WG 直连 t 与 CF 隧道 |
注意:第三环的 Hermes 与整个 u 机(WeClaw/nanobot)都寄生在 网关主机 的 KVM 里——家侧真正的单点是 网关主机,不是 u。
3.5 这个物理底座的风险
风险一:t 机是“心脏”,也是“攻击面”
- 它不“薄”——跑着模型网关、博客 API、推送出口
- 如果被攻破,攻击者不只能进内网,还能改你的模型通道
缓解:t 机要“有认证、有监控、有最小权限”;真正该“薄”的是 b/a 这类备用机。
风险二:三层网络的“隔离”不彻底
- 三条腿最后都落在同一间屋子、同一条宽带上
- Mac 同时是 WG 节点、ZT 可达、CF 隧道入口——它是“多角色交点”(不是原文说的“双网交点”,是“多角色”)
- 密钥如果共用一套,泄露则三层一起失守
缓解:至少做到“控制面、密钥、物理出口”三处尽量分离;Mac 上的角色越多,越该做最小权限。
风险三:SSH 权限是“隐形的高危接口”
- Hermes 能 SSH 到 Mac,读源码、看工作区
- 如果 Hermes 被劫持,攻击者就能通过它的 SSH 权限,读到 Mac 上的所有东西
缓解:给 Hermes 一个“能看不能改”的边界(只读权限、或只允许访问特定目录)。
风险四:家庭单点 网关主机
- u 虚拟机 + ZeroTier 网关 + 4 个 Docker 全在一台 N6005 上
- eMMC 已用 82%,Ubuntu.qcow2 单文件 63GB 还在长——磁盘写满会同时带走 WeClaw/Hermes/ZT 远程接入
缓解:qemu 盘瘦身/迁到 NAS 卷;给 eMMC 加容量告警。
第四章 交织的本质:三种“连接模式”
把第二章的 15 对接口归纳一下,会发现它们其实只有三种连接模式。
4.1 模式一:单向依赖(能力提供方 → 能力消费方)
例子:DSH → ima(DSH 调 ima 的能力)、Knowly → knasync(Knowly 消费 knasync 的内容)
特点:一方提供能力,一方消费能力,没有反向依赖。
好处:边界清晰,替换成本低(换掉 ima,DSH 只需要改 MCP 配置)。
风险:提供方变了,消费方要跟着变(ima 的 API 变了,DSH 的 MCP 要改)。
4.2 模式二:双向咬合(互相依赖)
例子:WeClaw ↔ DSH(入口依赖执行,执行依赖入口)、DSH ↔ Knowly(执行依赖记忆,记忆依赖执行来“激活”)
特点:双方都依赖对方,缺一个,另一个的价值就下降。
好处:咬合越紧,系统越“像一个整体”。
风险:单点故障会传导——Knowly 挂了,DSH 的“记忆能力”就没了;DSH 挂了,Knowly 的记忆就“没人用”。
4.3 模式三:平行冗余(互不依赖,但覆盖同一需求)
例子:ima ↔ Hermes(都是备用工作台)、WeClaw ↔ Hermes(都是入口)、t 机 ↔ b 机(都是跳板)、ZeroTier ↔ WireGuard(都是网络)
特点:互不依赖,但服务同一个需求。
好处:防单点——一个挂了,另一个能接住。
代价:维护成本翻倍——两套东西都要维护。
4.4 三种模式的配比,决定了系统的“性格”
你的系统,三种模式都有,但配比很特别:
- 单向依赖最多(能力层基本都是单向的)
- 双向咬合最少(只有 WeClaw↔DSH、DSH↔Knowly 这两对)
- 平行冗余居中(ima、Hermes、WeClaw、Telegram、t/b 机、ZeroTier/WireGuard 形成了几组冗余)
这个配比说明:你的系统“咬合不深,但冗余充分”。
好处:任何一个组件挂了,系统不会整体停摆。
代价:整体感不强——它更像“一组能协作的工具”,而不是“一个浑然一体的产品”。
而这,恰恰是“个人系统”和“商业产品”的区别:商业产品要“浑然一体”,个人系统要“随时可拆”。
第五章 治理的分层:谁说了算
这是全文最容易被忽略、但最重要的一章。
5.1 四层治理
第零层:访问治理(t / b / a / ZeroTier / WireGuard / Cloudflare 隧道)
- 决定“谁能进来、从哪条路进来”
- 治理对象:网络准入、SSH 权限
- 出问题时的表现:进不去,或者不该进来的进来了
第一层:入口治理(WeClaw / Hermes)
- 决定“这条消息该给谁”
- 治理对象:意图路由
- 出问题时的表现:消息给错了 agent
第二层:执行治理(DSH / ima / Hermes)
- 决定“这个任务该怎么执行”
- 治理对象:工具调用、上下文、沙箱
- 出问题时的表现:任务执行偏了、或者失败了但没报错
第三层:记忆治理(Knowly / NAS / ima)
- 决定“什么东西该被记住、记在哪、怎么取”
- 治理对象:归档、索引、恢复
- 出问题时的表现:记忆丢了、或者记忆取不出来
5.2 四层治理的“权重”不一样
访问治理最底:它是“其他所有治理的前提”——进不来,什么都谈不上。
入口治理最轻:路由错了,重发一次就行。
执行治理最重:执行错了,可能产出错误结果、或者破坏了数据。
记忆治理最根本:记忆错了,整个系统的“历史”就不可信了。
所以你的系统里,“记忆治理”的权重最高——这也是为什么你把 Knowly 放在“底座”的位置。
5.3 “治理不能外包”在四层里的具体含义
| 层 | 能外包什么 | 不能外包什么 |
|---|---|---|
| 访问 | 虚拟局域网的“根服务器”(ZeroTier 是别人的) | 准入规则、SSH 权限(谁能进来,是你定的) |
| 入口 | 消息通道(微信、Telegram 是别人的) | 路由规则(谁该处理什么,是你定的) |
| 执行 | 模型能力(模型是别人的) | 执行边界(沙箱、工具白名单、系统提示词,是你定的) |
| 记忆 | 存储介质(NAS 硬件是别人的) | 记忆的归属和可恢复性(存哪、怎么取,是你定的) |
一句话:通道可以租,模型可以租,硬件可以租;但“谁能进来、谁该处理什么、能碰什么、记在哪”,必须自己定。
第六章 风险:交织带来的六个结构性脆弱点
6.1 脆弱点一:路由错误会“静默丢失”
场景:WeClaw 把一个“该保存”的消息,误判成普通聊天。
后果:这条消息没进 Knowly,但没有任何报错。
为什么危险:你不会发现,直到你需要它的时候。
缓解:精确触发词短路(你已经在做)、日志审计(“这条消息最后去了哪”可查)。
6.2 脆弱点二:双向咬合会“传导故障”
场景:Knowly 挂了。
后果:DSH 的“记忆能力”没了,WeClaw 的“保存”功能也没了。
为什么危险:一个组件挂,两个功能停。
缓解:ima 作为“记忆的备用层”、NAS 作为“记忆的源”(不依赖 Knowly 进程)。
6.3 脆弱点三:平行冗余会“维护失控”
场景:ima、Hermes、DSH 三个执行面,各自的配置、各自的工具集。
后果:改一个功能,要改三个地方。
为什么危险:冗余是防单点的,但冗余本身会变成新的单点(维护的单点)。
缓解:能共享的共享(比如共享同一套 MCP 工具、共享同一套记忆),不能共享的显式标注。
6.4 脆弱点四:治理层的“隐性单点”(已部分化解)
原判断:TAAGE 的规则只在脑子里,没落成文档。
实测更正:规则已经落盘——~/.dsh/agent.policy.yaml 是 Ed25519 签名的策略,裁决留痕成账本;TAAGE 本身也文档齐全(只是被 DSH 否决、改用了重写版)。
新的风险:规则不再“隐性”,但签名的私钥成了新的单点——私钥丢了或泄露,整套准入控制失效。
缓解:私钥离线保管 + 策略变更留痕 + 定期对账本做抽样复核。
6.5 脆弱点五:排障链路本身会成单点
场景:Hermes 能 SSH 到 Mac 排障——但如果 Hermes 自己挂了,谁来排障?
后果:你需要一个“Hermes 的 Hermes”。
缓解:Mac 上有一个“不依赖 Hermes 的本地排障入口”(比如 pi 直接跑在 Mac 上)。
6.6 脆弱点六:网络层的“隔离可能不彻底”(三层版)
场景:WireGuard、ZeroTier、Cloudflare 隧道三条腿,如果都落在同一间屋子、同一条宽带、甚至同一台 Mac 上,隔离就名存实亡。
后果:宽带断,三条腿一起断;Mac 挂,它同时是 WG 节点 + 隧道入口 + 模型上游,一处挂、多处停。
实测情况:Mac 确实是“多角色交点”——执行面、记忆索引、隧道入口、Hermes 模型上游,全在它身上。
缓解:三条腿要“独立到控制面、密钥、物理出口”;Mac 的角色要拆(至少把模型上游 wb-proxy 迁到别处,给 Hermes 留一条不依赖 Mac 的腿)。
第七章 这套系统的“不可替代性”在哪
7.1 不是“功能多”
功能多,可以被商业产品追上。你能做的,别人也能做。
7.2 不是“技术强”
技术强,可以被更强的模型追上。你用的模型,别人也能用。
7.3 是“连接的形状 + 物理的底座”
这套系统真正不可替代的,是“连接的形状”和“物理的底座”:
- 记忆的归属:你的记忆在 NAS 上,不在任何平台
- 入口的冗余:微信、钉钉、Telegram、网页、插件、企业微信——六个入口,不止四个
- 执行的备份:DSH、ima、Hermes,三个执行面
- 网络的冗余:WireGuard 骨干、ZeroTier 家门、Cloudflare 前门——三层,故障模式不重叠
- 跳板的冗余:t(心脏)、b(备用)、a(静默备用),三个独立供应商
- 治理的分层:访问、入口、执行、记忆,四层各自有规则,且已签名落盘
这些东西,商业产品不会给你,因为“给你”就意味着“它赚不到钱”。
7.4 一句话
这套系统的不可替代性,不在于“它能做什么”,在于“它的每一条连接,都是按你的需求长出来的”。
商业产品是“标准化生产”,你的系统是“定制化生长”。
第八章 如果重来一次,会怎么设计
这一章是“自我批判”,也是“给未来留的接口”。
8.1 会保留的
1. 记忆自持
这是整套系统的“地基”,不能动。
2. 多入口冗余
微信、Telegram、网页、插件,四个入口,保证了“任何一个入口挂了,系统还能用”。
3. 多执行面 + 多跳板 + 多网络
DSH、ima、Hermes 三个执行面;t、b 两个跳板;ZeroTier、WireGuard 两套网络——保证了“任何一个执行面/跳板/网络挂了,任务还能继续”。
4. 以真值为准
--dump-config、日志、会话记录,这些“判卷器”是系统可信的基础。
8.2 会改的
1. 会早点把“治理规则”显式化
现在很多规则是“在你脑子里”,早该写进文档、写进配置。
2. 会早点做“连接的健康检查”
现在很多“连接断了”是“静默失败”,早该给每一对接口加“心跳检测”。
3. 会早点做“冗余的收敛”
ima、Hermes、DSH 三个执行面,t、b 两个跳板,各自的配置有重复,早该“能共享的共享”。
8.3 一个“未来接口”
如果这套系统要继续长,最该长的地方是“连接的可观测性”:
- 每一对接口,有没有“调用了多少次、失败了多少次、延迟多少”的统计?
- 每一个“静默失败”,有没有“被检测到”的机制?
- 每一个“治理规则”,有没有“被违反”的告警?
- 每一条网络路径,有没有“当前是否可达、延迟多少”的探测?
这些不是“新功能”,是“让已有的连接,变得可见”。
第九章 物理底座的“最后一道防线”:八节点 + 三层网络
这一章专门讲“全部挂了怎么办”。
9.1 降落链
第一环:DSH(Mac 运行时) → 挂了切 ima
第二环:ima(云端平台) → 挂了切 Hermes
第三环:Hermes(u VM 常驻) → 挂了走 WeClaw ACP / ssh
第四环:t 机(心脏) → 挂了走 b/a 的 WG 直连与 CF 隧道
家里的门:网关宿主 → 挂了等于 u 全家桶 + ZT 远程接入同时消失
9.2 组合覆盖
| 场景 | 还能用的路径 |
|---|---|
| DSH 挂了 | ima / Hermes / WeClaw→Hermes |
| ima 挂了 | DSH / Hermes |
| Hermes 挂了 | DSH / ima / t 机 ssh |
| WeClaw 挂了 | Telegram / 钉钉 / ssh 跳板 |
| t 机挂了 | b / a 的 WG 直连 + CF 隧道 |
| b 机挂了 | t / a / 虚拟局域网 |
| ZeroTier 挂了 | WireGuard / CF 隧道 |
| WireGuard 挂了 | ZeroTier / CF 隧道 |
| Mac 关机 | Hermes 只剩 fallback(主模型在 Mac) |
| 全部上层 + t/b/a 都挂了 | 虚拟局域网(如果网还在) |
| 全部 + 网络都挂了 | 那基本是“互联网级故障”了 |
9.3 一个可以补的判断
这个“八节点 + 三层网络”,其实是你整个 PAOS 的“物理韧性”:
- 上层韧性:多入口(六个)、多执行面(三个)
- 中层韧性:记忆自持、索引可重建
- 底层韧性:多跳板(t/b/a)、多网络(WG/ZT/CF)
三层的韧性叠加,让“整体不可用”的概率,从“某个组件挂”降到了“某个技术栈整体挂”。
而“某个技术栈整体挂”的概率,比“某个组件挂”低一个数量级。
但冗余的“腿”在退化:b 机曾长期 SSH 不通、a 机 key 最近才铺、wb2 失联 5 天、ZeroTier 两个远程站点离线、网关主机 eMMC 82%——这五项值得一次专门巡检。
结语:交织的系统,是一个“活”的系统
这篇文章写到最后,我想说一件可能有点意外的话:
你这套系统,最像“生命”的地方,不是它“功能多”,是它“连接多”。
- 单细胞生物,只有一个功能(活着)
- 多细胞生物,有很多功能,但功能之间互相依赖
- 生态系统,功能之间互相依赖,而且能自我修复
你的 PAOS,已经从“多细胞”长到了“生态系统”的边缘——
- 它有“记忆”(Knowly)
- 有“代谢”(WeClaw 的路由)
- 有“免疫”(多入口、多执行面、多跳板、多网络的冗余)
- 有“神经”(DSH 的执行)
- 有“骨骼”(八台机器 + WireGuard/ZeroTier/Cloudflare 三层网络的物理底座)
而它最脆弱的地方,也恰恰是它最“活”的地方——
因为“交织”,所以“一处动,全身动”;但也因为“交织”,所以“一处伤,全身能补”。
这套系统的意义,不在于“它现在能做什么”,在于“它还能长成什么”。
而它能不能继续长,取决于一件事:你有没有继续“把新的连接,长进这张网里”。
—— 雨轩,于听雨轩
2026-10-21
附:全文结构索引
| 章 | 主题 | 核心判断 |
|---|---|---|
| 序 | 为什么不用清单写 | 价值在连接,不在组件 |
| 一 | 整体形状 | 物理底座 + 三环 + 一个中枢 |
| 二 | 逐对分析 | 15 对接口 + 模型闸门(2.16),三种连接模式 |
| 三 | 物理底座 | 八节点 + 三层网络(WG/ZT/CF)+ 降落链 |
| 四 | 交织的本质 | 单向依赖 / 双向咬合 / 平行冗余 |
| 五 | 治理的分层 | 访问 / 入口 / 执行 / 记忆,四层权重不同 |
| 六 | 风险 | 六个结构性脆弱点(已按实测修订) |
| 七 | 不可替代性 | 不在功能,在连接的形状 + 物理的底座 |
| 八 | 如果重来 | 保留什么,改什么,长什么 |
| 九 | 最后一道防线 | 八节点 + 三层网络的组合覆盖 |
| 结语 | 活系统 | 最脆弱的地方,也是最活的地方 |
修订说明(2026-10-22):本版依据 3 路代码级核查 + 5 台机器实测踏勘,修正了物理层(四节点→八节点、双网络→三层网络)、治理层(TAAGE→agent-policy)、连接层(补模型闸门 2.16),并更新了 b/a 机状态。所有结论均给出可复查的证据锚点。