Skip to content

Latest commit

 

History

History
302 lines (221 loc) · 16.9 KB

File metadata and controls

302 lines (221 loc) · 16.9 KB

onboard-code-projects

English | 简体中文

Windows tests License: MIT 状态:预览版

开源仓库:libaie/onboard-code-projects

一个让每个仓库都待在自己专属项目任务里的 Codex 技能——再配一个中控,把跨项目工作统一指挥起来。

AI 写代码最怕的不是模型不够聪明,而是上下文串了:A 仓库的指令混进 B 仓库的代码,切错分支,或者写进了不该写的地方。onboard-code-projects 给每个仓库一个经过核验、可复用的项目绑定任务和一份 codebase-memory 索引,再加一个可选中控:按任务难度与风险把派发自动分配到 economybalancedfrontier 模型等级,复用有证据支撑的成功经验,同时拒绝已知的确定性失败。

  • 适用于: 工作横跨两个及以上仓库。
  • 你会得到: 绑定到精确根目录、经过核验的项目入口任务,每个仓库对应一个 codebase-memory 索引,以及负责跨项目协作和模型分层的可选中控。
  • 它不会: 创建或保存 Codex 项目,也不会代替用户授权或批准权限。
  • 它不是: 安全沙箱,也不会部署软件。

状态:预览版。 当前支持的发布面是 Windows 和 Codex Desktop,其他平台尚未完成发布级端到端验证。

它解决什么痛点

痛点 Skill 的处理方式
😵 上下文污染 每个精确项目根目录、项目指令、证据和修改都留在独立且可复用的任务中。
🔀 仓库与基线漂移 执行前核验已保存项目、根目录、分支、HEAD、工作区和索引。
🗂️ 任务膨胀 普通工作与同范围返工复用同一个项目入口任务。
💸 模型与任务不匹配 有界常规任务使用 economy,普通单项目工程使用 balanced,跨项目契约、高风险正确性、架构重新基线或根因仍不明确的任务使用 frontier;派发时仅解析当前可用的具体模型。
📡 完成状态丢失 支持前台监控;插件能力满足时,还可使用耐久结果回传。
🧠 中控记忆膨胀 对长期跨项目工作使用有界记忆,不把不断增长的任务台账全部加载进会话。

适用于一个功能、故障或发布涉及两个以上仓库,并且各仓库有不同项目指令、分支规则、测试命令或写权限边界的场景。普通单仓库工作直接使用该仓库的项目任务即可。

选择合适的上下文边界

方式 上下文与生命周期 适合场景
单一长会话 多个仓库共享一个持续增长的上下文。 仓库规则没有差异的快速、低风险检查。
Subagent 当前任务内的短期并行工作。 不需要复用项目身份的独立子任务。
本 Skill 每个仓库使用一个绑定精确根目录、可复用的入口任务;可选中控只保留跨项目信息。 横跨多个仓库的功能、故障和发布。

项目入口任务内部仍可使用 subagent,两者可以配合使用。

你会得到什么

  • ✅ 每个 source:一个已核验的保存项目绑定、一个可复用的本地入口任务和一个 codebase-memory 索引。
  • ✅ 可选:位于所有业务仓库之外的中控目录和中控任务,包含逐项目队列以及按任务难度与风险进行的模型分层。
  • ✅ 可选:耐久结果回传需要插件 Stop Hook 与 Node.js;自动唤醒还需要额外的规则、worker 和自动化能力。

Skill 不能创建 Codex 已保存项目。用户需先在 Codex Desktop 中添加每个精确目录,Skill 再核验并使用该身份。

核心流程

1. 接入或复用每个仓库

