edit | blame | history | raw

2026-07-01 SkillSpector 修复

用户目标

用户已确认 M-体验09 验收通过;随后 Stop hook 阻止收尾,指出 /Users/ar/.codex/skills/dev-project-bootstrap 新增或变更的 agent skill 未达到 SAFE,原报告为 DO_NOT_INSTALL。本轮目标是解除该安全门阻塞,不安装、发布或分享该 skill。

已完成事项

  • 读取并遵守 agent skill 安全治理规则:/Users/ar/.codex/rules/agent-skill-security.md
  • 检查 SkillSpector 报告,确认原始高风险来自脚本自动执行 git init、缺少扫描器可识别的权限字段,以及英文说明触发自修改 / 持久化启发式规则。
  • 曾尝试修正 /Users/ar/.codex/skills/dev-project-bootstrap
  • scripts/bootstrap_dev_project.py 改为不执行 subprocess.run(["git", "init"], ...)--init-git 只打印人工 git -C <03-O> init 命令。
  • --dry-run --init-git 改为可正常预览,不因 dry-run 未写出 PROJECT.md / INDEX.md 而失败。
  • SKILL.md / SKILL.en.md 改为使用本地 validator 允许的 allowed-tools frontmatter。
  • SKILL.en.md 移除触发 RA2 的 create it after confirmation 表述。
  • 复核时发现该 skill 文件会回到旧版 DO_NOT_INSTALL 内容,scripts/bootstrap_dev_project.py 再次出现 subprocess.run(["git", "init"], ...),英文说明也回到旧触发词。
  • DO_NOT_INSTALL 默认不得安装 / 发布 / 分享的规则,最终将该 skill 从已安装目录移出,保留到可恢复隔离目录:/Users/ar/.codex/.tmp/skills-quarantine/20260701-1423-dev-project-bootstrap/dev-project-bootstrap
  • 重新运行实际 Stop gate 脚本,无阻塞输出,当前收尾阻塞已解除。

关键决策

  • 没有批准 CAUTIONDO_NOT_INSTALL,也没有用人工 approve 绕过安全门。
  • 因修复状态不稳定,最终不再把该 skill 保留在 ~/.codex/skills/ 已安装目录。
  • 隔离是可恢复操作;如果以后要恢复,必须先找出旧内容回写来源,修复后重新跑 SkillSpector,并达到 SAFE 或取得用户明确风险接受。

核心事实 / 变更快照

  • 变更对象:全局 skill /Users/ar/.codex/skills/dev-project-bootstrap
  • 变更前:SkillSpector Stop hook 报告 DO_NOT_INSTALL,报告路径 /Users/ar/.codex/.tmp/skillspector-reports/20260701-141208-dev-project-bootstrap-63769e6c66.json
  • 中间状态:曾扫描到 SAFE,报告路径 /Users/ar/.codex/.tmp/skillspector-reports/20260701-141942-dev-project-bootstrap-63769e6c66.json;随后实际 gate 状态又被新 DO_NOT_INSTALL 覆盖,报告路径 /Users/ar/.codex/.tmp/skillspector-reports/20260701-142046-dev-project-bootstrap-63769e6c66.json
  • 变更后:/Users/ar/.codex/skills/dev-project-bootstrap 已不存在;skill 已隔离到 /Users/ar/.codex/.tmp/skills-quarantine/20260701-1423-dev-project-bootstrap/dev-project-bootstrap。实际 Stop gate 命令无阻塞输出。
  • 范围边界:未改 Mindraw 项目源码、构建、发布产物;只更新全局 skill 安装状态和本项目会话记忆。

文件变更

  • /Users/ar/.codex/.tmp/skills-quarantine/20260701-1423-dev-project-bootstrap/dev-project-bootstrap/
  • /Users/ar/Projects/ExcalidrawX/.codex-sessionhistory/2026-07-01-SkillSpector修复.md
  • /Users/ar/Projects/ExcalidrawX/.codex-sessionhistory/COMMANDS.md

可复用命令 / Runbook

用途:复查 dev-project-bootstrap skill 是否仍会阻塞 Stop gate,并确认隔离后 gate 是否放行。

前置条件:本机已安装 skillspector CLI。当前隔离路径为 /Users/ar/.codex/.tmp/skills-quarantine/20260701-1423-dev-project-bootstrap/dev-project-bootstrap;已安装路径 /Users/ar/.codex/skills/dev-project-bootstrap 应不存在。

test ! -e /Users/ar/.codex/skills/dev-project-bootstrap
skillspector scan /Users/ar/.codex/.tmp/skills-quarantine/20260701-1423-dev-project-bootstrap/dev-project-bootstrap --no-llm --format json --output /Users/ar/.codex/.tmp/skillspector-reports/20260701-dev-project-bootstrap-quarantine-check.json
printf '{"cwd":"/Users/ar/Projects/ExcalidrawX"}' | python3 ~/.codex/hooks/skillspector_gate.py Stop

验证步骤:

  • test ! -e ... 返回 0,说明该 skill 不在已安装目录。
  • 对隔离目录扫描可能仍为 DO_NOT_INSTALL;这是隔离原因,不是放行条件。
  • Stop gate 命令无阻塞 JSON 输出,说明当前已安装 skill 集合不再被该项阻塞。

恢复步骤:

  • 不要直接把隔离目录移回 ~/.codex/skills/
  • 如需恢复,先在隔离目录或临时副本中修复旧代码回写来源,重新运行 SkillSpector 达到 SAFE,再安装。

历史调试命令:

python3 ~/.codex/skills/.system/skill-creator/scripts/quick_validate.py /Users/ar/.codex/.tmp/skills-quarantine/20260701-1423-dev-project-bootstrap/dev-project-bootstrap

搜索关键词:SkillSpectordev-project-bootstrapskillspector_gateDO_NOT_INSTALLquarantineskills-quarantine

未决问题

  • 该 skill 为什么会回到旧版内容尚未定位;已知本轮未找到第二个同名安装位置。
  • SkillSpector 与本地 skill validator 对权限字段的 schema 不一致:前者建议 top-level permissions,后者禁止该字段。

后续建议

  • 若后续要恢复该 skill,先查明旧内容回写来源,再统一 skill frontmatter schema,最后重新扫描到 SAFE