把派发约束从提示词移到工具层。
ENFORCEMENT AT THE TOOL SEAM, NOT THE PROMPT
QwenPaw 中间件插件。多 agent 宿主里的默认 agent 常常自己动手写交付物,提示词中的派单规则压不住它。dispatch-guard 在工具缝拦截交付物形状的写入并拒绝,拒绝消息里写明该派给哪个 agent。实现为纯标准库,无 pip 依赖。
orchestrator ──► write_file(deliverable.md) │ ▼ dispatch-guard · 交付物形状? YES ── 归属专家存在? YES │ ▼ DENIED · 写入从未落盘 · 回复:「派给 @Specialist-Agent」
write 调用被中间件拦下:命中交付物形状且环境中存在归属专家 agent 时拒绝写入,返回派单提示。无归属者不拦。
spawn_subagent 与 spawn_agent 在 enforce、warn、unconfigured 三种模式下都拒绝,作为配置层禁用之外的兜底。
重定向、tee、dd of=、curl -o、打包与编译器 -o、sed -i、cp/mv 目标都计为一次写。默认只警告,开 shell_enforce 才拦截。
routes.json 按 mtime 热加载,并自审矛盾规则、死规则、未知 mode。无配置时从各 agent 声明的派发策略草拟 warn 模式的 routes.draft.json,改名后生效。
jev 层默认关,只补确定性规则判不出的两处:草拟路由的 P0 与关键词路由指不到在册 owner 的 P1。p ≥ 0.85 才在 enforce 下 deny 并点名 owner,0.6 到 0.85 转 warn。
每次拦截追加进 logs/dispatch_guard.jsonl,超 1 MB 滚动。spawn 入参只记 sha256 前 16 位、长度与脱敏摘要,原始命令不进日志。
判定端点与总开关继承 jev-kernel 插件的 jev.json。kernel 停止时该层同时停止。