mcpField
L
locus

locus

本地服务
github.com/Nano-Nimbus记忆与知识07 周前更新

关于 locus

locus 是面向自主 AI Agent 的层级 Markdown 记忆系统,适合需要按需检索项目知识的开发者。它通过房间式目录导航,仅加载相关内容,并提供 MCP 工具、检索与文档维护命令。

主要功能

  1. 01按房间组织层级 Markdown 记忆
  2. 02搜索并排序多个记忆根目录
  3. 03批量读取多个文件
  4. 04检查文档规范并生成索引
  5. 05可选的 Ed25519 签名验证

适用场景

  1. 01按提示词检索相关历史知识
  2. 02让 Agent 只加载当前任务所需房间
  3. 03在 CI 中检查文档规范与索引变更

MCP 相关

locus-mcp 通过 MCP 暴露五个工具,用于列出、读取、写入、搜索和批量读取记忆宫殿文件。支持本地 stdio 集成,也可配置 SSE 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nano-nimbus-locus": {
"command": "uvx",
"args": [
"locus-mcp"
]
}
}
}
启动命令uvx locus-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypilocus-mcp0.9.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Locus

CI PyPI version License: MIT Python 3.11+

专为自主 AI Agent 打造的层级式 Markdown 记忆系统。每个目录都是宫殿中的一间房(locus),其中包含可按需查阅的特定知识。 名称取自 记忆宫殿法 中的基本单元。

核心理念: 保持上下文窗口精简。只加载所需的房间,而非整座宫殿。


工作原理

palace/
  INDEX.md                    ← always read first (~50 lines max)
  global/
    toolchain/
      toolchain.md            ← canonical facts about tools
  projects/
    my-project/
      my-project.md           ← room overview + key files
      technical-gotchas.md    ← specialty: issues & resolutions
      sessions/
        2026-03-02.md         ← append-only session log

Agent 读取 INDEX.md,导航至相关房间,并只读取该房间。 会话日志不断累积,直到通过整合将其合并到规范文件中。

完整文档请参阅 wiki。


快速开始

# Install
pip install locus-mcp
# or: uvx locus-mcp --palace ~/.locus  (no install needed)

# Create a palace from the packaged example
locus init ~/.locus
# Edit ~/.locus/INDEX.md to describe your palace

# Run the MCP server
locus-mcp --palace ~/.locus
# or: LOCUS_PALACE=~/.locus locus-mcp

安装

MCP 服务(推荐用于支持 MCP 的客户端)
pip install locus-mcp

也可以使用 uvx 运行,无需安装:

uvx locus-mcp --palace ~/.locus
Agent 技能

技能文件是 Locus 中唯一针对特定运行环境编写的部分。宫殿约定、MCP 服务以及 recall / lint / index CLI 均与运行环境无关,可用于任何能够读取文件或通过 MCP 通信的环境。skills/claude/ 中的技能专为 Claude Code 编写和维护,也是此处唯一提供的一套技能。这些技能是带有 YAML frontmatter 的纯 Markdown 文件,其他运行环境也可以自行改编。过去,针对不同运行环境的副本位于 skills/codex/ 和 skills/gemini/;后来将其移除,因为维护三个版本的成本超过了收益。

从克隆的仓库中安装:

git clone https://github.com/Nano-Nimbus/locus.git
cd locus
make install-skills            # copies skills/claude/* to ~/.claude/skills/
make install-skills-dry        # print what would be copied, write nothing

CLAUDE_SKILLS_DIR 可覆盖目标目录。

技能命令描述
locus/locus回忆信息、导航宫殿、编写房间和会话日志、重新生成索引
locus-consolidate/locus-consolidate将会话日志合并到规范文件中
locus-audit/locus-audit审查宫殿的健康状况
locus-feedback/locus-feedback记录对宫殿信息回忆的明确反馈
locus-release/locus-release发布后验证工作流(贡献者使用)
locus-security/locus-security信任标签、nonce 规范以及 locus-security CLI
locus-palace-init/locus-palace-init从现有记忆文件初始化宫殿
Agent SDK(Python)
pip install locus-mcp
locus --palace ~/.locus --task "What toolchain conventions are set?"

MCP 服务

locus-mcp 命令通过 Model Context Protocol 提供五种工具。

所有本地集成都请使用 stdio(Claude Desktop、Claude Code、Codex、Gemini——默认设置,无需额外标志)。 SSE 传输可用于网络部署(--transport sse),并且需要显式设置 FASTMCP_HOST=0.0.0.0——服务默认绑定到 loopback。

