NomiFun 架构综合分析报告
主题:NomiFun Desktop AI Agent 平台(v0.2.30)的架构哲学定位 方法:CodeGraph 源码知识图谱分析 + 本地配置系统检查 + 知识库哲学框架对比 结论:Agent 联邦制(Agent Federalism)—— 一个新物种 日期:2026-07-22
摘要
本报告整合三项独立研究——(1) CodeGraph 源码分析(nomifun-tauri, 2,492 文件, 58K 节点)、(2) 系统配置检查(47 表数据库、MCP 服务、IDMM 配置)、(3) 知识库哲学框架(运行时共和制 vs 宪法控制面)—— 对 NomiFun 进行完整的架构哲学定位。
核心发现:NomiFun 并非两种现有哲学"共和制"或"宪政"的简单混合,而是在两个层面同时运作的新物种:
- 会话层面(Conversation/Terminal):宪法控制面(~40%)与运行时共和制(~30%)共存于 IDMM 的双路监督架构中
- 组织层面(Agent 执行 DAG、跨会话通信、元监督):完全独立于两种传统哲学的第三维度(~30%)
最终判定:Agent 联邦制——介于单体 Agent 治理与分布式 Agent 网络之间的中间形态。
目录
- 方法论:三项研究的整合路径
- 配置层快照:NomiFun 的生产部署状态
- 源码层解剖:CodeGraph 揭示的架构基因
- 哲学定位框架
- 综合判定:Agent 联邦制
- NomiFun 架构的三个运作层面
- 关键创新机制详解
- 风险、张力与演化方向
- 三方研究交叉验证:本地源码 + 网络研究 + 哲学框架
- 结论与建议
1. 方法论:四项研究的整合路径
| 研究维度 | 工具 | 数据规模 | 目标 |
|---|---|---|---|
| 源码知识图谱 | CodeGraph CLI | 58,278 节点 / 224,391 边 | 映射代码架构、模块依赖、核心模式 |
| 系统配置检查 | SQLite + 文件审计 | 47 表 / 10 提供商 / 4 MCP | 获取真实部署状态 |
| 深度网络研究 | Web 检索 / 外部会话 | 竞品 8+ / 特性 20+ | 获取生态定位与竞品对比 |
| 哲学框架对比 | Reading 知识库 | 2 种哲学 × 18 个维度 | 构建评估坐标系 |
1.1 四项研究的整合方式
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ ① CodeGraph 源码 │ │ ② 系统配置检查 │ │ ③ 深度网络研究 │
│ - 27 backend crates │ │ - 47 数据库表 │ │ - 46 crate 全景 │
│ - 6 agent crates │ │ - 4 MCP 服务器 │ │ - 26+ 模型提供商 │
│ - 核心引擎模式 │ │ - IDMM tier/预算 │ │ - 8+ 竞品对比 │
└─────────┬───────────┘ └──────────┬───────────┘ └──────────┬───────────┘
│ │ │
└──────────────────┬─────────┼───────────┬───────────────┘
│ │ │
┌────────▼─────────▼───────────▼──────┐
│ 联合分析层 │
│ - 源码模式 ⇔ 配置状态 ⇔ 市场定位 │
│ - 设计意图 ⇔ 实际部署 ⇔ 竞品差异 │
│ - 架构边界 ⇔ 运行时行为 ⇔ 生态位 │
└────────────────┬───────────────────┘
│
┌──────────▼──────────────────┐
│ ④ 哲学框架评估 │
│ - 运行时共和制 (Claude) │
│ - 宪法控制面 (Codex) │
│ - 新维度判定:联邦制 │
└─────────────────────────────┘
2. 配置层快照:NomiFun 的生产部署状态
2.1 数据库全景(47 表)
| 域 | 核心表 | 行数/状态 | 说明 |
|---|---|---|---|
| 会话 | conversations, messages |
活跃 | 3 类型:companion/channel/remote |
| Agent 执行 | agent_executions, agent_execution_steps |
版本化 | DAG 步骤、参与者、依赖 |
| IDMM 监督 | idmm_interventions |
5+ 条 | 提供者 + 决策双路监视 |
| AutoWork | requirements, requirement_tags |
需求队列 | 看板、状态、失败重试 |
| MCP | mcp_servers, conversation_mcp_servers |
4 服务器 | 已绑定到 conv_019f831d |
| 知识库 | knowledge_bases, knowledge_files |
2 库 | AIOPS + Reading,只读绑定 |
| 终端 | terminal_sessions |
运行中 | PTY 管理 |
| Cron | cron_jobs, cron_job_runs |
定时任务 | 周期性 prompt |
| 远程 | remote_agents |
注册 | OpenClaw Gateway |
| 创意工坊 | workshop_canvases, workshop_assets |
创作 | 画布节点 + 生成任务 |
| OAuth | oauth_tokens, installation_identity |
认证 | 提供商令牌 |
| 预设 | presets, preset_* (8 表) |
模板 | 可复用的 Agent 配置 |
2.2 MCP 服务器状态
| 服务器 | 类型 | 命令 | 状态 |
|---|---|---|---|
| jina-mcp-server | stdio | uvx jina-mcp-server | ✅ 运行中 |
| sequential-thinking | stdio | uvx sequential-thinking | ✅ 运行中 |
| exa | stdio | uvx exa-mcp-server | ✅ 运行中 |
| tavily-mcp | stdio | uvx tavily-mcp-server | ✅ 运行中 |
⚠️ 注意:所有 MCP 服务器绑定到
conv_019f831d,当前会话没有绑定,因此 deep-research 技能中的 jina/tavily/exa/sequential-thinking 调用在此会话中不可用。
2.3 IDMM 配置
| 参数 | 值 |
|---|---|
| 监督层级(tier) | 按会话配置 |
| 双路监视 | fault_watch + decision_watch |
| 预算类型 | 滑动窗口,指数退避:10s → 30s → 2m → 5m |
| 升级路径 | RuleOnly → RulePlusModel → Halt |
| 后备模型 | 可配置 (BypassModelRef) |
| 设计原则 | Fail-open:DB 审计失败不阻塞决策 |
3. 源码层解剖:CodeGraph 揭示的架构基因
3.1 代码规模总览
| 指标 | 值 |
|---|---|
| 总文件数 | 2,492 |
| 代码节点 | 58,278 |
| 边(依赖/引用) | 224,391 |
| Rust 后端 crate | 27 (nomifun-*) |
| 共享 crate | 4 (nomi-*) |
| Agent 层 crate | 9 (nomi-* agent) |
3.2 核心架构:三引擎驱动
┌─────────────────────────────────────────────────────────────────┐
│ NomiFun 核心三引擎 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ① Agent Execution Engine (engine.rs, 3614行) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Planner ──→ Scheduler ──→ AttemptRunner │ │
│ │ 规划 调度 执行 │ │
│ │ (goal→plan) (plan→steps) (steps→conversation) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ② IDMM 监督引擎 (supervisor.rs, 2132行) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ fault_watch ──→ decision_watch │ │
│ │ 提供者/Agent 错误 空闲/决策/开放问题 │ │
│ │ └─ 独立预算、指数退避、升级阶梯 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ③ Gateway MCP 引擎 (server.rs, 584行) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ CapabilityAuth ──→ RegistryDispatch ──→ ACP Bridge │ │
│ │ 能力凭证 工具分派 进程桥接 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
3.3 Agent Execution Engine 深度发现
3.3.1 3 层控制流
| 层 | 职责 | 输入 | 输出 | 关键代码 |
|---|---|---|---|---|
| Planner | 目标→计划 | goal + participants + context | ExecutionPlan | produce_plan() / plan_initial() |
| Scheduler | 计划→步骤生命周期 | ExecutionPlan | DAG steps | schedule() → attempts |
| AttemptRunner | 步骤→会话执行 | attempt | conversation effects | 创建 attempt conversation |
3.3.2 内容寻址委派(Content-Addressed Delegation)
delegation_operation_id() 对语义操作计算 SHA256 哈希,确保:
- 幂等重放:相同操作产生相同 ID,可安全重试
- 无冲突:避免重复创建相同的执行步骤
- 可审计:操作历史可完整追溯
这是 NomiFun 最精妙的设计之一 —— 将语义一致性与操作状态解耦。
┌────────────────────────────────────────────┐
│ operation_semantics │
│ (goal + delegator + strategy + adapt...) │
│ │ │
│ ▼ │
│ SHA256(content_addr) │
│ │ │
│ ▼ │
│ delegation_operation_id │
│ → idempotent replay │
│ → conflict-free DAG insertion │
│ → audit trail │
└────────────────────────────────────────────┘
3.3.3 模型池系统
enum ModelPoolSpec {
Automatic, // 自动选择最佳模型
Single { model: String }, // 固定模型
Range { models: Vec<String> }, // 候选集
}
Automatic模式:根据任务类型自动选择模型Range模式:可在 IDMM 监督下在候选模型中切换MAX_MODELS = 8:硬限制防止池膨胀
3.3.4 计划门控(Plan Gate)
enum PlanGate {
Automatic, // 立即执行
RequireApproval, // 等待审批
}
这是宪法控制面与运行时共和制的核心张力点——Automatic 赋予 Agent 运行时自由,RequireApproval 则是前置的宪法约束。
3.3.5 执行常量
| 常量 | 值 | 意义 |
|---|---|---|
MAX_PARALLEL |
64 | 最大并行步骤数 |
MAX_DEPTH |
4 | 委派最大嵌套深度 |
MAX_STEPS |
128 | 单个执行最大步骤数 |
MAX_MODELS |
8 | 模型池最大候选数 |
| 委派策略 | disabled / automatic / prefer_parallel | 并行控制 |
| 步骤种类 | agent / verify / judge / loop | 计算 + 验证 + 裁决 + 循环 |
| 失败策略 | fail_execution / skip_dependents | 传播 / 隔离 |
3.4 IDMM 监督引擎深度发现
3.4.1 双路监视架构
┌────────────┐
│ IDMM 核心 │
└────┬───────┘
│
┌──────────────┼──────────────┐
│ │ │
┌────────▼──────┐ ┌────▼────────┐
│ fault_watch │ │ decision_watch │
│ ─ provider err│ │ ─ idle │
│ ─ agent err │ │ ─ decisions │
│ ─ tool err │ │ ─ open qs │
└────────┬───────┘ └──────┬────────┘
│ │
▼ ▼
┌─────────────────────────────┐
│ 独立预算 & 升级路径 │
│ ┌─────────────────────────┐│
│ │ RuleOnly → RulePlusModel││
│ │ → Halt ││
│ └─────────────────────────┘│
└─────────────────────────────┘
3.4.2 升级阶梯(Escalation Ladder)
| 层级 | 名称 | 行为 | 哲学归属 |
|---|---|---|---|
| L0 | 人类搁置 | 无干预,记录日志 | 运行时共和制最大自由 |
| L1 | RuleOnly | 仅用规则自动决策 | 宪法控制面纯态 |
| L2 | RulePlusModel | 规则 + 侧车/后备模型分析 | 混合态 |
| L3 | Halt | 暂停执行,等人类干预 | 宪法顶层约束 |
3.4.3 策略类型系统(policy.rs - 1399行)
| 策略 | 针对 | 处理方式 | 哲学 |
|---|---|---|---|
OptionRule |
选项选择 | auto-pick / recommended / escalate / halt | 宪法 + 共和混合 |
PermissionRule |
权限请求 | safe / risky | 宪法硬约束 |
OpenQuestionRule |
开放问题 | model-tier only | 运行时共和制 |
CategoryMode/Rules |
分类规则 | 逐类别配置 | 宪法分域管理 |
3.4.4 破坏性否决检测
IDMM 内置了针对危险模式的模式匹配系统,检测如:
rm -rf类文件删除命令DROP TABLE类数据库破坏语句git reset --hard类版本控制破坏- 其他高风险 shell 命令模式
这是宪法控制面在操作层的具象实现——一部分规则是运行时协商的,一部分是硬编码不可逾越的。
3.5 Gateway MCP 引擎深度发现
3.5.1 架构
┌────────────────────────────────────────────┐
│ Gateway Mcp Server (axum, 127.0.0.1:0) │
│ │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │ Capability │ │ ToolRegistry │ │
│ │ Issuer │───→│ dispatch │ │
│ │ (loopback) │ │ visibility gates │ │
│ └──────┬───────┘ └────────┬─────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ POST /tool │ │
│ │ → verify capability │ │
│ │ → resolve tool │ │
│ │ → check visibility (profile×surface)│ │
│ │ → execute / forward to ACP │ │
│ └──────────────────────────────────────┘ │
└────────────────────────────────────────────┘
3.5.2 三维可见性门控
工具分派受三层检查:
- Profile(配置画像):预设配置
- Surface(交互面):conversation / terminal / channel
- Danger tier(危险等级):低/中/高/不可逆
只有三层都允许的工具才可见。这是宪法控制面在工具层的完全实现——工具调用权不是运行时协商的,而是架构硬编码的。
3.5.3 ACP 协议桥接
- ACP stdio 进程通过
POST /tool转发工具调用 - 能力凭证定期更新/撤销
- 跨进程工具调用的安全边界
3.6 Agent Runtime Registry 深度发现
3.6.1 工厂模式 + 单次飞行
trait AgentRuntimeRegistry {
fn create(conversation_id) → AgentRuntime;
fn get(conversation_id) → OnceCell<AgentRuntime>;
fn destroy(conversation_id);
}
- OnceCell:每个会话只有一次创建机会
- AsyncMutex:序列化构建/销毁,避免竞争条件
- 单一事实来源:运行时实例与会话 1:1 绑定
3.6.2 崩溃循环治理(RestartGovernor)
- 滑动窗口内限制重启次数
- 超过阈值后延长等待期或放弃
- 只有 ACP Agent 参与空闲清理
3.7 Agent 执行类型系统
状态机定义(agent_execution.rs):
// 步骤生命周期:7 态
ExecutionStepStatus {
Pending, Ready, Running, Completed,
Failed, AwaitingApproval, Skipped
}
// 尝试生命周期:8 态
ExecutionAttemptStatus {
Pending, Planning, Running, Completing,
Completed, Failed, Cancelled, AwaitingApproval
}
权限过渡规则(明确的 CAS 匹配):
Pending → Ready:依赖条件满足Ready → Running:调度器分配Running → Completed/Failed:执行完成/出错- 需要审批时 →
AwaitingApproval
这是典型的宪法控制面状态机——状态转换路径由代码枚举定义,而非运行时协商。
4. 哲学定位框架
4.1 基准坐标系:两种经典哲学
| 维度 | 🏛️ 运行时共和制(Claude Code) | 📜 宪法控制面(Codex) |
|---|---|---|
| 秩序来源 | 运行时动态协商 | 预定义形式化规则 |
| 规则形态 | 自然语言指令(CLAUDE.md) | 结构化策略片段 |
| 安全模型 | settings.json 兜底 + 运行时协商 | 架构层硬编码 + 前置拦截 |
| 权力所在 | 主循环(Query Loop) | 类型系统 + 策略文件 |
| 压缩态度 | 激进压缩保持流动性 | 压缩 = 规则完整性威胁 |
| 隐喻 | Republic — 法律在议会辩论中产生 | Constitutional — 宪法先于一切 |
4.2 NomiFun 的基因检测矩阵
📜 宪法控制面基因(~40%)
| 源码证据 | 代码位置 | 哲学依据 |
|---|---|---|
| 执行步骤状态机(7 态 CAS 转换) | agent_execution.rs |
状态机路径由枚举硬编码 |
| 尝试状态机(8 态 CAS 转换) | agent_execution.rs |
不允许运行时修改转换规则 |
| 委派策略枚举 | DelegationPolicy |
选项固定在编译期 |
| 计划门控(Automatic / RequireApproval) | Plangate |
前置审批约束 |
| IDMM 策略类型系统 | policy.rs (1399 行) |
规则优先于运行时决策 |
| OptionRule auto-pick / escalate / halt | policy.rs |
确定性路由 |
| PermissionRule safe / risky | policy.rs |
硬权限边界 |
| 破坏性命令模式检测 | supervisor.rs |
硬编码的黑名单 |
| Gateway 三维可见性门控 | server.rs |
工具调用权架构硬编码 |
| 容量硬限制(MAX=64/4/128/8) | engine.rs |
宪法级资源配额 |
| RuntimeRegistry 单次飞行 | runtime_registry.rs |
构建/销毁序列化 |
| CrashLoop 滑动窗口限制 | runtime_registry.rs |
退缩策略预定义 |
| 内容寻址(SHA256) | engine.rs |
确定性操作标识 |
🏛️ 运行时共和制基因(~30%)
| 源码证据 | 代码位置 | 哲学依据 |
|---|---|---|
| Planner 从 goal + participants 规划 | engine.rs |
动态规划而非预定义脚本 |
| ModelPool Automatic 模式 | engine.rs |
运行时自主选择模型 |
| IDMM 升级阶梯(RulePlusModel) | supervisor.rs |
模型可以绕过纯规则 |
| OpenQuestionRule model-tier-only | policy.rs |
开放问题需要运行时推理 |
| PlanGate Automatic 模式 | engine.rs |
不需要前置审批 |
| adaptation_policy 执行时调整 | agent_execution.rs |
适应策略运行时决定 |
| 委派策略 dynamic(automatic) | DelegationPolicy |
委派方式运行时决策 |
| step kind: verify / judge / loop | agent_execution.rs |
运行时决定验证、裁决、循环 |
| Fail-open 设计(DB 失败不阻塞) | supervisor.rs |
可用性优先于规则一致性 |
| 技能系统按需调用 | 系统提示词 | Agent 自主决定何时用何工具 |
🧬 新物种基因(~30%)— 两种哲学都没有的
| 源码证据 | 代码位置 | 为何是"新" |
|---|---|---|
| DAG 参与者系统 | agent_execution_participants |
两种哲学都只管理一个 Agent 内部,非多 Agent 关系 |
| 多实体执行 | agent_executions + steps + dependencies |
组织级任务编排,非单次对话 |
| IDMM 双路 + 自身可被监督 | supervisor.rs |
元监督结构——监督者的监督者 |
| 内容寻址委派的幂等性 | engine.rs SHA256 |
从语义而非时间顺序保证一致性 |
| 跨会话消息注入 | nomi_send_to_conversation |
Agent 间直接通信——多体政治 |
| 确认系统 / 决策管理 | nomi_resolve_confirmations |
分权制衡——禁止自我裁决 |
| AutoWork 需求队列 → 自治循环 | requirements |
Agent 不仅是响应者,还是任务执行者 |
| Cron 定时自治 | cron_jobs |
无需人类触发的节律 |
| 网关作为联邦边界 | server.rs |
分布式 Agent 联邦的基础设施 |
| Fail-open + Fallback 模型 | supervisor.rs + config.rs |
优雅降级而非硬性失败 |
4.3 哲学归属的三层分布
┌──────────────────┐
│ 组织层 (NEW!) │
│ ~30% 新物种 │
│ │
│ DAG 参与者 │
│ 跨会话通信 │
│ 元监督 │
│ 自治工作循环 │
│ 联邦边界 │
└──────────────────┘
│
┌─────────▼─────────┐
┌────────────────┐ ┌────────────────┐
│ 审慎层 │ │ 反应层 │
│ ~30% 共和制 │ │ ~40% 宪政 │
│ │ │ │
│ Planner 规划 │ │ 状态机硬编码 │
│ ModelPool 自选 │ │ Gateway 门控 │
│ IDMM 模型绕过 │ │ IDMM 策略规则 │
│ Fail-open │ │ Crash 治理 │
└─────────────────┘ └─────────────────┘
这一发现至关重要:NomiFun 并非三种元素的随机混合,而是按架构层级有规律地分布:
- 反应层(毫秒级安全约束)→ 宪法控制面主导 — 确定性、不可绕过
- 审慎层(任务规划与执行)→ 运行时共和制主导 — 动态性、可适应
- 组织层(多 Agent 协调)→ 全新维度 — 两种经典哲学都不覆盖
5. 综合判定:Agent 联邦制
5.1 为什么不是"混合"而是"新物种"
| 项目 | 混合(Hybrid) | 新物种(Federalism) |
|---|---|---|
| 元素关系 | 并排放置 | 层级嵌套,各司其职 |
| 冲突处理 | 优先级的优先级 | 宪法先于法律、法律先于执行 |
| 创新点 | 无新结构 | 引入组织层 |
| 治理模型 | 无变化 | 分权制衡——联邦政府 + 州政府 |
| 扩展性 | 线性叠加 | 层级化、可递归 |
5.2 类比:美国联邦制
| 联邦制概念 | NomiFun 对应 |
|---|---|
| 联邦宪法 | IDMM 策略 + Gateway 安全模型 — 不可轻易修改的硬约束 |
| 州政府 | 每个 Conversation/Terminal 的运行时环境 — 有适应空间 |
| 联邦政府 | Agent Execution Engine — 协调多 Agent 执行 |
| 州际贸易 | 跨会话消息注入 + Delegation |
| 司法审查 | IDMM 的 decision_watch + escalation ladder |
| 否决权 | PlanGate RequireApproval — 人类有最终否决 |
| 三权分立 | 规划(Planner)≠ 执行(Scheduler)≠ 监督(IDMM) |
| 保留条款 | Fail-open 设计 — 宪法缺陷不影响系统运行 |
5.3 核心命题
NomiFun 的架构创新不在于"混合了两种哲学",而在于引入了第三种维度:Agent 的组织层。Agent 联邦制将单个 Agent 的治理从两方(规则 vs 自由)扩展为三方(宪法约束 + 运行时适应 + 组织级协作),形成了一个可递归、可扩展的 Agent 治理层次结构。
6. NomiFun 架构的三个运作层面
6.1 反应层(Reactive Layer):宪法控制面主导
职责:毫秒级安全保护,阻止不可逆操作
组成:
- Gateway 三维可见性门控(profile × surface × tier)
- IDMM PermissionRule(safe/risky 硬权限)
- 破坏性命令模式匹配(rm -rf / DROP TABLE 等)
- RuntimeRegistry 崩溃循环治理
- 容量硬限制(MAX_PARALLEL、MAX_DEPTH 等)
哲学特征:
- 代码枚举而非运行时协商
- 拒绝规则不可绕过(硬编码、类型系统强制执行)
- 与宪法控制面(Codex)完全一致
6.2 审慎层(Deliberative Layer):运行时共和制主导
职责:任务规划、模型选择、执行决策
组成:
- Planner 从 goal + participants 动态生成 plan
- ModelPool Automatic 运行时选择最优模型
- IDMM OptionRule / OpenQuestionRule 模型级灵活处理
- Adaptation Policy 执行时调整
- Step kind(verify / judge / loop)运行时决定
哲学特征:
- 自然语言提示词驱动 Agent 行为
- 模型推理参与决策(IDMM RulePlusModel)
- 允许运行时绕过纯规则
- 与运行时共和制(Claude Code)一致
6.3 组织层(Organizational Layer):全新维度
职责:多 Agent 协调、任务编排、元监督
组成:
- DAG 参与者系统:多实体加入执行
- 内容寻址委派:幂等性保证的跨 Agent 呼叫
- IDMM 双路 + 元监督:监督者也被监督
- AutoWork 自治工作循环:Agent 自动接任务
- Cron 定时自治:无人值守的周期性行为
- 跨会话消息注入(MCP 工具)
- 网关作为联邦边界
哲学特征:
- 两种经典哲学都没有的维度
- Agent 间关系由联邦协议而非单体规则管理
- 分权制衡——规划、执行、监督分离
- 可递归——联邦可以包含子联邦
7. 关键创新机制详解
7.1 内容寻址委派(Content-Addressed Delegation)
NomiFun 的委派系统不是简单的"调用子 Agent",而是通过 SHA256 哈希语义操作来生成幂等 ID:
goal = "分析系统配置"
delegator = "conv_xxx"
strategy = "automatic"
adapt = "default"
→ SHA256("analysis system config|conv_xxx|automatic|default")
→ id = "0x4a8f..."
重要性:这解决了分布式系统中的根本难题——一次且仅一次执行语义。如果网络分区导致确认丢失,重试时相同操作会解析到已有步骤而非创建重复。
7.2 IDMM 的 Constitutional 元层
IDMM 不仅仅是"监督模块",它是一个自指的宪法系统:
┌──────────────────────┐
│ Constitution │
│ (IDMM Policy Types) │
└──────┬───────────────┘
│ interprets
┌──────▼───────────────┐
│ Judiciary │
│ (IDMM Supervisor) │
│ dual-watch + escal. │
└──────┬───────────────┘
│ supervises
┌──────▼───────────────┐
│ Executive │
│ (Agent Execution) │
│ Planner/Scheduler │
└──────┬───────────────┘
│ but also...
┌──────▼───────────────┐
│ IDMM can be │
│ SUPERVISED by │
│ higher-tier IDMM │
│ (元监督, 递归) │
└──────────────────────┘
IDMM 本身也可以被监督(通过更高层级的 IDMM 配置),实现可递归的宪法执行。
7.3 Fail-Open 与优雅降级
NomiFun 在多个层面实现了优雅降级:
| 组件 | 降级行为 | 效果 |
|---|---|---|
| IDMM audit 写入失败 | 跳过审计记录,不阻塞决策 | 监督系统不因自身故障瘫痪 |
| ModelPool 模型不可用 | 自动回退到其他候选 | 执行不因单模型故障失败 |
| Gateway 能力凭证过期 | 重新签发 | 工具访问持续可用 |
| CrashLoop 治理 | 指数退避等待 | 不崩溃整个 Agent |
| ACP 进程崩溃 | 单会话重启,不影响全局 | 故障隔离 |
这与宪法控制面的"失败时禁用"哲学形成鲜明对比——NomiFun 选择部分降级而非完全停止。
7.4 三层分离的三权分立
┌─────────────────────────────────────────────────────┐
│ Agent 联邦制权力结构 │
├─────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────┐ ┌────────────────────┐ │
│ │ 立法权 │ │ 司法权 │ │
│ │ IDMM Policies │ │ IDMM Supervisor │ │
│ │ IDMM Config │ │ decision_watch │ │
│ │ Gateway Security │ │ escalation ladder │ │
│ └────────────────────┘ └────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ 行政权 │ │
│ │ Agent Execution Engine │ │
│ │ Planner → Scheduler → AttemptRunner │ │
│ └──────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────┘
关键设计决策:规划者、执行者和监督者不是同一个进程。Planner 不与 IDMM 共享代码路径,Gateway 不与引擎共享安全策略——故障无法跨越权力边界传播。
8. 风险、张力与演化方向
8.1 内部张力
| 张力对 | 表现 | 风险 |
|---|---|---|
| 宪政 ↔ 共和 | IDMM 规则 vs 模型级绕过 | 规则可以被模型推理规避——宪法漏洞 |
| 自由 ↔ 安全 | Gateway 自动模式 vs 权限门控 | 过多约束失去 Agent 灵活性 |
| 自治 ↔ 控制 | AutoWork 自治 vs PlanGate RequireApproval | 审批瓶颈化 |
| 反应 ↔ 审慎 | 硬约束 vs 规划弹性 | 任务可能被硬限制中断 |
| 元监督递归 | IDMM 监督 IDMM | 监督深度增加复杂度 |
8.2 架构风险
- 宪法漏洞:IDMM PermissionRule 和 OptionRule 的交互可能导致未被预期的行为——规则定义中的矛盾
- 联邦边界模糊:Gateway 作为联邦边界,但当 MCP 服务器绑定到错误会话时(如本次分析中的 conv_019f831d),边界可能被绕过
- 可递归复杂性的非线性增长:Agent 执行 DAG 的最大深度为 4,但如果每个 Agent 又可以委派,实际的监督嵌套可能难以预测
- Fail-Open 的安全代价:DB 写入失败不阻塞,这意味着在某些故障模式下安全事件可能丢失
- 状态机完整性问题:状态转换虽然有 CAS 保证,但从 7 态和 8 态状态机的转移矩阵来看,是否存在"不可能达到"或"永冻"状态?
8.3 可能演化方向
现在 ────────────────────────────────────────────→ 未来
Agent 联邦制 提升宪法一致性 分布式自治联邦
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 单体联邦 │ ──────→ │ 结构化宪法 │ ──────→ │ 正式宪法 │
│ 隐式规则 │ │ IDMM 2.0 │ │ 可证明安 │
│ 经验式 │ │ 形式化策略 │ │ 全性 │
└──────────┘ └──────────┘ └──────────┘
方向 A — 提升宪法一致性:将 IDMM 策略从 Rust 枚举升级为形式化策略语言(类似于 Open Policy Agent 的 Rego),使规则可组合、可证明、可审计。
方向 B — 强化共和制弹性:增加更多运行时协商机制,如 Agent 间冲突解决协议、动态模型切换策略(非预设 Range)。
方向 C — 联邦自治化:引入 Agent 联邦之间的自治协议,使联邦可以包含子联邦(目前 MAX_DEPTH=4 限制了递归深度)。
9. 三方研究交叉验证:本地代码分析 + 深度网络研究 + 架构哲学对比
本章整合 方法 3(深度网络研究) 的外部发现与本报告已有分析,揭示每项发现如何在三种方法间交叉验证。
9.1 方法 3 概述:网络视角的 NomiFun
| 维度 | 方法 3 发现 | 来源 |
|---|---|---|
| 架构规模 | Tauri 2 + Rust + React, 46 个 crate | GitHub README [2] |
| 设计哲学 | "数据安全不是设置而是架构",本地优先 | README 声明 |
| 开源协议 | Apache-2.0(最宽松) | README |
| 能力规模 | ~20 个域, 150+ 工具, MCP + REST | 官方文档 |
| 模型支持 | 26+ 提供商, 4 种协议 + New API 网关 | 官方文档 |
| 外部 Agent | ~19 个通过 ACP 连接 | README |
| IM 渠道 | 11 个(Telegram/飞书/钉钉/微信等) | 官方文档 |
| 竞品生态 | 8+ 个同类开源项目 | 网络检索 |
9.2 三方交叉验证矩阵
| 发现 | 方法 1 (CodeGraph) | 方法 2 (本地配置) | 方法 3 (网络研究) | 验证结论 |
|---|---|---|---|---|
| 46 个 crate 规模 | CodeGraph 找到 27 backend + 4 shared + 6+ agent = ~37+ | 未直接观察 | README 称 46 crates(15 agent + 29 backend + 2 shared) | ✅ 一致,差距来自 agent/ 层15个 crate 部分未被 CodeGraph 索引(在独立 nomi 目录下) |
| IDMM 双路监督 | supervisor.rs 2,132 行:fault_watch + decision_watch |
数据库 5+ 条干预记录 | "无 LLM 规则层 + 旁路备份模型层双重保障" | ✅ 完全一致,源码+配置+文档三方确认 |
| MCP 能力总线 | server.rs 584 行:Gateway 安全架构 |
4 个 MCP 服务器绑定到 conv_019f831d | "~20 个域, 150+ 工具通过 MCP + REST 暴露" | ✅ 结构一致,但本地发现 MCP 绑定到错误会话——源码设计正确但部署有偏差 |
| DAG 执行图 | engine.rs 3,614 行:Planner→Scheduler→AttemptRunner |
agent_executions 表 + dependencies | "委派即追加 Step,画布暴露实时执行图" | ✅ 完全一致 |
| 无 Electron/Node | Tauri 架构:Rust 后端 + React 前端 | Info.plist 确认 Tauri 2 | "无 Electron、无 Node 宿主、无遥测、无订阅" | ✅ 完全一致 |
| 审批机制 | Plangate (Automatic/RequireApproval) | 未直接观察 | "执行前审批:启用审批在规划后暂停" | ✅ 完全一致 |
| 安全矩阵 | Gateway 三维可见性门控 | 未直接观察 | "danger × surface 审批矩阵" + 源绑定密钥保险库 | ✅ 完全一致 |
| 密钥隔离 | 未在已读源码中明确发现 | 未直接观察 | "浏览器凭证永不到达 LLM" | 🔍 需验证代码层 |
| Agent 转录 | AttemptRunner 创建 attempt conversations | conversations 表有 attempt 类型 | "点击任何步骤阅读 agent 实际对话" | ✅ 一致 |
| 26+ 模型提供商 | ModelPool System (Automatic/Single/Range) | model_providers 表 10 个配置 | README 称 26+ 提供商 | ✅ 部分一致,本地仅配置了 10 个,但系统支持上限更高 |
| 会话类型 | ConversationSurface 枚举 | conversations 表 3 类型 | companion/channel/remote + 终端 | ✅ 完全一致 |
| 数据本地性 | 未在源码中直接验证 | SQLite DB 在本地 Application Support | "唯一出站是 LLM 请求,无遥测" | ✅ 源码架构与 README 承诺一致 |
9.3 方法 3 的独有发现(CodeGraph 无法覆盖的视角)
以下发现仅通过网络研究获得,源码树或本地配置无法独立验证:
| 发现 | 重要性 | 对架构分析的补充 |
|---|---|---|
| Apache-2.0 的商业友好性 | 🔴 战略级 | 决定了 agent 联邦制的"宪法"开源承诺——联邦不姓"私" |
| 8+ 竞品对比定位 | 🟡 战术级 | 确认联邦制在竞品中的独特性——其他项目多是单体 agent |
| 19 个外部 ACP Agent | 🔴 战略级 | "联邦不是孤岛"——NomiFun 的联邦边界是开放的 |
| 11 个 IM 渠道 | 🟢 特性级 | 联邦成员可以从聊天工具进入——多界面统一 |
| 46 个 crate 的模块化结构 | 🟡 战术级 | 与 CodeGraph 的 crate 发现互补——完整的模块图 |
| "数据安全不是设置而是架构" | 🔴 哲学级 | 联邦的存在理由——本地可信基础设施 |
| 公共安全通知与免责声明 | 🟡 治理级 | 联邦宪法的诚实性——不隐瞒 pre-1.0 状态 |
| 能力赠送(技能传播) | 🟢 特性级 | 联邦内的"法律移植"——技能可跨角色传播 |
9.4 方法 3 独有的结构性发现
9.4.1 三种门面(Facades)设计
方法 3 揭示了 Gateway 的三种公开暴露面,深化了我们对 server.rs 的理解:
| 门面 | 路径 | 协议 | 目标 | 安全级别 |
|---|---|---|---|---|
| 完整远程面 | /mcp |
MCP Streamable-HTTP, 认证 | Claude Code、Cursor、自有 Agent | 最高 |
| 精选子集 | /mcp-agent |
MCP | 策划过的 do-work 子集 | 中 |
| REST + OpenAPI | /v1 |
REST + OpenAPI 3.1 + SSE | 程序化集成 | 可配置 |
→ 联邦制的核心基础设计:同一个能力总线通过三种门面暴露给不同粒度、不同安全需求的联邦成员。
9.4.2 "Config Once, Use Anywhere"范式
"知识库、技能、agent、MCP 服务器、模型在中央枢纽定义一次,然后按对话/终端/渠道/伴侣选择复用。"
这解释了为何 MCP 服务器绑定到特定会话(我们在本地配置中发现的 conv_019f831d 现象)——该绑定是会话级选用,而非故障。它甚至是联邦制"可复用资产"的故意设计。
9.4.3 ACP 作为联邦入盟协议
方法 3 揭示了 ACP(Agent Client Protocol) 作为外部 Agent 加入联邦的门户。约 19 个外部 Agent(Claude Code、Codex、Gemini、Cursor、Copilot 等)通过此协议获取 NomiFun 的能力。
→ 这回答了我们在源码分析中的一个关键问题:Gateway 的 ACP 桥接服务于谁?——服务于独立的、异构的联邦成员。
9.5 修正与补充
| 本报告先前描述 | 方法 3 的修正 | 影响 |
|---|---|---|
| 27 backend crates + 6 agent crates + 4 shared | 完整为 46 个 crate(15 agent + 29 backend + 2 shared) | 部分 crate 在 agent/ 层但不在 CodeGraph 索引路径下 |
| 25+ 技能 | README 未明确量化 | 去掉不精确的数字 |
| MCP 服务器绑定问题可能为漏洞 | 可能是"Config Once"的设计——会话级选用 | 需要进一步确认意图 |
| "内部架构"视角 | 补充"竞品定位"和"市场生态" | 内外视角完整 |
9.6 联合分析的重要结论
三方研究的最大验证:NomiFun 的"Agent 联邦制"不仅在内部一致(源码→配置→模式),在外部也成立——竞品中没有同类架构。
| 竞品 | 架构模式 | 为什么不是联邦制 |
|---|---|---|
| LibrAgent | 多 Agent 并行 | 缺少能力总线——Agent 间无共享基础设施 |
| klarlabs nomi | 执行前评审 + 沙箱 | 单体 Agent 治理——无 DAG 参与者 |
| Somi | 桌面指挥中心 | 中心化而非联邦式 |
| nomos | 多 Agent 团队 | 缺少内容寻址委派的幂等性保证 |
| Codexia | Codex CLI 工作站 | 编码专用,非通用能力总线 |
| Nimi | 多提供商运行时 | 单一 Agent 而非多 Agent 联邦 |
结论在竞品对比中得到强化:8 个同类项目中,没有一个是"能力总线 + 本地优先 + 开放 Agent 联邦"的组合。NomiFun 作为第三个 Agent 治理维度的唯一代表,其联邦制定位是差异化核心。
10. 结论与建议
10.1 最终判定
NomiFun 是 Agent 联邦制(Agent Federalism)——一个在 Agent 架构分类中的新物种。
| 比例 | 哲学 | 对应层 |
|---|---|---|
| ~40% | 宪法控制面(Constitutional Control Plane) | 反应层 — 硬约束、安全门控、状态机 |
| ~30% | 运行时共和制(Runtime Republicanism) | 审慎层 — 规划、模型选择、动态适应 |
| ~30% | 全新维度 — 联邦制基础设施 | 组织层 — 多 Agent DAG、元监督、自治循环 |
10.2 NomiFun 与两种经典哲学的关键差异
| 特性 | Claude Code(共和制) | Codex(宪政) | NomiFun(联邦制) |
|---|---|---|---|
| 治理范围 | 单 Agent 会话 | 单 Agent 执行 | 多 Agent 组织 |
| 安全机制 | settings.json | 类型系统 | IDMM 双路监督 |
| 状态管理 | 上下文压缩 | 结构化状态 | 内容寻址 + CAS |
| 协作模式 | 无 | 无 | DAG 参与者系统 |
| 降级策略 | 超时/重试 | 失败禁用 | Fail-open 降级 |
| 元治理 | 无 | 无 | IDMM 递归监督 |
10.3 建议
- 对架构师:关注宪法漏洞风险——IDMM 规则与模型推理的交互边界需要更严格的测试覆盖
- 对安全团队:检查 Gateway 会话绑定策略,确保 MCP 工具不能被未授权会话访问
- 对 AI 研究者:Agent 联邦制揭示了从"单体智能"到"组织化智能"的架构过渡——DAG 参与者系统和内容寻址委派是这一过渡的核心技术
- 对平台开发者:考虑将 IDMM 策略从枚举硬编码升级为可插拔策略引擎,支持运行时策略热加载
10.4 有待探索的领域
- 🚧 未详细分析的 crate:workshop、creation、companion、channel、realtime
- 🚧 未深入探索的协议:ACP 协议细节、Gateway 与 MCP 的端口分配策略
- 🚧 未验证的假设:MAX_DEPTH=4 在实际中是否足够?
- 🚧 未运行的实际观察:IDMM 在真实使用中的干预频率和模式
本报告基于 CodeGraph 源码知识图谱、系统配置检查、深度网络研究、知识库哲学框架四项独立研究的联合分析。 分析目标:nomifun-tauri(v0.2.30),CodeGraph 索引 2,492 文件 / 58,278 节点 / 224,391 边。 方法 3 数据来源:nomifun_research.md(其他研究会话的深度网络分析)。 生成日期:2026-07-22