Neutral source audit · fixed commits · 2026-07-11

Paseo vs Omnigent
同一张产品截图下的两种 Agent 基础设施

它们都让你从桌面或手机管理多个 coding agent,但源码里的系统中心完全不同:Paseo 以开发者本机为中心Omnigent 以可共享、可治理的会话控制面为中心

Paseo baseline 860fcb2e · 0.1.105 · AGPL-3.0-or-later 本地:/Users/park0er/coding/paseo-contrib/paseo · 以 upstream/main 为正式基线
Omnigent baseline 6e3c7785 · 0.6.0.dev0 alpha · Apache-2.0 本地:/Users/park0er/coding/omnigent-contrib/omnigent · origin = park0er fork
一句话结论
个人本地 coding cockpit:Paseo 更好。 团队级、跨机器、带治理的 meta-harness:Omnigent 更好。 前者用更少概念换取速度和可理解性;后者用更多层次换取跨 harness 可移植性、协作、Policy 与受控执行。不存在脱离场景的总冠军。
01

先回答“哪个更好”——但必须把问题补完整

两者有相同的用户可见表面,却在不同评价函数上优化。

如果问题是……更强的一方源码层原因
一个人在自己的电脑上高频并行跑 agentPaseo单 daemon、路径短、provider session 直接持有、终端专门优化
团队跨机器、跨 harness、带权限和策略运行 agentOmnigentServer/Host/Runner/Harness 分层,SQL 会话、身份、共享、Policy 与 sandbox 都是一等能力
provider adapter 边界是否清楚PaseoAgentClient / AgentSession 是窄而语义化的核心接口
不同 harness 能否组合为真正的 agent 树OmnigentYAML spec、sub-agent runtime、inbox/autowake、树级成本与跨 harness fork
弱网和断线恢复协议是否可推理Paseotimeline 原生带 epoch + seq、gap、stale cursor 和分页 catch-up
安全治理边界是否完整OmnigentALLOW/DENY/ASK policy、bwrap/Seatbelt、L7 egress、credential proxy
总体架构是否“小而美”Paseo单事实源、单主协议、本地文件;概念与运维面少
能力上限是否覆盖团队和受管执行Omnigent会话控制面与执行面解耦,能承载多用户和异构算力
Paseo 当前更像完成度较高的个人开发产品;Omnigent 更像已经铺出企业级平台骨架、但仍在高速固化接口的 alpha 系统。
02

系统中心:本地 daemon vs 分布式 control plane

最重要的差别不是 UI,也不是 provider 数量,而是事实源与执行所有权放在哪里。

Paseo 与 Omnigent 进程拓扑对比 Paseo 由多端客户端连接一个本地 daemon,daemon 直接控制 agent provider 和 PTY;Omnigent 由 Web UI 连接 Server,Server 通过 Host 和 Runner tunnel 调度每个会话的 Harness。 PASEO · 开发机是事实源 iOS · Android · Web · Electron · CLI同一 daemon 的多个 operator client 可选 E2E relay只转发密文 Paseo Node daemonHTTP / WebSocket · AgentManager本地会话与终端生命周期 AgentSessionClaude / CodexACP / Pi … PTY workernode-ptyheadless xterm $PASEO_HOME · JSON / timeline / config OMNIGENT · 会话控制面是事实源 Web / PWA / ElectroniOS WKWebView · Android WebView Omnigent ServerFastAPI · REST / SSE · auth SQL + artifactssessions · ACL · policy · cost Host daemon持久 outbound WebSocket Runner执行会话 Python process · 独立 tunnel per-conversation HarnessUDS / loopback TCP · lazy subprocess SDK / native TUI / ACPClaude · Codex · Cursor · Pi … Execution host笔记本 · VM · managed sandbox

Paseo 的 relay 只是传输层;Omnigent 的 Server、Host、Runner、Harness 是四个独立责任域。后者路径更长,但每一层都能插入权限、调度、隔离或恢复逻辑。