工具描述
memory_list返回 INDEX.md(无参数时)或列出某个房间的文件
memory_read读取宫殿中的任意文件
memory_write原子方式写入文件(受保护——无法写入 _metrics/、sessions/、.sig/、.security/)
memory_search在共享的 FTS5 索引中进行排序全文搜索(见回忆);没有 FTS5 时仅使用 ripgrep
memory_batch单次调用最多读取 20 个宫殿文件——适用于加载多个房间

添加 --security 可在读取时启用 Ed25519 签名验证,并在写入时自动签名。 详见下文的安全性。

Claude Desktop(claude_desktop_config.json)
{
  "mcpServers": {
    "locus": {
      "command": "locus-mcp",
      "args": ["--palace", "/path/to/palace"]
    }
  }
}

也可以使用 uvx(无需安装):

{
  "mcpServers": {
    "locus": {
      "command": "uvx",
      "args": ["locus-mcp", "--palace", "/path/to/palace"]
    }
  }
}
Cursor / Zed
{
  "mcp": {
    "servers": {
      "locus": {
        "command": "locus-mcp",
        "args": ["--palace", "/path/to/palace"]
      }
    }
  }
}
环境变量

所有客户端都支持使用 LOCUS_PALACE 替代 --palace:

export LOCUS_PALACE=~/.locus
locus-mcp

完整的客户端设置指南请参阅 MCP Server Configuration,架构详情请参阅 spec/mcp-server.md。


Recall

locus recall 只需一次调用即可回答“我已经知道关于这件事的什么?”,速度足够快,可以通过钩子对每条提示词运行。它会在任意数量的 Markdown 根目录上维护 SQLite FTS5 索引(仅使用标准库,无需 PyYAML):可以是 palace、OKF 包、Claude Code 记忆目录,也可以同时包含所有这些目录。

locus recall --root ~/memory --root ./docs "why does the flux kustomization stall"
Recalled memory:
1. Flux healthcheck stall (human-reviewed, 2026-08-22)
   /home/me/memory/project_flux-healthcheck-stall.md
   Flux Kustomization with wait:true stalls on health checks for a bad revision ...
2. [STALE] Old Flux bootstrap procedure (unverified, 2025-11-02)
   /home/me/docs/runbooks/flux-bootstrap.md
   Bootstrap Flux with a personal access token ...
标志默认值含义
--root DIR.locus.toml,然后是 LOCUS_PALACE要编入索引的目录;可重复指定
-k N3命中数
--budget BYTES4096文本输出的硬性上限
--include journal关闭包含 type: Journal 文件
--type TYPE全部仅包含此 frontmatter 类型;可重复指定
--json关闭输出 JSON 列表,而不是文本
--refresh关闭从头重建索引

结果由 frontmatter 决定:title(或 name,或第一个标题)、description、tags、type(或 metadata.type)、modified(否则使用 generated.at,再否则使用文件 mtime)、status、stale_after 和 verified。排名使用 bm25,标题和描述的权重高于正文;完全并列时,优先选择人工审核的文件,其次选择 modified 时间最新的文件。如果某条结果的 stale_after 已过期或其 status 为 deprecated,则会标记为 STALE。信任层级遵循 OKF:unverified、machine-confirmed(仅限非人工的 verified 条目)、human-reviewed(任何 by 以 human: 开头的 verified 条目)。

根目录可以在项目目录或任意父目录的 .locus.toml 中配置:

[recall]
roots = ["docs", "~/memory/shared"]

索引存储在 ${XDG_CACHE_HOME:-~/.cache}/locus/<hash-of-roots>.sqlite,不会存放在任何根目录内,并且每次调用时都会增量刷新(先比较 mtime,再比较内容哈希)。没有命中时,文本输出为空,退出状态仍为 0,因此可以无条件调用它作为提示词钩子:

#!/bin/sh
# Claude Code UserPromptSubmit hook: whatever this prints is injected as context.
prompt=$(jq -r .prompt)
exec locus recall -k 3 --budget 4096 "$prompt"

MCP 服务的 memory_search 使用相同的索引,因此 MCP 结果的排名方式也相同。完整规则请参阅 spec/recall.md。


Lint 和索引

