mcpField
P
Palinode

Palinode

本地服务
github.com记忆与知识461 周前更新

关于 Palinode

Palinode 是基于 Git 版本化 Markdown 文件的项目记忆工具,供 AI Agent 在多次会话、多个 Agent 与工作树之间保存、检索和修正决策。文件即事实来源,所有变更可审查、可回滚。

主要功能

  1. 01Markdown 与 YAML frontmatter 存储
  2. 02Git 历史可查看、比对与回滚
  3. 03BM25 与向量混合检索
  4. 04可通过 REST API 与 CLI 访问
  5. 05按会话自动注入的记忆(部分客户端)
  6. 06周期性整理并以 Git 提交记录

适用场景

  1. 01记录并回溯被替换的技术决策
  2. 02让新会话的 Agent 读取既有项目背景
  3. 03在多台机器或 IDE 间共享同一记忆服务

MCP 相关

Palinode 通过 MCP 服务暴露保存、搜索、诊断、差异、追溯与回滚等工具,支持 Streamable HTTP 与 stdio 两种连接方式,可连接 Claude Code、Cursor 等兼容客户端。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"phasespace-labs-palinode": {
"command": "uvx",
"args": [
"palinode"
],
"env": {
"PALINODE_DIR": "<PALINODE_DIR>",
"PALINODE_API_HOST": "<PALINODE_API_HOST>",
"PALINODE_API_PORT": "<PALINODE_API_PORT>",
"PALINODE_API_TOKEN": "<PALINODE_API_TOKEN>",
"PALINODE_API_TOKEN_FILE": "<PALINODE_API_TOKEN_FILE>",
"PALINODE_MCP_HTTP_HOST": "<PALINODE_MCP_HTTP_HOST>",
"PALINODE_MCP_HTTP_PORT": "<PALINODE_MCP_HTTP_PORT>"
}
}
}
}
启动命令uvx palinode
需要配置的环境变量
PALINODE_DIRPath to the markdown-memory directory (e.g. ~/.palinode). Created if missing.
PALINODE_API_HOSTHost where the back-end palinode-api process is reachable
PALINODE_API_PORTPort for palinode-api
PALINODE_API_TOKEN密钥Optional bearer token enforced on every palinode-api request other than /health. Required when PALINODE_API_BIND_INTENT=public. Generate with: python -c 'import secrets; print(secrets.token_urlsafe(32))'.
PALINODE_API_TOKEN_FILE密钥Path to a file containing the bearer token (alternative to PALINODE_API_TOKEN; for docker-secrets style deployments)
PALINODE_MCP_HTTP_HOSTBind host for the MCP HTTP server. Defaults to loopback; set to 0.0.0.0 only with intentional network exposure (paired with PALINODE_API_BIND_INTENT=public on the back-end).
PALINODE_MCP_HTTP_PORTPort for the MCP HTTP server

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

安装包
pypipalinode0.23.0

工具

39

收录的工具列表 · 更新于 2 周前

参数类型必填说明
cwdstring否用于解析项目范围的工作目录。省略时,默认为服务器进程的 CWD。
projectstring否显式指定的项目 slug 或实体引用;优先于 cwd 解析。

详细介绍

┌─ palinode ─┐
│ ░░░░░░░░░░ │
│ ▓▓▓▓▓▓▓▓▓▓ │
│ ██████████ │
└────────────┘

可检查、可更正的项目记忆,助力跨会话、Agent 和工作树的重复工作。

上周,团队选择 SQLite 作为缓存,因为这样就不用运维数据库了。本周,需求变更,PostgreSQL 成了更好的选择。没有决策及其原因的记录,新 Agent 可能会重复旧方案。有了 Palinode,你可以保存替代方案、检查原始决策及其历史记录,并更正记录,以供下一次会话使用。

