ULTRON Control Center
这是什么?
你的 AI 助手每次关闭窗口时都会忘记一切:你们做过的决定、已经解决过的错误、你的项目是如何搭建的。第二天你又得重新解释一遍。
ULTRON 赋予它记忆。 在你工作时,它会将重要信息保存在你自己的电脑上;当你开启新对话时,它会自动将这些信息提醒给 AI。你什么都不用做:像往常一样工作,而你的助手会越来越了解你。由你决定保存什么(所有内容都需经过审批托盘),并且没有任何信息离开你的机器。
基于事件溯源的本地记忆(brain.db,SQLite),配有语义索引(Qdrant + E5 1024d),通过钩子在每次会话中重新注入——通过常驻守护进程实现亚秒级混合召回。此外:AI 路由器(多提供商)、技能/代理编排器和桌面控制台(Tauri 2 + React 19)。所有状态均为可检查的本地文件。规范:docs/memory-spec.md。
Related MCP server: MCP Memory Server
有和没有 ULTRON 的区别
仅有 Claude Code | 使用 ULTRON | |
开启会话时 | 从零开始 | 恢复项目状态:状态、任务、决策 |
每次提示的上下文 | 你写的内容 | + 自动检索的相关记忆(约 84% 的实际提示) |
已解决的错误 | 会重复出现 | 会被记住("这个我们试过了,因为 X 失败了") |
保存什么 | 无 | 你在托盘中批准的内容(每次更改都有审计) |
数据存储位置 | — | 在你的磁盘上,以你可以打开的文件形式存在 |
与其他记忆系统相比(如 Mem0 等云服务),区别在于设计而非营销:这里的记忆是 100% 本地(无需账户、无需订阅、无需将你的代码发送给第三方)、受管控(AI 提议,你批准;每次写入都会留下审计事件)、诚实(如果不知道,它会选择放弃而不是注入填充内容——已测量)且开放(SQLite + Markdown + 一个标准 MCP 服务器,任何助手都可以查询)。
日常使用教程(人类 + AI):
docs/TUTORIAL.md· 记忆系统完整规范:docs/memory-spec.md· 组件安装:INSTALL.md· MIT 许可证。
记忆如何流动
flowchart LR
A[Prompt en Claude Code] -->|hook UserPromptSubmit| B[daemon ultron-memory<br/>E5 residente]
B --> C[(brain.db<br/>SQLite + FTS5)]
B --> D[(Qdrant<br/>E5 1024d)]
C -->|BM25| E[Fusion RRF + cross-encoder]
D -->|dense| E
E -->|pack de memorias| A
F[Fin de sesion] -->|hook Stop| G[Captura -> inbox de candidatos]
G -->|aprobacion| C
H[Cualquier cliente MCP<br/>Codex, Gemini CLI...] -->|MCP server| B真实数据(已测量,非模拟)
基于维护者的真实语料库(约 3,300 条活跃记忆)和 29 个手动标注的查询 oracle 进行测量——你的安装从空开始,召回率取决于你的语料库。可使用 ultron-memory eval --golden 和仓库中的脚本重现。
指标 | 数值 |
Recall@8(手动标注的 oracle) | 0.82 |
MRR(正确记忆排在前面) | 0.95 |
热守护进程编排 | 约 0.5 秒(vs 冷进程约 3.5 秒) |
空闲内存(应用 / 守护进程) | 36 MB / 约 40 MB(加载模型时为 1.5-3.5 GB) |
带记忆服务的实际提示 | 84%(基于真实流量校准的门控,不仅限于 golden) |
当语料库不知道答案时,系统会放弃而不是注入填充内容——召回的真实性也已测量(自有基准中的 abstain 类别)。
快速开始
完整系统(应用 + 技能 + 钩子 + 语义记忆)——推荐路径;它是幂等的,并且在修改任何内容之前会询问:
git clone https://github.com/SkiTemplar/ultron-control-center.git $env:USERPROFILE\.ultron
cd $env:USERPROFILE\.ultron
powershell -ExecutionPolicy Bypass -File .\install.ps1 # Linux: ./install.sh按组件安装(无向导,确定性;-DryRun 列出计划而不做任何修改):
.\install.ps1 -Core # app + memoria + hooks (el set por defecto)
.\install.ps1 -All # core + skills + tones + agents
.\install.ps1 -Skills -Tones # a la carta
.\install.ps1 -Core -DryRun # solo listar que haria
# Linux: ./install.sh --core | --all | --skills | --tones | --agents | --dry-run仅桌面应用(无技能/钩子/记忆 sidecar):
git clone https://github.com/SkiTemplar/ultron-control-center.git ~/.ultron && cd ~/.ultron/control-center
cp ../.env.example ../.env # opcional: claves de proveedores LLM (todas vacias por defecto)
npm install
npm run build:app # = kill-app + tauri build -> ejecutable de escritorio完整指南(从发布版一键引导、标志、故障排除):
INSTALL.md。
Qdrant 是可选的(没有它,召回会降级为仅稀疏召回);请参阅 docs/INSTALL-ADVANCED.md 的 Qdrant 部分。
每台机器的路径记录在
config/paths.example.toml 中。
特性
受管控的记忆 —
brain.db(SQLite)作为唯一真实来源;所有更改都通过一个附加审计事件的单一服务进行。混合召回 — 密集(E5 1024d / Qdrant)+ 稀疏(FTS5/BM25)通过 Reciprocal Rank Fusion 融合;没有 Qdrant 时降级为仅稀疏召回。
候选收件箱 — 自动捕获提出建议,人类批准;从不自动写入活跃记忆。
写入路径中的编辑 + 去重 — 在持久化或嵌入之前,排除秘密/PII,通过
content_hash排除重复项。AI 路由器 — 主提供商 -> 按区域回退链、密钥检测和使用/节省遥测;Rust 中的直接路由(无 sidecar LiteLLM)。
基于规则的编排器 — 将提示映射到意图 -> 工作流 -> 代理 -> 记忆;仅为模糊队列保留大型模型。
语气/个性 — 在编排过程中确定性检测聊天语气(词汇信号 + 显式请求);语气在 Library -> Tones 中编辑。实际配置(
~/.ultron/personality.json)是本地且被 gitignore 的;仓库仅发布编译后的种子(orchestrator/personality.rs)。语气仅影响对话:绝不涉及提交、文档或工件。
这是什么
ULTRON 控制中心不会取代 Claude Code:它是对其的增强。它提供持久化且受管控的记忆,根据成本和可用性将请求路由到多个 LLM 提供商,并自动检测适合某个提示的专家技能/代理。所有状态都存在于你可以检查、版本控制和手动编辑的本地文件(SQLite + JSON + markdown)中。
支柱 | 功能 |
受管控的记忆 |
|
混合召回 | 使用 Reciprocal Rank Fusion (RRF) 融合两个来源:密集(Qdrant 中的 E5 1024d 向量)+ 稀疏(基于 |
AI 路由器 | 提供商目录 + 区域,带有主提供商 -> 回退链、密钥检测、使用/节省遥测。无 sidecar LiteLLM:Rust 中的直接路由。 |
编排器 | 将提示(可能模糊)映射到意图 -> 工作流 -> 要委派的代理 -> 相关记忆 -> 约束,通过规则实现(不使用大型模型来解决规则/触发器可以处理的问题)。 |
后端架构(真实)
Rust 后端位于 control-center/src-tauri/src/。核心记忆模块位于 control-center/src-tauri/src/memory/。
记忆:SQLite 作为唯一真实来源
~/.ultron/brain.db(SQLite,WAL 模式)是规范的 SoT。规范模式位于memory/schema_v3.rs(记忆)+memory/schema_v4.rs(历史 v4 迁移:edges/unresolved_refs表,现已失效——代码图由外部 MCP CodeGraph 提供)/memory/migrations.rs,模型位于memory/model.rs(MemoryItem、MemoryCandidate、MemoryEvent以及治理枚举Status、Scope、Sensitivity、Source等)。MemoryService(memory/service.rs)是唯一的持久写入器。治理不变性:所有变更都经过此处并附加一个MemoryEvent审计记录。钩子和代理从不直接写入memory_items;它们仅提出MemoryCandidate,由人类(或自动批准策略)提升。在写入路径上应用守卫:在持久化或嵌入之前进行秘密/PII 编辑(
memory/redaction.rs),通过content_hash进行精确去重(memory/texthash.rs)以及通过 FTS 进行词汇去重。
Qdrant:派生索引(非真实来源)
ultron_memory集合(Qdrant)使用 MultilingualE5Large,1024 维度(memory/qdrant_index.rs)索引 ACTIVE 项目。它是一个派生索引:可以随时使用reindex_all重建,而brain.db仍然是真实来源。每次批准/编辑/恢复写入后,
sync_index使 Qdrant 与 SoT 保持同步(尽力而为;任何偏差都可以通过reconcile检测/修复)。旧的
ultron_sessions集合(384d BGE)已退役;这里的 Qdrant 始终是一个索引,而不是真实来源。
使用 RRF 的密集 + 稀疏混合召回
单一
recall命令(commands/memory/recall_unified.rs)使用 Reciprocal Rank Fusion(RRF_K = 60)进行融合:密集:
ultron_memory(Qdrant)中的 E5 向量。稀疏:基于
memory_items的 FTS5/BM25(仅status=active)。
在令牌预算(
TOKEN_BUDGET = 1500)下返回一个紧凑的摘要上下文包,并附带为什么选择此记忆的痕迹(按来源的排名、分数、丢弃项),供检索检查器使用。唯一的召回路径是带有 RRF 的统一
recall命令;来源是 Qdrant(密集)+ SQLite/FTS5(稀疏)。不使用外部记忆服务。
通过 Stop hook 自动捕获
在
Stop中,钩子将会话记录传递给memory/capture.rs::capture_session。它:请求一个 LLM(通过
ai_router::route,区域chat)提取少量持久事实/决策;将每个事实转换为一个
MemoryCandidate(经过脱敏 + 去重),并将其放入受管理收件箱等待人工批准——绝不会自动提升为活动状态。
故障安全:如果路由器没有可用的提供者,则降级为廉价的本地启发式方法,以确保 Stop 钩子永不失败。
收件箱通过
commands/memory/inbox.rs进行管理(memory_inbox_list、approve_candidate、reject_candidate)。
AI Router:区域、提供者、回退与遥测
后端位于模块
ai_router/(mod.rs + exec.rs + providers/ + seed.rs + store.rs)中。状态存储在~/.ultron/cockpit/ai-router/下的三个 JSON 文件中:providers.json(目录)、zones.json(具有primary+fallbacks的区域)、metrics.json(计数器 + 节省额)。route(zone, prompt)遍历主提供者 -> 回退链,跳过没有可用 API 密钥的提供者,在遥测中记录延迟/令牌/节省,并返回Result<"String", "String">(错误原样返回,绝不 panic,10 秒上限)。各提供者的包装器:anthropic(claude-haiku)、codex(OpenAI 兼容)、gemini、groq、ollama(本地,无密钥)、deepseek。健康检查使用廉价探测,不消耗令牌;测试调用则会消耗。
默认区域包括
chat、code-edit、code-review、research-web、code-fast-local等。
编排器:技能/代理的自动检测
模块
orchestrator/(rules.rs + ranking.rs + orchestrate.rs)将prompt -> intent -> workflow -> 要委派的代理 -> 记忆 -> 约束进行映射。意图分类是基于规则的(西班牙语/英语双语);大型模型保留给歧义队列。复用(而非重复):代理目录(
memory/catalog.rs)、统一召回和内置工作流(agent_orchestration.rs)。它从不写入持久记忆,并将任务委派给~/.claude/agents中的真实代理(磁盘上不存在的“幽灵代理”会被清理)。
代码图:MCP CodeGraph(外部)
代码图(存在哪些符号、谁调用谁、影响分析)由 CodeGraph(
@colbymchenry/codegraph,MIT)提供,安装为 MCP 服务器,代理通过codegraph_explore/codegraph_callers/codegraph_impact查询。它使用 tree-sitter(AST)在.codegraph/(本地 SQLite,增量)中索引仓库——支持 20 多种语言。
Plugin Updates:插件更新检查
Library 中的 Updates 子选项卡(
src/components/library/PluginUpdates.tsx),它使用后端命令plugin_check_updates_bulk(force)和plugin_changelog_summary(coordinate, installed_sha?)。将每个插件的已安装 SHA 与市场最新 SHA 进行比较,标记哪些插件有可用更新,并显示最新的提交消息 / 变更日志摘要。
技术栈
层 | 技术 |
前端(Control Center) | Tauri 2 + React 19 + TypeScript ( |
后端(Control Center) | 稳定的 Rust( |
记忆(SoT) | SQLite(FTS5),位于 |
稠密索引 | 原生 Qdrant( |
Embeddings | E5(稠密)通过 |
Sidecar CLI 钩子 |
|
Scripting OS | PowerShell 5.1+ / 位于 |
LLM 运行时 | Claude Code(主要);Codex CLI 可选。Gemini CLI 已于 2026-06-19 退役(Google 终止了免费层 OAuth);Gemini 仅保留为 AI Router 的云回退 |
Sidecar 二进制文件在 control-center/src-tauri/Cargo.toml 中声明:ultron-memory(需要 qdrant feature)。
构建
# desde control-center/
npm install
npm run build:app # = kill-app + tauri build (genera el ejecutable de escritorio)其他有用的脚本(在 control-center/package.json 中):
npm run dev # vite dev server (frontend)
npm run tauri # CLI de Tauri
npm test # vitest (frontend)Windows 注意:
build:app首先运行kill-app以关闭任何 正在运行的实例;过时的二进制文件是“未应用更改”的常见原因:关闭应用并重新编译。
文件夹结构
~/.ultron/
├── brain.db # SQLite — fuente de verdad de la memoria
├── qdrant-native/ # binario nativo de Qdrant (indice denso derivado)
├── qdrant_storage/ # datos persistidos por Qdrant
├── control-center/ # la app Tauri 2 + React 19
│ ├── src/ # frontend React/TS (componentes, tabs)
│ │ └── components/ # Dashboard, AIRouter, Library, Projects, ...
│ └── src-tauri/
│ └── src/
│ ├── memory/ # kernel de memoria (service, sqlite_store,
│ │ # qdrant_index, capture, redaction, texthash, ...)
│ ├── commands/ # comandos Tauri por dominio (memory, ai_router,
│ │ # projects, system_ops, ...)
│ ├── ai_router/ # AI Router (mod/exec/health/providers/seed/store/types)
│ ├── orchestrator/ # mod/orchestrate/ranking/rules/types_model
│ └── bin/ # sidecar ultron-memory
├── cockpit/ # config + estado en JSON/markdown
│ └── ai-router/ # providers.json, zones.json, metrics.json
├── personality.json # tonos del usuario (LOCAL, gitignored; se
│ # auto-siembra desde los seeds compilados)
├── hooks/ # hooks de ciclo de vida
├── skills/ # skills core (SKILL.md; catalogo curado no se publica)
├── plans/ projects/ # planes y proyectos
├── sessions/ # logs de sesion / telemetria de routing
└── docs/ # documentacion ampliada当前状态
记忆:规范内核已激活。SoT =
brain.db;稠密索引ultron_memory(E5 1024d)在写入时同步;统一稠密+稀疏召回与 RRF 可操作(在没有 Qdrant 时降级为仅稀疏)。写入路径带有秘密脱敏和按 content_hash 去重,已接线并测试。自动捕获:Stop 钩子 ->
capture_session-> 候选者进入受管收件箱;通过收件箱命令进行人工批准/拒绝。AI Router:真正的路由,带主/回退链、密钥检测和使用/节省遥测;没有 LiteLLM sidecar。
语气(Tonos):在 orchestrate 中进行确定性检测(检测器的 JS/Rust 对等性通过 16/16 门验证);Library -> Tones 中的可视化编辑器和检测游乐场。本地的
personality.json(gitignored)包含可发布的编译种子;硬性限制:语气仅适用于聊天,绝不适用于工件。AI 文本检测器:PostToolUse 钩子,当书面散文“像是 AI 写的”时发出警告 + 基于研究目录的确定性模式实验室;带有 CLI 和用例库的匹配器。它指出问题,不会重写。
UI(Control Center,v2.7.1):侧边栏包含 Dashboard、Usage、AI Router、System(包含 Hooks/Schedules 子选项卡)、MCPs、Library(子选项卡 Skills/Agents/Rules/Updates)、Memory、Notes、Learn、Sessions、Projects、Finance(仅通过
VITE_FINANCE=1进行本地构建)、Settings 和 Notifications。Memory 选项卡是活的(2026-06-04 重新添加,Sidebar.tsx):它展示候选收件箱(批准/拒绝/编辑)和brain.db的健康状态;记忆内核仍然仅限后端,但其人在回路治理从此选项卡进行(除命令外)。
许可证
MIT — 参见 LICENSE。版权 (c) 2026 Rodrigo Fernandez。
This server cannot be deployed
Maintenance
Related MCP Connectors
An MCP memory server. One memory your agents share — across models, devices and apps.
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Private persistent memory for Claude, ChatGPT & Gemini via MCP - semantic search, zero-code setup.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- -licenseNot gradedqualityBmaintenanceEnterprise-grade MCP server for persistent, intelligent memory management across Claude Code sessions.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives Claude persistent memory by storing conversation context, entities, and enabling semantic search across sessions.18 npm1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server providing Claude with persistent, local memory for tracking architectural decisions, dead ends, and project context across conversations.MIT
- AlicenseNot gradedqualityCmaintenanceA persistent memory MCP server for Claude Code that enables long-term recall across sessions via hybrid search, code intelligence, and tools for reading/writing memory.9 npm5MIT