@bastra-recall/daemon

中文文档
1.1.8发布于 2026/10/31MITES Module构建来源已验证

MCP服务器在markdown vault上:recall, load_memory, save_memory, edit_memory, archive_memory和文档工具-加上REST网关,安静的钩子通道和基础命令行。

中文使用文档
文档目录12 节
  1. 它是做什么的
  2. 表面
  3. 公开的工具(MCP + REST对称)
  4. 安装+注册
  5. 守护进程检查
  6. 守护进程启动
  7. 开发工作流程
  8. 配置(环境变量)
  9. 遥测
  10. 搜索排名
  11. 模式参考
  12. 限制

@bastra-recall /守护进程

MCP服务器+ HTTP网关后面的基础架构召回。观察markdown vault,使用BM25 +可选嵌入对其进行索引,并在studio MCP和HTTP REST上公开稳定的工具表面。

有关项目级文档(远景、安装、REST API、路线图),请参阅 顶级的自述 和 PLAN.md.

它是做什么的

  • 监视的目录 .md 带有YAML前文(模式)的文件 ../../docs/memory-schema.md)。
  • 索引通过 minisearch BM25; recall_when 是权重最高的场因为它是用来触发的。
  • 混合的回忆:可选的嵌入(Ollama或OpenAI),通过BM25之上的互惠等级融合-见 BASTRA_EMBEDDING_PROVIDER.
  • 保存路径:写 .md 文件,验证前页(zod),强制索引,使保存+召回在同一回合是一致的。
  • 汽车相关浓缩器:对于每一个新的保存,填充 related_via 邻域余弦≥0.7。
  • 内存图:多跳召回(expand_hops: 1)通过返回1跳邻居 related_via.
  • 灵敏度过滤器: private 内存对外部MCP/REST调用者是不可见的-并且由于#464也不能被他们写入。该权限绑定到传输,而不是作为工具参数传递,并且拒绝读和拒绝写的回答都是一样的,因此两者都不是存在预言。
  • 过时评估:回忆 valid_until / expires_after_days / last_reviewed_at 在召回时被降级(或被排除,如果过期)。

表面

表面入口点用例
MCP(工作室,单机)dist/index.js客户端设置;每个会话都会生成自己的嵌入式守护进程
MCP转发器(stdio→loopback HTTP)dist/mcp-forwarder.js多客户端设置的默认值。 按需启动丢失的守护进程,首先给已安装的托管macOS服务最多10秒的时间。所有会话共享一个保险库状态、一个索引、一个遥测流
HTTP RESThttp://127.0.0.1:6723/api/v1/{tool}非mcp客户端(web应用程序,脚本,传统自定义GPT操作)。支持承载认证+ CORS
基于HTTP的MCPPOST /api/v1/mcp (可流HTTP,无状态)远程客户端,如ChatGPT web/phone和claude。ai,通过您自己的HTTPS隧道。承载令牌或守护进程自己的OAuth 2.1登录。 远程访问
钩子dist/hook.js (PreToolUse), dist/session-hook.js (SessionStart)两者都POST到守护进程 /hook/recall
命令行界面dist/cli.js (bastra 本)在每个支持的AI客户端上安装/卸载/医生

公开的工具(MCP + REST对称)