Palinode 将项目记忆保存在 Markdown 文件和 Git 历史中,由你在本地掌控。Agent 可以使用它的工具来保存、搜索和检查这些记忆。某些受支持的客户端集成还可以执行已配置的捕获或回忆操作;其自动行为、范围和控制方式因客户端和配置而异。未经标记的笔记绝不会被悄悄提升为事实。

Palinode 是一种诗歌形式:撤回之前所说的话,并将其说得更好。这正是记忆压缩所做的事。

由 phasespace-labs 的 Paul Kyle 构建。参见 AUTHORS。


从这里开始

按照规范版快速入门完成一整套流程: 安装 → 启动 → 连接 MCP 客户端 → 保存决策 → 开启新会话 → 检查其 Markdown/来源信息 → 更正。此流程将私有记忆存储与代码检出目录分开,并区分当前版本与从源代码检出后可用的功能。

检查已退役的决策

初始 SQLite 决策已归档后的虚构 Harbor Notes 检查器;来源信息面板中包含 Saved commit。

截图显示的是单独保存 PostgreSQL 替代方案并使原决策退役后,已归档的初始 SQLite 决策。完整的只读检查器和更正流程,请参阅本地来源信息 UI 指南;该指南说明,图片是在退役之后拍摄的,而不是保存步骤之前。


支持的平台

平台会话技能路径MCP 配置
Claude Code CLI~/.claude/skills/~/.claude.json
Claude Desktop~/.claude/skills/claude_desktop_config.json
Cursor.cursor/skills/.cursor/mcp.json
VS Code + Claude(Continue / Cline)~/.claude/skills/参见 MCP-INSTALL-RECIPES.md
JetBrains + Claude~/.claude/skills/~/.claude.json
Antigravity IDE.agent/skills/原生三点 MCP 菜单
Codex CLIN/A(不支持技能)~/.codex/config.toml
PiN/A(原生扩展)plugins/pi/ — 通过生命周期钩子按轮次回忆
Cline CLI / SDKN/A(原生插件)plugins/cline/ — 通过 AgentPlugin 钩子按轮次回忆

所有平台共用同一个 MCP 服务——在你的服务器上安装一次,即可从任何 IDE 连接。docs/HARNESSES.md 是跨宿主环境指南:介绍每种宿主环境的功能(原生钩子、插件或 MCP)、各层如何叠加,以及从何处开始。各客户端的配置片段见:docs/MCP-SETUP.md 和 docs/MCP-INSTALL-RECIPES.md。


核心理念

Palinode 将纯文本文件视为事实来源,并根据这些文件构建索引和接口。

Files (markdown + YAML frontmatter)
  ↓ watched
Index (SQLite-vec vectors + FTS5 keywords, single .db file)
  ↓ queried by
Interfaces (MCP server, REST API, CLI, OpenClaw plugin)
  ↓ compacted by
Consolidation (structured operations → validation and application → git commits)

这就是全部架构。一个 .md 文件目录、一个 SQLite 数据库、一个 API 服务。没有 Postgres,没有 Redis,也不依赖云服务。


一个后端,支持所有接口

Palinode 不在乎你如何与它交互。完整工具集——保存、搜索、诊断、重复项建议、孤立项修复、差异对比、追责、回滚等——都可通过每种接口使用:

接口传输方式适用场景
MCP 服务Streamable HTTP 或 stdioClaude Code、Claude Desktop、Cursor、Windsurf、Zed、VS Code (Continue/Cline)
REST API:6340 上的 HTTP脚本、webhook、自定义集成
CLI封装 REST APICron 作业、SSH、shell 脚本
插件OpenClaw 生命周期钩子使用注入/提取模式的 Agent 框架

只需在一台服务器上设置一次。即可从任何机器、任何 IDE、任何 Agent 框架连接。MCP 服务是纯 HTTP 客户端——不保存任何状态、不连接数据库,也不包含嵌入器。将它指向 API 即可使用。

{
  "mcpServers": {
    "palinode": { "type": "http", "url": "http://your-server:6341/mcp/" }
  }
}