locus lint 会检查 Markdown 根目录是否符合 Open Knowledge Format v0.2 规范及 Locus palace 约定。locus index 会生成这些约定所定义的索引文件。两者都会读取相同的 frontmatter recall 索引,并且都不会导入 Agent SDK,因此只检查规范符合性的 CI 任务无需安装它。

locus lint  --root docs --check          # CI gate: exit 1 on any error
locus lint  --root docs --fix            # add inferable fields, rewrite nothing
locus index --root docs --check          # exit 1 when a generated index drifted
docs/runbooks/valve-chatter.md: error [okf.type-missing] frontmatter has no non-empty type (fix: add type: Runbook)
docs/log.md: error [okf.log-order] entries run oldest first: 2026-05-09 follows 2026-05-01
docs/reference/platform.md: warning [locus.size-limit] 214 lines exceeds the 200-line soft limit for a specialty file
2 error(s), 1 warning(s), 1 fixable
lint
标志默认值含义
--root DIR.locus.toml,然后是 LOCUS_PALACE要检查的目录;可重复指定
--check关闭发生任何错误时以非零状态退出。适用于 CI
--strict关闭在 --check 下将警告视为错误
--fix关闭添加可推断的字段。绝不重写现有键
--type-map DIR=TYPE无为 DIR 下的内容推断此 OKF 类型;可重复指定
--archive-glob GLOB无应带有 status: deprecated 的路径;可重复指定
--json关闭输出 JSON 报告,而非文本

规则分为两类。okf.* 检查规范要求的内容:每个非保留文档都必须有可解析的 frontmatter 块和非空的 type,index.md 除了包根目录中的 okf_version 外不得包含其他 frontmatter,log.md 必须以日期为标题并按时间倒序排列,时间戳必须符合 ISO 8601。未知键和未知类型值绝不会被报告:规范要求使用方能够容忍这两种情况。locus.* 检查宫殿约定:spec/size-limits.md 中的大小限制,以及 spec/room-conventions.md 中的房间主文件规则。

错误会导致 --check 失败;警告仅供参考。宫殿完全不带 frontmatter 也是合理的,因此在宫殿根目录下,缺少类型规则会作为警告,而不会因宫殿规范本身描述的布局导致 CI 失败。

--fix 只会添加三个字段:来自 --type-map 或 [lint.types] 的 type,来自文件首次 git 提交时间的 generated.at,以及用于归档路径的 status: deprecated。它绝不会重写或删除键,也绝不会凭空创建 generated 块(文件中没有信息说明是谁生成了它),重复运行两次会产生完全相同的字节内容。

index
标志默认值含义
--root DIR.locus.toml,然后是 LOCUS_PALACE要编制索引的目录;可重复指定
--check关闭不写入任何内容;发现差异时以非零状态退出。适用于 CI
--kindauto强制将内容分类为 okf、palace 或 memory
--json关闭输出 JSON 报告,而非文本

生成的内容取决于根目录:OKF 包会按照第 8 节的格式为每个目录生成一个 index.md(每行格式为 * [Title](path) - description,且只有包根目录带有 okf_version: "0.2" frontmatter);宫殿会生成包含 50 行的路由表 INDEX.md;Claude Code 记忆目录会生成 MEMORY.md,其中每个主题文件对应一行 - [Title](file.md) - description。输出具有确定性,因此 --check 会进行字节比较,而且只会写入索引文件。

通过一个 .locus.toml 同时配置两者:

[lint]
roots = ["docs"]
archive_globs = ["archive/*"]

[lint.types]
"." = "Reference"
runbooks = "Runbook"

完整规则见 spec/lint-and-index.md。


安全性

安全系统(--security)会为宫殿中的每个文件添加 Ed25519 签名,并为每个 Agent 会话生成唯一的加密随机数。工具输出会在 Agent 查看前标记为 [TRUSTED]、[DATA] 或 [CRITICAL-DATA]。Agent 技能(locus-security)会教会 Agent 从 [DATA] 内容中提取事实,但绝不遵循其中的指令。

# One-time setup
locus-security init-config --palace ~/.locus   # writes locus-security.yaml
locus-security init-keys   --palace ~/.locus
locus-security sign-all    --palace ~/.locus

# Run with security enabled
locus-mcp --palace ~/.locus --security
locus --palace ~/.locus --security --task "..."