flowchart TD
    O1["本地路径或 Git URL"] --> O2["加载或确认已保存的索引模式,再解析输入并执行只读依赖预检"]
    O2 --> O3{"source 类型?"}
    O3 -->|本地目录| O7{"当前主机上是否存在唯一精确的已保存项目?"}
    O3 -->|Git URL| O4["只克隆到 cloneRoot 的新子目录"]
    O4 --> O5["返回 needs-project-add"]
    O5 --> O6["用户保存精确克隆目录后重跑"]
    O6 --> O7
    O7 -->|不存在或有歧义| O8["阻断并返回明确的下一步"]
    O7 -->|是| O9["读取 AGENTS,核验根目录、分支、HEAD 和脏工作区"]
    O9 --> O10["创建或复用一个项目绑定入口任务"]
    O10 --> O11["按所选模式建立或刷新 codebase-memory 索引"]
    O11 --> O12["核验索引根目录与版本"]
    O12 --> O13["仓库通道就绪,可直接工作"]
    O13 -.->|可选跨项目工作| O14["核验或初始化仓库外中控,并登记该入口"]
    O14 -.->|中控不可用或创建结果未知| O15["保持已就绪仓库;报告待登记状态,或根据权威证据恢复且不重试"]
Loading

Codex 已保存项目仍由用户管理。Skill 不创建 projectless 任务或 worktree;可选中控必须位于所有业务仓库之外。

2. 复用有证据支撑的经验并终止重试循环

flowchart TD
    E1["规范 goal 日志与绑定证据的人工导入"] --> E2["ExperienceRead 核验有界经验索引"]
    E2 --> E3["匹配问题、策略族和关键前提"]
    E3 --> E4{"此前已核验结果?"}
    E4 -->|已接受的成功| E5["复用已证明策略,并重新核验当前 readiness"]
    E4 -->|确定性失败:拒绝相同机制| E6["预留下一个允许的策略"]
    E4 -->|无匹配或已证明关键前提变化| E6
    E5 --> E7["执行、测试并收集本次证据"]
    E6 --> E7
    E7 --> E8{"评审结果?"}
    E8 -->|已接受的成功| E9["把可复用成功写入有界索引并关闭通道"]
    E8 -->|确定性失败| E10["把硬失败写入有界索引"]
    E8 -->|瞬态、环境阻断、被取代、取消或授权结果| E11["只记审计,不拉黑;取消或拒绝授权会终止当前通道"]
    E10 --> E12{"失败发生在哪次业务尝试?"}
    E11 -.->|符合条件的环境变化或策略取代| E12
    E12 -->|初始尝试| E13["执行一次完整修复"]
    E12 -->|修复尝试| E14["执行一次全目标重新基线"]
    E12 -->|重新基线| E15["convergence-failed:停止并等待用户决策"]
    E13 --> E2
    E14 --> E2
Loading

这是证据复用,不是自动学习。关键前提变化必须有直接规范证据;改任务名、新开会话或修改未经证明的哈希,都不能抹掉已知确定性失败。只有仓库零写入的 transport、tool-bootstrap 或 payload-parse 失败,才允许一次不消耗业务尝试的同 attempt 预检重放。

快速开始

1. 安装

在 Codex 中发送:

使用 $skill-installer 从 https://github.com/libaie/onboard-code-projects 安装,参数为 `--repo libaie/onboard-code-projects --path . --name onboard-code-projects`。报告安装后的 SKILL.md 路径,不要修改任何项目仓库。

如果 Codex 没有发现 Skill,请重启 Codex Desktop。使用时显式调用 $onboard-code-projects

2. 分别保存项目根目录

把每个仓库的精确绝对根目录分别添加为 Codex 项目。不要把包含多个仓库的父目录保存为一个项目。

3. 接入本地项目

使用 $onboard-code-projects。

sources:
- source: C:\work\service-a
- source: C:\work\web-app
indexMode: full

为每个精确的已保存项目创建或复用一个常驻本地入口任务,然后建立 full codebase-memory 索引。不要创建 worktree 或 projectless 任务。

首次使用时确认默认索引模式:fastmoderatefull。推荐 full;保存后的默认值仍可在单次调用中覆盖。

4. 只有跨项目工作才增加中控