这就是完整的客户端配置。适用于 Claude Code、Claude Desktop、Cursor、Windsurf、Zed 和 VS Code (Continue/Cline)。palinode-mcp-http 在 /mcp/ 提供 streamable-HTTP 服务——使用 "type": "http",而不是 "type": "sse"。URL 末尾务必保留斜杠。编辑器专属安装步骤请参阅 docs/MCP-SETUP.md。


工作原理

存储——使用带有 YAML frontmatter 的类型化 Markdown 文件(人物、项目、决策、见解)。由 Git 进行版本管理。便于阅读。可在 Obsidian、VS Code、vim 或任何其他工具中编辑。

索引——文件监视器会在你保存时使用 FTS5 建立索引。基于内容哈希的去重会跳过未更改文件的重新嵌入。索引是本地 SQLite 文件;嵌入可使用本地 BGE-M3 endpoint 或配置的远程提供方。

搜索——结合 BM25 与向量搜索,并使用 Reciprocal Rank Fusion 合并结果。这两种搜索各有用途:对于完整句子的提问,向量搜索可检索语义匹配项,而 BM25 则能捕捉精确术语和标识符。评估背景和局限性请参阅基准测试。还可选用关联式实体图和前瞻性触发器。

精简——每周进行一次整合,由大模型返回结构化操作,再由 Palinode 验证并应用。每次精简都会生成一个 Git 提交,你可以审查、追责或还原。

梦境整理——如果你熟悉将“dreaming”用作此功能的名称,palinode dream 是 palinode consolidate 的别名。使用 --dry-run 检查拟议操作;每次完成的处理都会生成一个 Git 提交,因此如果整合结果有误,只需审查差异并还原相应提交。

审计——对任何事实运行 git blame。对任何更改运行 git diff。回滚任何错误。这些不只是兼容 Git 的文件——palinode_diff、palinode_blame 和 palinode_rollback 都是一等工具,你的 Agent 可以调用。


要求

  • Python 3.11+
  • Git
  • Ollama 和 bge-m3(ollama pull bge-m3,约 1.2 GB),或其他受支持的嵌入 endpoint——用于混合索引和搜索。从 v0.21 开始,你也可以选择显式的词法模式;它使用关键词/FTS 检索,并非混合模式的 endpoint 故障时的备用方案。没有嵌入器时仍可保存数据,但在 endpoint 可访问之前,混合搜索会返回 HTTP 503(palinode resolve 会降级为仅关键词搜索,并明确说明)。安装和验证步骤请参阅 Homebrew 设置指南。

可选组件:用于每周整合的聊天模型(任何能输出 JSON 的 7B 以上模型)、用于 Agent 插件钩子的 OpenClaw。


安装

首次捕获前: Palinode 会存储可读的 Markdown 和 Git 历史记录。private/restricted 用于控制按范围发现内容;拥有 API 访问权限的调用方仍可通过已知路径读取隐藏记忆,并使用全库维护工具。这些标签不提供加密或按用户/Agent 进行身份验证。请保护存储、备份和 API 凭据;如需更强隔离,请使用独立实例或文件系统权限。请参阅隐私约定。

快速入门是权威的首次使用流程。 其中涵盖独立的私有存储、第二个终端的环境、受支持的词法预览和混合模型路径、编辑器连接、新会话检查、检查器和修正工作流。请勿将代码检出目录与记忆存储合并。若要安装已发布的 Homebrew 版本,请从 docs/HOMEBREW.md 开始;若要引导自主 Agent,请参阅 llms-install.md。


作为服务运行

三个长期运行的进程(API、watcher、embedder)不应放在终端标签页中运行。请选择一种方式:

平台方式详情
任何支持 Docker 的平台在仓库根目录运行 docker compose up -d — 启动 API + watcher + Ollama,并自动拉取 bge-m3(首次运行约需 1.2 GB)docker-compose.yml 文件头部注释
Linux使用 systemd 单元,运行 deploy/systemd/install.sh --enabledeploy/systemd/README.md
macOS使用模板创建 launchd LaunchAgentsdeploy/launchd/README.md
Windows使用 Docker Compose(将 PALINODE_DATA_DIR 设为 Windows 路径)docker-compose.yml 文件头部注释

使用 compose 时,记忆保留在主机的 ~/.palinode 中(可通过 PALINODE_DATA_DIR 覆盖)— 容器会挂载该目录;文件始终是事实来源。若主机上已运行 Ollama?运行 OLLAMA_URL=http://host.docker.internal:11434 docker compose up -d palinode-api palinode-watcher 即可跳过捆绑的 Ollama。验证这三种方式中的任意一种都相同:运行 palinode doctor(或 curl http://127.0.0.1:6340/status)。


连接编辑器

Palinode 支持 MCP。请按照快速入门中的连接步骤操作:palinode mcp-config 会为所选客户端生成原生配置片段,各配置指南也保留了受支持的手动配置方式。此命令为只读;它绝不会编辑客户端配置文件。

要通过 HTTP 连接另一台机器上的服务?请传入项目: palinode mcp-config --http --project <slug> 会添加 X-Palinode-Project 标头。从 v0.22 起,远程服务不再按其自身工作目录限定记忆检索,因此未携带该标头的客户端会获得未限定范围的结果,并显示为 Scope: none。请参阅 v0.22.0 兼容性说明。各工具环境的完整详情: docs/MCP-INSTALL-RECIPES.md。

将 Palinode 条目合并到现有设置中;把生成的输出重定向到现有配置文件会覆盖该文件。


日常使用——添加到项目中

已经安装并运行 palinode-api?只需一条命令即可为任意项目搭建配置:

cd your-project
palinode init

此命令会搭建 .claude/CLAUDE.md(记忆说明;如果文件已存在,则追加内容)、.claude/settings.json(注册 SessionStart + SessionEnd + UserPromptSubmit 钩子)、全部三个钩子脚本,以及 .mcp.json(将 Claude Code 指向 palinode MCP 服务)。之后,每次会话都会智能启动、在进行中回忆,并在结束时记录:SessionStart 钩子会将你的 core: true 记忆注入每个新会话(启动时和执行 /clear 后),确保在首次提示词前就具备常驻上下文;UserPromptSubmit 钩子会在每次提示前回忆相关记忆——先检查预期触发条件,再执行严格阈值搜索,并以精简片段的形式注入;没有匹配项时则保持静默;SessionEnd 钩子会在执行 /clear、注销和退出时自动捕获。使用 --dry-run 重新运行以预览,使用 --force 覆盖,或使用 --no-mcp / --no-hook 限定配置范围。有关可调参数,请参阅 examples/hooks/。

使用其他运行框架的项目也会自动获得相同的记忆说明:如果存在 AGENTS.md(或 .agent/ 目录),init 会将与运行框架无关的记忆区块追加到 AGENTS.md(Codex、Antigravity 和其他兼容 AGENTS.md 的 Agent 会读取该文件);如果存在 .cursor/ 目录,则会为 Cursor 写入 .cursor/rules/palinode.md。使用 --agents/--no-agents 和 --cursor/--no-cursor 强制启用或跳过——记忆回忆、保存和会话结束的约定相同,但不包含 Claude Code 专用机制(/clear、/wrap、钩子)。


使用示例

以下是一些常见工作流。所有命令和选项均列于 docs/CLI.md。

保存决策,以便日后回忆
# During a session — save a decision
palinode save --type Decision "Chose SQLite over Postgres for the cache layer. \
  Reason: no ops burden, single-file deployment, good enough for our scale."

# Next week — search for it
palinode search "database decision for cache"
会话结束时捕获
# Agent calls at end of coding session
palinode session-end \
  --summary "Migrated auth from JWT to session tokens" \
  --decisions "Session tokens stored server-side, 24h expiry" \
  --blockers "Need to update mobile client auth flow"
