跳转至

🧠 AgentMeshOS 项目交接说明

项目名称:AgentMeshOS

版本:v1.2.0

更新:2026-08-18

状态:分布式计算底座、阶段三通用 AI Runtime MVP、阶段四至阶段八已完成并归档;当前 P9“隔离 Tailnet 临时远程协助节点”实施中,尚未部署或完成三平台验收

类型:AI 应用运行平台 / AI 操作系统


1️⃣ 项目定位

AgentMeshOS 是一个

自托管的 AI 应用运行平台与 AI 操作系统

它将多台异构机器(VPS、家用电脑、服务器)通过统一调度与网络层连接,形成一个可编程的计算资源网络(Compute Mesh)。


2️⃣ 系统目标

  • 将多台机器统一为一个“虚拟超级计算机”
  • 支持动态节点加入 / 移除
  • 支持容器化任务调度
  • 支持 AI Agent 自动化执行任务
  • 在底座之上承载多个可插拔 AI 应用
  • 让多个 AI 应用在统一 Runtime、任务、成果、证据、预算和审计底座上运行

3️⃣ 当前架构(已确认)

flowchart TB
    Benson["Benson / Console"] --> Runtime["主节点:薄 Runtime"]
    Runtime --> OmniRoute["主节点:官方 OmniRoute"]
    Runtime --> Nomad["主节点:Nomad Server"]
    Nomad --> W101["101:Docker Worker"]
    Nomad --> W103["103:Docker Worker"]
    Runtime --> Cloud["Cloudreve WebDAV"]
    MM["MM:唯一公网 HTTPS 入口"] --> Console["Console / Docs / OmniRoute"]
    Cloud --> DD["dd:Cloudreve 本地持久化"]

4️⃣ 已确定技术栈(不可随意更改)

  • 网络层:Tailscale Client + Headscale 自托管控制面
  • 调度层:Nomad
  • 执行层:Docker
  • 操作系统:Ubuntu / Debian Linux
  • 通信方式:自托管 Headscale 管理的 Tailscale Mesh Network

所有部署服务和控制面默认必须部署在项目自有服务器或自有节点上;不得把第三方托管控制台作为核心能力默认依赖。


5️⃣ 系统分层定义

AI 应用层(本地应用及后续可插拔应用)
通用 AI Runtime(多 Agent、Provider、MCP、工作流、复盘)
AI Runtime 内部控制边界(Adapters、状态、任务日志、数据安全围栏)
分布式计算底座(Nomad、Docker、Cloudreve、Headscale/Tailscale)

6️⃣ 当前开发阶段

阶段:底座 v0.5、架构重整、阶段三通用 AI Runtime MVP、阶段四至阶段八已完成并归档;当前阶段 P9(阶段九)“隔离 Tailnet 临时远程协助节点”实施中

状态:分布式计算底座已部署并完成真实任务闭环;阶段三 P3-6 至 P3-12 已完成生产部署和真实验收。当前生产为 omniroute@3.8.49、系统 Node 22.23.0、默认数据目录 /root/.omniroute,健康接口为 healthy,当前运行基线为 52 条连接、51 个 Provider、2 个 Combo、2 个 API Key、SQLite quick_check=ok。Boss 使用 agentmeshos-free-quality-first,Worker 使用 agentmeshos-free-capacity-pool,各含 195 个候选并覆盖 24 家 Provider;2026-08-03 的 53/52/2/1、迁移 133 继续作为原生迁移历史验收基线。官方 MCP 搜索/抓取已通过标准 Streamable HTTP 验收;Compression 隔离复评在特定工具日志上有高压缩率但保真门槛未通过,生产保持关闭。详见阶段三完成归档

目标:阶段四已完成模型结构化规划、逻辑能力选择、任务分派、成果登记、真实检查、AI BOSS 审核和最终验收闭环,详见最终归档。阶段五至阶段八均已完成并归档;P9 正在实现授权临时设备的隔离 Tailnet/SSH 支持流程。


