mcpField
P
Palace

Palace

本地服务
github.com/AncientiCe记忆与知识101 天前更新

关于 Palace

Palace 是面向编码 Agent 的本地优先记忆 MCP 服务,将项目内容原文存入 SQLite 文件,并在不同会话间检索。它结合本地嵌入、自动钩子和来源引用来管理记忆。

主要功能

  1. 01原文记忆存入 SQLite
  2. 02本地嵌入与混合搜索
  3. 03通过自动钩子召回会话记忆
  4. 04结果附带来源信息
  5. 05日记与带时间戳的事实图谱

适用场景

  1. 01跨会话找回项目决策
  2. 02重用过往修复、命令和偏好
  3. 03通过 Agent 或命令行搜索项目笔记

MCP 相关

Palace 向 MCP 客户端提供搜索、状态、日记和知识图谱等记忆工具。Agent 还可使用其嵌入迁移工具。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbpalace-0.18.2.mcpb0.18.2

工具

还没有获取到工具列表

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

详细介绍

palace 横幅:将当天会话中的决策、命令和偏好存入本地宫殿,让 Agent 在下一次会话中记住这些内容

CI 状态 最新版本 许可证:MIT 平台:Linux、macOS、Windows Rust 1.82+ 已列入 MCP 注册表 已列入 mcpservers.org 适用于 Claude Code、Codex、Cursor、Gemini CLI、VS Code、OpenCode、Cline、Zed、Goose、Windsurf 和 Claude Desktop

为编码 Agent 打造的本地优先记忆。
让 Agent 在不同会话之间记住决策、修复、命令和偏好。
一个二进制文件、一个 SQLite 文件、无需 API 密钥、无需云服务。

快速开始 · 安装 · 工作原理 · 客户端 · 命令行 · MCP 工具 · 常见问题


Palace 为 Claude Code、Codex、Cursor、Gemini CLI、VS Code、OpenCode、 Cline、Zed、Goose、Windsurf 和 Claude Desktop 提供记忆,让记忆 在不同会话之间延续。它会原样存储发生过的内容,在相关时自动回忆, 并标明每个答案的来源。

You:    why did we switch the queue to SQLite last month?
Agent:  [palace_search → wing my_api, room decisions, filed 2026-09-03]
        You dropped Redis because the deploy target had no persistent volume.
        The benchmark you ran is in the same drawer.

🧭 为什么选择 Palace

每次新的 Agent 会话都从零开始。你得再次解释架构。 Agent 会重复上周被你否决的修复方案。它会搜索整个代码仓库, 重新发现几个月前定下的约定。

Palace 通过以下方式解决这些问题:

  • 原样存储文本。 代码、笔记和对话会按原文存储,而不是存成会丢失细节的大模型摘要。
  • 在本地运行。 嵌入向量由 ONNX Runtime 在你的 CPU 上通过 all-MiniLM-L6-v2(或其他支持的模型)生成。除非启用远程模式,否则任何内容都不会离开你的设备。
  • 自动回忆,无需请求。 钩子会在会话开始、你发送提示词时,以及 Agent 调查问题期间注入相关记忆。Agent 无需记得主动搜索。
  • 标注来源。 每条结果都会附带其侧翼、房间、源文件、抽屉 ID 和分数明细,方便你核实答案的来源。
  • 以单个二进制文件交付。 无需 Python、向量数据库或 Docker。只需一个 palace 可执行文件和一个 palace.db 文件。

它也适用于软件项目之外的场景。creative 和 personal 配置可适配世界观构建、小说创作、辅导或家庭笔记。


📦 安装

任选一种方式。每种方式都会安装 palace 二进制文件。之后运行 palace install 以连接你的 Agent。

macOS / Linux

curl -fsSL https://raw.githubusercontent.com/AncientiCe/palace-rs/main/scripts/install.sh | sh

Windows(PowerShell)

irm https://raw.githubusercontent.com/AncientiCe/palace-rs/main/scripts/install.ps1 | iex

这些脚本会下载匹配的 GitHub Release 二进制文件、验证其 SHA-256 校验和,并完成安装。之后要升级时,再次运行相同的命令即可。

Homebrew(macOS Apple Silicon / Linux)

brew tap AncientiCe/palace
brew install palace

升级时,请先刷新 tap。如果不运行 brew update,Homebrew 可能会一直 报告旧版本已安装:

brew update && brew upgrade palace

当某个版本发布更新了记忆协议规则(CHANGELOG 会说明),之后请再次运行 palace install,以便你的 Agent 获取新的规则文本。

MCP 注册表 / MCPB 捆绑包。 Palace 已在官方 MCP 注册表 中列出,名称为 io.github.ancientice/palace-rs。每次发布还会提供一个 palace-<version>.mcpb 捆绑包(Linux x86_64、macOS arm64、Windows x86_64),可在 Claude Desktop 等 兼容 MCPB 的宿主中一键安装。

从源代码构建