在所有业务仓库之外创建一个空目录,并把它保存为 Codex 项目。然后运行:

使用 $onboard-code-projects。

sources:
- source: C:\work\service-a
- source: C:\work\web-app

controllerRoot: C:\work\multi-project-control
controllerName: Multi-Project Control Center
initializeController: true
createControllerTask: true
dispatchReturnMode: foreground

初始化中控,并登记这些项目入口任务。

没有插件 Stop Hook 时,native-callback 可用则优先使用;否则使用 foreground。只有从可信来源安装插件后,才选择 receiptsreceipts-and-wake

初始化后,直接用自然语言把跨项目问题交给中控:

全链路排查 H5 推广海报登录流程,涉及 H5、商城后端和会员服务。先只读排查,冻结共享接口契约,再把各仓库检查下发到已有项目入口,最后回传端到端证据。

亮点速览

  • 🔒 封闭输入解析 + 只读预检——凭据、不安全 ref、重复冲突在执行前就被拒绝;核验步骤不创建项目、任务、索引、中控文件或 Git 状态
  • 🎯 自适应模型分层——economy / balanced / frontier 三个等级只在派发时才解析为当前可用的具体模型
  • 🧾 哈希链中控状态——每次状态变更都经过测试过的适配器并做读后核验;派发台账哈希成链、按月归档
  • 🧠 有界经验复用——已证明的成功直接复用,确定性失败拒绝相同机制,瞬态失败绝不拉黑
  • 🧪 Windows PowerShell 5.1 上的确定性测试——预检、输入解析、中控引导、链式存储、任务组重置全部有自动化测试覆盖

刷新长期运行的中控任务

当中控及其项目入口任务需要使用新会话时,精确生成的 v3 支持可替换当前绑定的整组任务,并继承已核验的历史记录。请从被替换集合之外的独立 coordinator 任务触发;该任务最后归档。如果仍有工作未静默、无法完整读取任务历史,或中控属于自定义、旧版、已有状态存储的 v2,而不是精确生成的 v3,操作会安全阻断。

resetControllerTasks: true
Action: Plan
# 检查返回的 planHash,再使用相同请求发送:
Action: Apply
planHash: <返回的 planHash>

Plan 不会写入,只授权稳定的替换范围;用户查看 Plan 期间即使任务历史变化,也无需重新批准。Apply 只接受返回的精确哈希,先创建仅含唯一创建标记、不含业务交接的待命任务,再完整核验并冻结旧历史,发送最终有界脱敏交接后才激活新任务组。系统不删除任务;如执行中断,只继续同一操作。高级行为与恢复方式见中控运行时参考

重置还要求 Codex 任务 API 可用,且每个替换目标都是根目录唯一的精确已保存项目;根目录有歧义或无法回读任务 cwd 时会安全阻断。

Git URL 接入

Git source 使用封闭的逐项目对象:

使用 $onboard-code-projects。

sources:
- source: https://github.com/example/service-a.git
  cloneRoot: C:\work\repos
  ref: main
  fullLfsCheckout: false
indexMode: full

Skill 只克隆到 cloneRoot 的新子目录,随后返回 needs-project-add。把精确克隆目录保存为 Codex 项目,再使用相同请求重跑。只有根目录、不含凭据的 origin 以及请求的 branch 或 ref 均通过核验时,才会复用既有克隆。

能力边界

这是工作流隔离(workflow isolation),不是安全沙箱。它不会改变文件系统权限;人为在一个任务中混合多个仓库时,上下文污染仍会回来。

输入

字段 是否必需 含义
sources 一个或多个本地绝对目录,或不含凭据的 Git URL 对象。
sources[].source 本地绝对目录或 HTTPS/SSH Git URL。
sources[].cloneRoot 仅 Git 新克隆子目录的既有绝对父目录。
sources[].branch / sources[].ref 每个 source 最多指定一种 Git 身份。
sources[].fullLfsCheckout 是否获取完整 LFS 内容,默认 false
indexMode 本次使用 fastmoderatefull
controllerRoot 仅中控 位于所有业务仓库之外的目录。
controllerName 默认 Multi-Project Control Center
initializeController 授权初始化中控脚手架。
createControllerTask 授权创建中控任务。
resetControllerTasks 显式请求先安全 Plan,再替换当前中控任务组。
dispatchReturnMode foregroundnative-callbackreceiptsreceipts-and-wake