7️⃣ 下一阶段任务

  1. 查阅阶段四最终归档原阶段四核心归档,保留边界和验收事实
  2. 查阅阶段五完成归档,保留策略、预算、暂停和审计边界
  3. 查阅P6 完成归档P7 完成归档,保留应用中心、应用运行、成果历史与恢复边界
  4. 当前为P9(阶段九)隔离 Tailnet 临时远程协助节点:只允许 tag:temporary-support 的最小 SSH 访问,不进入 Nomad 或生产服务网络

8️⃣ 项目核心原则(必须遵守)

  • 所有节点必须可插拔(Plug & Play)
  • 控制层(VPS)必须稳定独立
  • 计算层(Node)可以随时加入/退出
  • 存储必须接口化;系统云盘使用 Cloudreve,最大 1 MiB Worker JSON 证据使用 Runtime SQLite,不预设 S3
  • AI 层不得依赖单一节点
  • 底座与应用必须解耦,应用失败不能破坏底座
  • 普通任务不引入审批、准入报告、租约或普通 TTL
  • 只有为防止数据破坏而设置必要的技术围栏

9️⃣ AI 协作规则

  • 外部 AI 工具用于研发、调查、审阅或工程执行,不是系统内固定角色;系统运行角色以 Runtime 的 AI Boss Agent 和 Worker Agent 为准。

🔟 文档使用规则

本项目所有设计以 docs/architecture 为唯一事实来源(SSOT)。

禁止使用聊天记录作为系统设计依据。


🚨 重要说明

任何修改架构设计前,必须更新本项目文档,而不是直接修改代码逻辑。


📌 当前状态总结

  • 分布式底座:已完成并运行
  • AI 平台架构:已收口;阶段三已完成并归档
  • AI Runtime:阶段三核心闭环、阶段四智能编排与成果验收闭环、阶段五受控主动循环、阶段六至阶段八应用能力均已部署并归档;当前 P9 隔离 Tailnet 临时远程协助节点实施中
  • 应用中心与本地样板:P6 至 P8 已完成生产验收;当前不启动新的应用或后台工作,等待 P9 需求确认
  • 生产运行:依赖已发布镜像、Runtime 数据和既有服务,不依赖 Git 工作树常驻

11. 专项交接:由 Office 观察主节点活动 Codex 的模型选择

目的与范围

该任务用于核查主节点正在运行的 Codex 桌面会话中,模型选择器为何出现非预期的 agentmeshos-* 名称。它只采集事实,不清除缓存、不重启服务、不修改 Provider/Combo/Key,也不替换主节点的当前会话。

观察时间开始前,Office 必须在本机记录自身的 Provider、模型和会话标识;如为检查而临时切换 Office 本机 Codex 的 Provider,任务结束后必须恢复为该记录值。Office 不得修改主节点 /root/.codex/config.tomlmodels_cache.json、SQLite、会话 JSONL 或 App Server。

截至 2026-08-08 的主节点已验证基线仅供比对,不能跳过实时采集:Tailnet IPv4 为 100.64.0.1,SSH 为 47522,活动 App Server 以默认 /root/.codex 启动;当前活动线程的已持久化设置为 custom / gpt-5.6-terra,主节点 models_cache.json 的模型数组为空。正式结论只以本次观察结果为准。

连接与安全约束

从 Office 使用既有 SSH 私钥直接连接主节点:

$EvidenceRoot = "C:\temp\agentmeshos-codex-main-audit-$(Get-Date -Format yyyyMMdd-HHmmss)"
New-Item -ItemType Directory -Force -Path $EvidenceRoot | Out-Null
$MainSsh = @("-p", "47522", "root@100.64.0.1")
& ssh @MainSsh "hostname; date -Is; tailscale ip -4; id" |
    Set-Content -Encoding utf8 "$EvidenceRoot\00-connectivity.txt"

