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% 로컬 (계정 불필요, 구독 불필요, 코드를 제3자에게 보내지 않음), 통제됨 (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개 쿼리 오라클로 측정 — 당신의 설치는 빈 상태로 시작하며 리콜 수치는 당신의 코퍼스에 따라 달라집니다. ultron-memory eval --golden과 저장소의 스크립트로 재현 가능합니다.
메트릭 | 값 |
Recall@8 (수동 레이블링 오라클) | 0.82 |
MRR (올바른 메모리가 상위에 랭크) | 0.95 |
핫 데몬으로 오케스트레이션 | ~0.5초 (콜드 프로세스의 ~3.5초 대비) |
유휴 RAM (앱 / 데몬) | 36 MB / ~40 MB (모델 로드 시 1.5-3.5 GB) |
메모리로 서비스된 실제 프롬프트 비율 | 84% (골든 데이터뿐만 아니라 실제 트래픽으로 보정된 게이트) |
코퍼스가 답을 모를 때 시스템은 기권하여 주입을 피합니다 — 리콜의 정직성도 측정됩니다 (자체 벤치의 기권 카테고리).
빠른 시작
전체 시스템 (앱 + 스킬 + 후크 + 시맨틱 메모리) — 권장 경로; 멱등적이며 건드리기 전에 물어봅니다:
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데스크톱 앱만 (스킬/후크/메모리 사이드카 없음):
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에서 직접 라우팅 (사이드카 LiteLLM 없음).
규칙 기반 오케스트레이터 — 프롬프트 -> 의도 -> 워크플로 -> 에이전트 -> 메모리 매핑; 규칙/트리거로 해결되는 부분에 큰 모델을 예약하지 않음.
톤 / 성격 — 오케스트레이션 내에서 채팅 톤의 결정론적 감지 (어휘 신호 + 명시적 요청); 톤은 Library -> Tones에서 편집. 실제 설정 (
~/.ultron/personality.json)은 로컬이며 gitignored; 저장소는 컴파일된 시드만 게시 (orchestrator/personality.rs). 톤은 대화에만 적용: 커밋, 문서, 아티팩트에는 적용되지 않음.
개요
ULTRON 컨트롤 센터는 Claude Code를 대체하지 않습니다: 감쌉니다. 지속적이고 통제된 메모리를 제공하고, 비용과 가용성에 따라 여러 LLM 제공업체로 요청을 라우팅하며, 프롬프트에 적합한 전문 스킬/에이전트를 자동으로 감지합니다. 모든 상태는 검사, 버전 관리, 수동 편집이 가능한 로컬 파일 (SQLite + JSON + markdown)에 저장됩니다.
핵심 요소 | 기능 |
통제된 메모리 |
|
하이브리드 리콜 | Reciprocal Rank Fusion (RRF)으로 두 소스 융합: 밀집 (Qdrant의 E5 1024d 벡터) + 희소 (FTS5/BM25 on |
AI 라우터 | 제공업체 카탈로그 + 영역별 기본 -> 폴백 체인, 키 감지, 사용량/절감 텔레메트리. 사이드카 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 차원으로 ACTIVE 항목을 인덱싱합니다 (memory/qdrant_index.rs). 파생 인덱스입니다: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) 내에서 요약의 압축된 컨텍스트 팩을 반환하며, Retrieval Inspector를 위한 이 메모리가 선택된 이유 추적 (소스별 순위, 점수, 폐기)을 포함합니다.유일한 리콜 경로는 RRF를 사용한 통합
recall명령입니다; 소스는 Qdrant (밀집) + SQLite/FTS5 (희소)입니다. 외부 메모리 서비스를 사용하지 않습니다.
Stop hook을 통한 자동 캡처
Stop에서 hook은 세션의 대본을memory/capture.rs::capture_session에 전달합니다. 이 함수는:LLM에 요청하여(
ai_router::route,chat영역) 몇 가지 지속적인 사실/결정을 추출합니다.각 사실을
MemoryCandidate로 변환하고(비밀 편집 + 중복 제거를 거쳐) 관리되는 받은 편지함에 남겨 인간 승인을 기다립니다 — 절대 자동으로 활성 메모리로 승격되지 않습니다.
Fail-safe: 라우터에 사용 가능한 공급자가 없으면 저렴한 로컬 휴리스틱으로 대체되어 Stop hook이 절대 실패하지 않도록 합니다.
받은 편지함은
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)는 primary -> fallbacks 체인을 순회하며, 사용 가능한 API 키가 없는 공급자는 건너뛰고, 지연 시간/토큰/절약을 텔레메트리에 기록하고Result<String, String>을 반환합니다(오류는 그대로, 절대 패닉 없음, 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 -> 위임할 에이전트 -> 메모리 -> 제약 조건을 매핑합니다. 의도 분류는 규칙 기반(이중 언어 es/en)입니다. 큰 모델은 모호한 큐를 위해 예약됩니다.재사용(중복하지 않음): 에이전트 카탈로그(
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개 이상의 언어 지원.
플러그인 업데이트: 플러그인 업데이트 확인
Library 내의 Updates 하위 탭(
src/components/library/PluginUpdates.tsx)은 백엔드 명령어plugin_check_updates_bulk(force)와plugin_changelog_summary(coordinate, installed_sha?)를 사용합니다.각 플러그인에 대해 설치된 SHA를 마켓플레이스의 최신 SHA와 비교하여 업데이트가 가능한 플러그인을 표시하고 최신 커밋 메시지/변경 로그 요약을 보여줍니다.
Stack
계층 | 기술 |
프론트엔드 (Control Center) | Tauri 2 + React 19 + TypeScript ( |
백엔드 (Control Center) | Rust 안정 버전 ( |
메모리 (SoT) | SQLite (FTS5) ( |
밀집 인덱스 | 네이티브 Qdrant ( |
임베딩 | E5 (밀집) ( |
사이드카 CLI 훅 |
|
스크립팅 OS | PowerShell 5.1+ / 스크립트 ( |
LLM 런타임 | Claude Code (주력); Codex CLI (선택 사항). Gemini CLI 2026-06-19 폐기 (Google이 무료 OAuth 계층 종료); Gemini는 AI Router의 클라우드 폴백으로만 남음 |
사이드카 바이너리는 control-center/src-tauri/Cargo.toml에 선언됨: ultron-memory (qdrant 기능 필요).
Build
# 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 hook ->
capture_session-> 관리되는 받은 편지함의 후보; 받은 편지함 명령을 통한 인간 승인/거부.AI Router: primary/fallback 체인, 키 감지 및 사용량/절약 텔레메트리를 포함한 실제 라우팅; LiteLLM 사이드카 없음.
톤: 오케스트레이터의 결정론적 감지 (JS/Rust 감지기 패리티는 게이트 16/16으로 확인됨); Library -> Tones의 시각적 편집기 및 감지 플레이그라운드. 로컬
personality.json(gitignored)에 게시 가능한 시드가 컴파일되어 있음; 엄격한 제한: 톤은 채팅에만 적용되며 아티팩트에는 절대 적용되지 않음.AI 텍스트 감지기: 작성된 산문이 AI처럼 "들릴" 때 경고하는 PostToolUse 훅 + 연구 카탈로그에 대한 결정론적 패턴 연구소; 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 참조. Copyright (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