271 lines
28 KiB
HTML
271 lines
28 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||
<title>MemOS Local Plugin 文档 | OpenClaw / Hermes</title>
|
||
<meta name="description" content="MemOS Local Plugin 用户文档:安装 OpenClaw 与 Hermes 适配器、配置本地运行时、理解 Reflect2Evolve 算法、使用 Viewer 排查记忆与技能。">
|
||
<link rel="icon" href="https://statics.memtensor.com.cn/logo/color-m.svg" type="image/svg+xml">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
*{margin:0;padding:0;box-sizing:border-box}
|
||
:root{--bg:#06080f;--card:rgba(14,18,32,.72);--card2:rgba(20,26,48,.82);--line:rgba(99,140,255,.12);--line2:rgba(99,140,255,.25);--text:#eef1ff;--muted:rgba(200,210,255,.58);--soft:rgba(160,175,220,.34);--cyan:#00e5ff;--blue:#638cff;--purple:#b16cff;--green:#00e676;--amber:#ffca28;--rose:#ff5f8f;--grad:linear-gradient(135deg,#00e5ff,#638cff,#b16cff);--mono:'JetBrains Mono','SF Mono',ui-monospace,monospace;--font:'Inter',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
||
html{scroll-behavior:smooth;scroll-padding-top:86px}
|
||
body{font-family:var(--font);background:var(--bg);color:var(--text);line-height:1.72;font-size:15px;overflow-x:hidden}
|
||
body::before{content:'';position:fixed;inset:0;z-index:0;pointer-events:none;background-image:linear-gradient(rgba(99,140,255,.03) 1px,transparent 1px),linear-gradient(90deg,rgba(99,140,255,.03) 1px,transparent 1px);background-size:60px 60px}
|
||
body::after{content:'';position:fixed;inset:-20% -10%;z-index:0;pointer-events:none;background:radial-gradient(circle at 12% 0,rgba(0,229,255,.10),transparent 28%),radial-gradient(circle at 86% 12%,rgba(177,108,255,.09),transparent 30%),radial-gradient(circle at 50% 80%,rgba(255,60,172,.04),transparent 34%)}
|
||
a{color:var(--cyan);text-decoration:none;transition:all .2s}a:hover{color:var(--text);text-decoration:none}
|
||
.top{position:fixed;inset:0 0 auto 0;height:60px;z-index:30;display:flex;align-items:center;gap:14px;padding:0 24px;border-bottom:1px solid var(--line);background:rgba(6,8,15,.76);backdrop-filter:blur(24px) saturate(1.4)}
|
||
.brand{display:flex;align-items:center;gap:10px;color:var(--text);font-weight:800;font-size:17px;letter-spacing:-.02em;text-decoration:none}.brand:hover{color:var(--text);text-decoration:none}.brand img{width:36px;height:36px}.brand .sub,.brand small{display:block;color:var(--muted);font-size:10px;font-weight:400;line-height:1.1}
|
||
.top nav{margin-left:auto;display:flex;gap:4px;align-items:center}.top nav a,.lang button{color:var(--muted);font-size:13px;font-weight:600;padding:6px 12px;border-radius:8px;border:1px solid transparent;background:transparent;cursor:pointer}.top nav a:hover,.lang button.active{background:rgba(99,140,255,.08);border-color:var(--line);color:var(--text);text-decoration:none}
|
||
.lang{display:flex;gap:2px;margin-left:8px;padding:2px;border:1px solid var(--line);border-radius:8px;background:rgba(99,140,255,.04)}
|
||
.layout{position:relative;z-index:1;display:grid;grid-template-columns:268px minmax(0,960px);gap:40px;align-items:start;margin-top:60px;padding:44px clamp(16px,2vw,32px) 96px;max-width:none;margin-left:0;margin-right:0}
|
||
.sidebar{position:sticky;top:84px;border:1px solid var(--line);background:rgba(14,18,32,.62);border-radius:18px;padding:16px;max-height:calc(100vh - 104px);overflow:auto;backdrop-filter:blur(12px);box-shadow:0 10px 40px rgba(0,0,0,.28)}
|
||
.side-title{color:var(--soft);font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.12em;margin:14px 8px 8px}.side-title:first-child{margin-top:0}
|
||
.sidebar a{display:block;padding:7px 9px;border-radius:10px;color:var(--muted);font-size:13px;font-weight:650}.sidebar a:hover{background:rgba(99,140,255,.08);color:var(--text);text-decoration:none}
|
||
main{min-width:0}.hero{padding:42px 0 34px}.badge{display:inline-flex;gap:8px;align-items:center;border:1px solid rgba(0,229,255,.2);background:rgba(0,229,255,.06);color:var(--cyan);border-radius:24px;padding:6px 18px;font-size:12px;font-weight:700;backdrop-filter:blur(8px)}h1{font-size:clamp(40px,6vw,72px);font-weight:900;line-height:1.05;letter-spacing:-.055em;margin:18px 0;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}.lead{font-size:18px;color:var(--muted);max-width:820px;line-height:1.85}
|
||
section{border-top:1px solid var(--line);padding:50px 0}h2{font-size:clamp(28px,4vw,44px);font-weight:900;letter-spacing:-.04em;line-height:1.1;margin-bottom:14px}h3{font-size:20px;font-weight:800;margin:28px 0 8px}h4{font-size:15px;color:var(--text);margin:20px 0 8px}p{color:var(--muted);margin:8px 0 12px}ul,ol{padding-left:22px;color:var(--muted);margin:10px 0 16px}li{margin:5px 0}
|
||
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:20px 0}.card{border:1px solid var(--line);background:var(--card);border-radius:16px;padding:20px;backdrop-filter:blur(12px);transition:all .25s;position:relative;overflow:hidden}.card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;background:var(--grad);opacity:0;transition:opacity .25s}.card:hover{border-color:var(--line2);background:var(--card2);transform:translateY(-3px);box-shadow:0 0 30px rgba(0,229,255,.11)}.card:hover::before{opacity:1}.card b{display:block;color:var(--text);font-size:16px;margin-bottom:6px}.card p{font-size:13px;margin:0}
|
||
pre{position:relative;overflow:auto;background:rgba(10,14,28,.86);border:1px solid var(--line);border-radius:16px;padding:18px;color:#d4ddff;font-family:var(--mono);font-size:13px;line-height:1.7;margin:14px 0 20px;backdrop-filter:blur(12px);box-shadow:0 10px 40px rgba(0,0,0,.24)}code{font-family:var(--mono);font-size:.9em;color:#aefbf0;background:rgba(0,229,255,.08);border:1px solid rgba(0,229,255,.12);border-radius:5px;padding:1px 5px}pre code{background:transparent;border:0;padding:0;color:inherit}.c{color:rgba(212,221,255,.42)}.s{color:#00e676}.k{color:#00e5ff}.n{color:#ffca28}
|
||
table{width:100%;border-collapse:collapse;margin:16px 0 24px;border:1px solid var(--line);border-radius:16px;overflow:hidden;display:table;background:rgba(14,18,32,.5);backdrop-filter:blur(12px)}th,td{padding:11px 13px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}th{background:rgba(99,140,255,.08);color:var(--text);font-size:13px}td{color:var(--muted);font-size:13px}tr:last-child td{border-bottom:0}
|
||
.callout{border:1px solid rgba(0,229,255,.22);background:rgba(0,229,255,.07);border-radius:16px;padding:15px 17px;color:var(--muted);margin:16px 0;backdrop-filter:blur(10px)}.callout.warn{border-color:rgba(255,202,40,.25);background:rgba(255,202,40,.07)}.callout strong{color:var(--text)}
|
||
.diagram{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));gap:8px;margin:20px 0;overflow:auto}.box{border:1px solid var(--line);background:var(--card);border-radius:14px;padding:12px;text-align:center;min-height:82px;display:flex;align-items:center;justify-content:center;flex-direction:column;color:var(--text);font-weight:850;backdrop-filter:blur(12px)}.box small{display:block;color:var(--soft);font-weight:650;margin-top:4px}.arrow{display:flex;align-items:center;justify-content:center;color:var(--soft)}
|
||
.lang-en{display:none}body.en .lang-zh{display:none!important}body.en .lang-en{display:initial!important}
|
||
@media(max-width:980px){.layout{grid-template-columns:1fr}.sidebar{position:relative;top:auto;max-height:none}.cards{grid-template-columns:1fr 1fr}.top nav a{display:none}}
|
||
@media(max-width:640px){.layout{padding:30px 16px 70px}.cards{grid-template-columns:1fr}.diagram{grid-template-columns:1fr}.arrow{display:none}table{display:block;overflow:auto}.brand .sub,.brand small{display:none}.brand img{width:32px;height:32px}h1{font-size:38px}}
|
||
.site-footer{position:relative;z-index:1;border-top:1px solid var(--line);padding:36px 0;background:rgba(6,8,15,.6)}
|
||
.site-footer .inner{max-width:1200px;margin:0 auto;padding:0 24px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:14px}
|
||
.site-footer .brand-foot{display:flex;align-items:center;gap:8px;color:var(--muted);font-weight:700;font-size:13px}
|
||
.site-footer .brand-foot img{width:28px;height:28px}
|
||
.site-footer .links{display:flex;gap:20px;flex-wrap:wrap}
|
||
.site-footer .links a{color:var(--soft);font-size:12px;text-decoration:none}
|
||
.site-footer .links a:hover{color:var(--cyan)}
|
||
.site-footer .copy{color:var(--soft);font-size:10px;width:100%;text-align:center;margin-top:12px}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<header class="top">
|
||
<a class="brand" href="../index.html"><img src="https://statics.memtensor.com.cn/logo/white-memos.svg" alt="MemOS"><span>MemOS<span class="sub lang-zh">本地插件文档</span><span class="sub lang-en">Local Plugin Docs</span></span></a>
|
||
<nav>
|
||
<a href="../index.html"><span class="lang-zh">首页</span><span class="lang-en">Home</span></a>
|
||
<a href="#quickstart"><span class="lang-zh">安装</span><span class="lang-en">Install</span></a>
|
||
<a href="#algorithm"><span class="lang-zh">算法</span><span class="lang-en">Algorithm</span></a>
|
||
<a href="troubleshooting.html"><span class="lang-zh">排查</span><span class="lang-en">Troubleshooting</span></a>
|
||
</nav>
|
||
<div class="lang"><button type="button" data-lang="zh" class="active">中</button><button type="button" data-lang="en">EN</button></div>
|
||
</header>
|
||
<div class="layout">
|
||
<aside class="sidebar">
|
||
<div class="side-title"><span class="lang-zh">开始</span><span class="lang-en">Start</span></div>
|
||
<a href="#overview"><span class="lang-zh">概览</span><span class="lang-en">Overview</span></a>
|
||
<a href="#quickstart"><span class="lang-zh">快速开始</span><span class="lang-en">Quick Start</span></a>
|
||
<a href="#runtime"><span class="lang-zh">运行时路径</span><span class="lang-en">Runtime Paths</span></a>
|
||
<div class="side-title"><span class="lang-zh">架构</span><span class="lang-en">Architecture</span></div>
|
||
<a href="#architecture"><span class="lang-zh">分层架构</span><span class="lang-en">Layers</span></a>
|
||
<a href="#algorithm"><span class="lang-zh">Reflect2Evolve</span><span class="lang-en">Reflect2Evolve</span></a>
|
||
<a href="#retrieval"><span class="lang-zh">三层检索</span><span class="lang-en">Retrieval</span></a>
|
||
<div class="side-title"><span class="lang-zh">使用</span><span class="lang-en">Usage</span></div>
|
||
<a href="#viewer">Viewer</a>
|
||
<a href="#config"><span class="lang-zh">配置</span><span class="lang-en">Config</span></a>
|
||
<a href="#api">HTTP / Events</a>
|
||
<a href="#security"><span class="lang-zh">安全</span><span class="lang-en">Security</span></a>
|
||
<a href="troubleshooting.html"><span class="lang-zh">安装排查</span><span class="lang-en">Troubleshooting</span></a>
|
||
</aside>
|
||
<main>
|
||
<div class="hero" id="overview">
|
||
<div class="badge"><span class="lang-zh">用户文档</span><span class="lang-en">User Docs</span> · @memtensor/memos-local-plugin</div>
|
||
<h1><span class="lang-zh">OpenClaw 与 Hermes 的本地进化记忆系统</span><span class="lang-en">Local evolving memory for OpenClaw and Hermes</span></h1>
|
||
<p class="lead"><span class="lang-zh">MemOS Local Plugin 提供一个 agent-agnostic 的算法核心和两个宿主适配器。OpenClaw 使用进程内 TypeScript 插件,Hermes 使用 Python MemoryProvider + JSON-RPC bridge;两者共享同一套 L1/L2/L3/Skill 算法,但运行时数据完全隔离。</span><span class="lang-en">MemOS Local Plugin ships one agent-agnostic core with two host adapters. OpenClaw uses an in-process TypeScript plugin; Hermes uses a Python MemoryProvider and JSON-RPC bridge. Both share the same L1/L2/L3/Skill algorithm while keeping runtime data isolated.</span></p>
|
||
</div>
|
||
<section id="quickstart">
|
||
<h2><span class="lang-zh">快速开始</span><span class="lang-en">Quick Start</span></h2>
|
||
<p><span class="lang-zh">安装器支持 macOS / Linux / Windows,会自动检查 Node.js 20+、下载 npm 包、重建原生依赖、写入 <code>config.yaml</code>,并按需启动宿主运行时。</span><span class="lang-en">The installer supports macOS/Linux/Windows. It checks Node.js 20+, downloads the npm package, rebuilds native dependencies, writes <code>config.yaml</code>, and starts the host runtime when needed.</span></p>
|
||
<p><strong><span class="lang-zh">macOS / Linux:</span><span class="lang-en">macOS / Linux:</span></strong></p>
|
||
<pre><code><span class="c"># Latest from the repository</span>
|
||
curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash</code></pre>
|
||
<p><strong><span class="lang-zh">Windows (PowerShell):</span><span class="lang-en">Windows (PowerShell):</span></strong></p>
|
||
<pre><code><span class="c"># Latest from the repository</span>
|
||
irm https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.ps1 | iex</code></pre>
|
||
<p><span class="lang-zh">从源码目录安装或测试指定版本:</span><span class="lang-en">Install from a source checkout or test a specific version:</span></p>
|
||
<pre><code>cd apps/memos-local-plugin
|
||
bash install.sh --version 2.0.0-beta.11
|
||
|
||
<span class="c"># Or test a local package before publishing</span>
|
||
npm pack
|
||
bash install.sh --version ./memtensor-memos-local-plugin-*.tgz</code></pre>
|
||
<div class="callout warn"><strong><span class="lang-zh">注意:</span><span class="lang-en">Note:</span></strong> <span class="lang-zh">新版安装器不再支持 <code>--port</code>。OpenClaw 固定使用 <code>18799</code>,Hermes 固定使用 <code>18800</code>,避免两个宿主共享一个 UI 导致写入归属不清。</span><span class="lang-en">The new installer no longer supports <code>--port</code>. OpenClaw owns <code>18799</code>; Hermes owns <code>18800</code>, avoiding ambiguous writes across hosts.</span></div>
|
||
</section>
|
||
<section id="runtime">
|
||
<h2><span class="lang-zh">运行时路径</span><span class="lang-en">Runtime Paths</span></h2>
|
||
<table>
|
||
<tr><th>Agent</th><th><span class="lang-zh">代码安装位置</span><span class="lang-en">Code Installed To</span></th><th><span class="lang-zh">数据与配置</span><span class="lang-en">Data and Config</span></th><th>Viewer</th></tr>
|
||
<tr><td>OpenClaw</td><td><code>~/.openclaw/extensions/memos-local-plugin/</code></td><td><code>~/.openclaw/memos-plugin/</code></td><td><code>http://127.0.0.1:18799</code></td></tr>
|
||
<tr><td>Hermes</td><td><code>~/.hermes/memos-plugin/</code></td><td><code>~/.hermes/memos-plugin/</code></td><td><code>http://127.0.0.1:18800</code></td></tr>
|
||
</table>
|
||
<p><span class="lang-zh">运行时目录包含:</span><span class="lang-en">Each runtime directory contains:</span></p>
|
||
<pre><code>config.yaml <span class="c"># only config file; chmod 600, secrets live here</span>
|
||
data/memos.db <span class="c"># SQLite: sessions, episodes, traces, policies, world, skills, feedback</span>
|
||
skills/ <span class="c"># crystallized skill packages</span>
|
||
logs/ <span class="c"># memos.log, error.log, audit.log, llm.jsonl, perf.jsonl, events.jsonl</span>
|
||
daemon/ <span class="c"># bridge pid/port files, mostly for Hermes</span></code></pre>
|
||
<div class="callout"><span class="lang-zh">升级或卸载插件不会删除 <code>data/</code>、<code>skills/</code>、<code>logs/</code> 或 <code>config.yaml</code>。</span><span class="lang-en">Upgrade and uninstall flows do not remove <code>data/</code>, <code>skills/</code>, <code>logs/</code>, or <code>config.yaml</code>.</span></div>
|
||
</section>
|
||
<section id="architecture">
|
||
<h2><span class="lang-zh">分层架构</span><span class="lang-en">Layered Architecture</span></h2>
|
||
<div class="diagram">
|
||
<div class="box">Agent Host<small>OpenClaw / Hermes</small></div><div class="arrow">→</div>
|
||
<div class="box">Adapter<small>TS / Python</small></div><div class="arrow">→</div>
|
||
<div class="box">agent-contract<small>DTO / events / JSON-RPC</small></div><div class="arrow">→</div>
|
||
<div class="box">core<small>algorithm + storage</small></div>
|
||
</div>
|
||
<div class="cards">
|
||
<div class="card"><b>OpenClaw</b><p><span class="lang-zh">标准 OpenClaw 插件,入口、工具和 hooks 直接调用 core。</span><span class="lang-en">Standard OpenClaw plugin entry, tools, and hooks calling core directly.</span></p></div>
|
||
<div class="card"><b>Hermes</b><p><span class="lang-zh">Python MemoryProvider 通过 bridge.cts 的 JSON-RPC 方法代理到 core。</span><span class="lang-en">Python MemoryProvider proxies to core through bridge.cts JSON-RPC methods.</span></p></div>
|
||
<div class="card"><b>Viewer</b><p><span class="lang-zh">由 server/ 提供 <code>/api/v1/*</code> HTTP + SSE,读取 core 的可观察事件和 SQLite 状态。</span><span class="lang-en"><code>/api/v1/*</code> HTTP + SSE served by server/, reading core events and SQLite state.</span></p></div>
|
||
</div>
|
||
</section>
|
||
<section id="algorithm">
|
||
<h2>Reflect2Evolve</h2>
|
||
<p><span class="lang-zh">新版算法把记忆拆成四个互相反馈的层级,并用 step-level 与 task-level 两类反馈持续更新。</span><span class="lang-en">The new algorithm splits memory into four cooperating layers and continuously updates them from step-level and task-level feedback.</span></p>
|
||
<table>
|
||
<tr><th><span class="lang-zh">层级</span><span class="lang-en">Layer</span></th><th><span class="lang-zh">内容</span><span class="lang-en">What It Stores</span></th><th><span class="lang-zh">价值</span><span class="lang-en">Why It Matters</span></th></tr>
|
||
<tr><td>L1 trace</td><td><span class="lang-zh">每一步 action、observation、reflection、value。</span><span class="lang-en">Step action, observation, reflection, and value.</span></td><td><span class="lang-zh">保留可验证证据,支撑后续归纳。</span><span class="lang-en">Grounded evidence for later induction.</span></td></tr>
|
||
<tr><td>L2 policy</td><td><span class="lang-zh">跨任务归纳出的 trigger、procedure、verification、boundary。</span><span class="lang-en">Induced trigger, procedure, verification, and boundary.</span></td><td><span class="lang-zh">把重复成功经验变成策略。</span><span class="lang-en">Turns repeated success into strategy.</span></td></tr>
|
||
<tr><td>L3 world model</td><td><span class="lang-zh">从 L2 + L1 压缩出的环境认知。</span><span class="lang-en">Environmental cognition compressed from L2 + L1.</span></td><td><span class="lang-zh">让 agent 知道项目长期规律。</span><span class="lang-en">Gives the agent long-term project context.</span></td></tr>
|
||
<tr><td>Skill</td><td><span class="lang-zh">可调用的 invocation guide 与 procedure。</span><span class="lang-en">Callable invocation guide and procedure.</span></td><td><span class="lang-zh">把成熟策略结晶成可复用能力。</span><span class="lang-en">Crystallizes mature policies into reusable capabilities.</span></td></tr>
|
||
</table>
|
||
<h3><span class="lang-zh">奖励回传</span><span class="lang-en">Reward Backpropagation</span></h3>
|
||
<pre><code>V_T = R_human
|
||
V_t = alpha_t * R + (1 - alpha_t) * gamma * V_{t+1}
|
||
priority = value * time_decay</code></pre>
|
||
<p><span class="lang-zh">显式反馈、隐式结果和反思质量共同影响 trace 的价值,L2 候选池、L3 抽象和 Skill 生命周期都依赖这些信号。</span><span class="lang-en">Explicit feedback, implicit outcomes, and reflection quality all affect trace value. L2 candidates, L3 abstractions, and Skill lifecycle decisions depend on these signals.</span></p>
|
||
</section>
|
||
<section id="retrieval">
|
||
<h2><span class="lang-zh">三层检索</span><span class="lang-en">Three-Tier Retrieval</span></h2>
|
||
<ol>
|
||
<li><strong>Tier 1 — Skill:</strong> <span class="lang-zh">优先找到可直接调用的技能和 invocation guide。</span><span class="lang-en">Find callable skills and invocation guides first.</span></li>
|
||
<li><strong>Tier 2 — Trace + Episode:</strong> <span class="lang-zh">检索具体证据、任务片段和历史操作。</span><span class="lang-en">Retrieve concrete evidence, task slices, and historical actions.</span></li>
|
||
<li><strong>Tier 3 — World Model:</strong> <span class="lang-zh">补充项目级、环境级、长期约束级认知。</span><span class="lang-en">Add project-level, environment-level, long-term cognition.</span></li>
|
||
</ol>
|
||
<p><span class="lang-zh">检索入口包括 turn start、tool-driven、skill invoke、sub-agent 和 repair。结果通过 RRF 融合、MMR 去冗余,再形成注入包。</span><span class="lang-en">Entry points include turn start, tool-driven retrieval, skill invoke, sub-agent, and repair. Results are fused with RRF, diversified with MMR, and packed into an injection packet.</span></p>
|
||
</section>
|
||
<section id="viewer">
|
||
<h2>Viewer</h2>
|
||
<div class="cards">
|
||
<div class="card"><b>Overview</b><p>KPIs, health, recent events.</p></div>
|
||
<div class="card"><b>Traces</b><p>L1 search, value, alpha, feedback.</p></div>
|
||
<div class="card"><b>Policies</b><p>L2 candidates, support, gain, status.</p></div>
|
||
<div class="card"><b>World Model</b><p>L3 abstractions and source policies.</p></div>
|
||
<div class="card"><b>Skills</b><p>Skill lifecycle, eta, invocation guide.</p></div>
|
||
<div class="card"><b>Retrieval</b><p>Three-tier preview and debug panel.</p></div>
|
||
<div class="card"><b>Admin / Hub</b><p>Optional team-sharing settings surface.</p></div>
|
||
<div class="card"><b>Logs</b><p>Channelled logs, tail, filters.</p></div>
|
||
<div class="card"><b>Settings</b><p>Redacted config editor.</p></div>
|
||
</div>
|
||
</section>
|
||
<section id="config">
|
||
<h2><span class="lang-zh">配置</span><span class="lang-en">Configuration</span></h2>
|
||
<p><span class="lang-zh"><code>config.yaml</code> 是唯一配置文件,敏感字段也写在这里,并由安装器设置为 <code>chmod 600</code>。也可以在 Viewer 的 Settings 页面编辑。</span><span class="lang-en"><code>config.yaml</code> is the only config file. Secrets live there too, and the installer sets <code>chmod 600</code>. You can also edit it in Viewer Settings.</span></p>
|
||
<h3>OpenClaw</h3>
|
||
<pre><code>version: 1
|
||
viewer:
|
||
port: 18799
|
||
embedding:
|
||
provider: local
|
||
apiKey: ""
|
||
llm:
|
||
provider: host
|
||
apiKey: ""
|
||
model: ""
|
||
hub:
|
||
enabled: false
|
||
telemetry:
|
||
enabled: true
|
||
logging:
|
||
level: info
|
||
detailedView: false</code></pre>
|
||
<h3>Hermes</h3>
|
||
<pre><code>version: 1
|
||
viewer:
|
||
port: 18800
|
||
embedding:
|
||
provider: local
|
||
apiKey: ""
|
||
llm:
|
||
provider: openai_compatible
|
||
apiKey: "" <span class="c"># required for Hermes unless you choose another real provider</span>
|
||
model: ""
|
||
hub:
|
||
enabled: false
|
||
telemetry:
|
||
enabled: true
|
||
logging:
|
||
level: info
|
||
detailedView: false</code></pre>
|
||
<table>
|
||
<tr><th><span class="lang-zh">配置块</span><span class="lang-en">Block</span></th><th><span class="lang-zh">支持值</span><span class="lang-en">Supported Values</span></th></tr>
|
||
<tr><td><code>embedding.provider</code></td><td><code>local</code>, <code>openai_compatible</code>, <code>gemini</code>, <code>cohere</code>, <code>voyage</code>, <code>mistral</code></td></tr>
|
||
<tr><td><code>llm.provider</code></td><td><code>host</code>, <code>local_only</code>, <code>openai_compatible</code>, <code>anthropic</code>, <code>gemini</code>, <code>bedrock</code></td></tr>
|
||
<tr><td><code>logging.level</code></td><td><code>trace</code>, <code>debug</code>, <code>info</code>, <code>warn</code>, <code>error</code>, <code>fatal</code></td></tr>
|
||
</table>
|
||
</section>
|
||
<section id="api">
|
||
<h2>HTTP / Events</h2>
|
||
<table>
|
||
<tr><th>Endpoint</th><th><span class="lang-zh">用途</span><span class="lang-en">Purpose</span></th></tr>
|
||
<tr><td><code>GET /api/v1/health</code></td><td><span class="lang-zh">版本、路径与健康状态。</span><span class="lang-en">Version, paths, and health.</span></td></tr>
|
||
<tr><td><code>GET /api/v1/auth/status</code> / <code>POST /api/v1/auth/login</code></td><td><span class="lang-zh">Viewer 会话认证。</span><span class="lang-en">Viewer session authentication.</span></td></tr>
|
||
<tr><td><code>GET /api/v1/traces</code></td><td><span class="lang-zh">L1 trace 列表。</span><span class="lang-en">L1 trace list.</span></td></tr>
|
||
<tr><td><code>GET /api/v1/policies</code></td><td><span class="lang-zh">L2 policy 列表。</span><span class="lang-en">L2 policy list.</span></td></tr>
|
||
<tr><td><code>GET /api/v1/world-models</code></td><td><span class="lang-zh">L3 world model 列表。</span><span class="lang-en">L3 world-model list.</span></td></tr>
|
||
<tr><td><code>GET /api/v1/skills</code></td><td><span class="lang-zh">Skill 列表与生命周期。</span><span class="lang-en">Skill list and lifecycle.</span></td></tr>
|
||
<tr><td><code>POST /api/v1/feedback</code></td><td><span class="lang-zh">显式反馈写入。</span><span class="lang-en">Explicit feedback write.</span></td></tr>
|
||
<tr><td><code>GET /api/v1/memory/search</code> / <code>POST /api/v1/memory/search</code></td><td><span class="lang-zh">三层检索。</span><span class="lang-en">Three-tier retrieval.</span></td></tr>
|
||
<tr><td><code>GET /api/v1/logs/tail</code></td><td><span class="lang-zh">查看最近日志。</span><span class="lang-en">Tail recent logs.</span></td></tr>
|
||
<tr><td><code>GET /api/v1/events</code> / <code>GET /api/v1/logs</code></td><td><span class="lang-zh">CoreEvent 与日志行的 SSE 流。</span><span class="lang-en">SSE streams for CoreEvents and log records.</span></td></tr>
|
||
</table>
|
||
</section>
|
||
<section id="security">
|
||
<h2><span class="lang-zh">安全与本地优先</span><span class="lang-en">Security and Local-First</span></h2>
|
||
<ul>
|
||
<li><span class="lang-zh">数据库、技能包、日志和配置默认都在 <code>~/.<agent>/memos-plugin/</code>。</span><span class="lang-en">Database, skills, logs, and config live under <code>~/.<agent>/memos-plugin/</code>.</span></li>
|
||
<li><span class="lang-zh">API key 不进入源码目录,不写入 URL,由 config loader 与 logger 做脱敏。</span><span class="lang-en">API keys never enter the source directory or URLs; config loading and logging redact secrets.</span></li>
|
||
<li><span class="lang-zh">Viewer 默认绑定本机地址,每个宿主独立端口,避免跨宿主误写。</span><span class="lang-en">Viewer binds locally by default; each host has an independent port to avoid cross-host writes.</span></li>
|
||
<li><span class="lang-zh">遥测为匿名使用事件,可随时在配置中关闭。</span><span class="lang-en">Telemetry is anonymous usage events and can be disabled in config.</span></li>
|
||
</ul>
|
||
</section>
|
||
</main>
|
||
</div>
|
||
<footer class="site-footer">
|
||
<div class="inner">
|
||
<div class="brand-foot"><img src="https://statics.memtensor.com.cn/logo/white-memos.svg" alt="MemOS"> MemOS</div>
|
||
<div class="links">
|
||
<a href="../index.html"><span class="lang-zh">首页</span><span class="lang-en">Home</span></a>
|
||
<a href="index.html"><span class="lang-zh">文档</span><span class="lang-en">Docs</span></a>
|
||
<a href="troubleshooting.html"><span class="lang-zh">排查</span><span class="lang-en">Troubleshooting</span></a>
|
||
<a href="https://www.npmjs.com/package/@memtensor/memos-local-plugin" target="_blank" rel="noopener">npm</a>
|
||
<a href="https://github.com/MemTensor/MemOS/tree/main/apps/memos-local-plugin" target="_blank" rel="noopener">GitHub</a>
|
||
<a href="https://github.com/MemTensor/MemOS/blob/main/LICENSE" target="_blank" rel="noopener">MIT</a>
|
||
</div>
|
||
<div class="copy">© 2026 MemTensor. MemOS Local Plugin.</div>
|
||
</div>
|
||
</footer>
|
||
<script>
|
||
(function(){
|
||
var key='memos-site-lang';
|
||
var saved=localStorage.getItem(key)||'zh';
|
||
function setLang(lang){
|
||
document.body.classList.toggle('en',lang==='en');
|
||
document.documentElement.lang=lang==='en'?'en':'zh-CN';
|
||
localStorage.setItem(key,lang);
|
||
document.querySelectorAll('[data-lang]').forEach(function(btn){btn.classList.toggle('active',btn.getAttribute('data-lang')===lang);});
|
||
}
|
||
document.querySelectorAll('[data-lang]').forEach(function(btn){btn.addEventListener('click',function(){setLang(btn.getAttribute('data-lang'));});});
|
||
setLang(saved);
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|