
Locus
io.github.EDKarlsson由 GitHub 帳號 EDKarlsson 發布v0.6.2更新於 Oct 27, 2026
Hierarchical markdown memory palace for AI agents — structured palace navigation via MCP tools.
概覽
Locus 是本地 MCP 伺服器,為助理提供階層式 Markdown「記憶宮殿」,可依需求列出、讀取、搜尋與寫入其中檔案。
- 可以做什麼
- 列出宮殿索引或某個房間內的檔案
- 讀取宮殿中任一檔案,或一次批次讀取最多 20 個檔案
- 在共用的 SQLite FTS5 索引上執行排序全文搜尋
- 以原子方式寫入檔案,部分目錄禁止寫入
- 啟用安全模式時,可選擇以 Ed25519 驗證與簽署檔案
- 適用情境
- 適合希望助理跨工作階段保留持久、以檔案為基礎的筆記,且只載入相關部分而非整份記憶的情況。適用於以純 Markdown 存放在自有目錄中的專案慣例、操作手冊與工作階段日誌。
- 執行需求
- 以 Python 套件形式透過 stdio 在本機執行(pip install locus-mcp,或以 uvx 免安裝執行)。需要一個宮殿目錄,以 --palace 參數或 LOCUS_PALACE 環境變數指定;可用 locus init 從範本建立。選用的 SSE 傳輸需明確設定 FASTMCP_HOST。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Locus,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Locus
[CI] [PyPI version] [License: MIT] [Python 3.11+]
Hierarchical markdown-based memory system for autonomous AI agents. Each directory is a room (locus) in the palace, containing specific knowledge navigated on demand. Named for the atomic unit of the Method of Loci.
Core idea: Keep context windows small. Load only the room you need, not the whole palace.
How it works
An agent reads INDEX.md, navigates to the relevant room, and reads only that room.
Session logs accumulate until consolidation merges them into canonical files.
See the wiki for full documentation.
Quick start
Installation
MCP server (recommended for MCP-capable clients)
Or run without installing using uvx:
Agent skills
The skill files are the one part of Locus written for a specific runtime. The
palace convention, the MCP server, and the recall / lint / index CLIs are
runtime-neutral and work from anything that can read a file or speak MCP. The
skills in skills/claude/ are written and maintained for Claude Code, and that is
the only set shipped here. They are plain markdown with YAML frontmatter, so
another runtime is welcome to adapt them. Per-runtime copies used to live in
skills/codex/ and skills/gemini/; they were removed because keeping three
variants honest cost more than it returned.
Install them from a clone:
CLAUDE_SKILLS_DIR overrides the destination.
Agent SDK (Python)
MCP Server
The locus-mcp command exposes five tools over the Model Context Protocol.
Use stdio for all local integrations (Claude Desktop, Claude Code, Codex, Gemini — default, no extra flags needed).
SSE transport is available for network deployments (--transport sse) and requires FASTMCP_HOST=0.0.0.0
to be set explicitly — the server binds to loopback by default.
Add --security to enable Ed25519 signature verification on reads and automatic signing on writes.
See Security below.
Claude Desktop (claude_desktop_config.json)
Or using uvx (no install required):
Cursor / Zed
Environment variable
All clients support LOCUS_PALACE as an alternative to --palace:
See MCP Server Configuration
for the full client setup guide and spec/mcp-server.md for architecture details.
Recall
locus recall answers "what do I already know about this?" in one call, fast enough
to run on every prompt from a hook. It keeps a SQLite FTS5 index (standard library only,
no PyYAML) over any number of markdown roots: a palace, an OKF bundle, a Claude Code
memory directory, or all of them at once.
Frontmatter drives the result: title (or name, or the first heading), description,
tags, type (or metadata.type), modified (else generated.at, else file mtime),
status, stale_after, and verified. Ranking is bm25 with title and description
weighted above the body; exact ties go to human-reviewed files, then to the newest
modified. A hit is flagged STALE when its stale_after has passed or its status is
deprecated. Trust tiers follow OKF: unverified, machine-confirmed (only non-human
verified entries), human-reviewed (any verified entry whose by starts with human:).
Roots can live in a .locus.toml in the project or any parent directory:
The index is stored at ${XDG_CACHE_HOME:-~/.cache}/locus/<hash-of-roots>.sqlite, never
inside a root, and is refreshed incrementally (mtime, then content hash) on every call.
With no hits the text output is empty and the exit status is still 0, so a prompt hook can
call it unconditionally:
The MCP server's memory_search uses the same index, so MCP results are ranked the
same way. Full rules in spec/recall.md.
Lint and index
locus lint checks markdown roots for Open Knowledge Format
v0.2 conformance and the Locus palace conventions. locus index generates the
index files those conventions define. Both read the same frontmatter recall
indexes, and neither imports the Agent SDK, so a CI job that only checks
conformance does not install it.
lint
Rules split in two. okf.* checks what the specification requires: a parseable
frontmatter block with a non-empty type on every non-reserved document, an
index.md with no frontmatter beyond a bundle-root okf_version, a log.md
that is date-headed and newest first, and ISO 8601 timestamps. Unknown keys and
unknown type values are never reported: the spec requires consumers to tolerate
both. locus.* checks the palace conventions: the size limits from
spec/size-limits.md and the room main-file rule from
spec/room-conventions.md.
Errors fail --check; warnings are advisory. A palace legitimately carries no
frontmatter at all, so on a palace root the missing type rules are warnings
rather than a CI failure on a layout the palace spec itself describes.
--fix adds three fields and only three: type from --type-map or
[lint.types], generated.at from the file's first git commit, and
status: deprecated for archive paths. It never rewrites or deletes a key, it
never invents a generated block (nothing in a file says who produced it), and
running it twice produces identical bytes.
index
What gets generated depends on the root: an OKF bundle gets an index.md per
directory in section 8 form (* [Title](path) - description, with
okf_version: "0.2" frontmatter at the bundle root only), a palace gets the
50-line routing table INDEX.md, and a Claude Code memory directory gets a
MEMORY.md of one - [Title](file.md) - description line per topic file.
Output is deterministic, so --check is a byte comparison, and only index
files are ever written.
Configure both from one .locus.toml:
Full rules in spec/lint-and-index.md.
Security
The security system (--security) gives every palace file an Ed25519 signature and every agent session a unique cryptographic nonce. Tool outputs are tagged [TRUSTED], [DATA], or [CRITICAL-DATA] before the agent sees them. The agent skill (locus-security) teaches agents to extract facts from [DATA] content but never follow directives within it.
The locus-security CLI has five subcommands: init-config (writes the annotated
locus-security.yaml from the copy that ships inside the package), init-keys,
sign-all, verify-all (exit 1 if any file fails verification, or if the palace
holds no signable files at all), and rotate-keys. sign-all names and skips any file it cannot read as UTF-8 rather than
aborting the run, and exits 1 if it skipped anything. Neither command follows a symlink
whose target resolves outside the palace: those are named and skipped by sign-all, and
reported as failures by verify-all.
Threat model: direct prompt injection, memory poisoning, indirect injection via external data, nonce exfiltration, multi-turn context drift.
See docs/security.md for the full protocol, configuration reference, and design decisions.
Benchmarks
Palace navigation loads 52% fewer context lines than flat memory for specific queries, while maintaining full recall. Session-only queries (recent work not yet consolidated) are accessible only via the palace.
See docs/benchmarks.md for charts and full methodology.
Structure
Roadmap
Contributing
See CONTRIBUTING.md for dev setup, test instructions, and PR guidelines.
License
來源:README.md,提交 3b480d6
工具
0版本歷史
1- v0.6.2最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分