git clone https://github.com/AncientiCe/palace-rs && cd palace-rs
cargo build --release   # binary at target/release/palace
平台状态
Linux x86_64支持
macOS Apple Silicon支持
Windows x86_64支持
macOS Intel不支持(无 ONNX Runtime 构建版本)

嵌入模型(约 90 MB)会在你首次挖掘或搜索时从 Hugging Face 下载,之后 会缓存在 ~/.cache/huggingface 中。


⚡ 快速开始

palace install            # connect every supported agent on this machine
palace doctor             # check that every client is wired up
palace init ~/my-project --yes --auto-mine   # detect rooms, write palace.yaml, mine

重启你的 Agent 应用,使其重新加载 MCP 配置。然后试着询问:

“我们对这个项目如何处理数据库迁移有哪些了解?”

Agent 应调用 palace_search,并根据记忆作答,同时注明所用的抽屉。你也可以在终端中搜索:

palace search "how did we decide on the database schema"

之后,Agent 会在完成重要工作后写下一篇日记条目,并将持久有效的决策保存为事实。明天,无论使用哪个 Agent,都能从今天的进度继续工作。


🔍 工作原理

宫殿

记忆按建筑的结构组织,让搜索更聚焦:

宫殿内部:项目翼区 my_api,包含 backend、decisions 和 testing 房间及其中的抽屉;主题翼区 sales_notes;知识图谱事实 my_api uses_queue SQLite;以及来自 claude 和 codex 的 Agent 日记

图 1。一座宫殿包含多个翼区。房间对抽屉进行分组,知识图谱和日记则与它们并列。

概念含义示例
翼区一个项目或主题my_api、sales_notes
房间翼区内的一个区域backend、testing、decisions
抽屉一段逐字文本,以及它的嵌入向量和元数据db.rs 中的一段文字、一篇日记条目
知识图谱带时间戳的事实:主语 → 谓语 → 宾语my_api → uses_queue → SQLite(自 2026-09-03 起有效)
日记每个 Agent 的会话笔记,用于保持连续性“通过……修复了不稳定的迁移测试”
隧道不同翼区中房间之间的链接my_api/auth ↔ my_web/login

翼区分为项目翼区(磁盘上的文件夹,由 palace mine 创建)和主题翼区(没有文件夹,例如聊天记录或会议笔记,由 palace_create_wing 创建)。

检索
flowchart LR
    Q["💬 Question<br/>from you or the agent"] --> S["Sanitize<br/>strip pasted dumps"]
    S --> I["Classify intent<br/>decision · how_to · preference …"]
    I --> H["Hybrid search<br/>BM25 + cosine"]
    H --> B["Coding boosts<br/>+ preference pass"]
    B --> R{"Rerank?<br/>optional"}
    R --> OUT["📎 Results<br/>scores + source + neighbours"]
    DB[("palace.db<br/>local embeddings")] -.-> H

图 2。查询的处理过程。所有操作都在本地 CPU 上运行。

搜索会将 BM25 关键词评分与基于本地嵌入向量的余弦相似度结合起来,然后针对编码问题应用意图加权。每个查询都会被分类为 preference、decision、how_to、definition、temporal 或 unknown。偏好类问题(“我喜欢怎样写提交信息?”)会针对带有偏好标签的文本片段进行专门检索。本地交叉编码器重排器可作为选项使用(--rerank 或 PALACE_RERANK=1)。

嵌入模型

Palace 内置了 all-MiniLM-L6-v2,并且可以将 Palace 切换到另一个本地模型。所有向量都会根据已存储的文本重新构建,因此切换不会丢失记忆。

模型 ID模型精度备注
minilm-l6-v2all-MiniLM-L6-v2fp32默认
minilm-l6-v2-q8all-MiniLM-L6-v2int8索引速度约快 2 倍,基准测试中的召回率相同
bge-smallbge-small-en-v1.5fp32实验性,索引速度约慢 2.5 倍
bge-small-q8bge-small-en-v1.5int8实验性
bge-base-q8bge-base-en-v1.5int8实验性,768 维

实验性模型在编码 Agent 评测中的得分低于 MiniLM,但在真实 Palace 的探测测试中得分更高(参见基准测试)。你可以在自己的 Palace 上试用:是否切换由验证结果决定。

palace embeddings list                       # models, which is active, which are downloaded
palace embeddings estimate minilm-l6-v2-q8   # time, disk and latency, measured on this machine
palace embeddings migrate minilm-l6-v2-q8    # build, verify, switch
palace embeddings rollback                   # back to the previous model, instantly
palace embeddings cleanup                    # drop the previous model's vectors

migrate 会分批构建新向量,同时搜索仍使用当前模型,因此可以安全地中断并重新运行。向量构建完成后,它会使用从你的 Palace 中选取的 200 个已知项探测,对比新模型和当前模型(混合与纯向量召回率 @1/@5,以及查询延迟)。只有当召回率 @5 的下降不超过 0.01,且 p95 查询延迟在预算范围内时,才会切换。预算为当前模型 p95 的两倍,且至少为 25 ms。运行 palace embeddings cutover --force 可强制切换,或运行 palace embeddings cancel 保留当前模型。