locus-security CLI 有五个子命令:init-config(从包内附带的副本写入带注释的 locus-security.yaml)、init-keys、sign-all、verify-all(若任何文件验证失败,或宫殿中没有可签名文件,则以状态码 1 退出),以及 rotate-keys。sign-all 会列出无法读取为 UTF-8 的文件并跳过,而不是中止运行;如果跳过了任何文件,则以状态码 1 退出。两个命令都不会跟随目标解析到宫殿目录之外的符号链接:sign-all 会列出并跳过这些链接,verify-all 则会将其报告为失败。

**威胁模型:**直接提示注入、记忆投毒、通过外部数据进行间接注入、随机数外泄、多轮上下文漂移。

完整协议、配置参考和设计决策见 docs/security.md。


基准测试

对于特定查询,宫殿式导航加载的上下文行数比扁平记忆少 52%,同时保持完整召回。仅限会话的查询(尚未整合的近期工作)只能通过宫殿访问。

Palace: 822 lines / 9 queries found   avg  91 lines/query · 3.2 calls
Flat:  1719 lines / 8 queries found   avg 191 lines/query · 2.0 calls

图表和完整方法说明请参阅 docs/benchmarks.md。


结构

example-palace/   Palace template; `locus init` writes it into a new palace
spec/             Palace convention definitions:
  index-format.md       INDEX.md rules and routing
  room-conventions.md   Room structure and naming
  size-limits.md        Context budget thresholds
  write-modes.md        Session logs vs canonical edits
  mcp-server.md         MCP server architecture and safety model
  recall.md             locus recall: roots, index, ranking, trust tier, STALE
  lint-and-index.md     locus lint and locus index: OKF conformance, generated indexes
  metrics-schema.md     Run metrics JSON schema
  audit-algorithm.md    Palace health scoring
  health-report-format.md  Audit report structure
  inferred-feedback.md  Disagreement signal classification
templates/        Templates for INDEX.md, rooms, session logs, locus-security.yaml
                  (`locus init --show list`; both trees ship inside the wheel)
skills/
  claude/         SKILL.md files for Claude Code + Agent SDK (the only maintained set)
    locus/              Recall, palace navigation, writes, index and lint
    locus-consolidate/  Room consolidation
    locus-audit/        Palace health audit
    locus-feedback/     Recall quality feedback
    locus-palace-init/  Bootstrap a palace from existing memory files
    locus-release/      Post-release verification (contributors)
    locus-security/     Security conventions (trust tags, nonce discipline)
docs/
  architecture.md       Mermaid diagrams — palace, MCP, security, agent interfaces
  benchmarks.md         Benchmark results and charts (palace vs flat, security overhead)
  onboarding.md         Step-by-step agent onboarding guide
  security.md           Full security protocol, key management, config reference
  bench/                Per-version benchmark JSON (read by generate-charts.py)
scripts/
  bench-mcp.py          45-case MCP integration benchmark (includes security + batch)
  bench-compare.py      Palace vs flat recall comparison
  generate-charts.py    Regenerate docs/img/ charts (reads docs/bench/ automatically)
locus/
  agent/          Python Agent SDK (CLI + metrics)
  audit/          Palace health auditor (locus-audit CLI)
  feedback/       Inferred feedback classifier
  mcp/            MCP server (locus-mcp CLI) — palace.py, server.py, main.py
  conform/        locus lint and locus index: OKF conformance, index generation
  recall/         locus recall: FTS5 index shared with memory_search
  security/       Ed25519 security system — keys, signing, taint, nonce, middleware
  scaffold.py     locus init: packaged templates and palace scaffolding
  utils.py        Shared utilities (slug_from_path)

路线图

里程碑状态重点
v0.1 - 基础✅ 已完成规范、约定、大小限制
v0.2 - 核心宫殿✅ 已完成模板、技能、Agent SDK、基准测试
v0.3 - 性能指标✅ 已完成上下文跟踪、反馈、建议
v0.4 - 自我评估✅ 已完成宫殿审计、健康报告、推断反馈
v0.5 - MCP 服务✅ 已完成支持 memory_list/read/write/search 的 MCP 服务
v0.6 - 公开发布✅ 已完成基准测试、文档、CI、PyPI
v0.7 - 远程 MCP 服务✅ 已完成SSE 传输、Bearer 身份验证、Docker 镜像、K8s 部署
v0.8 - 自动记忆桥接✅ 已完成Claude Code 自动记忆检测、memory_batch 工具
v0.9 - 安全系统✅ 已完成Ed25519 签名、污点跟踪、nonce 水印、--security 标志

参与贡献

开发环境设置、测试说明和 PR 指南请参阅 CONTRIBUTING.md。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。