安装
pip install fava-trails
"fava-trails": {
"command": "fava-trails-server",
"env": {
"FAVA_TRAILS_DATA_REPO": "/path/to/fava-trails-data",
"OPENROUTER_API_KEY": "sk-or-v1-..."
}
}适合谁
FAVA Trails(Federated Agents Versioned Audit Trail)是一套通过 MCP 暴露给 AI agent 的 Git 原生记忆系统:agent 产生的想法、决策与观察,会以带 YAML frontmatter 的 Markdown 文件写进一个由你自己控制的 Git 数据仓库,而不是托管在他人服务器上的黑盒。它把“草稿”与“对所有 agent 可见的观察”分成两级,中间设有一道晋级门槛;agent 平时只看到记忆工具本身,不直接接触版本控制命令,版本化细节由引擎在仓库里处理,全部历史都留在提交记录中可回看。
- 适合:需要让多个 agent 共享并沉淀工作记忆的团队或个人,例如把工程排查结论、跨会话的决策上下文存成可复用的观察;希望记忆可版本化、可追溯、随时能直接查看文件的用户;已经用 Git 管理资产、不介意多维护一个数据仓库的人。
- 使用前提:本机可用 pip 安装;配置时要给出数据仓库路径
FAVA_TRAILS_DATA_REPO;想让草稿晋级为对所有 agent 可见的观察,必须配置 OpenRouter API key。 - 需要斟酌:不想维护数据仓库、或不想申请 OpenRouter key 的用户要慎重——跨 agent 共享记忆这条核心链路同时依赖两者。
- 未知:证据未说明支持哪些具体 MCP 客户端、操作系统与 Python 版本要求,也未说明存储引擎 Jujutsu(JJ)是否需要单独安装。
3 分钟完成第一次尝试
推荐主路径只有一条:从 PyPI 安装引擎,再把它注册进 MCP 客户端的服务器配置。前提有两条:先确定要用作数据仓库的位置,配置里的 FAVA_TRAILS_DATA_REPO 会指向它;要走到晋级那一步,还需要一个 OpenRouter API key。
第一步,安装这个 Apache-2.0 许可的无状态 MCP 服务器:
pip install fava-trails
第二步,在客户端配置中加入官方注册片段,把其中的仓库路径换成你的实际位置:
"fava-trails": {
"command": "fava-trails-server",
"env": {
"FAVA_TRAILS_DATA_REPO": "/path/to/fava-trails-data",
"OPENROUTER_API_KEY": "sk-or-v1-..."
}
}
第三步,让 agent 调用一次写入范围最小的能力:用 save_thought 把一条观察写成草稿。
save_thought(trail_name="myorg/eng/my-project", content="My finding about X", source_type="observation")
成功信号:数据仓库的 drafts/ 目录下出现这条草稿。要分清操作性质:这一步是本地写入,文件落进你自己的仓库,不是只读查询;官方未提供删除或撤销草稿的说明,第一次尝试请写无害内容。引擎侧会以 Jujutsu(JJ)作为存储引擎、与 Git 以 colocate 模式并行,仓库仍是标准 Git 仓库,你在这一步不需要碰任何版本控制命令。另外注意 OpenRouter API key 的边界:它在这份官方配置模板里已经出现,官方表格进一步说明它对 propose_truth 必需,用于 Trust Gate 的 LLM 评估,经 OpenRouter 调用;首次尝试停在草稿这一步即可,不必顺手晋级。
使用案例
案例一:把一次排查的结论沉淀成项目记忆。场景:agent 刚完成排查,结论值得留给后续会话复用。做法:调用 save_thought,参数为 trail_name、content 与 source_type,可直接使用上面的官方示例调用。可期待的结果:drafts/ 目录生成草稿文件,内容只落在你的仓库里,其他 agent 尚看不到,不会影响别人;草稿是普通文件,可直接在仓库中打开查看。
案例二:把已确认的草稿晋级为共享观察,再检索验证。场景:某条观察已核实,希望之后所有 agent 都能查到。做法:先确认 OpenRouter API key 有效,调用 propose_truth(trail_name="myorg/eng/my-project", thought_id=thought_id) 把草稿晋级到 observations/,随后用 recall(trail_name="myorg/eng/my-project", query="X") 检索。可期待的结果:recall 能找到这条已晋级的想法,接入同一数据仓库的其他 agent 也能用同样的查询找到它。确认点:晋级结果对所有 agent 可见,官方未提供撤销说明,执行前确认内容适合共享;把变更推送到远端是另一个独立动作,需另行调用 sync 工具或 jj git push。
使用边界
- 读写性质:
save_thought在数据仓库创建草稿,propose_truth把草稿晋级到observations/并对所有 agent 可见,两者都是写入;recall负责查找已晋级的想法。写入发生在你自己的仓库里,晋级本身先落在本地;推送到远端必须另行经syncMCP 工具或jj git push完成,是否同步由你决定。官方未提供撤销或删除路径,不要把写入当成可随时回退的操作。 - 凭证与配置:
FAVA_TRAILS_DATA_REPO指定数据仓库位置,OPENROUTER_API_KEY供晋级时的 LLM 评估使用,两者都写在官方配置模板的 env 段里;官方明确后者对propose_truth必需。没有这个 key 时save_thought与recall能否工作,证据未说明。 - 运行时与数据存放:存储引擎为 Jujutsu(JJ),与 Git 以 colocate 模式并行;仓库仍是标准 Git 仓库,GitHub 与 CI/CD 看到的是正常提交。所有内容以带 YAML frontmatter 的 Markdown 文件存放在你控制的仓库中。
- 未确认项:容量配额、多仓库规模上限、隐私与数据驻留细节,证据均未提及;Trust Gate 评估的判定标准与失败时的处理方式,同样未说明;是否需要自行安装 jj、支持哪些客户端与 Python 版本也未说明。不要把“未见到说明”当成没有风险,写入内容请按“会长期留在你的仓库”来评估。