在 config.json 中设置 embedding_model(或设置 PALACE_EMBEDDING_MODEL)可为新的空 Palace 选择模型。现有 Palace 不会自行切换。palace status、palace_status 和 palace_session_context 会报告待处理的迁移,直到你运行 migrate。迁移不会自行发生:你需要运行 migrate,或让你的 Agent 运行它;这会使用 palace_embeddings MCP 工具(它会在服务后台执行相同步骤)。在远程模式下,模型由服务端管理,因此这些命令会在服务端运行。

检索前会清理 Agent 生成的查询转储。返回结果会附带分数来源(combined、cosine、bm25、coding_boost、preference_match、rerank_score、intent)以及来自同一源文件的相邻分块。

自动回忆(钩子)

palace install 会注册用户级钩子,因此记忆可在每个项目中生效,无需编辑各项目的文件:

一个 Agent 会话,包含四个钩子:会话开始、提交提示词,以及在工具使用后从 palace.db 回忆;停止时会要求 Agent 保存日记条目和决策

图 3。三个钩子将记忆读入会话。第四个钩子确保会话中的经验教训被写回。

钩子功能
会话开始注入记忆协议、你在 general/preferences 中设定的固定规则(在每个项目中原样注入)、此项目的近期日记条目(来自任何 Agent),以及项目所在翼的顶层抽屉。
提交提示词使用你的实际问题搜索 Palace,并在 Agent 回答前注入匹配的抽屉。如果历史问题没有找到内容,就会提示 Agent 运行 palace_search。在 Claude Code 中,还会添加一行提醒,直到会话调用 Palace 工具为止。跳过较短的提示词和斜杠命令。仅限 Claude Code 和 Codex。
工具使用后当 Agent 使用 grep 搜索并读取文件时,回忆相关记忆,让先前的决策无需搜索即可浮现。在 Claude Code 中,还会记录会话调用的 Palace 工具。
停止如果会话确实完成了工作,却没有保存任何内容,就会在会话结束前要求 Agent 写一条日记并记录决策,此请求只会发出一次。在 Claude Code 中,按会话进行判断,包括从未使用 Palace 的会话;其他 Agent 则依据近期活动时间窗口判断。

自动回忆仅限当前项目。其他项目翼中的抽屉和其他项目的日记不会显示。主题翼仍会显示。

所有钩子都以开放失败方式运行:如果 palace 缺失或为空,Agent 会照常工作。

记忆协议

palace install 还会在每个客户端的指令文件中写入一条简短规则,告诉 Agent 何时使用记忆:

  1. 会话开始: palace_status → palace_session_context → palace_diary_search。
  2. 回答有关过去的决策、偏好或历史的问题之前: 在 grep 之前先运行 palace_search 和 palace_kg_query。
  3. 工作完成后: 运行 palace_diary_write,并使用 palace_kg_add 添加持久事实。

对于当前符号、精确定义,以及可能在提取后发生变化的代码,grep 仍然是首选工具。

九个协议工具都标记为 _meta."anthropic/alwaysLoad" = true,因此 Claude Code 2.1.121 及更高版本会保持这些工具加载,而不是将其延后到工具搜索时再加载。

记忆层
层级名称内容
L0身份~/.palace/identity.txt,始终加载(约 100 个 token)
L1核心故事按重要性排列、按房间分组的顶层抽屉(约 600–900 个 token)
L2按需按翼和房间筛选的检索
L3深度搜索对整个 palace 进行完整的混合搜索

palace wake-up 会打印 L0 和 L1。Agent 通过 MCP 工具访问 L2 和 L3。


🔌 支持的客户端

默认情况下,palace install 会为所有受支持的客户端配置 (--client all)。只有在 Gemini CLI、VS Code、Windsurf、OpenCode、Cline、Zed 和 Goose 的配置文件夹存在时,才会将它们纳入配置,因此 Palace 不会设置你没有安装的 Agent。使用 --client <name> 可显式配置一个客户端。