审计跟踪——谁在何时做出了什么决定
# Trace a fact back to when it was recorded
palinode blame decisions/auth-migration.md

# Compose the full provenance lineage of a fact — sources, saved/changed
# commits, supersession trail, typed links, and recall — in one view
palinode trace decisions/auth-migration.md

# See what changed across all memory in the last week
palinode diff --days 7

# Retire a memory that turned out to be wrong — it leaves recall but stays
# on disk, in git, and in the index. Never a hard delete.
palinode archive insights/stale-finding.md --reason "superseded by the re-run" \
  --superseded-by insights/corrected-finding.md

工具

每种接口都提供以下工具(完整列表及其参数见 docs/MCP-SETUP.md;此处只用文字说明数量,容易过时):

工具功能
session_init会话开始时,为已解析的项目范围生成上下文摘要
search混合 BM25 + 向量搜索,支持类别筛选;resolve 会为每条命中附加有界证据和解析结果
resolve针对问题或单条记录,说明记忆当前保存的内容——哪些仍然有效、哪些被替代、冲突双方如何完整保留,以及哪些内容明确未知
save存储一条类型化记忆(人物、决策、见解、项目)
list按类型浏览记忆文件,并按核心状态筛选
read读取记忆文件的完整内容
ingest获取 URL 内容并保存为研究资料
status健康检查——文件数量、索引统计、服务状态
entities实体图谱——记忆之间的交叉引用
consolidate预览或运行由大模型驱动的压缩
archive停用一条错误或过时的记忆——将其归档,或用指定的替代项取代它
restore将已归档的记忆恢复到默认召回范围——与 archive 相反
unretract撤销某条记忆中对某项偏好的提及级撤回
forget_withdraw撤回一项遗忘请求——恢复其归档的内容,并取消其撤回标记
archive_expired归档 TTL 已过期的临时记忆
diff查看最近 N 天的变更
blame追溯记录某项事实的提交
trace汇总某项事实的完整来源沿袭——来源、保存 / 变更提交、取代关系、类型化链接和召回记录
history查看文件的 Git 历史,包含差异统计和重命名追踪
rollback将文件还原到之前的提交(安全操作,会创建新提交)
push将记忆同步到远程 git 仓库
trigger前瞻式召回——在相关主题出现时自动注入
lint健康扫描——孤立项、陈旧文件、缺失字段
review提供建议的项目记忆审查,提出纠正操作,但不会执行写入
session_end在会话结束时记录摘要、决策和阻塞事项
prompt列出、显示或启用带版本的大模型提示词
dedup_suggest保存前,找出与草稿内容重叠的现有文件
orphan_repair为失效的 [[wikilinks]] 查找语义匹配项
doctor快速诊断——检查路径、服务、配置和索引等 18 项以上内容
doctor_deep完整诊断,包含金丝雀写入测试(约 10–15 秒)
cluster_neighbors查找尚未通过 wiki 链接关联的语义相似度最高的 K 个文件——发现隐含关系,以便提出交叉链接建议
topic_coverage给定简短的主题短语,返回现有 wiki 页面是否已涵盖该主题(二元字段为 covered / best_match / similarity)
depends根据 ProjectSnapshots 的 depends_on / blocks / parallel_with frontmatter,生成依赖树(或未受阻事项列表)

每种工具都可通过 MCP 以 palinode_<name> 的形式访问,通过 CLI 以 palinode <name> 的形式访问(名称中的连字符形式为:palinode archive-expired;session_init 对应 palinode prime;doctor_deep 没有单独的 CLI 命令),也可通过 REST API 的 POST/GET /<name> 访问。

CLI 提供的命令比工具列表更多——包括服务控制、迁移、修复和 wiki 维护辅助命令。docs/CLI.md 是完整的命令参考,每条命令均单独列出选项、默认值和输出行为。


技术栈

