用途
deploy-open-harness 是一个部署引导技能,目标是帮助用户部署自己的一份 Open Harness。它基于当前代码库给出指导,而不是沿用旧版 Harness 时代的设置假设。技能明确要求:如果代码与文档不一致,以代码为准并说明这一点;不要依赖 scripts/setup.sh。
主要能力
技能会先让用户确定部署范围,再据此收集凭据、指导部署并完成首次运行验证。
部署范围
- 最小部署:一个可运行、可托管的实例,用户可以用 Vercel 登录并使用产品,不需要 GitHub 仓库访问权限。
- 完整部署:在最小部署基础上,增加 GitHub 账号关联、GitHub App 安装、私有仓库访问、推送和创建 PR。
如果用户不确定,技能建议先做最小部署,再叠加 GitHub 能力。
凭据清单
应用运行必需:
- POSTGRES_URL
- JWE_SECRET
可用的托管部署必需:
- ENCRYPTION_KEY
- NEXT_PUBLIC_VERCEL_APP_CLIENT_ID
- VERCEL_APP_CLIENT_SECRET
GitHub 仓库流程必需:
- NEXT_PUBLIC_GITHUB_CLIENT_ID
- GITHUB_CLIENT_SECRET
- GITHUB_APP_ID
- GITHUB_APP_PRIVATE_KEY
- NEXT_PUBLIC_GITHUB_APP_SLUG
- GITHUB_WEBHOOK_SECRET
可选:
- REDIS_URL 或 KV_URL
- VERCEL_PROJECT_PRODUCTION_URL
- NEXT_PUBLIC_VERCEL_PROJECT_PRODUCTION_URL
- VERCEL_SANDBOX_BASE_SNAPSHOT_ID
- ELEVENLABS_API_KEY
各凭据的说明方式
- PostgreSQL:创建 Postgres 数据库,把连接字符串复制到 POSTGRES_URL。
- JWE secret:用于会话加密。推荐生成命令:openssl rand -base64 32 | tr '+/' '-_' | tr -d '=\n'
- Encryption key:提供商令牌会加密存储,值必须是 64 位十六进制字符串。推荐生成命令:openssl rand -hex 32
- Vercel OAuth 应用:创建 Vercel OAuth 应用并设置回调 URL:https://YOUR_DOMAIN/api/auth/vercel/callback;本地开发为 http://localhost:3000/api/auth/vercel/callback。凭据存为 NEXT_PUBLIC_VERCEL_APP_CLIENT_ID 和 VERCEL_APP_CLIENT_SECRET。
- GitHub App:不需要单独的 GitHub OAuth 应用,Open Harness 使用 GitHub App 的用户授权流程。创建 GitHub App 并设置:Homepage URL 为 https://YOUR_DOMAIN;Callback URL 为 https://YOUR_DOMAIN/api/github/app/callback;Setup URL 为 https://YOUR_DOMAIN/api/github/app/callback;本地开发为 homepage http://localhost:3000,callback/setup http://localhost:3000/api/github/app/callback。还需启用“Request user authorization (OAuth) during installation”,使用 GitHub App 的 Client ID 和 Client Secret 作为 NEXT_PUBLIC_GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET,若希望组织安装顺利可把应用设为公开,生成 webhook secret,下载或生成私钥。凭据存为 NEXT_PUBLIC_GITHUB_CLIENT_ID、GITHUB_CLIENT_SECRET、GITHUB_APP_ID、GITHUB_APP_PRIVATE_KEY、NEXT_PUBLIC_GITHUB_APP_SLUG、GITHUB_WEBHOOK_SECRET。GITHUB_APP_PRIVATE_KEY 可以存为带转义换行的 PEM 内容,或 base64 编码的 PEM。
- Redis / KV:可选。它能改善可恢复流、停止信号和缓存,但首次部署不需要。
使用方式
技能会引导用户按以下顺序操作:
- Fork 仓库。
- 在 Vercel 中从仓库根目录导入。
- 添加基线环境变量:POSTGRES_URL、JWE_SECRET、ENCRYPTION_KEY。
- 先部署一次以获得稳定的生产 URL。
- 用该生产 URL 创建 Vercel OAuth 应用。
- 添加 NEXT_PUBLIC_VERCEL_APP_CLIENT_ID 和 VERCEL_APP_CLIENT_SECRET。
- 重新部署。
- 如需完整 GitHub 流程,用生产 URL 创建 GitHub App,添加 GitHub 环境变量,再次重新部署。
- 可选添加 Redis/KV 和生产 URL 变量。
如果用户已有自定义域名,可以从一开始就使用该域名,而不必用默认的 vercel.app 生产 URL。
首次运行验证
最小部署:打开生产站点,用 Vercel 登录,确认成功进入应用,创建会话并确认基本 UI 加载。
完整部署还需验证:GitHub 账号关联可用;GitHub App 安装完成;安装或仓库出现在 UI 中;可以启动由仓库支持的会话;沙箱启动且智能体可以在仓库中工作。
如果失败,技能要求定位缺失的凭据或回调不匹配,而不是给出泛泛建议。
适用场景
适合需要自行部署 Open Harness 的用户,尤其是希望先完成最小可用部署、再逐步叠加 GitHub 仓库流程的场景。也适合需要明确每个环境变量来源和归属位置的部署指导。
限制与安全规则
- 绝不要求用户把密钥粘贴到聊天中。
- 只告诉用户每个值应放在哪里,密钥值保留在 Vercel 项目环境变量或本地环境文件中。
- 把最小部署的阻塞项与完整 GitHub 流程的阻塞项分开。
- 对可选内容要明确说明。
- 技能要求先阅读仓库中的 README.md、apps/web/.env.example、apps/web/lib/db/client.ts、apps/web/lib/jwe/encrypt.ts、apps/web/lib/crypto.ts、apps/web/app/api/auth/signin/vercel/route.ts、apps/web/app/api/auth/vercel/callback/route.ts、apps/web/app/api/github/app/install/route.ts、apps/web/app/api/github/app/callback/route.ts、apps/web/lib/github/app-auth.ts、apps/web/lib/redis.ts、apps/web/lib/sandbox/config.ts 等文件,以当前代码为准。
回复格式
技能建议按以下结构回复:目标范围(最小或完整);凭据清单(现在必需与以后可选分组);如何获取每个缺失凭据(简短具体);部署步骤(只列用户下一步应做的动作);验证(部署后点击或测试什么);后续升级(Redis、GitHub、语音、自定义域名、快照覆盖,仅在相关时提及)。要求简洁,推动用户解决下一个阻塞项。