
OpenClaw transcripts 深度指南SQLite 持久化存储、CLI 检查导出与 Meeting 转录全链路【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw在 OpenClaw 中Google Meet、Microsoft Teams、Zoom 的浏览器参会插件以及 Discord 语音频道会自动捕获会议内容openclaw transcripts命令族则负责从终端检查、查看和导出这些持久化的会议转录。本文带你掌握转录的 SQLite 权威存储与文件导出布局、list/show/path三个子命令的完整用法、面向 Agent 的transcripts工具选择器模型以及transcripts.enabled、transcripts.autoStart等配置项的落地细节——读完即可在终端、Control UI 和 Gateway RPC 三个层面自由检索与导出会议笔记。存储架构SQLite 是权威状态文件只是导出转录的规范状态canonical state存放在共享 SQLite 数据库$OPENCLAW_STATE_DIR/state/openclaw.sqlite中。show和path命令才会显式地把面向用户的工件物化materialize到状态目录下$OPENCLAW_STATE_DIR/transcripts/YYYY-MM-DD/session/ metadata.json transcript.jsonl summary.json summary.md这些文件是导出产物而非第二套运行时存储OpenClaw 在捕获、生成摘要或列出转录时不会回读它们。默认状态目录是~/.openclaw可通过环境变量OPENCLAW_STATE_DIR覆盖。日期目录取自会话开始时间会话目录则是从会话 ID 派生的文件系统安全 slug。从源码结构看这一设计在 TranscriptsStore 中有明确体现类注释即声明 Canonical meeting-capture transcript store. Files are explicit exports only.。SQLite schema 由 ensureMeetingTranscriptsSchema 惰性创建核心表为meeting_transcript_sessions所有写操作都走 runOpenClawStateWriteTransaction 事务。值得一提的是store 内部维护着export_manifest_json与export_pending_json两列通过 expectedExportHashes 对每个工件计算 SHA-256 摘要从而保证重复物化是幂等且可校验的。目录名派生规则实现于 store-artifacts.tssafeTranscriptPathSegment 把[a-zA-Z0-9._-]之外的字符替换为-并处理 Windows 保留名、结尾点号等边缘情况transcriptSessionSelector 生成YYYY-MM-DD/slug形式的规范选择器日期取自startedAt缺失时回退当天。如果文件系统安全的导出名超过 255 字节OpenClaw 会将其缩短为前缀加完整原始会话 ID 的确定性 SHA-256 哈希见 TRANSCRIPT_PATH_SEGMENT_MAX_BYTES。只有派生的导出名和选择器会变化原始会话 ID、provider 停止句柄和已存笔记都保持完整本来放得下的名字则原样保留。缩短后的名称应使用list打印的 selector 来寻址。对于存量会话中已经落盘超大名称的情况运行openclaw doctor --fix可以修复其派生选择器而不动已存笔记。在 Control UI 中读取转录打开 Control UI 的 Settings 页点击侧边栏铅笔菜单Edit pinned items选择Meetings即可在/meetings路由浏览同一个 SQLite 归档。Meetings 默认不固定到侧边栏但可以手动固定。会议笔记与Sessions中的 Agent 聊天记录相互独立。界面行为要点会议以新到旧的时间线按开始日期分组展示每条带已存摘要预览打开库视图时时间线全宽显示选中某场会议打开其阅读器搜索范围覆盖标题、会话/来源 ID、已存摘要笔记和转录文本不搜索会议 URL可按 provider、account、agent ID 精确过滤或按会话开始日期过滤。日期过滤使用 UTCStarted on or after包含选中当天Started before排除当天。结果以确定性分页加载修改过滤条件或点击Refresh会重新开始分页选中会议打开的是已存的Summary标签选择Transcript可看带时间戳的说话人文本Search within this transcript在 Gateway 上搜索已存语句包括尚未加载进浏览器的文本Load more继续读取浏览器保留最近 5 个已加载页URL 会保留选中的会议和标签页/meetings?selector...形式的旧书签继续有效。打开会议不会生成缺失的摘要Download Markdown包含转录与已存摘要Download JSONL导出阅读器的公开语句投影排除 provider 私有元数据和本地文件路径。本地 CLI 导出保留原有 raw 格式。大于 4 MiB 的浏览器导出会显式失败而不产生部分文件更大导出请在 Gateway 主机上使用openclaw transcripts path session --transcript或--dir。权限模型归档读取需要operator.read或其 write/admin 隐含权限以及读取共享归档的许可在受限的多用户 profile 上选择 agent 过滤器不会授予归档访问权。捕获配置需要operator.admin。CLI 命令参考openclaw transcripts list openclaw transcripts show session openclaw transcripts show YYYY-MM-DD/session openclaw transcripts path session openclaw transcripts path YYYY-MM-DD/session openclaw transcripts path session --dir openclaw transcripts path session --metadata openclaw transcripts path session --transcript openclaw transcripts list --json openclaw transcripts show session --json openclaw transcripts path session --json命令说明list列出已存会话。show session打印并物化summary.md。path session物化并打印summary.md路径。path session --dir物化全部工件并打印其目录。path session --metadata物化并打印metadata.json。path session --transcript物化并打印transcript.jsonl。--json打印机器可读输出任意子命令。这些子命令在 registerTranscriptsCli 中通过 commander 注册描述分别为 Inspect stored transcripts、Print and materialize a transcript summary、Materialize and print a stored transcripts artifact path。几个值得注意的实现细节list默认每行打印制表符分隔的四列selector、开始时间、标题、摘要路径无转录时输出No transcripts found.。见 listCommand。show先读取已存摘要然后调用 materializeSessionArtifacts 把summary.md写到状态目录再打印——源码注释明确将其定位为 an explicit export boundary即show同时是查看和导出动作无摘要时会报错summary.md not found for transcripts session。path的工件类型由 selectedArtifactKind 决定--dir映射到all--metadata到metadata--transcript到transcript默认summary。所有输出都会先经过终端文本清洗sanitizeTerminalText避免摘要中的控制字符干扰终端渲染。选择器与寻址规则使用list打印的 selector 来寻址一次精确捕获。已存在的规范 selector 优先于同文本的原始会话 ID。否则show和path接受YYYY-MM-DD/raw-session-id形式后缀整体按字面匹配包括标点与斜杠openclaw transcripts show 2026-05-22/notes: room/one如果两种限定形式都找不到捕获则把整个输入作为字面 raw session ID 或导出 slug 做大小写敏感匹配raw ID 中的日期前缀不会阻止这次查找。多个匹配时你必须提供带日期的 selector——OpenClaw 不会通过消毒raw ID 来猜测捕获。默认会话 ID 包含时间戳和随机后缀只有当固定 ID 在当天唯一时才应使用。list输出与 JSON 格式list每个会话打印一行制表符分隔的四列selector、开始时间、标题、摘要路径2026-05-22/standup 2026-05-22T09:00:00.000Z Weekly standup /Users/user/.openclaw/transcripts/2026-05-22/standup/summary.mdselector 是回传给show或path最安全的值。list --json返回对象数组字段为sessionId、selector、date、title、startedAt、stoppedAt、source、path、summaryPath、hasSummary见 listCommand 的 JSON 分支。已存的会议来源 URL 只保留 origin 和 path查询串、fragment 和内嵌凭据在持久化前被剥离。show --json返回已存会话元数据、selector、会话目录、摘要路径以及摘要 Markdown 全文对应 showCommand。path --json返回所选路径及该工件是否可被物化元数据与转录导出对已存会话总是存在摘要路径在该会话尚无摘要时报exists: false。Agent 侧transcripts工具选择器从任意会话读取笔记可以让任意 agent 用transcripts工具列出历史会议并读取笔记——读操作与当初捕获会议的 agent 会话无关。Operator 调用方可读 Gateway 上的全部会议Channel 调用方只能读来源 provider 允许的会议Discord 语音读取限定在调用者所属 guild 内。这些读权限不改变捕获或摘要的写权限。{ action: list, limit: 20 }list按新到旧返回每条包含 selector、开始时间、标题或 provider 名、语句数和参与人。limit默认 20接受 1–50 的整数。文本部分有界结构化结果在details.sessions。{ action: show, selector: 2026-05-22/notes-room-one }show返回已存笔记 Markdown 与会话详情文本上限 12,000 字符截断标记会指向openclaw transcripts show selector获取全文。尚无摘要的捕获会报告笔记暂不可用并说明其是否仍在进行中。读取笔记不会重新生成摘要或导出工件。如何选定一次捕获transcripts工具同时返回未经修改的 rawsessionId和来自 start、import、stop、summarize 的规范selector。授权的status结果包含活动捕获和待定稿条目的 selector面向模型的文本最多展示 3 个完整 selector优先展示待定稿项并报告省略数量结构化 details 保留完整授权列表。后续 show、stop、summarize 调用请优先使用selector{ action: summarize, selector: 2026-05-22/notes-room-one }show、stop、summarize要求selector与sessionId二选一其余 action 拒绝selectorstart和import继续通过sessionId接受 raw ID。显式selector输入接受规范 selector 和上文的历史日期/raw-ID 形式但绝不整体回退为 raw ID。这一点在 transcripts-tool-selection.ts 中有直接体现显式 selector 与 sessionId 同时出现会抛出 Provide exactly one of selector or sessionId...而限定意义与 raw ID 指向不同捕获时返回 Ambiguous transcripts session; pass selector from start, import, status, or the local transcripts list. 的歧义错误。旧式sessionId输入会把限定意义与 raw/slug 意义合并考虑若两者指向不同捕获工具报歧义但不列候选细节且捕获结束后歧义依然存在。解决办法是使用 start、import 或授权的 list/status 返回的 selector或在本地查openclaw transcripts list后把期望值放进selector字段。raw-ID/selector 冲突的双方都可以用自己的规范 selector 寻址。在没有冲突的限定意义、也没有不同 raw-ID/slug 候选时旧式sessionId对 stop 和 summarize 会选择当前 raw ID 精确匹配的捕获即使历史捕获复用过该 ID若当前无捕获重复的历史 ID 需要带日期的 selector。显式针对旧捕获的 selector 不会停止同 ID 的较新捕获。show选择并授权持久化捕获仅用实时状态报告捕获是否活动重复历史 ID 即使有一次捕获活动也需要带日期 selector。Gateway 与 Control UI 读取只读 RPC 方法Control UI 的Meetings页与其他 Gateway 客户端使用以下只读 RPC 方法详见 Gateway 协议文档方法参数返回transcripts.list可选limit1–200默认 50、cursor、query、精确providerId/accountId/agentId、startedAfter/startedBefore日期边界新到旧的sessions含参与人、语句数、活动状态、摘要可用性、有界 overview 与nextCursortranscripts.get必填selector可选includeUtterances、limit1–100、cursor与语句query单个session、已存summary、可选utterances与nextCursor。显式分页返回全文遗留请求保留下文描述的近期窗口transcripts.export必填selector与formatmarkdown或jsonlbase64 编码文件附filename、mimeType、sizeBytestranscripts.status无捕获启用状态、provider 可用性与设置元数据、已配置来源健康度、活动订阅、最近保存的转录这些方法需要operator.read或其 write/admin 隐含权限暴露单个受信 Gateway 域内的全部会议。受限 operator profile 需要读取共享归档的许可选择 agent 过滤器不授予访问权需要隔离时请使用独立 Gateway 域。来源定位器只包含providerId、accountId、guildId、channelId、threadTs、fileId、kind以及存在时的净化meetingUrl绝不包含任意捕获元数据。搜索与排序语义list 搜索匹配标题、会话/来源 ID、已存摘要 Markdown 与 overview、已存语句文本排除来源会议 URL 和私有元数据。日期边界使用会话开始时间startedAfter含当日、startedBefore排除当日按 JavaScript 日期字符串语义含已存 UTC 偏移以时刻比较。无法解析的已存日期排在最后并被排除出日期范围相同时刻按会话 ID、再按原始时间戳排序。分页选择会先扫描候选捕获及其已存笔记与语句搜索时再只投影选中页的笔记与参与人搜索耗时随被检索文本增长。cursor 与其当前查询/过滤条件绑定改动任何条件都要重新取第一页nextCursor为 null 表示分页结束。摘要与语句读取已存摘要 Markdown 是规范笔记文本与 CLIshow输出一致读操作不生成摘要、不物化文件。语句仅在includeUtterances为 true 时返回。提供limit、cursor或query即进入分页读取每页最多 100 条、默认 50且不截断已存文本query搜索整个已存转录含未加载页。分页读取、list 与 status 结果都有 1 MiB 上限超限行或非法 cursor 会显式失败。兼容旧客户端的遗留窗口对不携带limit/cursor/query的旧版transcripts.get保留按时间序的最近 2,000 条语句每条净化文本裁剪到 4,000 个 UTF-16 单元返回nextCursor: null并维持 25 MiB 公开结果上限与既有 Gateway 客户端传输上限一致。发送显式limit即切换到有界分页读取并获取全文用nextCursor续读至 null。两种请求形态都执行全部归档访问检查。导出边界导出上限 4 MiB失败时不返回部分文件。Markdown 保留已存笔记并在独立标题下追加完整转录JSONL 包含公开语句投影序号、语句 ID、全文、说话人身份、来源时间戳、可用时的 finality排除私有 provider 元数据与文件系统路径。更大导出请回到 Gateway 主机用openclaw transcripts path session --transcript。status 语义status 报告的是已注册订阅而非确认录音armed、not-active、unknown保持区分。provider、配置来源、活动列表各限 100 条并带省略计数。最近更新的含语句会话作为最近转录报告来源语音时间不是摄入时间戳。每天多场会话会话按日期分组再按会话 ID 分组。同一天 10 场会议就是 10 个平级目录~/.openclaw/transcripts/2026-05-22/ transcript-2026-05-22T09-00-00-000Z-a1b2c3d4/ transcript-2026-05-22T10-30-00-000Z-b2c3d4e5/ standup/自动化请用默认生成的 ID只有当固定 ID如standup不会在同一天重复时才可复用。摘要生成与缺失摘要的处理会议笔记优先使用属主 agent 的 utility model必要时用其 primary model。若模型不可用、请求超时或返回无效输出OpenClaw 会保存确定性的启发式heuristic笔记作为兜底——模型生成是增强而非保存笔记的门控。笔记结构依次为 overview、参与人、决策、行动项、风险最后是转录本体让有界阅读器先看到笔记而不是长转录。参与人取自首次出现的说话人标签而非模型猜测。摘要 JSON 记录source为model或heuristic模型笔记还会记录所用模型引用。模型最多接收 48,000 字符的转录中间被省略时保留开头与结尾。已存语句保持完整。用transcripts summarize即 agent 工具的summarizeaction可基于已存转录重新生成笔记包括更换模型配置之后。生命周期与定稿细节工具的statusaction 列出活动捕获订阅不列历史笔记。provider 结束或替换订阅时OpenClaw 记录stoppedAt并保存摘要转录仍可被list、show和summarize使用。临时传输断连不会结束订阅。provider 驱动的完成会保存摘要但不导出文件显式的工具 stop、import、summarize 以及已配置 auto-start 的关停则尝试物化summary.md。若终止持久化失败status会在pendingFinalization下与活动捕获分开报告该已结束的捕获用工具的stopaction 对该会话重试持久化不必再停一次 provider。若 provider 无法完成清理且未报告捕获结束status保持捕获为活动并置cleanupPending: true已存语句不受影响最终笔记等待清理完成provider 恢复后用同一 selector 重试stop。替换或禁用插件不会把清理转移给其他 provider 实例。一次会话可能在list中可见却无摘要捕获仍活动、provider 在 stop 时失败、或在任何语句到达之前先落了元数据都会出现这种情况。可用path session --transcript检查只增的原始转录或跑summarize重新生成摘要。摘要先于可选的工件导出写入 SQLite即使导出失败已存摘要仍然可用summary.md缺失也不例外。已配置 auto-start 的捕获在关停时遇到导出失败或 provider stop 错误会记录警告修复导出目标后运行openclaw transcripts path session或show重试即可——警告中的预期路径不是文件已导出的证明。历史会话若缺少完整的账号属主元数据会保留本地恢复路径带该 agent 本地 turn 的 agent 属主行用对应 agent 恢复无 agent 归属的行需要本地 main-agent turn。缺少 provider、属主元数据不全、无账号绑定的历史来源同样走此路径openclaw agent --agent owning-agent-or-main --local --message \ Use transcripts summarize for session session.从旧版文件存储升级SQLite 存储之前的 OpenClaw 版本直接把规范运行时状态写在$OPENCLAW_STATE_DIR/transcripts/之下。升级后运行openclaw doctor --fixDoctor 会把整个旧目录树导入 SQLite、校验行数与顺序、记录迁移凭证migration receipts并把校验过的源树移到带时间戳的transcripts.migrated-*归档。运行时命令不会回退读取旧文件。在确认导入的会话与依赖的导出都无误之前请保留该归档。配置transcripts.enabled与transcripts.autoStart在Settings → Communications → Meeting capture中编辑既有的transcripts.enabled与transcripts.autoStart。Enable transcript storage控制是否允许持久捕获每个 auto-start 来源单独选择加入 provider 与来源。可以增删来源并编辑标题、account、来源定位器和可选的自定义会话 ID。占用模式下会话 ID 自动生成因此其自定义 ID 字段被禁用已存值仍保留。控件共享 Settings 草稿、自动保存、校验与 apply 流程若出现Apply changes请用它激活已存变更。若重启打断了待存草稿Autosave paused after reconnect会保留该草稿而不发送到新连接请检查后在 Settings 页脚点击Save。完整转录 schema 编辑器位于Meeting capture → Advanced settings。只修改 auto-start 来源标题时变更对之后的捕获生效无需重启或打断当前捕获当前与历史笔记保留原有标题、来源、agent 归属和 selector。其他来源编辑保留常规 Gateway 重启行为。启动重试仅在确切的失败 provider 尝试仍持有重试权时保留同一被接受的 ID、原标题、开始时间、来源与已存笔记生成 ID 与配置 ID 均适用。重试在 12 次尝试、服务关停、手动停止或保留清理权的重试后停止status 报告有界诊断而不暴露 provider 错误细节。开始新捕获前先用工具的stopaction 恢复待处理清理。会议转录捕获默认开启。全局关闭{ transcripts: { enabled: false } }enabled默认true启用自动会议笔记、transcripts 工具和已配置的 auto-start 来源。若希望主机不持久化会议笔记设为false。显式请求的会议transcribe模式保留既有的有界实时字幕尾部但该设置为false时不再写入持久化行。用transcripts.autoStart配置自动启动来源每个条目以存在即启用、省略即禁用。discord-voice是内置的 auto-start 来源要求guildId和channelId。恰好一个配置的 Discord account 有凭据且启用语音时自动选择多个 account 可用语音时选择channels.discord.defaultAccount否则把accountId设为channels.discord.accounts下对应键——省略会被当作歧义而拒绝{ transcripts: { enabled: true, autoStart: [ { providerId: discord-voice, accountId: work, guildId: 1234567890, channelId: 2345678901, whenOccupied: true } ] } }whenOccupied默认false捕获随 Gateway 启动并持续运行直到停止。设为true则等待人类进入每个占用 episode 捕获一场会议启动时已有人在场也会立即开始机器人不计入。最后一名人类离开后固定的 30 秒宽限期容忍短暂重连而不把会议切分宽限期内人类返回会取消停止否则 OpenClaw 停止捕获并生成笔记。占用 episode 使用生成 ID条目中的sessionId被忽略。跨 Gateway 重启续接会议时若同一 provider、account、guild、channel 的最近会话在 10 分钟内停止且其 ID 来源记录为generatedOpenClaw 会重开该会话保留原 ID、标题与开始时间新语句追加进去。窗口内的稍后返回也复用该会议超出窗口则获得新 ID。新接纳记录会标注转录 ID 是生成还是外部提供若最新候选是提供 ID、或来源记录缺失/无效捕获直接新开而不翻查更早历史既有笔记不变且可读。因此升级或重启后缺少来源记录的旧版生成会议可能分裂——Doctor 恢复元数据时保留已记录来源但不推断或回填缺失来源。若房间被路由给其他 agent该 agent 开始新捕获原 agent 保留其已存会议与摘要权限。provider 必须能报告占用状态。discord-voice支持不支持的 provider 会记录警告并跳过该条目而不是持续捕获。同一 Discord account 与 guild 最多配置一个whenOccupied: true条目即使 channelId 不同Discord bot 在每个 guild 只能占用一个语音频道后续冲突条目带警告跳过。完整只监听配置见 Discord 语音转录。会议 provider ID 为google-meet、teams、zoom别名分别是googlemeet/meet、teams-meetings/microsoft-teams/msteams、zoom-meetings。会议 provider 挂载到已激活的会议 bot 会话上常规入会不需要autoStart条目。相关文档CLI 参考总览会议插件 —— 捕获这些转录的插件核心源码TranscriptsStore、CLI 注册、工件派生、agent 工具选择逻辑 及其测试 transcripts-tool.selection.test.ts【免费下载链接】openclawThe AI that really does things. Any OS. Any Platform. The lobster way. 项目地址: https://gitcode.com/GitHub_Trending/cl/openclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考