层选择原因
事实来源Markdown + YAML frontmatter易于阅读、由 git 进行版本管理、便于移植
向量索引SQLite-vec(嵌入式)无需服务端、单文件、零配置
关键词索引SQLite FTS5(嵌入式)使用 BM25 匹配精确词项、零依赖
嵌入通过 Ollama 使用 BGE-M3,或任意兼容 OpenAI 的 /v1/embeddings 服务本地、私密、无需 API 密钥
APIFastAPI轻量、异步、单进程
MCPPython MCP SDK(Streamable HTTP)可通过网络与所有 IDE 配合使用
CLIClick(封装 REST API)原生适配 Shell,感知 TTY 的输出
行为PROGRAM.md规定要记住什么、如何提取、如何压缩——编辑一个文件即可更改所有行为

记忆文件格式

---
id: project-palinode
category: project
name: Palinode
core: true
status: active
entities: [person/alice]
last_updated: 2026-04-05T00:00:00Z
summary: "Persistent memory for AI agents."
canonical_question: "What is Palinode and what does it do?"
---
# Palinode

Your content here. As detailed or brief as you want.
Files marked `core: true` are always in context.
Everything else is retrieved on demand via hybrid search.
The `canonical_question` field anchors the file to the question it answers, improving search relevance.

在 Obsidian 中打开

Palinode 将每条记忆存储为纯 Markdown 文件,这意味着你的记忆目录已经是有效的 Obsidian 知识库。将 Obsidian 指向该文件夹,即可在 Palinode 的混合搜索和压缩功能之上使用图谱视图、反向链接和 Bases。无需同步任务,无需安装插件,也不会产生两个事实来源的问题。

palinode init --obsidian --dir ~/palinode-vault

此操作会搭建知识库目录结构、一个 _index.md 内容地图、一个 _README.md 导览页面,以及一套经过精心配置的 .obsidian/ 设置(按类别为图谱视图设置颜色,并将每日笔记连接到 daily/)。然后在 Obsidian 中打开该目录。

大模型遵循维基维护约定——保持 entities: frontmatter 与笔记正文中的 [[wikilinks]] 同步,确保随着新记忆的保存,Obsidian 图谱始终准确。保存带有实体引用的记忆时,Palinode 会追加一个幂等的 ## See also 区块,将这些实体链接为 wikilinks。

两种具备嵌入感知能力的工具可帮助维护维基:palinode_dedup_suggest 会在创建重复文件前检查草稿是否与现有文件重叠;palinode_orphan_repair 会为失效的 [[wikilinks]] 查找语义匹配项。两者都可通过 MCP、CLI 和 REST 调用。

请参阅 docs/OBSIDIAN.md,了解完整指南:快速入门、维基约定详情、迁移路径和常见问题解答。


使用 palinode doctor 诊断

静默配置错误——例如 db_path 指向错误文件、监视程序为过时目录建立索引,或出现虚假数据库文件——是 Palinode 在升级或迁移服务器后行为异常的最常见原因。palinode doctor 可以捕获这一整类问题。

palinode doctor

该命令会对路径、服务、配置一致性、索引健康状况和磁盘状态执行 18 项以上检查,并生成结构化报告,为每项检查标注通过/警告/失败状态。--fix 模式会应用安全的自动修复(创建缺失目录、追加 CLAUDE.md 中的 Palinode 区块)——它绝不会移动用户数据;对于虚假数据库文件和数据库路径不匹配问题,它只会打印建议的 mv 命令,不会执行这些命令。

每次安装、升级或迁移服务器后,都请运行 palinode doctor。有关完整的检查目录和 --fix 参考,请参阅 docs/DOCTOR.md。


配置

所有行为都在 palinode.config.yaml 中:

memory_dir: "~/.palinode"
ollama_url: "http://localhost:11434"
embedding_model: "bge-m3"

search:
  hybrid_enabled: true
  hybrid_weight: 0.5         # 0.0 = vector only, 1.0 = BM25 only