Paseo 一轮消息
客户端 WebSocket
→ server/session.ts
→ AgentManager / AgentSession
→ provider adapter
→ timeline 分配 epoch / seq
→ WebSocket 广播
Omnigent 一轮消息
Web POST / session input
→ Server 鉴权 / ACL / 持久化
→ Policy enforcement
→ Runner WebSocket tunnel
→ per-conversation Harness
→ item 持久化 + ephemeral SSE
→ snapshot / item-id 对账
本质差别: Paseo 问“怎样可靠地遥控本机 agent”;Omnigent 问“怎样让任意位置、任意 harness 的 agent 成为可治理的共享会话”。
03

核心抽象:窄接口 vs 可声明运行图

两边都做 adapter,但统一到的层次不同。

Paseo

AgentClient / AgentSession

  • AgentClient 负责能力发现、catalog、创建和恢复。
  • AgentSession 负责 turn、结构化事件、历史、模式、权限、持久化 handle、中断和关闭。
  • 上层面对 agent 语义,不面对 CLI bytes;生命周期所有权直接而清楚。
  • ACP 是通用入口;Claude、Codex、OpenCode、Pi 走 direct adapter 换取原生深度。
代价: Codex adapter 约 6.2k 行,Claude adapter 约 5.3k 行;厂商协议变化直接进入 daemon 发布节奏。
Omnigent

Agent YAML + Runner + Harness

  • spec 能描述 prompt、harness、模型、认证、tools、MCP、skills、sub-agents、policy、OS env 与 sharing。
  • Headless/SDK harness 走结构化语义;native TUI harness 走 tmux/PTY 与厂商 forwarder。
  • 统一的是平台 conversation 与运行图,不只是一轮 provider 调用。
  • 同一棵 agent 树可混合 Claude、Codex、Pi 等 harness。
重要限制: headless process plugin 已能用 Python entry point 扩展;native TUI 仍需在 runner、chat、resume、CLI、stop、seed 等硬编码路径接线。
判断: Paseo 的 provider 边界更干净;Omnigent 的统一层更高、组合能力更强,但 native harness 的分布式集成成本也更高。
04

会话流与断线恢复:协议日志 vs 数据库对账

这是两套系统哲学差异最清楚的一段代码。

Paseo timeline

断线是协议的正常状态

daemon 端 timeline 为 source event 分配 epoch 与单调递增 seq。客户端按 cursor 分页追赶,显式处理 epoch reset、stale cursor、保留窗口 gap,以及投影折叠后的 source sequence ranges。

  • 历史页与 live event 归一到同一时间线。
  • 客户端能证明自己是否连续,而不只是“看起来大致同步”。
  • 非常适合移动弱网和长时间离线。
Omnigent stream

SSE 是尾流,snapshot 才是真相

session_stream.py 明确写着:没有 buffer、没有 replay、没有 sequence;无订阅者时事件会丢。恢复依赖 SQL snapshot、持久化 item ID 与 Web store 合并。

  • 先注册 subscriber 再读 snapshot,避免 snapshot 与 live tail 之间出现空洞。
  • inflight_text 保存尚未落成 item 的当前回答。
  • 复杂度从 Server stream 转移到了 snapshot / store 对账。
维度PaseoOmnigent
live stream带序列的权威 timeline 增量无重放 SSE 尾流
恢复epoch/seq cursor + 分页 catch-upGET snapshot + item ID + inflight merge
复杂度位置服务端协议更强,客户端规则直接broker 简化,客户端 store 合并更复杂
结论协议连续性更漂亮数据库应用模型可用且竞态处理认真
05

Resume、fork 与多 Agent

Paseo 更接近“启动本地子任务”;Omnigent 把关系做成持久会话树。

Paseo

保留 provider-native session

  • resumeSession(handle) 让 adapter 恢复厂商原生会话。
  • Claude/Codex 内部已有 vendor fork 用于 rewind;agent.fork_context 可生成上下文附件。
  • 官方主干当前没有统一、用户可见的顶层 provider-native fork。
  • 本地 feat/provider-native-fork 是实验贡献分支,本报告未计入正式能力。

轻量子 Agent

