gbrain Google Loops:Gmail/Calendar/Contacts 连接器与开放循环引擎的完整实战指南
gbrain Google LoopsGmail/Calendar/Contacts 连接器与开放循环引擎的完整实战指南【免费下载链接】gbrainGarrys Opinionated OpenClaw/Hermes Agent Brain项目地址: https://gitcode.com/gh_mirrors/gb/gbrain导读本文基于 gbrain 仓库中的 google-loops 技能文档系统讲解如何把 Gmail 线程、日历事件和联系人摄入大脑并在此基础上运行开放循环引擎Open-Loop Engine谁在等你回复、你承诺了什么、以及回复所需的所有上下文。你将掌握 BYOBring-Your-OwnOAuth 的极简接入流程全程只有两次用户交互、日常gbrain waiting摘要的使用、循环的关闭与静音操作以及基于类型化错误目录的排障方法。文中所有命令、参数与行为均以当前仓库的实际源码为准。一、整体架构连接器 开放循环引擎Google Loops 由两层组成Google 连接器把 Gmail 线程、日历事件、联系人摄入大脑对应源码位于 src/core/google/ 目录google-source.ts、google-clients.ts、access.ts、types.ts等。开放循环引擎在连接器之上维护结构化记录open_loops表回答三个问题——谁在等你、你承诺了什么、回复需要什么上下文。配套的两份完整参考文档docs/guides/google-connect.md —— 连接与排障每个错误及其修复方法docs/guides/open-loops.md —— 循环检测的工作原理。几个贯穿全文的底层原则只读连接器令牌只存在于本地凭据库~/.gbrain/credentials.json权限 0600连接器只申请gmail.readonly、calendar.readonly、contacts.readonly三个只读 scope绝不写入你的 Google 账户。BYO OAuth你自行创建免费的Google Cloud OAuth 客户端因此应用、配额和令牌完全由你掌控没有第三方中转。诚实优先gbrain waiting在数据过期时拒绝输出而不是给过时答案这正是open_loops信任关键表面的设计选择。二、对 HarnessAgent 宿主的契约——先读这一节如果你是在 Agent 环境中使用本技能以下契约是硬性要求源码层面由--json信封与[SHOW USER]协议落地见 src/commands/loops.ts 与 src/commands/google-setup.ts。逐字转发[SHOW USER]块。设置命令会打印带围栏的[SHOW USER] ... [/SHOW USER]块——包含带深层链接的编号步骤。必须原样转给用户改写会丢失关键细节比如“Desktop app绝不是 Web application”。每个块合并成一条消息发出。整个设置恰好两次用户交互1Google Cloud 清单 用户交回下载的 client JSON2用户点击一次同意 URL。如果你发现自己要问第三个问题说明你跳过了某个块请重读。尽可能不要把机密放进 argv 或聊天。用户把client_secret_*.json丢进聊天时保存为文件0600 权限再传路径gbrain google connect --client-json path。环境变量GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET同样可用。裸的--client-id/--client-secret参数是最后手段。每个命令都输出 JSON。加--json读取{ ok, status, next_action: { command, user_message }, error }当next_action.user_message存在时它就是该展示给用户的消息当next_action.command存在时它就是你的下一步调用错误携带{ code, problem, cause, fix, doc_url }——只向用户展示problemfix其余不要展示。重跑永远安全。gbrain google connect和gbrain google setup是幂等的状态机google-setup.ts 中connect步骤在已有令牌时直接跳过大多数错误的文档化修复方式就是“再跑一次”。三、连接 Google一次命令完成全部设置3.1 一键快路径gbrain google setup --json该命令按顺序完成凭据录入无凭据时打印 GCP 清单→同意本地 loopbackSSH/无头环境自动切换粘贴回填模式非 TTY 流程通过第二次调用完成gbrain google connect --code pasted-redirect-url→源注册→有预算的首次同步最新邮件优先深层回填在后续同步中自动继续→第一条gbrain waiting摘要。源码实现见 google-setup.ts连接 尾部编排与 google-setup-tail.ts源注册 首次同步 首次摘要。首次同步的默认墙钟预算为 90 秒--sync-budget-ms可调采用“新→旧”顺序和批量提交的底部游标因此预算内落地的必然是最新邮件——正好是gbrain waiting需要的。剩余部分会在之后每一次同步autopilot、cron、后台任务中自动补齐不会丢失。若想分步执行各环节可以拆开gbrain google connect # 仅凭据 同意 gbrain sources add gmail-you --kind google --account youexample.com gbrain sync --source gmail-you gbrain waiting3.2 一次性 Google Cloud 配置约 7 分钟gbrain google connect在本地无凭据时会打印以下精确清单对应 google-connect.md 原文创建或选用一个项目https://console.cloud.google.com/projectcreate逐个启用三个 API各点一下即可Gmailhttps://console.cloud.google.com/apis/library/gmail.googleapis.comCalendarhttps://console.cloud.google.com/apis/library/calendar-json.googleapis.comContacts (People)https://console.cloud.google.com/apis/library/people.googleapis.com配置同意屏幕https://console.cloud.google.com/auth/overviewGoogle Workspace 账户→ 用户类型选Internal。完成——无需验证令牌永不会每周过期。个人 gmail.com→ 用户类型选External然后必须做 BOTH 两件事 a. 把自己的邮箱加为测试用户https://console.cloud.google.com/auth/audience b. 在同一个页面上点击Publish app发布应用。跳过这一步会让 Google 每 7 天悄悄吊销你的令牌——这是野外最常见的失败原因。创建 OAuth 客户端https://console.cloud.google.com/auth/clients —— 应用类型选Desktop app绝不是 Web application。点击Download JSON。然后gbrain google connect --client-json ~/Downloads/client_secret_*.json也可以把 JSON 内容粘贴到标准输入--client-json -、导出GOOGLE_CLIENT_ID/GOOGLE_CLIENT_SECRET环境变量或在提示符下手动输入这对值。粘贴的值会被清洗智能引号、多余空白并在与 Google 通信前按形状校验。gbrain 会记录 Google实际授予的 scope同意屏幕允许你取消勾选 scope因此授权比需求窄时会立刻以scope_missing报出并附带 reauth 修复方法——绝不会变成每次扫描的晦涩 403。同意过程中 Google 会显示Google hasnt verified this app——这是你自己的应用点击Advanced → Continue即可。3.3 无头 / SSH / Agent 运行在其他机器上连接器会自动检测本地浏览器无法打开的环境SSH、WSL、容器、无显示器切换到粘贴回填模式它打印同意 URL你在任意地方打开并批准浏览器随后无法加载http://127.0.0.1:41999/...页面——这是预期的。复制该页面地址栏的完整 URL 粘贴回来交互式提示或非交互式完成gbrain google connect --paste # 打印 URL保存流程状态 gbrain google connect --code http://127.0.0.1:41999/?code...state...任何时候都可以用--paste或GBRAIN_FORCE_PASTE1强制此模式。注意Google 的 device-code 流程不可用——Gmail/Calendar/Contacts 的 scope 被 Google 从该流程中排除。loopback 粘贴回填是受支持的路径。3.4 多账户每个账户重复一次gbrain google connect --account workyourco.com每个账户成为独立源gbrain sources add gmail-work --kind google --account workyourco.com拥有独立的同步游标和锁。setup的--account参数同理如gbrain google setup --account workexample.com。3.5 次要日历日历扫描每个源只读一个日历因此每个源保有自己的增量同步令牌默认是账户的主日历。已授予的calendar.readonlyscope 覆盖的共享/订阅/次要日历可通过把附加源指向它们来摄入gbrain google calendars # 列出账户能读到的每个日历* 标记主日历含 id gbrain google calendars --json # { ok, status, account, calendars[], next_action.command } 供 agent 使用 gbrain sources add family-cal --kind google --account youexample.com \ --services calendar --calendar-id family0123456789group.calendar.google.com可以对你的 agent 说“列出我的 google 账户能读到的日历”——“把我的家庭日历摄入大脑”agent 会运行gbrain google calendars然后运行gbrain sources add … --calendar-id id。每个源的增量同步令牌与生成它的日历绑定。把已有源改指向另一个日历其g_calendar_id配置键是安全的下次扫描会注意到变化记录[google] calendar changed (old → new)丢弃旧游标从新窗口重新列出新日历而不是重放旧日历的增量。先前日历已导入的页面会留在大脑中直到你手动移除——不会自动对账。3.6 验证健康状态gbrain google status --json这是按账户的实时刷新探测。此外gbrain doctor带有google_oauth检查Testing 模式账户连续 5 天无成功刷新时发出警告。注意正在活跃同步的账户在 7 天 Testing 模式到期前不会收到预警告——发布到 Production 才是真正的修复。发布后通过gbrain google connect --reauth email --consent-state production重新运行同意并记录周过期警告即停止。3.7 已有其他 Google 访问途径跳过 OAuth如果你的技术栈已经持有其他方式的 Google 访问自带认证的 Google CLI、gcloud、能铸造令牌的凭据网关可以让源直接使用它完全不经过 gbrain 的 OAuth 流程——任何凭据都不进入 gbrain# 任何能打印访问令牌的命令裸令牌或含 token/access_token 字段的 JSON # 可选 expiry/expires_in。gbrain 在同步时运行它并缓存令牌直到过期从不存储。 gbrain sources add gmail-work --kind google --account youexample.com \ --access command --token-command command that prints an access token--access env --token-env VAR改为从环境变量读取由 gbrain 之外刷新的令牌——配置里存的是变量名永远不是值。随后gbrain sync --source gmail-work和gbrain waiting的工作方式完全相同。gcloud auth print-access-token是一个可直接套用的--token-command例子。相比保险库流程的变化gbrain google status的刷新探测和gbrain doctor的google_oauth检查只覆盖保险库账户外部工具自行负责令牌健康scope 预检信任--services缺 scope 会以api_not_enabled/upstream呈现而非scope_missingsend-as 别名在令牌允许时实时获取否则身份退化为仅账户地址。令牌命令在同步时于本地 shell 中运行——它存在于本地源配置中绝不通过 MCP 可达。失败以access_command_failed/access_env_missing附修复方法呈现。四、日常操作gbrain waiting与循环管理gbrain waiting --json # 核心输出按紧急度排序的“谁在等你” gbrain loops done id # 用户已处理 gbrain loops drop id # 用户不打算做 gbrain loops mute sender email # 永不再跟踪该发件人对应 CLI 实现见 src/commands/loops.ts所有路径都通过handleToolCallremote: false派发到受信任的本地操作层因此 CLI 与 MCP 共享同一行为。4.1 数据过期保护waiting在数据过期时拒绝输出任何 google 源 24 小时内无成功同步并点名精确修复方法gbrain sync --source id。先运行同步再重试。只有当用户明确接受过期结果时才用--stale-ok。过期时即使加了--json信封也会携带status: stale与next_action.command供 Agent 直接执行。4.2 展示循环的方式展示循环时须包含对方身份、欠什么摘要、证据引用、深层链接在正确账户中打开对应 Gmail 线程、以及到期日期如有。受信任的本地结果已经带有可直接粘贴的text摘要——优先复用而不是重新渲染。4.3 “回复所需的上下文”每个分组都带有对方的实体卡片摘要、近期历史、其他打开的线程。需要更多时用对方 slug 调用context_pack。4.4 关闭循环用户说已经回复/处理后关闭循环gbrain loops done id——线程循环在下次同步看到 Gmail 中的回复时也会自动自关闭源码中closeThreadLoops(..., reply_detected, ...)见 loop-detect.ts。五、连续摄入自动同步Google 源与任何源一样被自动拾取autopilot 与gbrain sync --all都会覆盖它们不需要自己的 cron。裸的未定向gbrain sync不会触达它们——必须用--source id或--all。同步新鲜度在构造上就是诚实的GMAIL 扫描的成功会门控源的同步时间戳它保护循环新鲜度——这正是gbrain waiting过期门要守护的东西联系人/日历失败会把运行标记为部分成功而不阻塞它。单条线程反复抓取失败会在连续失败若干次后被跳过而不是永远卡住同步gbrain sync --source id --full会用全新账本重试被跳过的线程。回填期间限速大邮箱回填宽--history-days窗口时可能在突发中触发 Gmail 每用户限速——Google 以 HTTP 403rateLimitExceeded/userRateLimitExceeded或 429 应答几秒到几分钟内自行恢复。客户端会耐心重试受限请求——默认 6 次尝试、指数退避加抖动、上限 60 秒、Google 发送Retry-After时予以尊重——最后才放弃并报告rate_limited。该预算刻意远大于其他可重试失败如需要刷新令牌的 401的 2 次尝试预算过早放弃曾导致几秒后就会成功的线程在本次同步剩余部分被跳过。即使线程的重试预算耗尽限速失败也不计入poison-skip 阈值——与真正的按线程失败畸形消息、权限边界情况不同限速对该线程本身不构成结论因此扫描会在未来每次运行中继续重试它而不是默默放弃。六、开放循环引擎两大检测器的工作原理开放循环引擎维护open_loops表记录承诺、未回复消息和待定决策并在每次同步时保持更新。它的意义不是“搜索我的邮件”而是这里有三个在等你的人、你承诺过什么、以及回复所需的上下文。6.1 确定性线程状态机免费、零 LLM、始终开启源码位于 src/core/google/loop-detect.ts。对每条已同步的 Gmail 线程最后一条实质性消息是对方的、你在收件人To:中、未回复 ≥24h →unanswered_inbound——他们在等你最后一条实质性消息是你的、包含问号、未回复 ≥72h →unanswered_outbound——你在等他们回复落地 → 循环自动关闭closed_by: reply_detected。循环通过状态迁移关闭从不删除——审计轨迹保留。两条宽限期常量定义在源码中INBOUND_GRACE_HOURS 24、OUTBOUND_GRACE_HOURS 72。精度规则由 test/google-loop-detect.test.ts 的标注夹具语料钉死——每个误报类别在修复前都有夹具噪声发件人noreply/通知、列表邮件List-Unsubscribe、仅抄送CC-only投递、无问号的 FYI/转发、自线程、以及被静音的发件人/线程永不开循环。已发送邮件的摄入正是“未回复”诚实性的来源——你自己的回复就是反向过滤器。Google Calendar 系统邮件被结构性排除。Invitation:、Updated invitation:、Accepted:、Declined:、Tentative:、Canceled event:通知是 Calendar 代人类发送的因此它们来自同事的真实地址——isNoiseSender看不到它们loops mute sender也会连同对方真实邮件一起静音。它们通过 iCalendarMETHODREQUEST、REPLY、CANCEL……即 RFC 5546 值其他都不算识别——这是 Gmail 在text/calendar部分自身 Content-Type 头中携带的且普通人类邮件上不会出现人类附带.ics文件或无法识别的方法值都不算印章。主题前缀是对 MIME 未捕获消息的兜底锚定在主题开头、仅限于 Calendar 自己的头如Notification:这样的通用词是人工/供应商主题永不匹配并拒绝任何带 Re:/Fwd: 前缀的内容以免人类转发邀请线程时误判。这些通知既不开启也不关闭循环——邀请不是回复让它翻转回合会悄悄答复一个真实的出站循环。它们仍作为普通可搜索页面摄入仍为日历/会议上下文供料。6.2 LLM 承诺提取器每条近期线程一次模型调用google 源默认开启源码位于 src/core/google/loops-extract.ts。提取带方向的承诺“我周五前发给你” →commitment_owed_by_me对方、到期日、逐字引用和待定决策。一个提取器、每个条目三种投影open_loops行本身一条facts行kindcommitmentfence-first去重——让entity、context_pack、recall通过既有读取路径看到它一条线程页 → 人页的类型化边owes_to/awaiting_reply_from——让关系搜索可以遍历。护栏注入加固输入模型看到线程最新的 12k因此最新回复对裁判始终可见、全有或全无的解析屏障畸形模型响应什么都不写、只处理最近 30 天邮件深层回填从不提取、总开关gbrain config set loops.extraction_enabled false。哪些线程到达提取器。结构性资格门loopExtractionEligibility先运行源码 loops-extract.ts保证群发邮件既不花钱调用模型、也不把真实通信挤出扫描形态是否合格SPAM/TRASH否——无论谁写的账户主人写过实质性消息SENT标签或已知主人地址日历 RSVP 等噪声不算是覆盖下面所有规则纯噪声发件人 / 纯日历通知否CATEGORY_PROMOTIONS/CATEGORY_SOCIAL/CATEGORY_FORUMS否除非主人参与List-Unsubscribe群发否除非主人参与CATEGORY_UPDATES是——发票、合同和文档请求在那里普通人类通信是主人参与规则是承重墙你自己的出站消息正是承诺所在所以回复群发标记线程里的“我周五前发”仍然可达。每条规则都是结构性的——Gmail 标签、List-Unsubscribe、日历部分、谁写的消息——没有发件人/域名/主题/正文匹配因此没有需要维护的厂商名单。扫描按原因计数记录日志loops_extract eligibility:让运行可在不把邮件内容写进日志的前提下审计过度过滤。每条合格线程都入队最新优先——只排序不因更旧而丢弃。MinionQueue 是积压队列worker 并发度就是速率限制线程只在变化时才重新候选所以紧的每扫描上限会悄悄丢线程。作业以页面修订为键loops:source:slug:newestMs因此重扫未变化线程是空操作且该键是唯一的去重手段。每扫描 500 条LOOPS_EXTRACT_ENQUEUE_CEILING的宽裕安全上限只是病态扫描的开销兜底触发时日志会诚实点名丢弃。静音的双向共享loops mute也会阻止 LLM 通道为被静音的发件人/线程重建承诺或决策同时底层邮件页面保持可搜索。发件人静音门控的是线程中写过消息的人——每个消息作者而不仅是最新的那个——从不门控收件人或抄送静音一人不会在群线程中隐藏被抄送者的承诺外部发件人也无法通过抄送被静音地址来逃避提取。线程页在participants:旁携带senders:frontmatter 作者列表。七、循环管理命令与关闭语义7.1 完整命令面源码 loops.tsgbrain waiting [--top N] [--json] [--stale-ok] # 排名的对方列表你欠他们/他们欠你什么、证据引用、 # Gmail 深层链接、实体卡片上下文、可直接粘贴的摘要。 # 当所有 google 源 24h 无成功同步时拒绝输出并打印精确修复方法。 # 一个新鲜的账户即可维持输出各源同步年龄始终报告。 gbrain loops list [--status open|done|dropped|stale] [--type loop_type] [--source id] [--json] gbrain loops show id [--json] gbrain loops done id | drop id # 关闭关闭的承诺也会使其投影的 fact 过期 gbrain loops mute sender email # 永不再为该发件人开循环 gbrain loops mute thread id # ……或该线程既有循环保持状态 gbrain loops unmute sender email # 撤销静音——检测器可再次为其开新循环 gbrain loops unmute thread id7.2 作用域语义gbrain waiting和gbrain loops list默认读取大脑中每个源循环存在于 google 源而非default——default 作用域读取会在大有人在等时回答“一切干净”--source id显式收窄。未限定的loops mute自动解析到大脑的 google 源在没有或不止一个时连同精确修复方法一起拒绝--source消歧。loops unmute以同样方式解析源因此解除静音不可能指向与所撤销静音不同的源。Unmute 是精确且仅向前的。它删除静音写入的那一行(source_id, kind, value)——同样的小写化所以unmute sender BOBExample.com逆转mute sender bobexample.com而兄弟源、其他kind、其他值不受影响。它不会重新打开循环抑制只门控新检测静音期间关闭或从未打开的保持原状检测器从下次同步起恢复开循环。重复 unmute 是空操作报告removed: false且退出码 0因此脚本可无条件调用源码注释明确这是 no-op 而非失败。7.3 关闭语义见 open-loops.md线程循环在回复落地时确定性关闭。承诺循环手动关闭gbrain loops done或由过期关闭逾期 14 天且14 天无活动——仍在积极讨论的逾期承诺保持打开——或 90 天无任何活动 →stale与承诺事实衰减半衰期对齐。关闭就是关闭。已关闭done、dropped 或 stale的循环只在真正更新的线程活动出现时重开——常规扫描重见同一线程永远不会复活你手动关闭的循环。承诺的回复即履约fulfillment-by-reply检测是未来工作不假装实现。7.4 MCP 面MCP 操作open_loops、loops_close、loops_mute、loops_unmute。open_loops对远程调用者以fail-closed 证据脱敏提供服务——计数、对方、摘要、到期日逐字引用、深层链接和可注入的text摘要仅限受信任本地。远程调用者还需要已解析的源作用域未限定的远程读取被直接拒绝写操作要求与调用者授权匹配的单源作用域含loops_unmute——解除另一源的抑制与植下一条抑制同样是定向写入。open_loops接受按调用作用域参数——source_id传输绑定到另一源的 MCP 客户端可把读取指向 google 源远程调用者会做授权检查和all_sources受信任本地跨越全脑远程保持授权范围内。当作用域完全没有 google 源时结果携带no_google_sources: true摘要明确说明而不是说“你很干净”——通过网关或 agent 编写的采集器到达大脑的邮件没有循环引擎可读的内容这与空收件箱不同。任何 Google 访问途径都能修复gbrain google setupBYO OAuth或sources add的--access command|env既有 Google CLI 或铸造令牌的网关。7.5 排名对方按开放循环数、到期日邻近度、最老循环年龄、以及对方在大脑中的连接度反链数排名。确定性——相同数据相同顺序。八、排障类型化错误目录每个失败都有带修复方法的类型化代码——docs/guides/google-connect.md#troubleshooting 是权威对照表。用户实际会遇到的三个同意时显示 “Google hasnt verified this app”→ 预期行为这是用户自己的应用Advanced → Continue。在用户点击 URL 之前就提醒他们。access_denied_test_user→ 他们忘了把自己加为测试用户错误自带深层链接。invalid_grant_testing_expiry一切在约第 7 天悄悄停止→ 同意屏幕仍在 Testing发布到 Production然后gbrain google connect --reauth email。完整目录同样以--json输出为结构化 JSONCode发生了什么修复client_json_wrong_type下载的 JSON 是Web application客户端顶层web键创建Desktop app客户端并下载其 JSONclient_json_unreadable客户端 JSON 路径不存在或不是 Google Cloud 下载从 Credentials → 你的 Desktop app 客户端 → Download JSON 重新下载以--client-json path传入client_shape_invalid粘贴的 ID/secret 畸形智能引号、截断重新复制或使用--client-jsonredirect_uri_mismatchGoogle 拒绝了重定向几乎总是 Web 型客户端——改用 Desktop app 客户端access_denied_test_user同意被阻断External Testing你不是测试用户——或点了取消在 Audience → Test users 下添加自己重试同一 URLpasted_wrong_url粘贴了同意页 URL先批准再粘贴http://127.0.0.1...地址栏 URLstate_mismatch粘贴来自更早的尝试重跑 connect用新 URLadmin_policy_enforcedWorkspace 管理员阻止第三方应用即便是你自己的客户端管理控制台 → Security → API controls → 信任该应用或把同意屏幕设为 Internalwrong_account_consented不同的 Google 账户批准了重跑URL 现在会预选正确账户port_in_useloopback 端口被占重跑新临时端口、--port n或--pasteconsent_timeout10 分钟内未完成同意重跑 connectinvalid_grant_testing_expiry连接约 7 天后刷新令牌死亡发布应用到 Production然后gbrain google connect --reauth emailinvalid_grant_revoked访问被撤销改密码、手动撤销、客户端轮换gbrain google connect --reauth emailinvalid_grant_clock_skew系统时钟偏差 60 秒修正时间同步重试code_reused授权码用了两次重跑 connect授权码一次性invalid_client客户端 secret 在控制台被轮换/删除下载当前 JSON重新连接no_refresh_tokenGoogle 未返回刷新令牌重跑 connect若持续在 https://myaccount.google.com/permissions 撤销并重连api_not_enabled项目中某个 API 未启用错误自带精确启用链接项目已预选rate_limitedGoogle 配额用尽自动退避无需操作scope_missing以比所需更窄的--scopes连接gbrain google connect --reauth emailrelay_unreachable/relay_session_expired/claim_already_used/relay_disabled托管快路径gbrain.io 中继问题BYO 连接始终可用gbrain google connectnot_connected账户无保险库条目gbrain google connectupstreamGoogle 返回意外错误重试持续则运行gbrain google status --json并提交输出access_command_failed--access command令牌命令非零退出、超时或未输出令牌形状内容手动运行它它必须打印裸令牌或含token/access_token的 JSONaccess_env_missing--access env变量在此进程中未设置/空白向其中导出实时令牌外部刷新或切回保险库流程游标过期historyId早于约一周、calendar/contacts 的syncToken410自动以有界重列处理——绝不面向用户。九、成本诚实LLM 支出与关闭开关承诺提取会把近期邮件文本≤30 天、每次扫描 ≤50 线程发送给配置的聊天供应商。设置期间向用户说明一次关闭开关是gbrain config set loops.extraction_enabled false源码isLoopsExtractionEnabled检查loops.extraction_enabled值为false/0/off时关闭。未回复线程检测器是确定性的、免费的不受影响。无聊天供应商配置时无密钥安装或故障期间扫描不排队提取作业并记录一行日志说明——邮件页面照常导入线程在下一次触及或gbrain sync --source id --full时一旦有供应商被提取故障中途死掉的作业会重试若最终死亡则释放其槽位而非空着完成。十、输出格式规范转发gbrain waiting时按对方呈现、最紧急在前## 对方 (N 个开放) - [loop_type] 欠什么 (年龄) — 到期日 如有 证据引用 Gmail 深层链接受信任本地的--json结果已携带此格式的text字段可直接粘贴——优先转发它而不是重新渲染。设置命令则逐字转发[SHOW USER]块、失败时转发error.problemerror.fix永远不要把原始 JSON 信封扔给用户。十一、反模式清单改写[SHOW USER]块。清单携带承重细节“Desktop app绝不是 Web application”、测试用户步骤。逐字转发每块一条消息。向用户索要 client_id/client_secret 聊天文本。把下载的 JSON 作为 0600 文件接收--client-json path或环境变量argv/聊天中的机密是最后手段绝不是默认。用query/search回答“谁在等我”。开放循环记录在open_loops/gbrain waiting——搜索结果没有循环状态语义会欢快地浮出已回复的线程。默默用--stale-ok绕过过期拒绝。先运行点名的gbrain sync --source id只有用户明确接受可能过时的循环时才传--stale-ok。替用户标记循环完成。只有在用户说已处理后关闭gbrain loops done id线程循环在下次同步看到 Gmail 中的回复时会自动自关闭。十二、凭据的保管、隐私与转移令牌仅本地保险库0600原子写入。sources.config只存账户指针从不存机密。gbrain creds list始终脱敏。断开gbrain google disconnect email移除本地令牌Google 侧在 https://myaccount.google.com/permissions 撤销。升级/迁移gbrain creds export生成口令加密包Testing 模式同意屏幕随行时会发出响亮的逐凭据警告——那些令牌在目标上 7 天内死亡。LLM 支出如上节所述loops.extraction_enabled是总开关。延伸阅读google-loops 技能定义本文主体的原始来源含触发词与工具面docs/guides/google-connect.md完整设置 错误目录docs/guides/open-loops.md检测原理、关闭语义、排名循环检测源码确定性状态机承诺提取源码LLM 提取器与资格门循环 CLI 源码waiting/loops全部子命令设置编排源码一键 setup 的状态机检测器测试误报类别夹具语料【免费下载链接】gbrainGarrys Opinionated OpenClaw/Hermes Agent Brain项目地址: https://gitcode.com/gh_mirrors/gb/gbrain创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考