consolidation:
  llm_model: "llama3.1:8b"   # any chat model that outputs JSON
  llm_url: "http://localhost:11434"
  llm_fallbacks:              # tried in order if primary fails
    - model: "qwen2.5:14b-instruct"
      url: "http://localhost:11434"

所有模型都可以替换。可使用任意 Ollama 嵌入模型,以及任意兼容 OpenAI 的聊天端点。默认搜索阈值(search.mcp_threshold=0.4 和 search.api_threshold=0.5)是基于真实的 bge-m3 嵌入测得的;如果更换嵌入模型,请重新检查这些阈值,并单独检查触发阈值——触发阈值默认值不在此次校准范围内。

每次搜索交付都会在 receipt.retrieval 中报告匹配置信度判定——confident、weak 或 none。该判定读取各通道融合前的分数,而非融合后的排名,并附带对应通道的证据。默认情况下,结果不会因此被隐藏;设置 search.abstain_on_no_confident_match: true 可让 MCP 接口在判定为 none 时不返回结果集。请参阅 docs/lexical-retrieval.md。

要根据已配置的嵌入端点重新检查搜索阈值,请运行 python -m bench.abstention。该工具会在各通道的搜索阈值逐步提高时,测量无答案查询的误报率,以及有答案对照查询中真实结果的保留率;它不会校准触发阈值。完整参考请参阅 palinode.config.yaml.example。

不使用 Ollama 的嵌入。 llama.cpp(llama-server --embedding)、vLLM 和 LM Studio 都提供兼容 OpenAI 的 /v1/embeddings 接口;将其设为 dialect: openai 即可使用(默认值为 ollama,因此现有配置不受影响)。重试、熔断器和逐项输入错误处理与 Ollama 路径相同。Ollama 标签 bge-m3 不是 llama-server 模型名称——请让 llama-server 指向 BGE-M3 GGUF:

embeddings:
  primary:
    dialect: openai
    url: "http://localhost:8080"   # a trailing /v1 is fine too
    model: "bge-m3"                # llama-server ignores it; vLLM / LM Studio match it
    dimensions: 1024

托管的兼容 OpenAI 嵌入服务提供商也可以使用 Bearer 身份验证和提供商专属的端点路径。凭据不要写入 YAML:设置 PALINODE_EMBEDDING_API_KEY,或将 PALINODE_EMBEDDING_API_KEY_FILE 设为包含密钥的文件路径。

对于嵌入端点不是 /v1/embeddings 的提供商,请设置 endpoint_path。省略该项时,现有的纯主机地址和末尾带 /v1 的行为保持不变。

embeddings:
  primary:
    dialect: openai
    url: "https://generativelanguage.googleapis.com/v1beta/openai"
    endpoint_path: "/embeddings"
    model: "gemini-embedding-001"

如果要将 API 暴露给本机回环地址之外的网络(PALINODE_API_HOST 不为 127.0.0.1),请设置 PALINODE_API_TOKEN——除非显式设置 PALINODE_API_ALLOW_UNAUTH=1 选择退出,否则服务器不会在非回环地址上以未认证状态启动。请参阅 SECURITY.md,了解 Bearer 令牌身份验证机制和绑定限制。


API 参考

方法路径描述
GET/status健康检查 + 统计信息
POST/search带筛选条件的混合搜索
POST/search-associative实体图遍历
POST/save创建一个指定类型的记忆文件。架构:{content, type, slug?, entities?, title?}。请求体上限为 5 MB(可通过 PALINODE_MAX_REQUEST_BYTES 覆盖)。
POST/ingest-url获取 URL,并将其保存为研究资料。请求 URL 和每个重定向目标(最多五跳)在发起请求前都会经过验证:主机必须仅解析到全球可路由地址,且连接会直接连到经过验证的地址,而非通过主机名连接。通过 HTTP CONNECT 代理发送 HTTPS 请求时会跳过地址固定;地址验证仍会执行(请参阅 CLI 指南)。
GET/POST/triggers前瞻性记忆触发器
POST/consolidate运行或预览压缩
GET/list按类型浏览文件
GET/read?file_path=...读取记忆文件
GET/history/{file_path}文件的 Git 日志
GET/diff最近的更改
GET/blame/{file_path}Git blame
GET/trace/{file_path}文件的组合来源链路
POST/rollback还原文件
POST/push推送到 Git 远程仓库
POST/reindex重建索引
POST/session-end捕获会话摘要
POST/lint健康扫描

