bd recall 命令深度指南:用 Beads 按 key 检索持久记忆

发布时间:2026/11/13 23:39:35

bd recall 命令深度指南:用 Beads 按 key 检索持久记忆 bd recall 命令深度指南用 Beads 按 key 检索持久记忆【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads导读bd recall key是 Beads 持久记忆体系memory plane的核心读取命令用于按 key 检索一条记忆的完整内容。它由 docs/cli-reference/recall.md 定义是bd remember/bd memories/bd forget组成的记忆四命令之一remember写入、recall读取、memories枚举搜索、forget删除。读完本文你将掌握bd recall的完整用法、JSON 与退出码契约、未命中行为以及它背后从 CLI 前端到memoryops角色契约再到kv.memory.存储编码的完整调用链并能直接把它接入 Agent 的会话钩子与自动化脚本。命令概览与基本用法bd recall是一个顶层命令属于setup命令组功能定位为Retrieve the full content of a memory by its key按 key 检索一条记忆的完整内容。它的命令语法为bd recall key [flags]来自官方文档的示例bd recall dolt-phantoms bd recall auth-jwt用法要点必须且只能接收一个位置参数key在 cmd/bd/memory.go 中通过Args: cobra.ExactArgs(1)约束传入多于或少于一个参数都会直接报错不会执行任何读取key 就是记忆的名字key 可以由bd remember从内容自动派生slug也可以用--key显式指定bd recall只负责按这个名字把整条记忆取回来读取的是完整内容与bd memories列表里做了单行截断truncateMemory把换行替换为空格并截断到 120 字符的预览不同bd recall返回的是存储时的原文多行内容、Unicode、前后空格都逐字节保留。前置条件直接数据库访问recall在RunE中通过openMemories(recall requires direct database access)获取持久记忆的访问句柄cmd/bd/memory.go。openMemories会做双路线分派若当前调用处于代理服务器proxied路线如通过bd serve起的 HTTP 后端则经由proxiedMemories从 UOW provider 获取受保护的内存面否则要求直接模式direct mode必须在已初始化的 workspace/仓库内运行且底层存储Dolt 数据库可用否则命令会以明确提示失败。因此bd recall并非纯粹的字符串工具它读的是工作区自己的持久化记忆库——记忆存放在 Dolt 工作集里跨会话、跨账号轮换依然存在。命中与未命中输出与退出码契约recall的输出渲染由printRecallResult完成cmd/bd/memory.go它对找到与未找到两种结局给出了完全不同的契约。找到记忆时的文本输出$ bd recall dolt-phantoms Dolt phantom DBs hide in three places: ...找到时记忆的完整内容被原样打印到 stdoutfmt.Printf(%s\n, value)不做任何截断换行保持原样退出码为 0可以直接用于 shell 管道或变量捕获。未找到时的 SilentExit 契约$ bd recall no-such-key No memory with key no-such-key提示信息写入stderrfmt.Fprintf(os.Stderr, ...)stdout 保持干净随后调用SilentExit()以非零退出码静默退出不再打印任何 usage 帮助信息。对 Agent 和脚本而言这个契约非常重要判定未命中应该看退出码而不是解析 stdout。未命中不是 Go 层面的错误Recall对未知 key 返回Foundfalse, nil error而是前端把结果未找到翻译成了退出码信号这与bd config get等读取类命令的未命中约定一致。JSON 输出模式bd recall支持全局--json输出。JSON 模式下命中返回{key: dolt-phantoms, value: Dolt phantom DBs hide in three places: ..., found: true}未命中返回{key: no-such-key, value: , found: false}随后同样走SilentExit()非零退出。注意 JSON 里用found字段显式区分记忆存在但内容为空串与记忆不存在两种语义避免下游把空字符串误读成有效内容。底层角色契约memoryops.Memoriesbd recall的前端逻辑非常薄——它只负责参数校验、路由分派和输出渲染真正的读取语义由memoryops.Memories接口承担memoryops/memories.go。这是 Beads 的角色role架构CLI、HTTP 门面、代理服务器共用同一套契约保证各路线行为一致。接口中与 recall 相关的定义type RecallRequest struct{ Key string } type RecallResult struct { Key string Value string Found bool } Recall(ctx context.Context, req RecallRequest) (RecallResult, error)几个值得注意的语义均写在该文件的文档注释中属于明确的设计决策Recall是纯读操作不记录历史、不触发 completion 钩子、不修改任何行未命中的 key 返回Foundfalse且 error 为 nil绝不是ErrNotFound——因为底层存储无法区分配置行不存在与行存在但存的是空字符串这两种情况见 memoryops/errors.go角色层面拒绝编造它看不见的区分memoryops特意不导出ErrNotFound就是为了把这个决定钉死Found的语义是Value ! 一条以空串存储的记忆与一条不存在的记忆对Recall而言是同一个答案唯一能区分它们的是bd memorieskey 存在就会被枚举出来。而前端remember拒绝存储空内容所以正常流程不会制造这种歧义只有绕过前端的带外写入才会。recallCmd的RunEcmd/bd/memory.go把这一切串起来打开记忆面 → 构造RecallRequest{Key: args[0]}→ 调用memories.Recall→ 交给printRecallResult渲染。整个命令只有这四步错误则统一走HandleErrorRespectJSON自动感知 JSON 模式决定输出格式。key 校验规则请求进入角色前key 会经过memoryapi.ValidateKeyinternal/memoryapi/memoryapi.go校验空白 key 属于确定性校验失败ErrValidation因为空 key不存在任何调用者能指代的记忆行回答Foundfalse等于为一个从未被提出的问题作答。校验通过后 key原样返回、不做任何裁剪——bd remember --key接受任意字符串一个仅靠空格与其他 key 区分的 key 可能是调用者真实持有的裁掉空格就会答非所问。存储编码kv.memory. 前缀与合并语义记忆并不存在单独的数据库表里而是存放在与配置共享的同一张表中但位于保留命名空间下memoryops/doc.go。一条名为dolt-phantoms的记忆实际存储的配置键是kv.memory.dolt-phantoms前缀kv.memory.的唯一权威定义在 internal/storage/kvkeys常量memoryPrefixcmd/bd/memory.go 直接引用它。这套编码有两个关键推论合并即收敛存储层的 merge resolver 只有在冲突键全部带kv.memory.前缀时才用--theirs自动消解配置冲突见internal/storage/versioncontrolops/mergesettle.go。也就是说拉取后自动收敛是记忆这个概念的组成部分——而普通设置行没有这个待遇。这正是记忆与设置分开成两个角色memoryops与issueops.WorkspaceConfig的根本原因按前缀隔离bd memories枚举时只会看到记忆平面设置行、通用bd kv行永远不会混进来反过来bd recall也只认kv.memory.下的行。一个 shadow 了设置名的记忆 key如kv.memory.issue_prefix只是叫issue_prefix的记忆不会与真正的设置混淆。用户侧的所有请求与结果都只携带用户 key不带前缀前缀的拼写是存储实现层的私事这样角色契约就与编码解耦避免两处拼写漂移。与 remember 的联动bare key 的欲望路径bd recall还隐身在bd remember里bd remember bare-slug在特定条件下会转为读取而非写入cmd/bd/memory.go。逻辑是当没有显式--key、且位置参数内容经DeriveKey往返后原样不变即它本身就是个 slug而不是一句人话时若该 key 已存在 →直接执行一次Recall等价于bd recall key并在 stderr 提示(recalled ... -- a bare existing key READS. To overwrite: bd remember new content --key key)若该 key 不存在 → 拒绝写入提示没有名为 X 的记忆可读取且拒绝把裸 key 当内容存储。这正是bd recall命令在 docs/cli-reference/recall.md 中两个示例dolt-phantoms、auth-jwt的来源——它们与bd remember文档中的--key示例docs/cli-reference/remember.md互相呼应构成一个完整的记忆写入-检索闭环。该路径的集成测试见 cmd/bd/memory_proxied_integration_test.go覆盖了多行内容经 recall 逐字节往返、未命中 recall 的失败输出、以及 bare existing key 读取代写等场景。在 Agent 工作流中的典型用法记忆的写入端是bd remember读取端是bd recall而bd primecmd/bd/prime.go会在会话启动时把记忆批量注入给编码 AgentClaude Code、Gemini CLI、Codex 的 SessionStart 钩子让 Agent 在上下文压缩后不至于遗忘工作区约定。bd recall在此生态中的角色是按需精确读取当 Agent 需要一条特定记忆的完整细节而 prime 注入的只是摘要或列表时bd recall key是最低成本的单条读取在脚本中判断记忆是否存在依赖退出码而非文本解析需要结构化消费时加--json用found字段区分命中与空值与bd memories枚举/搜索配合先bd memories dolt找到 key再bd recall dolt-phantoms取全文。小结bd recall表面上是一行命令读一条记忆但它的每一层都体现了 Beads 持久记忆体系的设计取舍前端层有命中/未命中双契约与 JSON 输出角色层由memoryops.Memories.Recall定义纯读、Found语义与无 ErrNotFound决策存储层以kv.memory.保留前缀实现合并即收敛。把这四层串起来你就能在 Agent 会话与自动化脚本中安全、准确地消费工作区记忆。相关文档与源码入口命令文档 docs/cli-reference/recall.md、命令实现 cmd/bd/memory.go、角色契约 memoryops/memories.go、语义函数 internal/memoryapi/memoryapi.go、CLI 总览 docs/cli-reference/index.md。【免费下载链接】beadsBeads - A memory upgrade for your coding agent项目地址: https://gitcode.com/GitHub_Trending/beads1/beads创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/7 16:10:41