工具目的
recall(query, k?, scope?, type?, expand_hops?)搜查金库;启用时的混合BM25 +嵌入
load_memory(id)取完整的前体+体
save_memory({title, type, body, …})用模式验证+强制索引写一个新的内存
edit_memory({id, str_replace?, append?, frontmatter?, expected_revision?})通过相同的保存路径修补一个现有内存(#519)
find_document(query, k?)搜寻文件(pdf、相片、合约)
read_document(id)为文档加载提取的文本+元数据
open_document(id)macOS-only:在系统处理程序中打开
find_code(query, mode?, repo?, depth?)在代码图中定位符号或文件;一跳的家属(#576)
save_document / recategorize_document / move_document文档写入路径(Pro mac应用程序使用这个;OSS调用者可能需要 BASTRA_DOCUMENT_WRITE=1)

安装+注册

看到 顶级的自述. 路径,按摩擦的顺序:

  1. curl -fsSL https://bastra.io/install | bash -安装Homebrew + tap + binary +运行引导安装。推荐的非开发人员路径。
  2. Install Bastra.command 双击 -相同的步骤,但浏览器下载被隔离并且模式为644,因此需要右键单击→打开(#320)。
  3. bastra install all -单个CLI调用,注册MCP + Skill +默认的静默钩子,横跨Claude Code, Claude Desktop, Codex/ChatGPT Desktop和Cursor。在没有配置保险库的情况下首次运行时,将提供一个交互式安装来创建 ~/BastraVault 为你(非互动/--yes/--dry-run 运行保持确定性错误)。
  4. 完全手动的JSON片段 -回退。

所有路径都以客户端配置补丁结束。守护进程是否已经启动 运行 不同之处在于:交互式Map向导启动它,而MCP转发器在第一次工具调用时启动它 bastra install all 只注册,它既不启动也不检查守护进程的运行状况。 bastra doctor 探测端点(#525)。 使用 bastra doctor --fix 修复陈旧的路径,缺少所需的钩子,或一个 更新后的陈旧技能副本。默认情况下,CLI启用了安静的Stop save-eval钩子。选择退出 bastra install claude-code --no-stop-hook;故意禁用此选项 钩子不能使医生失败。

守护进程检查

不要抱怨 daemon/dist/index.js -守护进程通常以相对路径启动(node dist/index.js),不会匹配。请使用端口:

lsof -i :6723 -P -n      # who owns the daemon port
curl -sS http://127.0.0.1:6723/health

应该只列出一个PID。Two表示一个过时的守护进程正在并行运行——HTTP端口先进入哪个绑定,失败的端口静默退出(参见HTTP -listen.ts中的EADDRINUSE处理程序)。

守护进程启动

MCP转发器使用一个共享守护进程,在回退产生之前为已安装的托管macOS服务提供最多10秒的时间。对于REST客户端 在MCP客户端连接之前需要守护进程,显式启动它:

bastra-recall &

开发工作流程

npm run dev                # ts-watch via tsx (no compile step)
npm run build              # tsc + chmod +x all dist binaries
npm run check:types        # type-check only
npm run smoke              # smoke-test recall against fixtures/sample-vault
npm run smoke:telemetry    # smoke-test telemetry append
npm run backfill:related   # populate related_via on legacy memories

配置(环境变量)

每个开/关开关都读出 0, false, off 或者 no 像off和 1, true, on 或者 yes 在任何情况下,都是这样;该表显示了规范拼写。

env var要求默认的意义
BASTRA_VAULT_PATH是- - - - - -到保险库根的绝对路径(内存是自动发现的)
BASTRA_HTTP_PORT否6723用于REST +钩子的环回HTTP端口;只有当下面的URL变量都没有设置时才读取
BASTRA_HTTP_URL否派生的完全URL覆盖(用于非环回测试);只读 BASTRA_DAEMON_URL 是设置
BASTRA_API_TOKEN否设置承载REST /api/v1/* 要求每个非直接本地呼叫者;unset/empty不会打开API——这样的调用者会得到一个 401 没有什么可以满足,直到一个令牌被铸造(#526)
BASTRA_AUTH_LOOPBACK_SKIP否1无令牌路径需要环回对等体 和 礼物,回环 Host 报头-丢失的报头被视为外部(#526);设置为 0 即使是直接的127.0.0.1呼叫者也需要承载
BASTRA_CORS_ORIGIN否取消设置(拒绝所有)以逗号分隔的浏览器原点allowlist;Unset =不允许浏览器源; * = 显式许可选择加入 (隧道/dev)
BASTRA_EMBEDDING_PROVIDER否设置ollama 或者 openai;如果没有它,守护进程将只支持bm25
BASTRA_EMBEDDING_MODEL否供应商违约如。 embeddinggemma (ollama)或 text-embedding-3-small (openai)
BASTRA_OLLAMA_URL否http://localhost:11434Ollama提供程序端点
BASTRA_ALLOW_REMOTE_OLLAMA否设置允许非环回 BASTRA_OLLAMA_URL;如果没有它,守护进程拒绝远程端点,因此输入错误的URL永远不会将内存文本发送到框外(保护嵌入提供者和重新排序者)。
BASTRA_OLLAMA_KEEP_ALIVE否10m每个请求 keep_alive 窗口-每次嵌入后,Ollama在RAM中保留嵌入模型的时间
BASTRA_OLLAMA_IDLE_UNLOAD_MS否600000 (10分钟)在很长一段时间没有嵌入后,从Ollama RAM中卸载嵌入模型(节省电池); 0 禁用
BASTRA_BATTERY_SAVER否设置(→ battery.saver,默认关闭)macOS上的电池模式(#632): 1 / 0 覆盖设置文件。在电池上,doc2query等待交流,预热被跳过,空闲卸载在60秒后触发 用法
OPENAI_API_KEY否设置时需要 BASTRA_EMBEDDING_PROVIDER=openai
BASTRA_FORWARDER_SPAWN否1当 0, MCP转发器将不会自动生成守护进程。这仍然是仅服务启动的解决方案,使用 BASTRA_DAEMON_URL 命名那个所有者。macOS托管服务现在自动获得10秒的机会;转发器后面的无头服务等待其空闲退出(#758)。Linux托管安装紧随#566
BASTRA_DAEMON_URL否http://127.0.0.1:6723这台机器指的是哪个守护进程—自#531以来每个表面使用的单端点解析器的最高优先级输入(CLI、doctor、map、hooks、转送程序、桥接程序和守护进程自己的绑定),以及什么 bastra install 写入客户端注册
BASTRA_HOOK_TIMEOUT_MS否每道在故障静默之前覆盖车道的挂钟预算-每个车道的默认值都在 文档/ hooks.md (# 305)
BASTRA_VECTOR_DEADLINE_MS否150仅钩路径:在仅服务bm25之前,召回等待密集臂的时间。这个阶段,而不是呼叫的范围——测量手臂的温暖花费了87-96ms(总共106-113ms),寒冷花费了668ms(总共694ms),所以每个温暖的呼叫花费了150ms,而寒冷的呼叫在180ms左右结束。嵌入被放弃,而不是取消,所以模型仍然完成加载,下一个调用是热的。退化可见为 degraded: "vector-arm-timeout"; 0 禁用(终止开关)
BASTRA_HOOK_MAX_SHOW否1同样的记忆在大脑中出现的频率是多少 <recall-hints> 每个会话(4小时窗口);一个 load_memory 的id重置计数器
BASTRA_HOOK_CONTENT_RECALL否off设置为 1 运行可选编辑-内容召回臂(#282)
BASTRA_DOCUMENT_WRITE否设置设置为 1 公开文档编写工具
BASTRA_LOG_PATH否~/.bastra/logs遥测JSONL输出目录(故意出库)
BASTRA_TELEMETRY否on设置为 off 完全禁用遥测写入

遥测

每一个 recall, load_memory, save_memory 和钩子调用追加一个JSON行到 events-YYYY-MM-DD.jsonl 在日志目录中。每个守护进程获得一个fresh session_id;召回 recall_id 和任何 load_memory / save_memory 在5分钟内引用id为 follows_recall.

这足以计算:

  • 每个会话的回收次数,命中次数,得分分布,延迟p50/p95
  • Recall→load_memory后续通过率(代表“提示有用吗?”)
  • 每个会话保存,类型/作用域分布,% overwrite vs. new
  • 保存→跟踪召回率(重复检查完成了吗?)
  • 每钩子延迟和命中质量(在哪里PreToolUse / SessionStart实际上有帮助?)

日志存在于保险库之外,因此文件监视程序不会对它们进行索引。观看直播的尾巴: tail -f ~/.bastra/logs/events-$(date +%F).jsonl.

搜索排名

磁场增强(在 src/search.ts):

recall_when_flat:          5    ← authored for triggering, highest weight
title:                     4
tags_flat:                 3
recall_when_expanded_flat: 2    ← doc2query paraphrases (#117): machine-generated, below the author's words
topic_path_flat:           2
summary:                   2
body:                      1

模糊距离0.2,启用前缀匹配; combineWith: "OR". 混合模式通过倒数秩融合(RRF)将BM25与嵌入余弦结合起来;每次召回时,嵌入查询将转到提供者一次,并缓存在内存中。

模式参考

看到 ../../docs/memory-schema.md 对于全内存前端事务规范,守护进程通过 zod 加载时,将跳过验证失败的文件,并发出错误警告。

限制

  • 共享的过程。 转发器根据需要启动守护进程。在macOS, bastra autostart on 管理一个可选的LaunchAgent来保持它的运行;使用 bastra autostart off 回到按需操作。
  • 云存储挂载 (谷歌驱动器,iCloud, Dropbox)需要轮询模式在chokidar -默认启用,但手表延迟可能是几秒钟。
  • 游标规则是针对每个项目的。 bastra install cursor 寄存器MCP。运行 bastra rules cursor 在每个项目内部安装共享内存指南。

版本与发布记录

@bastra-recall/daemon 共发布 27 个版本,首次发布于 2026/06/23;过去 12 个月发布了 27 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.1.8latest2026/10/312 天前
1.1.12026/10/1717 天前
1.1.02026/10/1123 天前
1.0.12026/10/0429 天前
1.0.02026/09/141 个月前
0.9.22026/08/272 个月前

关于 @bastra-recall/daemon 的常见问题

@bastra-recall/daemon 是什么?

MCP服务器在markdown vault上:recall, load_memory, save_memory, edit_memory, archive_memory和文档工具-加上REST网关,安静的钩子通道和基础命令行。

如何安装 @bastra-recall/daemon?

在项目目录运行 npm install @bastra-recall/daemon,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 bastra、bastra-recall-mcp、bastra-recall-hook、bastra-recall-bridge、bastra-recall-daemon、bastra-recall-gate-hook、bastra-recall-stop-hook、bastra-recall-todo-hook、bastra-recall-prompt-hook、bastra-recall-session-hook、bastra-recall-bash-pre-hook、bastra-recall-bash-fail-hook,可以用 npx bastra 直接运行。

@bastra-recall/daemon 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bastra-recall__daemon 是否存在。

@bastra-recall/daemon 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@bastra-recall/daemon 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bastra-recall/daemon 可以商用吗?

@bastra-recall/daemon 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bastra-recall/daemon 还在维护吗?

最新版本 1.1.8 发布于 2026/10/31(2 天前);至今共发布 27 个版本,其中过去 12 个月发布了 27 个;首次发布于 2026/06/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。