Locus

io.github.Nano-Nimbus由 GitHub 帳號 Nano-Nimbus 發布v0.9.0更新於 Oct 24, 2026

Hierarchical markdown memory palace for AI agents — structured palace navigation via MCP tools.

已驗證STDIO僅桌面檔案與儲存知識與記憶

概覽

AI 產生的概覽

一個本機 MCP 伺服器,為 AI 助理提供階層式 Markdown 記憶宮殿,可依需求列出、讀取、搜尋與寫入,只載入需要的房間。

可以做什麼
列出宮殿索引或某個房間內的檔案,並讀取任意宮殿檔案,支援一次批次讀取最多 20 個檔案以載入多個房間。以原子方式寫入檔案,但對指標、工作階段與安全等保留目錄的寫入會被阻擋。以共用的 SQLite FTS5 索引提供排序全文搜尋,沒有 FTS5 時改用 ripgrep。可選擇啟用 Ed25519 簽章驗證與寫入自動簽章,並將輸出標記為可信或資料。
適用情境
適合希望助理跨工作階段保留以檔案為基礎的專案記憶,並且只取回相關片段而非整棵筆記樹的情境。也適合已經維護 Markdown 筆記、操作手冊或助理記憶目錄,希望在其上做結構化導覽的使用者。
執行需求
以本機程序執行;用 pip 安裝 locus-mcp Python 套件,或透過 uvx 直接執行。需要一個宮殿目錄,以 --palace 參數或 LOCUS_PALACE 環境變數指定,可用 locus init 指令建立。可選的安全模式需要透過 locus-security 命令列工具設定 Ed25519 金鑰。
安裝前請注意
寫入工具會變更磁碟上的檔案,請指向你願意被修改的目錄;保留目錄有保護,其他內容則沒有。安全模式會建立並管理簽章金鑰,並支援金鑰輪換。記憶內容會作為上下文送進模型,README 本身也把提示注入與記憶投毒列為威脅,因此應把儲存的筆記視為不可信資料。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Locus,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

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

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

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

sh
# Installpip install locus-mcp# or: uvx locus-mcp --palace ~/.locus  (no install needed)
# Create a palace from the packaged examplelocus init ~/.locus# Edit ~/.locus/INDEX.md to describe your palace
# Run the MCP serverlocus-mcp --palace ~/.locus# or: LOCUS_PALACE=~/.locus locus-mcp

Installation

MCP server (recommended for MCP-capable clients)

sh
pip install locus-mcp

Or run without installing using uvx:

sh
uvx locus-mcp --palace ~/.locus

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:

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

CLAUDE_SKILLS_DIR overrides the destination.

SkillCommandDescription
locus/locusRecall, navigate the palace, write rooms and session logs, regenerate indexes
locus-consolidate/locus-consolidateMerge session logs into canonical files
locus-audit/locus-auditAudit palace health
locus-feedback/locus-feedbackRecord explicit feedback on a palace recall
locus-release/locus-releasePost-release verification workflow (contributors)
locus-security/locus-securityTrust tags, nonce discipline, and the locus-security CLI
locus-palace-init/locus-palace-initBootstrap a palace from existing memory files

Agent SDK (Python)

sh
pip install locus-mcplocus --palace ~/.locus --task "What toolchain conventions are set?"

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.

ToolDescription
memory_listReturns INDEX.md (no args) or lists a room's files
memory_readReads any file in the palace
memory_writeAtomically writes a file (guarded — cannot write to _metrics/, sessions/, .sig/, .security/)
memory_searchRanked full-text search over the shared FTS5 index (see Recall); ripgrep only without FTS5
memory_batchReads up to 20 palace files in a single call — use for multi-room loads

Add --security to enable Ed25519 signature verification on reads and automatic signing on writes. See Security below.

Claude Desktop (claude_desktop_config.json)