客户端--clientMCP 配置规则文件钩子
Claude Codeclaude~/.claude.json~/.claude/CLAUDE.md~/.claude/settings.json
Codexcodex~/.codex/config.toml~/.codex/AGENTS.md~/.codex/hooks.json(在 Codex CLI 中运行一次 /hooks 以信任这些钩子)
Cursorcursor~/.cursor/mcp.json~/.cursor/rules/palace.mdc~/.cursor/hooks.json
Gemini CLIgemini~/.gemini/settings.json~/.gemini/GEMINI.md~/.gemini/settings.json(仅在 Gemini 中你信任的文件夹内运行)
VS Code(Copilot)vscodeCode/User/mcp.jsonCode/User/prompts/palace.instructions.md~/.copilot/hooks/palace.json(无法在提示词时召回:VS Code 无法在该处注入内容)
OpenCodeopencode~/.config/opencode/opencode.json~/.config/opencode/palace.md,在 instructions 下列出~/.config/opencode/plugins/palace.js
Clinecline~/.cline/data/settings/cline_mcp_settings.json~/.cline/rules/palace.mdDocuments/Cline/Hooks(提示词和工具调用后召回;Cline 无法在任务结束后继续运行,因此没有保存提醒)。不会覆盖你自己的钩子脚本。
ZedzedZed settings.json(context_servers)Zed 的全局 AGENTS.md无。Zed 的 Agent 不支持钩子;在 Zed 中使用的外部 Agent 使用各自的 Palace 配置。
GoosegooseGoose config.yaml(extensions)Goose .goosehints~/.agents/plugins/palace(仅提供保存提醒;Goose 钩子无法注入上下文;Windows 上需要 sh)
Windsurfwindsurf~/.codeium/windsurf/mcp_config.json~/.codeium/windsurf/memories/global_rules.md无。Cascade 钩子无法注入上下文。Devin Local 复用 Claude Code 钩子。
Claude Desktopclaude-desktopclaude_desktop_config.json~/.claude/CLAUDE.md无。请改用 MCP 提示词。

规则文件以托管区块的形式写入。现有内容会保留。

palace install --client claude                       # one client only
palace install --scope project --path ./my-project   # project-level rule files
palace install --no-rule                             # MCP wiring only, no rule
palace install --dry-run                             # preview the changes
palace uninstall                                     # undo everything

使用 --scope project 时,规则会写入 <project>/CLAUDE.md、<project>/AGENTS.md (Codex、OpenCode、Cline、Zed 和 Goose)、<project>/GEMINI.md、<project>/.github/copilot-instructions.md、 <project>/.windsurf/rules/palace.md 和 <project>/.cursor/rules/palace.mdc。 Cursor、VS Code 和 OpenCode 还会获得项目级 MCP 配置 (.cursor/mcp.json、.vscode/mcp.json、opencode.json)。

手动配置 MCP

任何 MCP 客户端都可以通过 palace mcp 将 Palace 作为 stdio 服务运行。

JSON 客户端(Claude Code、Cursor、Claude Desktop):

{
  "mcpServers": {
    "palace": { "command": "palace", "args": ["mcp"] }
  }
}

Codex(~/.codex/config.toml):

[mcp_servers.palace]
command = "palace"
args = ["mcp"]

Claude Code CLI:

claude mcp add palace -- palace mcp
MCP 提示词

Claude Desktop 无法运行钩子,因此服务会在提示词选择器中提供两个提示词:

提示词功能
continue-session加载热启动上下文,让 Agent 从你上次离开的地方继续
save-session将会话保存到记忆中,以便下次继续使用
配置方案

配置方案会更改 Agent 规则、协议文本,以及 palace init 查找的房间:

配置方案适用场景常见房间
coding(默认)软件项目前端、后端、测试、文档、配置
creative世界构建、D&D、小说创作角色、地点、背景设定、派系、时间线
personal辅导、照护、家务、客户记录人员、健康、财务、家庭、日程
palace install --profile creative

配置方案会保存到 ~/.palace/config.json。设置 PALACE_PROFILE 可对单个进程覆盖此配置。

远程模式(共享团队记忆)

默认情况下,palace mcp 为你的本地 Palace 提供服务。远程模式会将其转为 stdio-to-HTTP 桥接,连接到共享的 Palace Server, 即面向团队的商业版可自托管服务。客户端注册方式无需更改。

palace remote set --endpoint https://palace.yourco.com   # prompts for the ps_… API key
palace remote on
palace remote test      # runs the MCP handshake and reports the tool count
palace remote status    # mode, endpoint, masked key
palace local            # back to the local palace

🧰 CLI 参考

运行 palace <command> --help 查看所有标志。

设置

命令功能
palace install为你的 Agent 注册 MCP 服务、规则和钩子
palace uninstall移除这些内容
palace doctor检查二进制文件、数据库、MCP 配置和规则
palace seed-adoption-facts注入知识图谱事实,让 Agent 的记忆召回效果可衡量

添加记忆

命令功能
palace init <dir>检测房间并写入 palace.yaml(--yes 跳过提示,--auto-mine 则会立即挖掘)
palace mine <dir>对项目文件分块、嵌入并存储。再次运行时只会处理已更改的文件。
palace watch <dir>工作期间自动重新挖掘已更改的文件
palace mine-convos <dir>导入聊天记录:Claude Code 和 Codex JSONL、Claude.ai、ChatGPT、Slack
palace sweep <path>将转录 JSONL 文件按每条消息存为一个抽屉
palace split将拼接在一起的 Claude Code 转录文件拆分为每个会话一个文件

查找记忆

命令功能
palace search <query>混合搜索(--wing、--room、--limit、--rerank)
palace wake-up打印 L0 身份信息和 L1 核心故事
palace status按翼和房间统计抽屉数量
palace wings列出已注册的翼,以及其类型、抽屉数量和上次挖掘时间
palace timeline按时间顺序列出知识图谱事实(使用 --entity 筛选)
palace gain查看你的 Agent 使用 Palace 的情况,以及它节省的内容

