agent-cloud-kit
一个零依赖的CLI 克劳德代码在网上 云 会话。它安装一个repo pin的工具版本,启动Docker,完成部分 当保存的机器不是repo要求的机器时,它会告诉您 平台没有记录的云沙箱限制。
不隶属于Anthropic或由Anthropic认可的。作品与克劳德代码在网络上。
继续
@ramon-sg/claude-cloud(它是1.0.0),没有自动迁移:安装这个包 和运行init再一次。
- 用TypeScript编写,发布编译, 无运行时依赖项、节点
>=20(云 image附带Node 22,因此它在安装repo的任何工具之前运行)。 - 这个 回购决定版本:
.claude/cloud.json固定这个包的确切版本, 所以更新它是一个提交。
它解决了什么
安装Node和启动Docker需要几行shell。昂贵的部分是什么 平台不会告诉你:
- 出口代理阻止GitHub的发布和GitHub的GraphQL API,所以从
GitHub失败。
agent-cloud-kit从nodejs.org安装Node;Bun, Deno, pnpm和Yarn from npm; 和来自PyPI的uv。 - 设置脚本从
/home/user,不从回购,和失败是沉默的。 - 超过5分钟的设置不会留下保存的机器。
- 两个
apt同时运行在DPKG锁上发生冲突,因此apt工作是串联运行的。 dockerd是关闭的,克隆是部分的(浅的,没有origin/<default branch>)。- 没有IPv6。
- 代理取代TLS,并且
docker build不信任它的CA。 - 恢复的会话不会再次运行安装程序,更改安装程序也不会重新构建 保存机器。
流
- 安装代理工具 使用agent-kitchen(配置,钩子和技能到达repo)。
- 运行
npx agent-cloud-kit prepare在本地终点站。它询问在哪里工作,与 与代理厨房相同的菜单(--pr或者--here跳过):- En un PR nuevo (默认):在一个日期的分支上创建一个工作树
origin,所以你 分支和未提交的文件不受影响;运行init,克劳德打开本地与cloud-ready技能让它可以和你一起写云准备,然后写手册, 提交、推送并打开PR草案。 - En la drama actual, sin commit: 在结帐时也这样做,然后停在那里;你审查
与
git diff,承诺,推动,然后跑npx agent-cloud-kit verify.
- En un PR nuevo (默认):在一个日期的分支上创建一个工作树
- 在claude.ai中配置环境 后
docs/agent-cloud.md,这prepare由你的.claude/cloud.json. 文件不断增长:当技能,本地 或者在云中,发现一个域或环境变量缺失,它将其添加到.claude/cloud.json,重新生成文档,并在会话中告诉您要添加哪些内容 claude.ai。 - 云端验证:
prepare(新公关)或verify(当前分支,一次推送) 发射claude --cloud在那个分支上,运行一个真正的云会话cloud-ready verify, 修复PR中失败和报告的内容npx agent-cloud-kit verify不管什么时候 改变环境。
claude --cloud 使用选定的环境 /remote-env 在 claude,以及Claude GitHub
应用程序必须安装在仓库(没有它的会话不能推送)。在云里, gh api
(REST)作品;GraphQL (gh pr list, gh pr create)被阻塞。如果 prepare 被打断,
npx agent-cloud-kit prepare --resume 继续在现有的工作树中。
对测试没有意见
这个包不强制任何测试方式,并且一个repo可能根本没有测试(那么
云计算只需要一台准备好的机器)。这个 cloud-ready Skill已经找到测试你的repo
告诉您哪些将在云中运行,并建议对云进行调整
准备或仅在需要时,它们的云变体。没有你的同意,什么也改变不了。
这个 cloud-ready 技能
init 复制到 .agents/skills/cloud-ready 链接到 .claude/skills/cloud-ready,
因为克劳德·科德没有发现 .agents/skills. 提交两个。 cloud-ready configure 运行
和你在一起; cloud-ready verify 在云会话中运行。技能和生成的
手册是用西班牙语写的。
设置claude.ai
在环境中形成at https://claude.ai/code:
-
网络访问: 选择 自定义 并保持 还包括通用包的默认列表 经理 检查。添加任何额外的域名
apt需要Repos或设置步骤,每行一个。 运行agent-cloud-kit doctor在会话中查看哪些主机被阻塞(它使用它进行探测)curl, 所以它像设置一样通过代理)。如果安装程序从未运行过,请使用npx agent-cloud-kit doctor. -
设置脚本: 云作为根运行它
/home/user在克劳德开始之前:#!/bin/bash npx -y agent-cloud-kit@1 setup这个
@1只固定发射器。每个回购然后重新发布它所要求的确切版本,所以a 有意编辑此字段,采用新的启动器专业。强制保存的机器 重新构建,更改此字段中的任何内容(带有日期的注释可以工作)。 -
在每次回购运行中
npx agent-cloud-kit init,然后承诺.claude/cloud.json,.claude/settings.json,.agents/skills/cloud-ready和.claude/skills/cloud-ready链接。
创建会话时读取环境更改:启动新会话以测试它们。一个 恢复的会话不会再次运行安装程序。
.claude/cloud.json
它生活在 .claude/ 而不是在 package.json 所以没有Node的repos可以使用它。一个JSON
模式随包(schema.json). 未知字段被报告并被忽略
损坏的文件永远不会停止会话。
{
"$schema": "https://unpkg.com/[email protected]/schema.json",
"version": "1.0.0",
"aptRepos": ["https://example.com/setup.deb.sh"],
"apt": ["direnv", "jq"],
"domains": ["registry.example.com"],
"docker": { "pull": "auto" },
"setup": ["scripts/cloud-setup-extra.sh"],
"session": ["scripts/worktree-setup.sh"],
"requiredEnv": ["API_TOKEN"],
"notes": ".claude/cloud-notes.md"
}
| 场 | 要求 | 意义 |
|---|---|---|
version | 是 | 要运行的包的确切版本(没有范围)。如果 setup 运行一个不同的程序,它用这个程序重新启动。 |
aptRepos | 否 | 添加APT存储库的安装脚本的HTTPS url;每个都被下载并通过管道连接 bash 安装软件包前。 |
apt | 否 | 要安装的Debian软件包。名称被验证并作为参数传递,而不是传递给shell。 |
domains | 否 | 环境必须允许额外的主机; doctor 探查它们,手册列出它们。 |
docker.pull | 否 | "auto" (默认)从撰写文件和 FROM 用 @sha256;一个图像名称列表提取这些; false 让Docker独自一人 setup. |
setup | 否 | Shell命令运行一次 setup,在回购,与固定的工具首先上 PATH. 一个失败的命令被记录下来,其余的仍然运行。 |
session | 否 | Shell命令在每个会话开始时运行,在repo中。它们的输出进入stderr(而不是Claude的上下文中),每一个都在2分钟后停止,并且报告一个失败的命令,而其他命令仍在运行。 |
requiredEnv | 否 | 必须设置的环境变量;会议警告丢失的人。 |
notes | 否 | 什么在云中运行,什么不在云中运行:自由文本,或者相对于repo的文本文件的路径(然后使用其内容)。在每次会议开始时打印并显示在手册中。 prepare 期望文件 cloud-ready 写的技能。 |
工具版本依次从 .tool-versions, mise.toml, .nvmrc 和
package.json#packageManager. 默认分支来自 origin/HEAD. 已安装好各个工具
下 /opt/agent-cloud-kit/<tool>-<version>,因此版本共存,并且是一个环境的仓库
共享文件夹。没有安装程序的工具会产生警告并被跳过。
不精确的Node版本(22, 22.1, lts/iron, lts/* 或者 node)在
setup 到最新的匹配版本 https://nodejs.org/dist/index.json 安装在
/opt/agent-cloud-kit/node-<exact version>. 解析后的版本记录在机器状态中,因此
session 打开相同的文件夹 PATH.
命令
| 命令 | 它是做什么的 |
|---|---|
agent-cloud-kit setup [--repo <path>] | 在Claude启动之前以root身份运行。对于home目录下的每个git repo (/home/user)用… .claude/cloud.json (或只 <path>):安装工具、apt包和镜像,并将自身复制(没有npm,没有网络)到 /opt/agent-cloud-kit/bin/agent-cloud-kit,然后运行 setup 步骤并记录结果。没有该文件的回购会被通知跳过。它总是退出0:失败会被记录,但不会致命。 |
agent-cloud-kit session | 从 SessionStart 钩子,在几秒钟内没有网络(除了完成克隆)。当安装程序未运行、步骤失败或机器已准备好其他配置时发出警告;写 PATH 然后,把固定的工具排成一行 /opt/agent-cloud-kit/bin,所以 agent-cloud-kit (它本身决定) $CLAUDE_ENV_FILE;码头工人开始;获取完整历史记录和 origin/<default branch>;运行 session 步骤。它不会在会话启动时失败。 |
agent-cloud-kit docker | 开始 dockerd 断开连接,等待60秒等待应答。如果不存在,则立即退出1 dockerd 未安装。 |
agent-cloud-kit doctor | 检查代理是否允许所需的主机通过,固定的工具是否安装,Docker是否应答,以及记录的状态(指纹和每个步骤)。如果任何检查失败,则退出1。 |
agent-cloud-kit init | 创建 .claude/cloud.json 如果缺少,添加 SessionStart 钩, .claude/settings.json (保持钩子已经在那里),复制 cloud-ready 技能 .agents/skills/cloud-ready 当它的版本不同时,链接到 .claude/skills/cloud-ready. 再次安全运行。 |
agent-cloud-kit manual | 写 docs/agent-cloud.md 从 .claude/cloud.json,确定性:确切的设置脚本(agent-cloud-kit@<major>(或发布候选版本的确切版本)、域、变量名、如何验证环境。 |
agent-cloud-kit prepare [--pr|--here|--resume] | 仅本地,需要一个交互式终端:在没有提交的情况下为云、新PR或当前分支设置回购(当没有给出选项时询问;参见“流程”)。 --resume 继续在现有的工作树中。 |
agent-cloud-kit verify | 仅本地,需要一个交互式终端:启动运行的云会话 cloud-ready verify 在当前的分支上,必须准备好并推动。 |
环境变量: AGENT_CLOUD_KIT_DIR 覆盖 /opt/agent-cloud-kit 和 AGENT_CLOUD_KIT_HOME
覆盖 /home/user;两者都主要用于测试。
这个 SessionStart 钩
init 加上这个钩子。在云会话之外,它什么也不做,它调用
包, setup 留在保存的机器上,所以它不需要网络,也不需要 node_modules:
{
"type": "command",
"command": "[ \"$CLAUDE_CODE_REMOTE\" = true ] || exit 0; /opt/agent-cloud-kit/bin/agent-cloud-kit session || echo 'agent-cloud-kit: el setup del entorno no corrió; revisa con npx agent-cloud-kit doctor'",
"timeout": 600
}
当repo锁定另一个版本而不是正在运行的版本并安装该版本时,
session 交给它吧。
机器指纹
setup 存储配置、固定版本、图像和包的指纹
的版本。如果之后回购发生变化, session 警告“la máquina se preparó con”
其它configuracion”。保存下来的机器由克劳德重建。大约每7天,或者当你
编辑setup script字段。
代理CA和 docker build
云代理取代了TLS,所以 docker build 不相信它。 session 查找CA包
(SSL_CERT_FILE,然后 NODE_EXTRA_CA_CERTS,然后 /root/.ccr/ca-bundle.crt),并输出其
路径为 CLOUD_PROXY_CA. 将其作为秘密传递给构建,仅当它被设置时:
docker build ${CLOUD_PROXY_CA:+--secret id=proxy_ca,src="$CLOUD_PROXY_CA"} -t app .
RUN --mount=type=secret,id=proxy_ca \
if [ -f /run/secrets/proxy_ca ]; then \
export SSL_CERT_FILE=/run/secrets/proxy_ca NODE_EXTRA_CA_CERTS=/run/secrets/proxy_ca; \
fi; \
npm ci
它做不到的事
- 它并没有消除平台的限制:没有开放的端口或预览
gh pr和gh issueGitHub的GraphQL被阻止;使用gh api)。gh pr ready失败;403年 为它命名一个REST路由(POST /repos/{owner}/{repo}/pulls/{n}/ccr/ready_for_review),而不是 然而,验证。 - 它不配置claude。对你来说:环境是你自己设置的,按照手册。
- 它不会从云端下载技能;他们住在仓库里。
- 它没有强加一种测试方法。
- 它不安装插件,或运行插件的挂钩,从您的机器。
- 它不安装来自GitHub版本的工具;代理阻止他们。
- 它不会在Docker内部运行Docker,也不会在本地会话中启动Docker守护进程
(钩子退出时
CLAUDE_CODE_REMOTE不是true)。 - 它不能保证秘密的安全:云环境的环境变量是可读的 任何使用它的人。
- 它不运行你的
setup会议复会的步骤;只有新的会话才有。 setup以root身份运行从NPM获取的代码。版本是固定在回购和重新启动 就用那个版本。
释放
维护人员。新闻稿由 .github/workflows/publish.yml 什么时候发布GitHub
发表;如果发布标签没有它的前导,工作流就会失败 v,不同于
version 在 package.json.
新包的第一次发布不能使用npm可信发布,因为可信发布 在已经存在的包上配置。手工出版第一版:
- 要么跑
npm ci && npm run build && npm publish --provenance=false从一台登录的机器上 至新公园(npm login),并有出版的权利agent-cloud-kit包(来源)需要一个CI,并且package.json请求它),或者使用NPM_TOKEN秘密 (NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}在发布步骤中)。 - 在npmjs.com上,打开包设置并添加一个可信的发布者:这个GitHub存储库和
这个
publish.yml工作流。 - 删除
NPM_TOKEN如果你创造了一个秘密。从那以后,磕磕碰碰version在package.json、更新CHANGELOG.md,并发布一个GitHub版本,标记为v<version>。带有预发布后缀()的版本1.0.0-rc.1)已在next标记一个稳定的版本latest;在那之前它也变成latest,所以工具可以阅读latest(代理厨房)看。将其GitHub版本标记为预发布。
许可证
麻省理工学院