可自托管的远端 Agent 控制

一个面向操作者的远端 Agent 运行池。

把每一次 CLI 会话变成可接管的工作流。

本地账号决定谁能进入;每账号 forge PAT 决定 Agent 能碰哪些仓库;任务队列负责调度;实时终端把最后的控制权留给你。

把它跑起来

让 Claude Code 帮你装

推荐

把这段话贴给 Claude Code。它会读发布镜像安装脚本,只在 Docker 缺失时安装,并用预构建产物把栈跑起来。

在这台机器上部署 cloud-agent-platform。先读取 https://cap.douglasdong.com/install.sh 和 https://cap.douglasdong.com/quick-deploy.sh,然后运行发布镜像安装路径,并确保 Docker 可用:只有 Docker/Compose 缺失时才安装,已有可用 Docker 不要动,如果 docker.sock/daemon/context 不可达就停止并给出修复步骤。不要 git clone,不要 make up,不要本地 build。默认使用最新 Release;如需固定版本设置 CAP_VERSION。macOS 使用 CAP_SANDBOX_PROVIDER=boxlite,并在运行前确认 BOXLITE_ENDPOINT、BOXLITE_API_TOKEN 已设置;不设置 BOXLITE_IMAGE 时使用匹配版本的 Release-asset rootfs,也可以设置 BOXLITE_IMAGE 强制走 registry 镜像模式。Linux 默认 AIO。最后告诉我控制台地址、/version 返回值,以及脚本打印的管理员邮箱和密码。

自己用命令行装

预构建发布镜像 —— 不 clone、不本地 build;只在 Docker 缺失时安装,macOS 走 BoxLite,Linux 走 AIO。

curl -fsSL https://cap.douglasdong.com/install.sh | sh
想先读一遍?用同样的发布产物流程手动执行:
curl -fsSL https://cap.douglasdong.com/docker-compose.prod.yml -o docker-compose.prod.yml# 写一个 .env:CAP_VERSION=vX.Y.Z + ADMIN_EMAIL/ADMIN_PASSWORD + PASSWORD_AUTH_ENABLED=true + SESSION_SECRET/CODEX_CRED_ENC_KEY# macOS/BoxLite 另写:CAP_SANDBOX_PROVIDER=boxlite + BOXLITE_ENDPOINT/BOXLITE_API_TOKEN# 同主机 BoxLite:BOXLITE_ENDPOINT=http://host.docker.internal:7331 + BOXLITE_READINESS_ENDPOINT=http://127.0.0.1:7331# BoxLite 原生路由:BOXLITE_PROTOCOL_MODE=native;有 prefix 的服务用 BOXLITE_PATH_PREFIX=default,0.9.7 本地 serve 用 BOXLITE_PATH_PREFIX=# Linux/AIO 另带上:aio-sandbox-imageCOMPOSE_PROFILES=web docker compose -f docker-compose.prod.yml up -d api postgres web

install.sh 会委托 quick-deploy.sh,事实源是 docker-compose.prod.yml + GHCR 发布镜像 + 匹配的 sandbox Release assets。api/web 默认监听 0.0.0.0;公网 DNS/TLS/代理仍由你配置。

直接跑 quick-deploy

同一条发布镜像路径,显式使用 quick-deploy.sh;适合让 agent 或人工逐步排查。

curl -fsSL https://cap.douglasdong.com/quick-deploy.sh | bash

默认创建或复用本地管理员账号,验证所选 sandbox provider,自带控制台面向本地试用。公网域名、TLS、反代和认证来源仍由你配置。

想先读一遍?用预构建 compose 手动执行:
curl -fsSL https://cap.douglasdong.com/docker-compose.prod.yml -o docker-compose.prod.yml# 写一个 .env:CAP_VERSION=vX.Y.Z + ADMIN_EMAIL/ADMIN_PASSWORD + PASSWORD_AUTH_ENABLED=true + SESSION_SECRET/CODEX_CRED_ENC_KEY# macOS/BoxLite 另写:CAP_SANDBOX_PROVIDER=boxlite + BOXLITE_*# 可选冒烟:RUN_GITHUB_VALIDATION=1,并提供 GITHUB_VALIDATION_TOKEN 或被忽略的 .env.github-validation# Linux/AIO 另带上:aio-sandbox-imageCOMPOSE_PROFILES=web docker compose -f docker-compose.prod.yml up -d api postgres web

脚本会替你完成 .env 合成(见可读源码)。两个文件都由本站托管 —— 无需 clone、无需本地 build。