ToF相机全链路解析:从光子到点云的硬件-驱动-应用协同

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/12 9:09:27

风光储并网系统Simulink建模与协同控制策略

1. 项目背景与核心价值风光储并网系统作为新能源电力领域的重要研究方向,其仿真建模对实际工程应用具有关键指导意义。这个Simulink模型研究项目聚焦永磁风机、光伏阵列与储能系统的协同运行机制,正是当前微电网和智能电网技术发展的前沿课题。在实际工程…

2026/11/13 23:36:09

砀山需要电工证吗?真实经历告诉你别被中介坑

砀山需要电工证吗?真实经历告诉你别被中介坑 不知道去哪报名怕被中介坑?我在砀山本地做电工证考试培训三年,见过太多人因为不了解流程,被中介骗钱还拿不到证。今天我就从真实经历出发,详细讲讲【砀山需要电工证吗】这个问题,带你避开坑、了解考试内容、…

2026/11/13 23:36:09

电工证哪种更能升级郑州报考避坑指南

电工证哪种更能升级郑州报考避坑指南 你是不是也经常听说“ 学历不高怕报不上名 ”,担心自己连个电工证都考不了?别急,今天我就从一个在郑州、焦作一带干了多年的从业者角度,跟你聊清楚 电工证哪种更能升级 ,还有 郑州报考避坑指南…

2026/11/13 23:36:09

低压电工证复审失败?别让电子证书白丢了

低压电工证复审失败?别让电子证书白丢了 你正盯着手机屏幕上的【低压电工证复审失败】通知,心里一紧:这证要是过不了,是不是就等于失业?别慌,今天咱们就来聊聊,为什么低压电工证复审会失败,以及你该怎么做才能保住这张【电子证书】,继续在工地上“发…

2026/11/13 23:36:09

电工证颁发机构有哪些 真实经历告诉你外省证怎么转

电工证颁发机构有哪些 真实经历告诉你外省证怎么转 之前考的证在外省能不能转过来?这是很多电工朋友在换工作、跨区域执业时最头疼的问题。我有朋友在河南鹤壁干了五六年,最近被调到河北项目,发现他持有的电工证在本地用不了,差点影响了项目进度。今天就…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