create_agent + paseo.parent-agent-id label,支持同 workspace、独立 worktree、subagent/detached 与级联归档。非常适合在本机另开一个 agent 做异步任务。

Omnigent

平台 conversation 可重新绑定执行

  • conversation 是平台实体,native session ID 只是 harness 绑定。
  • fork 可复制 transcript 并切换 harness;能重建 native transcript 时重建,否则 seed/preamble 降级。
  • 共享会话可 fork 到自己的 host/machine。
  • parent_conversation_idroot_conversation_idsub_agent_name 是关系模型本身。

完整会话树 runtime

系统工具覆盖 create/send/list/history/info/close 与 inbox;实现 autowake、blocked/approval 上送、树级成本、并发上限、history 传递、presence 和多 worktree 编排。

判断: 跨 harness fork 与持久多 Agent runtime,Omnigent 明显领先;Paseo 的模型更小、更适合本地开发机,也更容易调试。
06

原生 CLI:高质量远程终端 vs transcript-aware harness

“支持 Claude Code / Codex”背后的技术路线并不相同。

Paseo terminal
  • node-pty 位于 forked worker,隔离 native PTY 故障。
  • @xterm/headless 在 daemon 保存快照与 resize/reflow 语义。
  • leading + trailing 5ms coalescer:首 chunk 立即发,burst 再合并。
  • 紧凑二进制 WebSocket frame,文档测得 600-key burst 下 keydown→commit p50 约 18ms。

边界很诚实:raw terminal 可粗略投影 running / idle / needs-input,但不会自动伪装成结构化 agent transcript。

Omnigent native harness
  • 在 tmux/PTY 运行厂商原生 CLI,并由专用 bridge/forwarder 镜像 transcript。
  • 尝试捕获 tool call、approval、session ID、resume、seed/fork、stop、policy hook。
  • 原生 TUI 因而能进入共享、可恢复、可 fork 的平台会话。
  • 代价是适配面巨大;Codex native forwarder 单文件约 6.8k 行,native 插件接口尚未闭合。
终端质量

Paseo

延迟、快照、二进制流与输入回显是专门优化目标。

会话化原生 TUI

Omnigent

把人类 TUI 尽可能提升为可治理的平台 transcript。

维护风险

Omnigent 更高

厂商 TUI 不是稳定 API,forwarder 必须持续追版本行为。

07

Policy、权限与 sandbox:最大的能力断层

两边的威胁模型不同,不能把“没有同一功能”简单理解为遗漏。

Paseo · trusted local operator
  • daemon 默认监听 127.0.0.1,可选 bcrypt shared-secret。
  • Host/Origin 校验缓解 DNS rebinding。
  • relay 使用 Curve25519 ECDH + XSalsa20-Poly1305 端到端加密。
  • provider credential 仍归原生工具;Paseo 不集中托管。
  • Codex sandbox / approval、Claude tool permission 由 adapter 透传;外部 Docker 可作为隔离边界。

连接成功的客户端基本是可信 operator。Paseo 没有自建跨 provider policy engine 或进程级文件/网络沙箱。

Omnigent · governed workload
  • Server / agent / session 多层 policy;request、response、tool call、result 多阶段。
  • ALLOW / DENY / ASK,可用 label、session state、usage;支持成本、PII、GitHub、风险、工作目录等内置策略。
  • Linux bwrap + seccomp;macOS Seatbelt;cwd 默认只读,HOME/敏感 dotfiles 遮蔽。
  • L7 egress allowlist 与 secretless credential proxy:真实密钥留在 sandbox 外。

Windows 只能退化到较弱 Job Object;Seatbelt 也不等价于 Linux namespace。源码明确记录了这些差异。

判断没有悬念: Omnigent 更完整。与此同时,这部分也是高风险代码;sandbox/proxy/policy composition 若出错,会产生虚假安全感,因此它的高测试密度非常必要。
08

存储、部署、协作与跨端 UI

这些差异不是外围包装,而是从核心数据模型自然长出来的。