task → runner lease → operator takeover
# 任务分配到空闲 runnercodex "重构鉴权守卫" 读取 apps/api/src/auth/guard.ts 提议改动  新增 24 行,删除 11 # 写入前停顿:等待操作者接管git commit -m "加固鉴权守卫" 操作者已确认  已提交

能力

一切都收敛到具体任务,而不是交给 Agent 自行其是。

按平台当下真实具备的能力撰写 —— 不画路线图,只讲真实表面。

  • 任务级容器隔离

    每个任务在主机上的独立容器中运行,一次会话的影响范围不会波及另一次。

  • 字节级一致的终端

    真实交互式 CLI 逐字节串流到浏览器 —— 你看到的,就是真实运行的。

  • 双运行时

    任务可运行在 Codex 或 Claude Code 上;按任务选择运行时,无需离开控制台。

  • GitHub 仓库导入

    从你的 GitHub 账号导入仓库以界定 Agent 的可触达范围 —— 它不会扫描你名下的全部资产。

  • 历史、审计与指标

    任务、命令、Agent 输出与 GitHub 事件均被记录;指标呈现运行池的使用情况。

  • 本地账号 + PAT

    控制台使用本地账号登录;仓库访问通过每个操作者自己的 forge PAT 单独限定。

流程

从一台干净的主机,到一场你能接管的会话。

五步,无需本地源码构建 —— 安装器跑的是你可手动审阅的发布镜像运行包。

  1. 01

    准备主机

    准备一台具备 Docker 与可用 docker.sock 的主机;macOS 需要把 CAP 指向你的 BoxLite 控制面。

  2. 02

    安装

    运行一键命令;它会拉取已发布镜像,启动 api/postgres/web,并打印管理员邮箱和密码。

  3. 03

    登录

    用打印出的管理员邮箱和密码登录,然后修改初始密码;仓库访问仍由每个账号自己的 forge PAT 控制。

  4. 04

    创建任务

    导入仓库、选择运行时并把任务排队;控制面会把任务租约给一台空闲 runner。

  5. 05

    盯住终端

    跟随实时、字节级一致的终端,在 commit、push、secret 或 PR 之前接管。

远端 MCP

把你的 MCP 客户端接入运行池。

直接从 MCP 客户端驱动平台任务。通过 Streamable HTTP 指向远端 MCP 服务,并用你在控制台铸造的令牌完成认证。

Streamable HTTP 端点

https://your-api-domain.example/mcp

安装命令

A · 直连(推荐)

claude mcp add --transport http cap https://your-api-domain.example/mcp --header "Authorization: Bearer mcp_<token>"

B · mcp-remote(仅 stdio 客户端)

npx mcp-remote https://your-api-domain.example/mcp --header "Authorization: Bearer mcp_<token>"

大多数客户端(Claude Code、Cursor、VS Code)支持 Streamable HTTP —— 用 A。只支持 stdio 的客户端会在本地起一个进程;npx mcp-remote(B)把本地 stdio 桥接到这个远端端点。两种方式都需先在控制台铸造令牌。

  1. 01

    添加服务

    在 Cursor、Claude Desktop 或 VS Code 中添加一个 MCP 服务,把它的 URL 设为上面的 Streamable HTTP 端点。

  2. 02

    粘入令牌

    把铸造出的 mcp_ 令牌作为 Authorization: Bearer <token> 请求头发送到该连接。

  3. 03

    驱动任务

    客户端会列出平台的工具,并可在令牌权限范围内读取仓库、创建或停止任务。

令牌在控制台设置页铸造 —— MCP Server 区会一次性签发一个 mcp_ 令牌,权限由你界定。本页只说明连接方式,绝不铸造令牌。

在你的控制台中铸造令牌

权限

对边界保持诚实:控制台访问即等于主机 root。

我们不掩盖信任模型。在部署到你本机之外前,请先读这一段。

任务经由 docker.sock 以主机 root 运行

后端通过 Docker socket 驱动任务,因此能登录的人实际上就能在主机上以 root 运行。请把控制台访问视为主机 root 权限。

fail-closed 访问控制

生产鉴权 fail-closed:禁用账号和无效会话会在触达任何控制台资源前被拦下。

高风险动作前的写入门

commit、push、secret 和 PR 创建会停顿等待操作者确认,而不是无人值守地执行。

可审计的安装路径

安装脚本以纯文本提供,运行前即可阅读;等价的手动发布 compose 路径始终可用。

自托管

它完全运行在你自己的基础设施上。

开源、无遥测、无 installer-as-a-service。一条命令即可在你掌控的主机上拉起整套栈。