关于 boring-new-app
面向维护者的技能,用于创建或接入由 Boring Factory 管理的应用仓库,并指导配置密钥、验证工作流及交接给专家。
主要功能
- 01从模板初始化应用
- 02接入现有仓库
- 03配置密钥和设置
- 04验证工作流与检查
- 05向专家交接
适用场景
- 01创建新的应用仓库
- 02将现有仓库接入 Factory
- 03排查设置和工作流故障
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hachej/ boring-stack --skill boring-new-app安装后在 Claude Code 中输入/boring-new-app确认已加载。
详细介绍
从头到尾设置新的应用仓库
你代表维护者(Factory 的所有者)行事。最终将得到一个仓库,专家的 Agent 可以在其中启动功能开发,之后由 Factory 接手完成后续工作。请自行完成每个步骤;只在下方所列的决策和需要对方使用浏览器的事项上询问对方。
0. 一次性向对方询问所有决策
- 仓库:
OWNER/NAME(新仓库)——或现有仓库(随后转到 §6)。 - 应用的标题。
- 运行时:
vm(你拥有的主机上的容器;Agent 在应用中运行),或cloudflare(带有 D1 的 Worker;其 Agent 以声明式方式定义,由 hub 运行,不含代码 Agent,也没有任务)。默认值为vm。 - 专家:对方的 GitHub 登录名。不能是 bot 的账户(GitHub 禁止批准自己的拉取请求,而 bot 会创建契约拉取请求)。
- Bot:其令牌为
FACTORY_TOKEN的账户(默认值:维护者)。
1. 前置条件(检查并修复可处理的问题)
gh auth status # signed in as the maintainer, scopes repo + workflow
gh auth setup-git # git (and npx github:…) use gh's credentials
gh api repos/hachej/boring-factory --jq .full_name # read access to the factory
gh api repos/hachej/boring-app --jq .is_template # the app template: must print true
gh api repos/hachej/boring-factory/actions/permissions/access --jq .access_level # must be "user"
如果访问级别不是 user,其他仓库就无法调用 Factory 的工作流:gh api -X PUT repos/hachej/boring-factory/actions/permissions/access -f access_level=user。
请对方确认一次(无法通过令牌检查):
- 已安装 Claude GitHub App,且有权访问所有仓库 (https://github.com/apps/claude)——否则请将其安装到新仓库;
- 对于 Cursor workers:Cursor 的 GitHub 集成可以访问该仓库,并且已启用按需用量(https://cursor.com/dashboard)。
2. 三个机密
绝不要打印机密;请通过管道将其传给 gh secret set。
| 机密 | 来源 |
|---|---|
FACTORY_TOKEN | Bot 的令牌。当 bot 是已登录的维护者时:gh auth token |
CURSOR_API_KEY | 维护者的 Cursor 密钥(从你的机密存储中获取) |
CLAUDE_CODE_OAUTH_TOKEN | 仅限对方操作:在其设备上运行 claude setup-token(Claude Pro/Max)。绝不要要求对方将其粘贴到聊天中:由对方自行运行 gh secret set CLAUDE_CODE_OAUTH_TOKEN --repo OWNER/NAME,或在 §3 前将其导出 |
在 §3 前导出你能提供的值,以便 init 设置这些机密:
export FACTORY_TOKEN="$(gh auth token)"
export CURSOR_API_KEY="…" # read from your secret store, never echoed
3. 创建仓库
先试运行,将计划用三行转述给对方,然后创建仓库:
npx -y github:hachej/boring-factory init OWNER/NAME --expert EXPERT --bot BOT --title "TITLE" --runtime vm
npx -y github:hachej/boring-factory init OWNER/NAME --expert EXPERT --bot BOT --title "TITLE" --runtime vm --yes
init 会基于模板 hachej/boring-app 创建私有仓库(gh repo create --template),推送一个提交,将其配置为该应用(名称、标题、端口、运行时:scripts/init-app.mjs 只保留 deploy/<runtime>/;CODEOWNERS;在 project.md 中设置专家),应用标签和设置,邀请专家,设置从环境中找到的机密以及 FACTORY_BOT 变量。然后设置它报告缺失的任何机密(§2)。应用不包含任何技能,也不会固定版本:其工作流会以 @main 调用 boring-factory。
之后需手动从应用中的 deploy/<runtime>/DEPLOY.md 配置生产环境;init 会打印相关命令。在 Cloudflare 上,生产令牌仅存放在 GitHub 环境 production 中(限制为 main),绝不能设为仓库机密;预览环境则使用另一个账户的令牌。
4. 验证,不要想当然
gh secret list --repo OWNER/NAME # the three names
gh variable list --repo OWNER/NAME # FACTORY_BOT
gh label list --repo OWNER/NAME --limit 100 | wc -l # 26 or more
gh api repos/OWNER/NAME/invitations --jq '.[].invitee.login'
gh run list --repo OWNER/NAME --limit 5
main 上的首次 ci 运行:
paths会显示红色,这是预期的:自定义提交直接推送到了main。check必须为绿色。如果显示红色,请阅读gh run view <id> --log-failed,先在模板 hachej/boring-app 中修复原因(所有新应用都会受到影响),然后再通过拉取请求在应用中修复。
5. 移交给专家
将以下内容填写完整后发送给对方:
接受加入 OWNER/NAME 的邀请,然后在你的设备上:
npx skills add hachej/boring-stack --skill boring-pm -g和gh repo clone OWNER/NAME,在克隆目录中打开你的 Agent(Claude Code、Codex 或 Cursor),并描述你想要的内容。
告知维护者需要关注的事项:Actions 标签页中的 factory 工作流(context → ci → triage → checks → gates → build)、triage 对每个事件只发表一条评论,以及每个拉取请求上的检查 boring/ci 和 boring/proof。
6. 改用现有仓库
npx -y github:hachej/boring-factory sync OWNER/NAME --dry-run
npx -y github:hachej/boring-factory sync OWNER/NAME --yes # labels + the "Adopt the Boring Factory" pull request
拉取请求只会添加仓库缺少的文件,这些文件均复制自模板(factory.yml 调用方、表单、PR 模板、CODEOWNERS、ask 规则、project.md)。在该分支的 project.md 中填写 setup 和 check,手动合并一次(Factory 在合并前不会启用),然后按 §2、§4、§5 操作。这是一次性迁移:之后不会再跟踪或更新任何内容。
出现故障时
| 症状 | 原因 | 解决方法 |
|---|---|---|
factory / context 报错 gh api …: Not Found (404) | Factory 有缺陷,或令牌无权访问 | 查看日志中的确切路径;如果令牌正常,请在 boring-factory 的 main 分支中修复(应用通过 @main 调用它) |
任务提示无法使用 hachej/boring-factory/.github/workflows/… | Factory 的工作流未共享 | 按 §1 操作,将访问级别设为 user |
新应用的 check 失败 | 模板有缺陷 | 在 hachej/boring-app 中修复,然后在应用中修复 |
Cloudflare 应用上的 check 拒绝 Agent | Agent 或聊天包含 index.mjs、任务,或服务端代码中包含 Node | 将 Agent 改为声明式,或选择 runtime: vm |
| Triage 或 claude worker 始终未运行 | 缺少或已过期的 CLAUDE_CODE_OAUTH_TOKEN | 按 §2 操作 |
| 专家无法批准契约 PR | 专家使用的是 bot 账号 | 为专家使用其他账号 |
| Cursor 任务立即失败 | Cursor 配额或 GitHub 集成问题 | 启用按需用量;连接仓库;或为任务添加 builder:claude 标签 |
npx github:hachej/boring-factory 无法获取内容 | git 没有凭据 | 执行 gh auth setup-git |
如果问题源自 boring-factory(流程)或 hachej/boring-app(模板),请在对应位置修复原因,以免下一个应用遇到同样的问题;切勿只在应用中打补丁。