维护

命令功能
palace export / palace import <file>将抽屉备份为 JSON 或从 JSON 恢复(导入时会重建嵌入)
palace prune --older-than-days <n>删除旧抽屉(使用 --dry-run 预览)
palace repair为缺少向量的抽屉重新生成嵌入
palace upgrade-embeddings使用当前模型为所有内容重新生成嵌入(使用 --refresh-preferences 更新偏好跨度)
palace embeddings …列出、估算、迁移到、验证、切换到或回滚嵌入模型
palace migrate <db>从另一个 Palace 数据库复制抽屉
palace compress将抽屉压缩为 AAAK 方言

服务

命令功能
palace mcp启动 MCP stdio 服务
palace remote … / palace local配置并切换远程模式
palace hook <event> --client <c>由已安装钩子调用的钩子运行器
挖掘项目
flowchart LR
    DIR["📁 Your repo"] --> F["Filter<br/>.gitignore + skip build dirs"]
    F --> C{"Changed since<br/>last mine?"}
    C -- no --> SKIP["Skip"]
    C -- yes --> CH["Chunk + pick room<br/>using palace.yaml"]
    CH --> E["Embed locally<br/>all-MiniLM-L6-v2"]
    E --> DB[("palace.db")]

图 4.挖掘只会处理已更改的文件,因此重复运行的成本很低。

palace mine 会遵循 .gitignore,并跳过 .git、node_modules、 target、build、dist、vendor 等构建输出目录。它会读取常见的 文本和源代码格式:md、txt、rs、py、js、ts、tsx、go、 java、rb、sh、sql、json、yaml、toml、html、css、csv 等。

palace mine ~/my-project \
  --wing my_project            # override the wing name
  --limit 100                  # process at most 100 new or changed files
  --dry-run                    # preview without storing
  --no-gitignore               # ignore .gitignore rules
  --include vendor,third_party # force-include these paths

--limit 运行可以续接:下一次运行会从上次停止的位置继续。

使用 palace gain 衡量价值
palace gain                       # last 30 days
palace gain --project my_project --since 7d
palace gain --history             # recent tool calls
palace gain --json
palace gain --record <query_id> <drawer_id> useful   # or not_useful / wrong_answer
palace gain - last 30d (my_project)
  Tool calls         : 412   (sessions: 27)
  Hit rate           : 88%   (search hits 142/162)
  Precision@1        : 92%
  Precision@5        : 95%
  Tokens saved (est) : ~78,400
  Re-index skipped   : 31    (duplicate drawers avoided)
  KG facts recalled  : 56
  Diary recalls      : 8
  Repeat Qs avoided  : 19
  p95 latency        : 41 ms

使用情况元数据会保留在你的本地 palace.db 中。设置 PALACE_GAIN_DISABLED=1 即可关闭记录。


🧩 MCP 工具

全部 50 个工具

状态与健康状况

工具描述
palace_statusPalace 概览:抽屉和翼的数量、近期会话(verbose 会额外显示房间、协议文本和 AAAK 规范)
palace_verify检查 MCP 工具、数据库健康状况、嵌入和模型缓存
palace_recall_check运行项目记忆探测并报告预期命中结果
palace_gain使用收益与节省。可接受可选的 record 反馈负载。
palace_memory_report可读的清单:个人资料、各翼和各房间的数量、近期活动

翼与分类体系

工具描述
palace_project_status此项目是已挖掘、已注册但未挖掘,还是未知?
palace_mine按需挖掘代码仓库(需先征得用户同意)
palace_create_wing创建主题或项目翼
palace_list_wings已注册的翼,包含类型、路径、上次挖掘时间和数量
palace_list_rooms列出某个翼中的房间
palace_get_taxonomy完整的翼 → 房间 → 数量树

搜索

工具描述
palace_search混合搜索,包含评分来源和来源上下文
palace_preference_search专门用于搜索偏好和约定问题
palace_check_duplicate检查内容是否已存在

抽屉

工具描述
palace_add_drawer将内容存储到某个翼和房间中
palace_remember存储重要性为 5 的关键信息
palace_get_drawer按 ID 获取抽屉
palace_list_drawers列出抽屉,可按翼和房间筛选
palace_update_drawer更新内容并刷新元数据
palace_delete_drawer / palace_forget移除抽屉
palace_explain完整溯源信息:存储者、存储时间、来源和重要性
palace_prune移除过时或价值较低的抽屉
palace_export / palace_import导出或导入 Palace 数据
palace_upgrade_embeddings重新生成抽屉的嵌入并刷新偏好向量
palace_embeddings列出模型、估算用量,并在你提出要求时迁移到其他嵌入模型

知识图谱