维度PaseoOmnigent结构性影响
权威存储$PASEO_HOME 每 agent 一个 JSON,另有 config/projects/chat/schedulesSQLAlchemy + Alembic;conversation/items/users/tokens/ACL/policy/host/cost 等表 + artifact store前者可读、可搬、低运维;后者可查询、可共享,但有数据库生命周期
执行位置daemon 所在开发机;可整体容器化Server、Host、Runner 分离;笔记本、VM、K8s、多种 managed sandboxOmnigent 的分布式能力是架构,不是部署脚本附加物
身份与共享可选 daemon 密码;连接者为可信 operatoraccounts、invite、OIDC/header auth;read/edit/manage/owner;公开或定向分享团队协作不在同一量级
协作交互多客户端观察同一 daemonpresence、live co-drive、文件锚定 review comment、分享后 fork 到自己机器Omnigent 更像协作产品和控制面
UI 技术Expo React Native;移动原生渲染,web 走 RN Web,Electron 包 webVite React DOM;浏览器/PWA/Electron 共用;手机是 WKWebView/WebView 薄壳Paseo 移动更原生;Omnigent 真正一份 DOM UI 到处跑
协议单 WebSocket envelope + terminal binary frameREST/SSE + Host WS + Runner WS + per-harness HTTP/UDSPaseo 概念少;Omnigent 分层多、可控点也多
版本偏差Zod append-only schema + client capability flagsHost/Runner hello 严格 major frame protocol;另有 Server 版本兼容测试都认真处理;Omnigent 的组合矩阵更大
09

源码工程质量与维护风险

LOC 不能判胜负,但能暴露系统正在承受的演化压力。

2,891Paseo tracked files
2,985Omnigent tracked files
831Paseo test / e2e files
972Omnigent Python test files
指标PaseoOmnigent
主语言粗略规模TS/TSX 约 61.9 万行Python 约 84.1 万行;Web TS/TSX 约 15.5 万行
测试粗略规模TS test/e2e 约 25.7 万行Python tests 约 49.4 万行;Web tests 约 7.4 万行
最大核心文件Codex adapter ~6.2k;session.ts ~5.6k;Claude adapter ~5.3ksessions.py ~21.5k;runner/app.py ~19.1k;cli.py ~13.1k
公开历史2025-10 起,4,281 commits;核心作者高度集中2026-06 起,1,327 commits;迭代极快,README 仍标 alpha

统计基于固定提交的 tracked files 与扩展名,包含测试,不用于计算质量分。Omnigent 的 public history 起点不等于项目真实诞生时间。

Paseo

优势

monorepo 边界清楚;agent SDK 是稳定架构中心;timeline、terminal、wire compatibility 有低层文档与测试;单进程路径容易追踪。

风险

session.ts 与 adapter 仍偏大;daemon 职责持续膨胀;作者集中导致 bus factor 低;JSON 模型若协作化会触顶。

Omnigent

优势

tunnel、重连、process manager、policy、sandbox、权限与 native bridge 测试密集;四层故障域明确;store 与 deployment 后端覆盖广。

风险

21k/19k/13k 巨型核心文件;native harness 硬编码扩散;REST/SSE/多 tunnel/per-harness HTTP 版本组合多;生产成熟度仍待时间证明。

许可证: Paseo 为 AGPL-3.0-or-later,Omnigent 为 Apache-2.0。两者都可读、可改、可贡献,但网络服务改造与商业嵌入的义务明显不同;这不是法律建议,却是采用架构时必须纳入的条件。
10

能力矩阵:不打总分,只标结构性强弱

避免把不同目标压成没有解释力的星级评分。

