dev — Lab-Stack Boot 是 orchestkit 提供的一条命令式开发循环启动技能,用一条命令拉起 Vercel-Labs 风格开发循环的四个活动部件。
用途 它把本地开发所需的多个环节整合为一次启动:portless 提供命名 HTTPS 子域名(形如 https://<branch>.localhost),避免不同 worktree 之间的端口冲突;emulate 通过 @emulators/adapter-next 在同一源上提供有状态 API 模拟;dev server 自动检测并运行 pnpm dev / npm run dev / yarn dev;agent-browser 预热一个以分支命名的会话。状态写入 .claude/state/dev-stack.json,dev stop 会读取 PID 并按启动逆序发送 SIGTERM 进行拆除。
主要能力
- 一键启动上述四个部件,并输出摘要。
- 幂等:栈已运行时重复执行 dev 为空操作,会显示运行时长。
- 状态查询:dev status 显示各进程、base URL、启动时间与 portless 路由注册情况。
- 拆除:dev stop 按逆序 SIGTERM,5 秒后 SIGKILL 兜底,最后删除状态文件;portless 代理守护进程为共享基础设施,不会被 dev stop 关闭。
- 分享模式(M127):--share 通过 Tailscale 暴露给 tailnet 成员;--funnel 公开到互联网;--live N 为公开 funnel 并带 N 小时过期,记录在 live-demos.jsonl。Tailscale 仅在 --share/--funnel/--live 时需要。
- 单仓模式:检测到 turbo.json 或 package.json workspaces 时使用裸 portless(零配置),自动发现各 workspace 的 dev 脚本并按任务图分配子域名,状态文件 mode 为 "monorepo"。
- 自动提示:启动时检查 package.json,检测到 @json-render/* 会打印 devtools 适配器导入行以启用检查面板;检测到 @clerk/* 时,若 clerk 在 emulate.config.yaml 中则打印模拟登录 URL(http://localhost:4012),否则提示运行 emulate-seed --auto。
- 与 expect 集成:auto-expect 触发时读取 dev-stack 状态文件,复用同一 agent-browser 会话与 base URL,按文件路径推算受影响路由并驱动浏览器,记录 ARIA 快照。
使用方式 常用命令:新分支开始工作用 dev;会话中断后恢复用 dev(幂等);删除分支前用 dev stop;查看状态用 dev status;分享预览用 dev --share 或 dev --funnel;限时演示用 dev --live 4。 启动序列共 9 步:检测包管理器(pnpm > yarn > bun > npm,基于 lockfile);解析子域名 slug(分支名转小写、/ 转 -、DNS 安全、≤63 字符);启动 portless 代理(幂等);按需运行 emulate --seed;执行融合命令 portless <slug> <pkg-mgr> run dev;轮询路由注册(最多 30 秒);通过代理等待 dev server(最多 30 秒);以 AGENT_BROWSER_SESSION=<slug> 打开并注册会话;原子写入状态文件;打印摘要。 前置条件:portless、agent-browser、jq 为必需,emulate 可选(仅当存在 emulate.config.yaml 时需要)。必需项缺失时启动为全有或全无,会提示安装命令并跳过启动。CI=1 会短路启动并立即以 0 退出。 脚本:scripts/boot.sh 负责前置检查与 9 步启动;scripts/stop.sh 负责逆序关闭;scripts/status.sh 输出状态,--quiet 仅做存活检查。dev 调用 boot.sh,stop 调用 stop.sh,status 调用 status.sh。
适用场景 适合在本地按分支开展开发、需要在多个 worktree 间并行工作、需要同源有状态 API 模拟、需要预热浏览器会话以便 UI 测试、需要向他人分享预览或做限时演示的场景。每个 git worktree 拥有独立子域名,状态文件位于各自 .claude/state/ 下,互不干扰。
限制 不适用于 CI(应设 CI=1,技能直接退出 0);不用于生产部署;非 Vercel-Labs 技术栈会回退为安装提示,仍可手动运行底层工具;在 tmux -CC 会话中 agent-browser 面板与 iTerm2 tmux 集成不兼容。portless 代理守护进程为共享,dev stop 不会关闭它,如需停止需运行 portless proxy stop。