工具描述
palace_kg_query查询实体的关系
palace_kg_add添加事实(主体 → 谓词 → 客体)
palace_kg_invalidate将事实标记为不再成立
palace_kg_timeline按时间顺序列出事实
palace_kg_stats图谱概览
palace_conflicts查找过时或矛盾的事实
palace_seed_adoption_facts添加采用情况和质量门槛事实

图谱与隧道

工具描述
palace_traverse从一个房间开始进行广度优先遍历
palace_find_tunnels查找连接两个翼的房间
palace_create_tunnel / palace_list_tunnels / palace_delete_tunnel管理已存储的隧道
palace_follow_tunnels从某个翼和房间开始沿隧道追踪
palace_graph_stats图谱摘要

日记与会话

工具描述
palace_diary_write写入日记条目
palace_diary_read阅读近期条目
palace_diary_search搜索日记。all_agents: true 会搜索所有 Agent 的日记。
palace_session_context热启动上下文。如果当前 Agent 在该项目中没有近期工作记录,则回退到其他 Agent 的近期工作。
palace_list_agents列出 Agent 日记

内部

工具描述
palace_get_aaak_specAAAK 压缩记忆方言规范
palace_hook_settingsHook 设置
palace_memories_filed_awaystop hook 使用的确认信息

🔧 配置

设置的加载顺序为:环境变量,然后是 ~/.palace/config.json,最后是默认值。

环境变量默认值说明
PALACE_PALACE_PATH~/.palace/palace数据目录。数据库位于其中的 palace.db。
PALACE_PROFILEcodingcoding、creative 或 personal
PALACE_RERANKoff设为 1 可为每次搜索启用本地重排序器
PALACE_RERANK_MODELbuilt-in覆盖重排序器模型
PALACE_ENTITY_LANGUAGESen用于实体检测的语言,以逗号分隔
PALACE_GAIN_DISABLEDoff设为 1 可关闭使用情况记录
PALACE_PROJECTauto用于归因使用情况的项目名称
PALACE_SOURCE_DIR~/Desktop/transcriptspalace split 的默认来源
PALACE_MINE_TRACEoff设为 1 可打印各阶段挖掘耗时
PALACE_MCP_MODElocallocal 或 remote
PALACE_EMBEDDING_MODELminilm-l6-v2新建 palace 使用的嵌入模型(参见嵌入模型)
PALACE_EMBEDDING_LATENCY_BUDGET_MS当前 p95 的 2 倍palace embeddings verify 的查询延迟预算
PALACE_EMBED_THREADS所有核心用于嵌入的 ONNX 线程数
PALACE_REMOTE_ENDPOINTnonePalace Server URL(主机、基础 URL 或完整的 /mcp URL)
PALACE_API_KEYnonePalace Server API 密钥(ps_…)

config.json 使用相同设置作为键:palace_path、profile、 entity_languages、topic_wings、people_map、mcp_mode、 remote_endpoint、remote_api_key、embedding_model、 embedding_latency_budget_ms。Palace 会以仅所有者可读写的 0600 权限写入此文件。

palace.yaml(每个项目)

palace init 会创建此文件。编辑它可以调整文件到房间的映射方式:

wing: my_project
rooms:
  - name: backend
    description: Server and API code
    keywords: [api, server, routes, models]
  - name: frontend
    description: UI components
    keywords: [ui, components, pages, views]
  - name: general
    description: Everything else
    keywords: []

📊 基准测试

编码 Agent 记忆评测

一组模拟真实项目记忆的夹具(决策、过去的故障、命令、惯例、 偏好、当前方向),包含 51 个问题,例如:

  • 我们为什么选择捆绑式 sqlite?
  • 上次我们如何修复迁移测试失败的问题?
  • 我应该运行什么 clippy 命令?
cargo test --test coding_agent_eval -- --nocapture

测试会报告 recall@1 和 recall@5,并在检索结果低于固定阈值时失败。它回答了一个重要问题:编码 Agent 需要时,能否找到正确的项目上下文?

此评测有一部分是经过有意调优的。 排序器针对编码 Agent 的增强包含了少量取自评测问题本身的短语(例如 “explain themselves”、“proof priority” 和 “release theme”),因此此处和下方 bake-off 中的调优分数高于仅使用通用排序时的分数。我们会保留这些短语,直到通用改进达到相同分数,然后再将其移除。在移除这些短语后,使用相同代码测得的结果如下:

模式使用评测短语(调优后)R@1 / R@5不使用评测短语 R@1 / R@5
仅关键词(此测试)0.863 / 1.0000.804 / 0.961
minilm-l6-v20.902 / 1.0000.902 / 1.000
minilm-l6-v2-q80.922 / 1.0000.902 / 1.000

这些短语不会影响此评测之外的结果:真实 palace 探测和每个会话的 LongMemEval 排序,在使用和不使用这些短语时完全相同。

嵌入模型对比测试

tests/embedding_bakeoff.rs 使用嵌入式抽屉,对此评测中的所有嵌入模型进行评分,并使用来自真实 Palace 的 200 个已知条目探测进行测试。它还会测量索引吞吐量和查询延迟。每个探测都是抽屉中的一个内部句子,约有 30% 的词被删去。

