synthesis-message-guard 是一个面向代理(agent)代写通讯场景的发送前强制校验层,其设计思路类似 git 提交钩子:规则以代码形式存在于模型之外,在发送动作发生前机械执行,任何异常都默认阻断。当前版本 1.3.0(2026-09-01),历史版本 1.1.0 与 1.2.0 分别引入或增强了头信息卫生检查等功能。
用途与动机 技能针对代理在起草和发送消息时反复出现的规则失效问题:代理上下文中已加载相关规则,仍在未读完整线程的情况下回复、使用被明令禁止的语体模式。失败属于「写作时规则知识未被执行」,而非知识缺失。修复方式是结构化:在完成研究、自检并登记台账之前,使发送在机制上不可能发生。
主要能力
- 发送前拦截:PreToolUse 钩子匹配所有 MCP 服务器中按名称模式识别的发送/起草工具族。
- 确定性扫描:对出站文本执行配置中的阻断与警告正则扫描。
- 台账校验:要求台账存在、新鲜(默认 45 分钟内)、message_sha256 与最终文本完全一致、声明字段完整;通过后记录并消费台账(一次性,不跨消息复用)。
- 头信息卫生检查(1.2.0 起):检查 in_reply_to、references 等 RFC 线程头,阻断 Message-ID 被 HTML 转义或尖括号不平衡的发送,避免回复在严格 RFC 客户端中孤立。
- 同行会话发送解析(配置启用):对代理间会话消息,要求目标 session id 出现在协调板的活跃会话引用中,否则阻断并提示使用 coordination.py resolve 或消息总线。
- 时效性声明新鲜度(配置启用,v1.5.0):匹配「仍未回复」「未发送」等关于当下的声明,要求 claims[] 携带 read_at(ISO-8601,本次运行读取源的时间),缺失或超过最大年龄即阻断。
- 医生与测试:--doctor 检查配置、阳性对照、各已安装客户端接线(Claude Code、Codex)及状态目录;--test 提供 31 个用例的行为套件。
使用方式 引擎为 scripts/message_guard.py,仅依赖 Python 标准库。常用模式: message_guard.py --gate # 钩子模式(stdin 为工具调用 JSON) message_guard.py --scan < draft # 预检措辞,命中阻断则退出码 2 message_guard.py --sha < draft # 计算台账所需的 sha256 message_guard.py --ledger-template # 输出台账骨架 message_guard.py --write-ledger # stdin 读台账 JSON,按自身 sha 归档 message_guard.py --ledger-path < draft # 显示该文本台账应放位置 message_guard.py --doctor # 检查配置、对照、客户端接线、状态目录 message_guard.py --test # 行为测试套件 配置位于 ~/.synthesis/message-guard/patterns.json(私有、按人),含阻断/警告正则、受控工具模式、豁免项、新鲜度窗口;引擎在无配置时拒绝运行。可从 patterns.example.json 起步,或运行 synthesis-onboarding init;两条路径在接线前均经过校验。台账位于 ~/.synthesis/message-guard/ledger/<message-sha256>.json,按 sha 键控,支持多席位并发写作;通过的发送连同完整台账追加到 log.jsonl 供审计。接线方面,需在 Claude Code 的 ~/.claude/settings.json 与 Codex 的 ~/.codex/hooks.json 中添加等效 PreToolUse 条目,医生要求每个已安装客户端都携带守卫。
台账契约(引擎强制字段) created_at:ISO-8601,超出新鲜窗口即阻断;message_sha256:必须等于出站文本的 sha256;is_reply:布尔;thread_fully_read.source_ids:回复时非空,列出本次实际获取的消息 ID/ts;history_searched[]:回复时非空,含 query、where、results;claims[]:每条事实声明对应来源,或设 no_factual_claims: true;voice_rules_pass:加载语音技能后显式为 true;invented_precision_scan:显式为 true,文本中每个数字都有来源;recipient_address_check:显式为 true;ragbot_branding_check:以代理身份直接发送时须为 true。
适用场景 适合对代理起草的邮件、消息、草稿进行发送前合规管控;适合需要多席位并发起草并保持审计链的团队;适合把「先读完整线程、检索历史、逐条溯源」变成可审计流程的场景。配置启用后也覆盖代理间会话消息与时效性声明。
限制 判断类失败(语气问题、策略性错误建议、范围微妙的法务表述)不会触发正则;Bash 原始 shell 发送不经钩子(规则禁止此类路径);钩子配置在会话启动时加载,新接线的会话受保护,接线所在会话需自我约束;时效性声明和同行发送解析需显式配置启用,未启用时保持旧姿态。