设计原则

  1. 文件即真相。 不用数据库,也不用向量存储。Markdown 文件便于人类阅读、编辑,并使用 Git 进行版本管理。

  2. 有类型,而非扁平化。 人物、项目、决策、洞见——每类内容都有自己的结构。这有助于可靠地检索和整合信息。

  3. 整合,而非累积。 100 次会话应整理成 20 个维护良好的文件,而不是 100 份无人阅读的转储。

  4. 运行时隐于幕后。 人类与 Agent 交谈,Palinode 在幕后工作。

  5. 优雅降级。 向量索引不可用?直接读取文件。嵌入服务不可用?使用 Grep。机器关机?它是一个 Git 仓库,可以克隆到任何地方。

  6. 无需承担分类体系的维护负担。 系统负责分类,人类负责审阅。如果要由人类维护分类体系,系统就会失效。


独特之处

  • 你的数据,你的文件 — 无需账户,不依赖云服务,也没有供应商锁定。你的记忆以 Markdown 文件的形式存储在你控制的目录中。导出只需 cp,备份只需 git push。无论这个生态系统中的任何工具发生什么,你的数据始终是文件系统上的纯文本。
  • 跨 IDE 记忆 — 你的记忆集中存放在一处。可通过 Claude Code、Cursor、Windsurf、Zed 或任何兼容 MCP 的编辑器连接。切换 IDE 也不会丢失上下文。
  • 作为 Agent 工具的 Git 操作 — 通过 MCP 提供 diff、blame、rollback、push。没有其他系统能让 Agent 调用 Git 操作。
  • 基于操作的压缩 — 结构化操作会经过架构检查,并以可审阅的 Git 提交形式应用。
  • 逐条事实可寻址 — Markdown 中内联的 `` ID 在渲染时不可见,可由 Git 保留,也可作为压缩目标。
  • 四阶段注入 — 核心(始终注入)+ 主题(每轮搜索)+ 关联(实体图)+ 触发式(前瞻性记忆)。
  • 多传输方式 MCP — 本地使用 stdio,远程使用 Streamable HTTP。同一个服务可供任何机器上的任何 IDE 使用。
  • 即使一切崩溃,cat 仍然可用。

以测量结果为依据,而非口头断言:docs/BENCHMARKS.md 提供 LongMemEval 结果,以及方法、成本和损失。有关 Palinode 对伪造、植入或借用权威性的内容通过记忆传递给 Agent 一事能保证和不能保证什么,请参阅 SECURITY.md#memory-poisoning-and-trust-limitations。

致谢

Palinode 借鉴了 Karpathy 的 LLM 知识库、Letta(分层记忆)和 LangMem(类型化架构 + 后台整合)中的理念。完整列表请参阅 docs/ACKNOWLEDGMENTS.md。

另请参阅 Karpathy gist 讨论串中的认识论完整性讨论——尤其是 LLM wiki 的问题:它们“综合内容却不引用来源,在不自知的情况下偏离来源,并在存在分歧时表现出虚假的确定性”。基于 Git 的溯源机制是 Palinode 对这一问题的解决方案。

如果你知道我们遗漏的先例,请提交 issue。


许可证

MIT — 隐私政策


由 Paul Kyle 构建,并由使用 Palinode 记住如何构建 Palinode 的 AI Agent 协助。

评论

支持 Markdown

第一次接触 MCP?

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

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