PALACE_RUN_BAKEOFF=1 PALACE_BAKEOFF_DB=~/.palace/palace/palace.db \
  cargo test --release --test embedding_bakeoff -- --nocapture
模型编码评测 R@1 / R@5(调优后)Palace 探测 R@1 / R@5索引查询 p95
minilm-l6-v2(默认)0.902 / 1.0000.850 / 0.970112 个抽屉/秒2.3 ms
minilm-l6-v2-q80.922 / 1.0000.860 / 0.980204 个抽屉/秒2.6 ms
bge-small0.863 / 1.0000.910 / 0.98555 个抽屉/秒7.2 ms
bge-small-q80.863 / 1.0000.915 / 0.985103 个抽屉/秒5.5 ms
bge-base-q80.863 / 1.0000.920 / 0.98539 个抽屉/秒11.0 ms

混合召回率:从一个包含 10,700 个抽屉的 Palace 中抽取 400 个抽屉;Windows,16 个线程。BGE 的排名最佳,采用 0.5 的余弦下限以及余弦/BM25 各占一半的权重;其注册表条目中已包含这些设置。只有在编码 Agent 评测中达到 MiniLM 的表现,模型才会以非实验性模型的身份发布。因此,尽管 BGE 模型在真实 Palace 探测中表现更佳,目前仍处于实验阶段。verify 会在切换前用你自己的 Palace 测量同一指标。

LongMemEval

LongMemEval s_cleaned 上的检索召回率:评估了 470 个问题,每个问题对应一个约 50 个会话、115k 个 token 的干扰内容集合。按照惯例,不计入 30 个弃答问题。

配置模型R@1R@5R@10
oracle 划分(合理性检查)minilm-l6-v21.0001.0001.000
每个会话一个抽屉minilm-l6-v20.8890.9790.991
每个会话一个抽屉minilm-l6-v2-q80.8910.9790.991
对话轮次对,与 Palace 挖掘聊天记录的方式相同minilm-l6-v2-q80.9060.9850.994

对话轮次对这一行体现了 Palace 实际存储对话的方式:每个会话都会经过与 palace mine-convos 相同的标准化器和分块器(每个用户轮次及其回复组成一个块),会话排名取其最佳块。每会话行采用 LongMemEval 常用的粒度,便于与其他系统比较。

方法与各类型结果
  • **粒度:**与各行所示相同。不使用 LLM 过滤、摘要或提取内容;用户和助手轮次会一同存储。
  • **嵌入器:**MiniLM-L6-v2(384 维、ONNX、全精度或 int8),512-token 上限,本地运行。
  • **检索:**Palace 的常规混合搜索(BM25 与余弦相似度融合,并应用排名加权),top-K 为 10。
  • 任何阶段都不使用 LLM,不使用 GPU,也未针对 LongMemEval 调优。
  • **指标:**会话粒度下的 recall_any@K。
  • **硬件:**Windows,16 个线程。
问题类型每会话,minilm-l6-v2 R@1 / R@5对话轮次对,q8 R@1 / R@5
knowledge-update0.944 / 1.0000.958 / 1.000
multi-session0.909 / 0.9830.901 / 0.992
single-session-assistant1.000 / 1.0001.000 / 1.000
single-session-preference0.633 / 0.8330.767 / 0.900
single-session-user0.922 / 1.0000.984 / 1.000
temporal-reasoning0.835 / 0.9760.835 / 0.976

oracle 划分只包含标准答案会话,因此它检查的是流水线,而不是衡量检索效果。偏好问题是表现最弱的类别,因为“I prefer…”这类句子很少与问题共享关键词。其余大多数时间推理漏检都涉及相对日期(如“一周前”),而排名目前尚未使用这一信息。

较早的一次运行(2026 年 5 月,在加入编码 Agent 加权之前)每会话得分为 0.889 / 0.981 / 0.991。之后的排名器改动导致两个问题失分;其中一个已修复,另一个是因为惯例加权在“should”一词上触发。


🔒 隐私与数据

  • 默认情况下,所有数据都存储在本地。 一个 SQLite 文件位于 ~/.palace/palace/palace.db。嵌入向量由你的 CPU 计算。
  • 网络访问仅用于从 Hugging Face 一次性下载模型,以及在开启远程模式时访问你自己的 Palace Server。
  • 不收集遥测数据。 palace gain 统计信息只会写入你的本地 数据库。
  • 使用 palace export 备份,或复制 palace.db。
  • 使用 palace_forget 删除单条记忆,或删除 ~/.palace 以清除所有内容。

Palace 会存储你挖掘的所有内容。在挖掘代码库之前,使用 .gitignore 排除机密信息。


🩺 故障排除