json
{  "mcpServers": {    "locus": {      "command": "locus-mcp",      "args": ["--palace", "/path/to/palace"]    }  }}

Or using uvx (no install required):

json
{  "mcpServers": {    "locus": {      "command": "uvx",      "args": ["locus-mcp", "--palace", "/path/to/palace"]    }  }}

Cursor / Zed

json
{  "mcp": {    "servers": {      "locus": {        "command": "locus-mcp",        "args": ["--palace", "/path/to/palace"]      }    }  }}

Environment variable

All clients support LOCUS_PALACE as an alternative to --palace:

sh
export LOCUS_PALACE=~/.locuslocus-mcp

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.

sh
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 ...
FlagDefaultMeaning
--root DIR.locus.toml, then LOCUS_PALACEDirectory to index; repeatable
-k N3Number of hits
--budget BYTES4096Hard cap on text output
--include journaloffInclude type: Journal files
--type TYPEallOnly this frontmatter type; repeatable
--jsonoffPrint a JSON list instead of text
--refreshoffRebuild the index from scratch

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:

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

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:

sh
#!/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"

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.

sh
locus lint  --root docs --check          # CI gate: exit 1 on any errorlocus lint  --root docs --fix            # add inferable fields, rewrite nothinglocus 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-01docs/reference/platform.md: warning [locus.size-limit] 214 lines exceeds the 200-line soft limit for a specialty file2 error(s), 1 warning(s), 1 fixable

lint

FlagDefaultMeaning
--root DIR.locus.toml, then LOCUS_PALACEDirectory to check; repeatable
--checkoffExit non-zero on any error. For CI
--strictoffTreat warnings as errors under --check
--fixoffAdd inferable fields. Never rewrites an existing key
--type-map DIR=TYPEnoneInfer this OKF type under DIR; repeatable
--archive-glob GLOBnonePaths that should carry status: deprecated; repeatable
--jsonoffPrint a JSON report instead of text

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

FlagDefaultMeaning
--root DIR.locus.toml, then LOCUS_PALACEDirectory to index; repeatable
--checkoffWrite nothing; exit non-zero on drift. For CI
--kindautoForce okf, palace, or memory classification
--jsonoffPrint a JSON report instead of text

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:

toml
[lint]roots = ["docs"]archive_globs = ["archive/*"]
[lint.types]"." = "Reference"runbooks = "Runbook"

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.

sh
# One-time setuplocus-security init-config --palace ~/.locus   # writes locus-security.yamllocus-security init-keys   --palace ~/.locuslocus-security sign-all    --palace ~/.locus
# Run with security enabledlocus-mcp --palace ~/.locus --securitylocus --palace ~/.locus --security --task "..."

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.

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

See docs/benchmarks.md for charts and full methodology.


Structure

example-palace/   Palace template; `locus init` writes it into a new palacespec/             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 classificationtemplates/        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)

Roadmap

MilestoneStatusFocus
v0.1 - Foundation✅ CompleteSpec, conventions, size limits
v0.2 - Core Palace✅ CompleteTemplates, skills, Agent SDK, benchmark
v0.3 - Performance Metrics✅ CompleteContext tracking, feedback, suggestions
v0.4 - Self Evaluation✅ CompletePalace audit, health reports, inferred feedback
v0.5 - MCP Server✅ CompleteMCP server with memory_list/read/write/search
v0.6 - Public release✅ CompleteBenchmarks, docs, CI, PyPI
v0.7 - Remote MCP Server✅ CompleteSSE transport, Bearer auth, Docker image, K8s deploy
v0.8 - Auto-Memory Bridge✅ CompleteClaude Code auto-memory detection, memory_batch tool
v0.9 - Security System✅ CompleteEd25519 signing, taint tracking, nonce watermark, --security flag

Contributing

See CONTRIBUTING.md for dev setup, test instructions, and PR guidelines.

License

MIT

來源:README.md,提交 3b480d6

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.9.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分