高级升级和恢复输入见中控运行时参考

环境要求与只读诊断

组件 使用场景
Codex Desktop 保存项目和项目绑定任务。
Windows PowerShell 5.1 当前支持的执行环境。
codebase-memory 所有项目接入都必需:仓库索引和代码图谱查询。
Git Git URL 和 Git 元数据。
OpenSSH 仅 SSH Git URL。
Git LFS fullLfsCheckout: true
Node.js 18+ 中控任务组重置、耐久 Stop 回执和自动唤醒。

以下 read-only 预检不会创建项目、任务、索引、中控文件或 Git 状态:

# Local 本地目录
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\preflight.ps1
# HTTPS Git URL
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\preflight.ps1 -RequireGit
# SSH Git URL
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\preflight.ps1 -RequireGit -RequireSsh
# 仅完整 LFS 检出时,在适用 Git 命令后追加 -RequireLfs。
# 中控任务组重置或耐久事件回传
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\preflight.ps1 -RequireNode

仅安装 Skill 时可使用项目隔离、索引、可选中控和前台监控。中控任务组重置需要 Node.js 18+。耐久回执需要插件 Stop Hook 与 Node.js;自动唤醒还需要 Skill 验证对应运行时能力。

权限与本地数据

在明确请求时,Skill 可以保存索引偏好、克隆到新子目录、创建项目绑定任务、刷新索引或初始化可选中控。仅请求项目接入时,它不会创建 Codex 已保存项目,也不会切换分支、提交、推送、部署、写数据库或运行项目构建。

操作系统或工具运行时批准属于实际发起调用的精确项目任务,中控不能代替批准;其他独立项目可以继续。

新任务推荐使用以下原生默认值:

approval_policy = "on-request"
sandbox_mode = "workspace-write"
approvals_reviewer = "auto_review"

未经明确授权,Skill 不会改写全局配置。已有任务可能保留任务级权限模式覆盖项,应在该任务中一次选择所需模式,而不是重新创建入口。自动评审不会扩大沙箱,也不会取消高风险操作和 Computer Use 确认。

可选插件只在派发匹配时,把相关路径和任务标识保存在本机;它不保存完整回复,随附运行时也不会发起网络请求。卸载 Skill 或插件不会删除既有本地中控状态。信任边界与漏洞报告方式见安全策略

常见问题

  • needs-project-add:在 Codex Desktop 保存报告的精确项目根,然后重跑相同请求。
  • needs-controller-project-add:把精确中控目录保存为 Codex 项目。
  • controller-thread-unknown:不要再次创建中控任务;检查已有任务后,按返回的 nextAction 恢复。
  • index-unavailable:恢复 codebase-memory,并核对精确根、分支和 HEAD。
  • 运行时批准:在对应项目任务中允许或拒绝,中控不能替代该决定。
  • safeToRerun=false:不要自动重试,使用返回的恢复动作。

已知限制

  • Codex 已保存项目仍需用户操作。
  • Windows 是唯一由确定性自动化测试覆盖的平台。
  • 真实 Codex Desktop 任务行为和 MCP 集成仍需通过发布检查清单中的门禁。
  • 工作流隔离不能强制操作系统权限,也不能阻止人为混合上下文。
  • 耐久自动结果回传依赖插件 Hook 和额外的已验证运行时能力。
  • 不含交互式 dashboard 或部署自动化。

文档


如果这个 Skill 帮你避免过一次上下文串库的事故,给个 Star ⭐,或者转给同样在多仓库之间挣扎的同事。反馈与 PR 永远欢迎。