问题解决方法
Agent 从不调用 Palace运行 palace doctor,然后完全重启 Agent 应用。在 Codex CLI 中,运行一次 /hooks 以信任这些钩子。
palace: command not found打开新的终端,让 PATH 加载安装目录;或者使用完整路径运行 palace doctor。
没有搜索结果检查 palace status。如果项目没有抽屉,运行 palace init <dir> --yes --auto-mine。
结果已过时再次运行 palace mine <dir>(只会处理已更改的文件),或持续运行 palace watch <dir>。
模型下载失败检查能否访问 huggingface.co,然后重试。首次成功下载后,模型会缓存下来。
首次运行时搜索较慢首次调用会加载 ONNX 模型。同一会话中的后续调用速度很快。
某些抽屉没有向量palace repair

❓ 常见问题

我需要告诉 Agent 使用它吗?

不需要。运行 palace install 后,钩子会在会话开始时、你发送提示词时以及 Agent 阅读代码时注入相关记忆。安装的规则会告诉 Agent 在回答有关历史的问题前搜索记忆,并在之后保存它学到的内容。

这和 CLAUDE.md 或 AGENTS.md 有什么不同?

这些文件是你手动编写和维护的指令,而且每一行都会加载到每个会话中。Palace 是一种可搜索的记忆,会随着你的工作不断增长:只会检索与当前问题相关的部分,并且 Claude Code、Codex、Cursor 和 Claude Desktop 共享同一份记忆。规则仍然写在指令文件中;历史记录则交给 Palace。

它会把我的数据发送到别处吗?

不会。存储、嵌入和搜索都在本地运行。唯一的网络请求是从 Hugging Face 下载模型的一次性请求,以及在你启用远程模式时,连接你自己的 Palace Server。请参阅隐私与数据。

它会拖慢我的 Agent 吗?

搜索通常只需几十毫秒(palace gain 会显示实际的 p50 和 p95)。会话中的首次调用会加载嵌入模型。钩子会以开放模式失败,因此 palace 缺失或损坏也不会阻塞 Agent。

记忆过时后会怎样?

重新运行 palace mine 会更新已更改的文件。对于事实,Agent 会调用 palace_kg_invalidate 并添加新事实,因此时间线会同时保留新旧事实。palace_conflicts 会标记看似过时或矛盾的事实,而 palace_forget 或 palace prune 则会移除你不再需要的抽屉。

整个团队可以共用一份记忆吗?

同一台机器上的不同 Agent 已经可以共用记忆:Codex 会话可以读取 Claude Code 会话的日志。对于团队,远程模式会将每个 palace mcp 指向同一个可自托管的 Palace Server。

它只能用于代码吗?

不是。creative 和 personal 配置针对世界构建、小说创作、辅导、照护和家庭记录进行了调优。Palace 可以读取 Markdown 和文本文件,因此 Claude Desktop 用户可以安装 MCPB 包并直接开始使用,无需编写代码。


📚 将 Palace 用作库

Palace 也是一个 Rust crate(palace)。将它添加为 git 依赖项:

[dependencies]
palace-rs = { git = "https://github.com/AncientiCe/palace-rs", default-features = false }
use palace::{db, knowledge_graph, store};

let conn = db::open_in_memory()?;
store::add_drawer(&conn, "wing_code", "backend",
    "We use SQLite with WAL mode for concurrent reads.",
    None, "architecture.md", 0, "example", 4.0)?;
knowledge_graph::add_triple(&conn, "Palace", "stores_data_in", "SQLite",
    Some("2026-04-01"), None, 1.0, None, None)?;

default-features = false 会省去 CLI 依赖项。完整示例请参阅 examples/basic_usage.rs(cargo run --example basic_usage)。palace::palace::Palace::search_with_provenance 会返回与 MCP 工具相同的分数详情。


🧪 开发

cargo fmt
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all-features
cargo audit

测试使用内存中的 SQLite,只有需要嵌入模型的测试才会加载该模型。请参阅 CONTRIBUTING.md、SECURITY.md 和 CHANGELOG.md。


🚚 从旧版本迁移

从 mempalace(0.1.x)迁移

0.2.0 版本将项目名称从 mempalace 更改为 palace。0.2.x 系列仍支持旧名称,但会发出警告。这些旧名称已在 0.3.0 中移除。

要从 0.1.x 升级,可以先安装一个 0.2.x 版本并运行 palace install,以迁移配置并将 ~/.mempalace 移至 ~/.palace;也可以手动重命名:~/.mempalace → ~/.palace、 mempalace.yaml → palace.yaml、MEMPALACE_* → PALACE_*,以及 mempalace_* MCP 工具 → palace_*。原先运行 mempalace mcp 或 python -m mempalace.mcp_server 的钩子现在应运行 palace mcp。

从 Python 版本迁移

Rust 版本使用单个 palace.db 替代 ChromaDB 和 SQLite。ChromaDB 数据无法转换,因此请重新摄取:

palace init ~/my-project --yes --auto-mine
palace mine-convos ~/Desktop/transcripts
palace status

~/.palace/ 中的 identity.txt、people_map.json 和 known_names.json 仍然兼容,并会自动读取。


📜 许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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