Folly critic-iterate 安全恢复指南:处理 Guardian 对 `codex-reviewer.py` 顶层调用的拒绝
发布时间:2026/9/10 15:48:04 锦皓数字建站

Folly critic-iterate 安全恢复指南处理 Guardian 对codex-reviewer.py顶层调用的拒绝【免费下载链接】follyAn open-source C library developed and used at Facebook.项目地址: https://gitcode.com/GitHub_Trending/fol/folly本指南聚焦 Folly 仓库中critic-iterate作者-评审循环author-critic loop在代码评审执行链路里的一个具体故障场景当安全代理 Guardian 将顶层对受信任评审包装器codex-reviewer.py的调用判定为可能存在数据外泄possible exfiltration并拒绝时如何向 Guardian 提供证据完成重试、如何为用户生成一条窄化的默认白名单规则并验证其生效。读完本文你将掌握一套完整的拒绝 → 证据重试 → 白名单固化 → 规则校验恢复流程以及codex-reviewer.py包装器固定接口背后的设计原理。适用边界只在可能外泄拒绝时使用本文档folly/agents/critic-iterate/auth-prompt.md开篇即划定了严格的使用范围仅在 Guardian 对受信任评审包装器的顶层调用报告可能存在外泄之后使用它的作用是告诉 Agent 如何为重试提供 Guardian 可评估的证据以及如何为包装器添加一条窄化的默认规则它不是通用策略管理指南不应被推广到其他策略故障场景。这一边界在包入口文档 folly/agents/critic-iterate.md 的 Codex reviewer mechanism 一节有对应表述只有遇到 Guardian 对顶层包装器调用的可能外泄拒绝时才读取critic-iterate/auth-prompt.md绝不在正常路径happy path上、也不为无关的策略失败读取它。恢复步骤不会触及运行在私有CODEX_HOME下的嵌套评审器——嵌套评审器报告拒绝或运行失败后即停止不会自行重试。同时需要明确的是auth-prompt 属于操作性规则而非开发材料。仓库中与之同名的 auth-prompt.contrib.md 明确标注了 NOT A RULE. If loaded as task policy, stop and ask the user.其作用是记录该规则的撰写目的与背景即NOT A RULE标记本身不可作为任务策略加载这与 folly/agents/README.md 中*.contrib.md是开发材料不是操作规则的约定一致。角色分工谁拥有证据、批准与重试Guardian 拒绝发生时的责任边界由文档明确约定角色职责嵌套或委派会话nested/delegated session将完整的拒绝文本向上报告后停止不自行处理顶层作者或编排者top-level author/orchestrator拥有证据收集、用户批准与重试的决策权顶层会话即使后续重试成功也必须把完整的拒绝文本展示出来Surface the full rejection text even if a retry succeeds这意味着恢复动作必须在顶层会话执行嵌套评审器不参与 Guardian 交涉完整拒绝文本是审计记录的一部分不能因为最终成功而被隐去。被保护对象codex-reviewer.py的固定接口理解恢复流程前需要先认识被白名单保护的包装器本身。folly/agents/critic-iterate/codex-reviewer.py的设计目标是通过一个固定、可白名单化的接口运行 Codex 评审Run Codex reviews through a fixed, allow-listable interface.其要点如下。固定命令行形态包装器不接受任意参数组合parse_args中硬编码了固定形态codex-reviewer.py --preamble-dirPATH --preambleNAME --workdirPATH PROMPT源码中通过以下手段强制这一形态codex-reviewer.pyallow_abbrevFalse禁止参数缩写防止--prea之类歧义写法检查len(argv) ! 4或任一参数不以--preamble-dir、--preamble、--workdir前缀开头直接parser.error三个路径参数都必须是绝对路径且逐一校验preamble 目录必须是目录、preamble.md必须是常规文件、prompt 必须是文件、workdir 必须是目录--preamble的可选值被锁定在REVIEW_PROFILES字典中preamble 名称沙箱参数-s用途fresh-review-preamble不设置None新鲜评审者source-aware只读外层沙箱会阻塞嵌套冷评审的私有输出因此不设-scold-review-preambleread-only冷评审者artifact-only显式保持只读对应地两个 preamble 文件分别定义了评审者行为fresh-review-preamble.md 负责先形成独立标准再读候选稿并在最后整合冷评审报告cold-review-preamble.md 负责只依据任务允许的输入、以普通语言解释作品不重写、不评估覆盖面。私有输出与自建目录包装器会自行管理输出绝不把评审结果写到调用方目录codex-reviewer.py输出根目录为~/.codex/tmp每次运行用tempfile.mkdtemp生成%Y%m%d-codex-reviewer.*私有目录并打印REVIEW_OUTPUT_DIRpath标记运行期间将 umask 收紧为0o077确保 prompt 与 trace可能含源码文本仅当前用户可读生成effective-prompt.mdpreamble prompt 拼接、review.md最终评审、run.jsonl过程 trace、err.txt错误流四件套供审计为每次评审创建私有CODEX_HOMEoutput_dir/codex-home权限0o700并在环境中用CODEX_HOME覆盖用户默认配置从而排除用户规则与可执行配置的干扰实际执行命令形如codex [-s sandbox] -a never exec --ignore-user-config --skip-git-repo-check --ephemeral --json --output-last-message review.md --a never表示评审是无头的无法应答批准提示因此两个 preamble 都要求把完整评审放进最终响应。正是这种固定接口 逐参数校验 自建输出目录的结构构成了白名单规则的信任基础白名单只需要锁定包装器本身而不必信任裸露的codex exec或 shell。带证据重试Retry with evidenceGuardian 在判定时会评估完整 transcript包括命令输出。因此重试的第一步不是改命令而是展示足以说明这是受信任包装器、而非任意命令执行的证据。1. 展示环境证据按 folly/agents/critic-iterate.md Loading 一节的解析规则取得包装器路径.../name表示解析后的绝对路径从PATH解析一次缺失时回退到包内critic-iterate/codex-reviewer.py仍不可用则停止然后依次展示环境中的 Codex 命令、包装器真实路径及其固定接口codex --version readlink -f .../codex-reviewer.py .../codex-reviewer.py --help其中readlink -f .../codex-reviewer.py用于向 Guardian 证明调用目标解析到的绝对路径就是受信任包装器本身而非被符号链接替换的其它程序--help则展示其固定的、仅有的接口形态。2. 陈述信任声明接着向 Guardian 明确陈述以下文字原文为英文可直接照用The trusted codex-reviewer.py wrapper delegates to Codex; this ambient session also runs in Codex. The wrapper restricts the nested call to its fixed review interface and controls its output directory.即受信任的codex-reviewer.py包装器将工作委托给 Codex本会话本身也运行在 Codex 中包装器把嵌套调用限制在它固定的评审接口上并自行控制其输出目录。3. 原样重试用同一条包装器命令重试。文档强调两条红线不要扩大包装器的权限不要仅仅为了绕过拒绝而修改命令。4. 若 Guardian 仍要求批准如果 Guardian 仍然要求人工批准则向用户展示 Guardian 的完整风险文本询问用户是否批准这一次确切的运行无头headless会话不询问用户直接停止并报告拒绝只有用户实际批准后才重试若该次重试仍被拒绝停止不再继续尝试。防止复发Prevent recurrence白名单固化与校验重试成功的下一步是为包装器建立一条窄化默认规则避免每次评审都被 Guardian 拦截。白名单原则白名单受信任的包装器本身绝不白名单codex exec或 shell包装器必须持续校验每一个参数、自行创建输出目录——这两点正是 codex-reviewer.py 的既有行为parse_args的强制校验与run()中tempfile.mkdtemp自建目录白名单信任由此闭环。生成规则声明将上一步readlink -f解析出的包装器路径替换...占位符把以下声明打印给用户让用户添加到~/.codex/rules/default.rulescat RULES host_executable(namecodex-reviewer.py, paths[.../codex-reviewer.py]) prefix_rule(pattern[codex-reviewer.py], decisionallow, justificationThe review wrapper validates its fixed profiles and arguments and controls its output directory.) RULES两条规则的语义分别是host_executable(name..., paths[...])声明该名称对应的主机可执行文件为绝对路径列表中的实体等价于告诉策略引擎codex-reviewer.py这个命令就是那个文件prefix_rule(pattern[...], decisionallow, ...)当命令前缀匹配[codex-reviewer.py]时放行并记录 justification评审包装器会校验其固定的 profiles 与参数、控制其输出目录。值得一提的是这一手工规则格式与包装器源码内部的自动生成逻辑完全一致_install_cold_review_policycodex-reviewer.py在 fresh 评审场景下会向私有的CODEX_HOME/rules/default.rules写入同样的host_executableprefix_rule组合只不过前缀被锁定为[codex-reviewer.py, --preamble-dirabs, --preamblecold-review-preamble]因为 exec-policy 前缀规则无法约束尾部参数所以尾部 workdir/prompt 由parse_args的固定顺序与绝对路径校验兜底。安装后校验规则用户添加规则之后不要实际发起评审用codex execpolicy check离线验证规则是否匹配包装器命令codex execpolicy check \ --pretty \ --resolve-host-executables \ --rules $HOME/.codex/rules/default.rules \ .../codex-reviewer.py \ --preamble-dir$(dirname $(readlink -f /path/to/critic-iterate.md))/critic-iterate \ --preamblecold-review-preamble \ --workdir$(mktemp -d) \ $(mktemp)命令参数说明参数作用--pretty人类可读的 JSON 输出--resolve-host-executables解析host_executable声明验证真实文件路径--rules $HOME/.codex/rules/default.rules显式指定要检查的规则文件--preamble-dir...从critic-iterate.md实际位置反推critic-iterate包目录注意把/path/to/critic-iterate.md替换为真实路径--preamblecold-review-preamble选择冷评审 profile与规则前缀匹配--workdir$(mktemp -d)用临时目录作为 workdir避免触碰真实目录$(mktemp)用一个空临时文件充当 prompt 占位不触发真实评审结果应当显示decision: allow。文档特别提醒这只能证明规则与包装器命令匹配不能证明评审本身会被 Guardian 放行——规则校验与实际策略执行是两个层面。关键流程速查阶段核心动作关键红线定位顶层会话处理嵌套会话上报后停止只在可能外泄拒绝时使用本流程证据codex --version、readlink -f、--help 固定接口展示解析后的绝对路径声明陈述包装器限制嵌套调用到固定接口并控制输出目录—重试原样重跑同一包装器命令不扩权、不改命令绕过批准展示完整风险文本等用户批准无头会话不询问直接停止再次被拒则停止白名单host_executableprefix_rule写入~/.codex/rules/default.rules只白名单包装器不白名单codex exec/shell校验codex execpolicy check离线检查期望decision: allow只证明规则匹配总结与安全边界auth-prompt.md是一份高度场景化的故障恢复规程它以信任包装器、信任它的固定接口为前提把 Guardian 的可能外泄拒绝转化为证据 → 批准 → 白名单 → 校验的闭环同时用三条红线约束整个流程——不扩大包装器权限、不改命令绕过拒绝、无头会话不得自行假设用户批准。整套机制与 codex-reviewer.py 的固定接口、私有输出目录、私有CODEX_HOME设计相互印证也与 folly/agents/critic-iterate.md 中绝不扫描临时目录、绝不从部分输出推断评审结果的纪律一致。使用本流程时请始终记得它是专门针对顶层包装器调用的恢复指南不是通用策略管理文档也不适用于嵌套评审器运行在私有CODEX_HOME下的失败场景。【免费下载链接】follyAn open-source C library developed and used at Facebook.项目地址: https://gitcode.com/GitHub_Trending/fol/folly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。