/Applications/WorkBuddy.app 与 ~/.workbuddy 的实际产物。
Date.now()、权限规则特意澄清引文不构成授权——全是同一条主线。
for(;;)。L3 只是循环体里一个写死的步骤——把「每轮跑一次的函数」误认成骨架,是最容易犯的错。CODEBUDDY_CODE_MAX_TURNS),子 agent 下限 200。配置里的 requestMaxStepLimit=100 全产物零引用,是死配置。PreCompact / PostCompact——内置那个 priority=High 的摘要 hook,和用户自己写的 hook 走同一个调度器。| 组件 | 挂在 §1 哪层 | 挂载机制 | 生效时机 | 对上下文做了什么 |
|---|---|---|---|---|
| 记忆召回 | L1 | Interceptor | 每次 run | 把相关记忆追加到 input 末尾 |
| plugin runtime join | L1 | Interceptor | 每次 run | 合并插件提供的工具与提示 |
| 上下文压缩 | L3 | 写死(第 3 步)+ 派发 | 每轮 | 命中水位就把历史换成结构化摘要 |
| 死循环检测 | L3 | 写死(第 2 步) | 每轮 | 重复调用达阈值即打断 |
| system-reminder 注入 | L3 | 写死(第 5 步) | 每轮 | 动态提醒塞进用户消息尾部,不碰缓存前缀 |
| 权限裁决 | L2 | Hook · PreToolUse | 每次工具调用 | 允许 / 拒绝 / 转交模型判断 |
| 沙箱执行 | L2 | 写死 + OS 强制 | 每次工具执行 | 结果带 sandboxDenied 结构化字段回传 |
| 记忆抽取 | L2 | Hook · Stop | run 结束 | 派生子 agent 写记忆文件(默认关闭,见 §11.10) |
| 会话摘要 | L2 | Hook · PreCompact | 压缩前 | 更新 summaryService |
runWithoutHistory()。messages[] 有五件事做不到——这份协议的两个字段(id / parentId)+ 一组旁挂类型 + 一块 providerData 全补上了。getActiveHistory() 从 lastMessageId 回溯主链——删历史变成了挪指针。logicalParentId。7 次压缩 ↔ 7 条只带逻辑父的记录,id 与时间戳逐一对应。这棵树有两种边。
sandboxDenied 等ToolSearch 与 Skill 的描述里抠出来单列统计。系统提示是缓存前缀,不能被会变的东西污染。
promptCacheStability: volatile,序列化前剥离。orderToolsForPromptCache:稳定在前,volatile 排到尾部。cache_control 只打在最后一条系统消息的最后一块,且条件化。DeferExecuteTool 原文:The target tool's permission checks and hooks are applied normally. 延迟的只是 schema 的下发时机,权限裁决与 hook 照常执行。
-memory-extractor 子 agent 自动写。| 常见说法 | 对应实现 | 容量 | 腐坏 |
|---|---|---|---|
| 短期(工作记忆) | 上下文窗口:历史 + 压缩摘要 | 模型窗口 | 不会 |
| 长期 · 语义 | MEMORY.md + 独立 .md + 云端画像 | 1e4 / 4e3 字符 | 会 |
| 长期 · 情景 | YYYY-MM-DD.md 日志 + conversation_search | 30 天蒸馏 | 会 |
| 长期 · 程序 | Skill(程序性知识常驻磁盘) | 按需加载 | 会 |
memory.memoryExtraction 未配置,自动抽取此刻是关的,所有记忆都靠显式写。
npm install 写哪几个目录、git 钩子执行什么、脚本里有没有 curl。classifyTrace() 里一个硬编码 17 名的 Set,命中即返回 "auxiliary"。["</block>"] · 元 agent 多数 tools: []| Agent tool(委派) | Workflow tool(编排) | |
|---|---|---|
| 本质 | 一次调用 = 派生一个子 loop | 一次调用 = 提交一段 JS 脚本 |
| 控制流 | 仍由模型决定 | 由代码决定(for/while/if、fan-out 拓扑) |
| 递归 | 不受限(工具权限 *) | 嵌套仅一层;子 agent 禁止再派生 |
| 返回 | 模型最终文本 | runId 异步 + task-notification 回流 |
Date.now() / Math.random() 直接抛错(会破坏确定性)。for(;;),
外面套一次性 run 生命周期(L1),里面藏五个写死的准备步骤(L3);