仅当上面的连接、主机名和 Tailnet 地址均符合预期时继续。不要使用 ProxyJump,不要把私钥、API Key、Cookie、完整请求正文、完整会话内容或 SQLite 原始文件复制到 Office、Git 或聊天。

下列动作是禁止项:

  • pkillkillsystemctl restartcodex app-server 重启或重载;
  • 删除、移动、截断或改写 /root/.codex 下的任何文件;
  • 调用 config/value/writeconfig/batchWrite,或在主节点执行 codex config 写入;
  • 在主节点当前桌面会话内切换 Provider、模型或 profile;
  • 输出任何以 sk- 开头的值、Authorization 头、env_key 对应变量值或请求 body。

第一阶段:主节点零写入证据采集

在 Office 执行以下命令。命令只读取主节点状态,输出保存在 Office 本机证据目录。

$RemoteReadOnly = @'
set -euo pipefail

printf '%s\n' '=== 10 app-server-and-profiles ==='
ps -eo pid,ppid,lstart,args | grep '[c]odex.*app-server' || true
find /root/.codex -maxdepth 1 -type f -name '*.config.toml' -printf '%f\n' | sort

printf '%s\n' '=== 11 config-and-cache-redacted ==='
sed -E 's/(env_key|experimental_bearer_token)[[:space:]]*=[[:space:]]*.*/\1 = [REDACTED_SECRET]/' /root/.codex/config.toml
jq '{fetched_at,client_version,model_count:(.models|length),agentmeshos_ids:[.models[]?.id | select(startswith("agentmeshos-"))]}' /root/.codex/models_cache.json

printf '%s\n' '=== 12 recent-thread-settings ==='
sqlite3 -readonly -header -column /root/.codex/state_5.sqlite "SELECT id, model_provider, model, datetime(updated_at,'unixepoch','localtime') AS updated, archived FROM threads ORDER BY updated_at_ms DESC LIMIT 20;"

printf '%s\n' '=== 13 app-server-model-events ==='
rg -n -i 'models cache:|model/list|model_catalog_json|agentmeshos-' /root/.codex/app-server-control/app-server.log | tail -200 || true
'@

$RemoteReadOnly | & ssh @MainSsh "bash -s" |
    Set-Content -Encoding utf8 "$EvidenceRoot\10-13-readonly-evidence.txt"

如果 models_cache.json、SQLite 或日志不存在,记录路径和错误原文后停止该项;不能创建替代文件,更不能根据旧结果补写内容。

第二阶段:原始模型选择器的人工观察

在不离开主节点原始桌面会话、且不提交新消息的前提下打开已经出现异常的模型选择器。Office 需要采集一张完整截图,并在 14-picker-observation.md 记录:

  1. 截图时间、线程 ID、屏幕显示的 Provider 与当前模型。
  2. 每个可见 agentmeshos-* 条目的完整 ID、显示名和排序位置。
  3. 是否有 profile、搜索词、筛选器、Provider 下拉选择或“高级模型”状态。
  4. 打开选择器前后 models_cache.json 的 SHA-256、修改时间和模型数量;仅比较,不删除或编辑。

若不能访问原始桌面会话,不得用新建 Codex、codex exec 或另一个 App Server 代替并宣称已复现。应如实记录“未观察到原始选择器”,并保留第一阶段证据。

第三阶段:恢复 Office 本机上下文并复查

Office 完成截图与只读采集后,恢复其本机开始前记录的 Provider、模型和会话;此恢复不得对主节点执行。恢复后只允许在 Office 自己的新建隔离线程中检查其自身模型选择器,且必须使用与开始前相同的 Provider。

交付给主节点的内容仅包含以下脱敏材料:00-connectivity.txt10-13-readonly-evidence.txt14-picker-observation.md、截图、Office 初始与恢复后的 Provider/模型摘要,以及是否观察到原始异常条目。主节点据此判断下一步是读取缓存来源、检查桌面端覆盖配置,还是调查特定 profile;在此之前不得把异常归因于缓存,也不得清除任何缓存。