Dev Flow 威胁模型

September 4, 2026 · View on GitHub

中文 | English

最重要的边界

Dev Flow 保护的是开发任务的过程状态,不是包裹编程 Agent 的安全沙箱。

Codex 或 DeepSeek Harness 仍然使用开发者授予的权限读取仓库、修改文件和运行命令;Go Core 负责 保存权威 Task 状态,并校验流转、仓库绑定、持久化和 Recovery 决策。

flowchart LR
    U[开发者] --> H[Codex 或 DeepSeek]
    H --> R[已授权仓库]
    H --> A[Dev Flow Adapter]
    A --> C[本地 Go Core]
    C --> S[SQLite Task 状态]

需要保护什么

  • 开发者声明的一个至八个 Git 仓库;
  • Task 原始意图、当前阶段、revision、Action、证据、Blocker、Outcome,以及可恢复 Action 操作的 规范化 payload 与 digest;
  • Repository Scope、仓库身份与 aggregate binding;
  • WorkspaceOrigin、工作树实例身份、固定 base commit、当前 Task surface;
  • 本地 SQLite、安装 receipt、provisioning receipt、relocation record 与用户配置;
  • npm package、bundled Core、Git Tag、GitHub Release 与 artifact digest;
  • 日志和验证证据中可能出现的路径、代码片段和诊断信息。

谁负责什么

参与者责任
开发者选择是否进入 Dev Flow;确认 remote/base/target、仓库和 Host 权限、理解结论、handoff、清理与发布操作
Codex / DeepSeek Harness真正读取文件、修改仓库和运行命令,是高权限执行面
Host Adapter只读评估请求;在确认后执行 fetch、branch、worktree、relaunch/handoff;在命令、完整套件、测试文件修改和复核前判断范围;按 Action、Scope、当前验证计划和 Recovery 调用 Core
Go Core只读观察 Git,保存唯一流程状态,计算 Task surface,并校验 revision、workspace、闭合 payload、流转和持久化
仓库内容视为不可信输入,可能包含 prompt injection、危险脚本、symlink 或恶意文件名
npm / GitHub提供远程 package 和 Release 身份,发布流程必须回读核对

主要风险与现有防护

本机 WebUI 只监听 tcp4 127.0.0.1 并要求精确 Host;mutation 还验证精确 Origin、进程内随机 session 值与当前 Task revision。macOS receipt 是 mode 0600 的普通非链接文件;Windows receipt 是位于用户 profile 下、继承该目录 ACL 的普通非链接文件。两者都绑定进程启动身份、data-root digest、URL 和实时 Core identity,避免错误复用或 PID 重用;Windows 从内核进程信息读取创建时间。统一管理器的 factory-reset 计划绑定当前 ownership target;可恢复清理移动精确目标,永久 清理还要求独立确认。身份或目标变化会停止清理。

风险当前防护
小请求被流程接管,或确认前产生 Task/Git 写入新请求先做只读评估并停止;assessment 绑定 request、root、HEAD 和 status;显式 selector 也不能跳过选择
远端基线、目标分支或源 checkout 内容进入错误工作树逐仓确认 remote/base/target;精确 fetch 并冻结 commit;验证 branch、HEAD、common/git-dir 与 clean;不复制源 checkout dirty 内容
provisioning 或 Host dispatch 结果不确定而被重复执行窄 provisioning receipt 绑定一次 launch 与资源;不确定时读取 receipt/Host 状态,不盲目重试或 force cleanup
路径穿越、symlink 或索引结果扩大仓库范围Task 创建时规范化并冻结 Scope;多仓库路径显式带 repository key;索引不能增加成员
旧 Action、重复请求或丢失响应造成重复状态变化完整 mutation 先校验后暂存;独立 Action 操作记录、revision CAS、Action/request identity、repository binding、原子 applied marker 和 read-before-retry
工作树被替换、历史回退或任一成员发生冲突worktree-specific Git dir、task branch、base、HEAD ancestry 与 content 分别核对;resume 和下一 Action 在实际工作前返回明确 Blocker 或 unavailable
Host 自报文件范围遗漏真实变化Core 从 base commit、commits、index、worktree 和 untracked 状态计算当前 surface;节点 payload 不接受 Host 文件变化声明
relocation 失败或响应丢失造成双重 claim/handoffCore prepare 保留源 claim;Host handoff 只执行一次;目标核验后在一个事务中替换 bindings 和 claims
仓库中的 prompt injection 诱导扩大工作TaskIntent、allowed effects、显式 Scope、TASKS 验证计划和带原因的预算调整独立于仓库文本;Host 只复核当前 diff 与因果影响;高风险 Git/发布仍需用户授权
预算充足被误当成完整测试理由Skill 要求每次重新判断广泛影响、定向检查是否足够、待补风险和仓库检查点;Evidence 保存本次 full_suite_reason
SQLite、配置或 executable 被本地进程篡改strict codec、Schema 检查、Task/Action-operation 关联检查、closed fields 与 package/executable identity 验证
安装或移除误删相邻配置和 Task 数据ownership receipt;remove 只清理自己管理的注册;普通卸载保留 Task 数据
beta、源码和稳定支持被混为一谈稳定声明只来自 Support Matrix;beta 与 source 在 Project Status 中单独标记
日志或旅程证据泄露隐私提交的 evidence 只保留有界机器事实与 digest;raw transcript 默认不提交

剩余风险

  • Core 不拦截 Host 的每一次文件读取、写入或 shell 命令;被攻陷的 Host 或错误授权仍可造成损害。
  • worktree 隔离只定义源码修改归属,不隔离进程、网络、凭据、端口、数据库或容器。
  • fetch、branch、worktree、handoff 与 cleanup 是 Host 高权限操作;receipt 只缩小可恢复范围,不消除错误授权风险。
  • 具有同一用户权限或管理员权限的攻击者可以替换本地 binary、SQLite 或配置。
  • 当前没有加密状态库、多用户隔离、远程认证、自动 secret scanning、代码签名或透明度日志。
  • Dev Flow 不能保证模型输出正确、代码无漏洞、测试充分或完全免疫 prompt injection。
  • Core 无法判断自然语言理由是否真的与改动相关;Host 对验证和复核范围的语义判断仍可能出错。
  • 不受支持的平台、Host 版本和 source-only build 没有稳定安全支持声明。

安全问题请按仓库根目录的 Security Policy 私密报告。