维度PaseoOmnigent判断
本地个人开发体验原生目标兼容但不是唯一中心Paseo
provider 语义 adapter窄接口、直接持有 sessionheadless 清晰,native 路径分散Paseo 小胜
harness 覆盖与组合ACP + 重点 direct adaptersSDK/native/ACP,多 harness 可混用Omnigent
原生 CLI高质量 raw terminaltranscript-aware native harness目标不同
多 Agent runtimecreate_agent + label + worktree声明式子树、inbox、autowake、树级成本Omnigent
Resumeprovider-native handleconversation + runner/harness rebindOmnigent 更宽
跨 provider fork官方主干尚不完整transcript 复制、native rebuild 或文本降级Omnigent
弱网恢复epoch/seq/gap/catch-upsnapshot/item ID/inflight mergePaseo
身份与多用户daemon shared secret完整 ACL、auth、sharing、presenceOmnigent
Policy依赖 provider 原生权限跨 harness ALLOW/DENY/ASKOmnigent
OS sandbox / egress外部容器或 provider 能力bwrap/Seatbelt、L7 egress、credential proxyOmnigent
移动体验React Native 原生渲染WebView 共用 DOM UIPaseo
运维简单度单 daemon、本地文件Server/DB/Host/Runner 多层Paseo
中央部署 / 受管算力非核心模型一等架构能力Omnigent
代码局部可理解性较高,仍有大文件抽象丰富,核心巨型文件明显Paseo
测试防御深度协议和终端扎实policy/sandbox/tunnel/native 矩阵更大Omnigent 小胜
场景 A

个人开发者,代码和凭据都在自己的 Mac

Paseo:更少组件、更清楚的失败边界、更强的原生移动与终端体验。Omnigent 的数据库、Host/Runner、Policy 和 sharing 在此有不少是未被利用的复杂度。

场景 B

5–100 人团队,共享会话、审计、评论、交接与控成本

Omnigent:local JSON + shared secret 不是 session ACL、OIDC、presence、review comment 与树级预算的基础。

场景 C

做通用 provider runtime SDK

学习 adapter 设计看 Paseo;若核心目标是会话跨 provider/harness 迁移并受治理,看 Omnigent

场景 D

从手机操作原生 Claude Code / Codex CLI

“远程终端就是原终端”选 Paseo;“TUI 也必须进入共享 transcript、Policy、fork 与 agent tree”选 Omnigent

场景 E

agent 运行在不可信或受管执行环境

Omnigent:Server/execution host 分离、Runner tunnel、sandbox、egress 与 credential proxy 构成 Paseo 当前没有的边界。

最漂亮的设计最危险的设计压力
Paseoepoch + seq timeline;AgentClient/AgentSession;terminal leading+trailing pipelinedaemon 持续吸收职责;JSON 协作化上限;核心作者集中
OmnigentServer/Host/Runner/Harness;conversation tree;统一 policy + sandbox + credential boundarysession/runner/CLI 巨型文件;native harness 扩散;多协议多部署组合爆炸
11

实际验证、限制与一手证据

把“读到的设计”与“本机复现的行为”分开。

Omnigent verification
  • uv >= 0.11.8 + Python 3.12.13 dev 环境安装成功。
  • 按 CI 固定的 npm 11.12.1 + npm ci --legacy-peer-deps 安装,工作树 clean。
  • Web npm run type-check:通过。
  • 三层 tunnel、process manager、function policy、macOS Seatbelt:130 passed,1 skipped,51.09s
  • 隔离 data/config 目录启动真实 Server,SQLite 初始化成功;GET /health200;SIGINT 干净退出。
Paseo verification
  • 以固定 upstream/main 提交运行,未使用 checkout 上的 UI 改动。
  • 未把本地 provider-native-fork 实验分支计入正式能力。
  • wire compatibility、agent timeline store、terminal output coalescer 三个测试文件。
  • 结果:3 files passed,15 tests passed,2.36s

两边测试数量不能横向当分数:Omnigent 选跨层集成切片,Paseo 选报告关注的低层协议切片。

未验证范围: 没有用真实付费 provider 凭据跑长任务;没有搭两台真实机器;没有跑全量测试、移动真机和所有 managed sandbox;TUI transcript 语义完整度来自源码与测试,不代表未来每个厂商版本都兼容。GitHub 活跃度与 public history 截止 2026-07-11。
Paseo 把开发者的本机当作可信世界的中心;Omnigent 把会话控制面当作中心,把执行环境当作可调度、可限制、可替换的外部资源。