关于 Diffinery
Diffinery 是部署在 Cloudflare 上的开源 Git 托管与 CI 平台,面向需要 GitHub Actions 兼容工作流及 AI 编码 Agent 协作的团队。它内置 MCP 服务,并以受规则约束的 Agent 账户、沙箱任务和人工审核流程支持协作。
主要功能
- 01Git 仓库、拉取请求与议题管理
- 02运行兼容 GitHub Actions 的工作流
- 03Agent 任务与代码审查
- 04分支保护及人工审批规则
- 05合并队列与通过检查后自动合并
适用场景
- 01在 Cloudflare 上运行团队 Git 托管与 CI
- 02让 Claude Code 或 Codex 提交待审拉取请求
- 03自动检查拉取请求中的错误与安全问题
- 04按检查结果和审批规则合并代码
MCP 相关
内置 MCP 服务向 MCP 客户端提供仓库与 Agent 工作流能力,包括 Today 视图、文档搜索和读取,以及沙箱操作。服务器对经 MCP 执行的 Agent 操作也应用账户权限和保护规则。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://{diffinery_host}/mcpclaude mcp add --transport http com-diffinery-diffinery https://{diffinery_host}/mcp{"mcpServers":{"com-diffinery-diffinery":{"type":"http","url":"https://{diffinery_host}/mcp"}}}在 Cursor 中打开{"servers":{"com-diffinery-diffinery":{"type":"http","url":"https://{diffinery_host}/mcp"}}}在 VS Code 中打开{"mcpServers":{"com-diffinery-diffinery":{"type":"http","url":"https://{diffinery_host}/mcp"}}}{"mcpServers":{"com-diffinery-diffinery":{"serverUrl":"https://{diffinery_host}/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
Diffinery
完全运行在 Cloudflare 上的开源 GitHub 和 GitHub Actions 替代方案。 提供 Git 托管、拉取请求、代码审查和可直接替代 GitHub Actions 的 CI,还支持 Agent 任务、Agent 代码审查,以及 Claude Code 和 Codex 插件,专为由人和 AI Agent 组成的团队打造。将它部署到你自己的 Cloudflare 账户:无需服务器、Runner 机器,也无需打补丁。
网站 · 文档 · 面向 AI Agent · 插件 · 部署自己的实例 · 对比 · 性能 · 路线图 · llms.txt
Diffinery 托管 Git 仓库、带审查和合并队列的拉取请求、问题、发行版和容器注册表,并按原样运行你现有的 .github/workflows/*.yml 文件,包括 Marketplace 工具。Claude Code、Codex 和 Cursor 等 AI 编码 Agent 可以拥有自己的账户,并受到服务器强制执行的防护措施约束;它们可通过内置 MCP 服务、兼容 GitHub 的 REST 和 GraphQL API、Git 或命令行开展工作。所有功能都运行在 Cloudflare 上:Workers、Durable Objects、D1、R2、Queues、Workflows 和 Containers。它是遵循 Apache License 2.0 的免费开源软件,你可以将自己的实例部署到自己的 Cloudflare 账户和域名上。
Diffinery 专为 Agent 参与软件开发的方式打造。向 Agent 指定目标,即可在沙箱中通过 Claude Code 或 Codex 获取拉取请求。让另一个 Agent 审查每个拉取请求,查找错误。每天早上打开 Today,查看需要你处理的事项,批准后让通过检查的拉取请求自动合并。Claude Code 和 Codex 插件、官方 MCP Registry 中的 MCP 服务、编辑器扩展和 gh 支持,让你能在已使用的工具中完成所有操作。Agent 在 Diffinery 上可以做什么 ↓
- 源代码: diffinery.com/codician/diffinery,开发、CI 和部署都在此进行;同时镜像到 github.com/codician-team/diffinery。
- 文档: diffinery.com/docs,也提供 Markdown 版本,以及供 AI 助手使用的 llms.txt 和 llms-full.txt。
如果 Diffinery 对你有用,在 GitHub 上点个星,能帮助更多人发现它。
目录
- Diffinery 适合哪些用户
- 为什么选择 Diffinery
- 截图
- 专为 AI 编码 Agent 打造
- 插件和集成
- 功能
- 对比情况
- 在自己的 Cloudflare 账户上自托管
- Diffinery 在 Cloudflare 上的运行方式
- 本地开发
- 仓库布局
- Diffinery 暂不支持的功能
- 常见问题
- 贡献、安全与许可证
Diffinery 适合哪些用户
- 寻找 GitHub Actions 替代方案的团队,同时希望保留现有的工作流 YAML:Diffinery 会读取
.github/workflows/,使用相同的语法运行 marketplace 操作,并默认在配备 4 个 vCPU 和 12 GiB 内存的运行器上执行。 - 希望使用自托管的 GitHub 替代方案,又不想运行服务器的团队。 和 Gitea、Forgejo 或 GitLab 一样,你可以运行自己的实例,但它会部署到 Cloudflare 的无服务器平台,而不是 VM 或 Kubernetes 集群。
- 希望获得比 GitHub 私有仓库标准 2 vCPU 运行器更快的 CI 运行器,又不想额外付费使用 Blacksmith 或 Depot 等运行器服务的团队。
- 使用 AI 编码 Agent 的团队(Claude Code、Codex、Cursor 等),希望 Agent 创建由他人审核的拉取请求,而不是直接推送到
main。 - Cloudflare 开发者,希望参考一个基于 Durable Objects(含 SQLite)、Containers、Workflows、Queues 和 R2 构建的大型真实应用。
为什么选择 Diffinery
- 在一个无服务器应用中提供 Git 托管、拉取请求和 CI。 一个 Cloudflare Worker 即可提供 Web UI、通过 HTTPS 访问 Git、兼容 GitHub 的 REST 和 GraphQL API,以及 MCP 服务。每个仓库都是独立的 Durable Object,拥有自己的 SQLite 数据库,因此仓库可以横向扩展,而不是共用一个数据库服务器。
- GitHub Actions 工作流无需修改即可运行。 支持相同的触发器、表达式、矩阵、
needs、输出、可复用工作流、环境、密钥、变量、OIDC、服务容器和 Docker。Marketplace actions(uses: owner/repo@ref)会被下载并运行。所有已知差异都列在与 GitHub Actions 的兼容性中。 - 仅在作业运行期间存在的运行器。 每个作业都会在 Cloudflare Containers 上获得一个全新的 Ubuntu 24.04 容器,Cloudflare 仅在容器运行期间计费。默认规格为 4 个 vCPU 和 12 GiB 内存,使用量较少的作业会自动迁移到更小的规格。自托管运行器支持 macOS、Windows、Arm 和 GPU。
- 专为 AI Agent 打造,并由人工参与把关。 Agent 是一等账户,由个人或组织拥有,并有自己的令牌和限制。除非规则允许,否则它们无法向受保护分支推送或合并;除非你另行设置,否则其拉取请求需要人工批准;它们创建的每次提交都会记录其代表谁执行操作。此外还提供 Agent 任务、Agent 代码审查、汇总待你处理事项的 Today 页面,以及 CI 通过后自动合并。请参阅专为 AI 编码 Agent 打造。
- 为 Agent 已在使用的工具提供插件。 Claude Code 和 Codex 插件、Claude Code 实时 CI 状态栏、列入官方 MCP Registry 的 MCP 服务、
diffineryCLI、适用于 VS Code、Cursor、Windsurf 和 JetBrains IDE 的扩展,以及可像搭配 GitHub Enterprise 一样使用的gh。请参阅插件和集成。 - 默认安全。 使用无密码的通行密钥登录、仅限受邀账户、分支保护、可阻止凭据泄露的推送保护、信封加密的密钥、紧急停用开关,以及仅追加的审计日志。
- 从 GitHub 迁移只需一步。 服务端导入器可将单个仓库或整个组织连同其历史记录、议题、拉取请求、审查和发布一并迁移过来;
gh、Octokit、VS Code 和 JetBrains IDE 也都能与 Diffinery 配合使用。
截图
Git 托管和 CI。Agent 功能的专属截图请见下文的专为 AI 编码 Agent 打造。
| 一个仓库页面,显示克隆 URL,并提供一键在 VS Code、Cursor、Windsurf 和 IntelliJ IDEA 中打开的功能 | 来自 .github/workflows/ci.yml 的工作流运行,包含矩阵和 needs |
|---|---|
![]() | ![]() |
专为 AI 编码 Agent 打造
每项 Agent 功能都是可选的,并构建在 Git 和 CI 平台之上,因此团队如果完全不用这些功能,就只有一个代码托管平台。用户使用自己的模型密钥或订阅;Diffinery 不销售也不包含模型访问权限。下方截图展示的是真实页面,取自本地运行的 Diffinery,并由 scripts/agent-screenshots.mjs 使用示例数据生成;该脚本会运行真实的 Agent 任务、Agent 审查和 CI 运行。
设有防护措施的 Agent 账户
Agent 是独立账户,由个人或组织拥有,并有自己的令牌。它的权限不会高于所有者,无法登录 Web 界面,而且它所做的每次提交都会记录其代表谁行事。服务器会在 Git、REST API、MCP 和沙箱中执行相同的规则:
| 防护措施 | 含义 |
|---|---|
| 禁止推送到受保护分支 | Agent 会改为创建拉取请求,除非分支保护规则允许推送。 |
| Agent 的拉取请求须由个人批准 | 即使分支没有规则,也至少需要一位个人批准。Agent 的批准永远不计入。 |
| 禁止合并受保护分支 | 除非规则允许 Agent 在 CI 和个人都同意后通过自动合并完成合并。 |
| Agent 不能让自己的 CI 变绿 | Agent 的检查结果永远无法满足必需检查。 |
| Agent 编写的代码无法获取机密 | 对于 Agent 推送的代码,工作流运行只能获得其作业令牌,因此 Agent 无法推送会将你的机密发送到其他地方的工作流。 |
| 禁止更改机密、环境或分支保护 | 无论 Agent 拥有什么权限,都不能更改这些内容。也不能绕过推送保护。 |
请参阅 Agents 和 Guardrails。
Agent 任务:输入目标,输出拉取请求
为你的某个 Agent 设定目标。Diffinery 会以该 Agent 的身份启动沙箱,并在其中检出代码库,使用你自己的模型密钥运行 Claude Code、Codex 或你自己的命令,将完整记录实时传输到任务页面,然后推送分支并创建以该目标为意图的拉取请求。你的 API 密钥绝不会进入沙箱:每次运行都会获得一个只有 Diffinery 的模型代理才接受的令牌。任务可以先制定计划供你批准,可以并行运行 best of N 次尝试,也可以验证并合并:修复自身未通过的检查,并在个人批准后合并。
如需使用你的 Claude 或 ChatGPT 订阅,而不是 API 密钥,请打开终端:这是一个在浏览器中运行的 shell,其中已检出代码库。你可以使用自己的订阅登录 Claude Code 或 Codex,并交给它任务。
请参阅 Agent tasks 和 Terminals。
审查每个拉取请求的 Agent
让你的某个 Agent 像 Cursor 的 Bugbot 一样,审查拉取请求中的 Bug、安全问题和逻辑错误。它会在只读沙箱中运行 Claude Code、Codex 或你自己的命令,并使用基础分支中的 REVIEW.md 规则;它会发布带有建议修复方案的行内问题,并报告 Agent review 检查;如果发现阻塞性问题,该检查就会失败。点击 Fix it 可将问题交给 Agent 任务处理,自动修复功能也可以将修复推送到拉取请求的分支。对于没有写入权限的作者所提交的拉取请求,系统绝不会自动审查;每个代码库的审查费用由一位个人的密钥支付。
请参阅 Agent review。
今日和需要你处理的事项
今日是你登录后的第一个页面。它会显示需要你处理的事项(等待人员处理的 Agent 拉取请求、有人请你评审的内容、你自己被阻塞的拉取请求)、Agent 正在处理的工作、你的 Agent 任务,以及从昨天以来已合并、已交付或失败的内容,涵盖你能查看的所有仓库。Agent 也可以通过 today MCP 工具读取同一视图,你还可以通过晨间邮件收到这份内容。
请参阅今日。
通过检查后自动合并
在 Settings → Merge on green 中选择必须通过的检查,指定哪些 Agent 的拉取请求应自动合并,并选择是否需要等待人员批准。此后,拉取请求一旦通过检查并满足规则,就会立即合并,无需任何人点击 Merge。不会跳过任何内容:Agent 对工作流文件所做的更改仍需由人员合并。
请参阅通过检查后自动合并。
Agent 项目、沙盒和文档
- **项目:**每个仓库都有一个 Agent 任务看板、一个对话、项目说明,以及每项任务都会读取的记忆。协调器 Agent 可以将你发布的内容转换为任务,并遵守你设置的限制。
- **沙盒:**一种短期 Linux 容器,其中已克隆仓库,可通过 MCP 或 REST API 驱动,让使用聊天应用的 Agent 能获得一台真正的机器来构建和测试。
- **Agent 文档:**每个页面都提供 Markdown 格式,另有 llms.txt、llms-full.txt、REST API 的 OpenAPI 3.1 描述,以及通过 MCP 使用的
search_docs和read_docs。
插件和集成
在 GitHub 上训练的 Agent 已经知道如何使用 Diffinery,而这些集成让你可以在常用工具中使用其余功能。这里的所有功能都适用于 diffinery.com 和你部署的任何实例。
| 集成 | 功能 | 安装 |
|---|---|---|
Claude Code 插件(diffinery) | 带 OAuth 登录的 MCP 服务、用于讲解分支 → 拉取请求 → CI → 合并流程和 Diffinery Agent 规则的技能、显示失败任务日志尾部的 /diffinery:pr-status,以及一个会告知 Claude 当前位于 Diffinery 仓库中的会话钩子 | claude plugin marketplace add codician-team/diffineryclaude plugin install diffinery@diffinery |
Claude Code 中的实时 CI(diffinery-ci) | 提示词上方的状态栏,显示分支的拉取请求及其检查结果(✗ 1 failed · ● 3 running · ✓ 6);带有 修复 CI 的 /diffinery-ci 面板、状态栏条目,以及 CI 状态稳定后向 Claude 发送的提示,云端会话也适用 | claude plugin install diffinery-ci@diffinery |
Codex 插件(diffinery) | 为 OpenAI 的 Codex CLI 提供相同的 MCP 服务、技能和会话钩子 | codex plugin marketplace add https://diffinery.com/codician/diffinery.gitcodex plugin add diffinery@diffinery |
| MCP 服务 | diffinery.com 上的 52 个工具:读取代码、提交、创建、审查和合并拉取请求、查看 CI 和任务日志、运行沙盒、跟踪 Agent 任务和项目、读取 Today、发布版本、从 GitHub 导入以及搜索文档;权限和防护规则与 Git 相同。已列入官方 MCP Registry,名称为 com.diffinery/diffinery | https://<your host>/mcp,通过浏览器登录(OAuth 2.1)或使用 Agent 令牌 |
| Claude(claude.ai、桌面版、移动版) | 将 Diffinery 作为自定义连接器使用,或将插件作为文件上传到云端会话和项目 | 设置 → 连接器 → 添加自定义连接器,https://diffinery.com/mcp |
diffinery CLI | 仓库、带 --intent 的拉取请求、自动合并、运行和日志、机密、运行器和迁移;diffinery setup 会为你登录,并一次性设置 git、gh 和两个 Claude Code 插件 | curl -fsSL https://diffinery.com/install | bash |
GitHub CLI(gh) | 通过 Diffinery 兼容 GitHub 的 REST 和 GraphQL API 使用 gh pr create、gh pr checks、gh pr merge 等命令;Claude Code 会通过它显示分支的拉取请求和 CI 状态 | diffinery auth setup-gh |
| VS Code、Cursor、Windsurf | 使用通行密钥登录并从 Diffinery 克隆;编辑器中的 Git 会使用该登录凭据推送和拉取 | diffinery.com/install-editor |
| JetBrains IDE | 在 IntelliJ IDEA、PyCharm、WebStorm 等 IDE 中使用通行密钥登录,通过从版本控制获取进行操作(2024.3 或更高版本) | 插件仓库 https://diffinery.com/-/jetbrains/updatePlugins.xml |
插件源码位于 plugins/,扩展源码位于 apps/vscode 和 apps/jetbrains,CLI 源码位于 apps/cli。Claude、Claude Code、Codex、Cursor、VS Code 和其他应用的分步指南见连接 AI 应用。
功能
| 领域 | 功能 | 文档 |
|---|---|---|
| Git | 使用令牌通过 HTTPS 克隆、获取和推送;浅克隆、Git LFS、refs/pull/<n>/head 和 /merge;将大型推送从 R2 分块解包 | 通过 HTTPS 使用 Git |
| 拉取请求 | 草稿 PR、带行内评论的评审、必需的批准和检查、合并、压缩合并和变基、自动合并、包含 merge_group 运行的合并队列,以及用于告诉评审者变更目的的 intent 字段 | 拉取请求 |
| 问题和版本 | 问题、标签、里程碑、表情回应、提及、附带资源和自动生成说明的版本 | 协作 |
| Actions(CI/CD) | 在 Cloudflare Containers 托管运行器或自托管运行器上运行兼容 GitHub Actions 的工作流;缓存、构件、密钥、环境、OIDC、Docker、服务容器、并发组、定时运行 | Actions 概览 |
| 容器注册表 | 在 <your host>/<owner>/<name> 推送和拉取 OCI 镜像,以此替代 ghcr.io | 容器注册表 |
| Agents | 具有服务端强制护栏的 Agent 账号;使用 Claude Code 或 Codex 执行 Agent 任务(先规划、择优选取、验证并落地);带行内发现项和 Agent 评审检查的 Agent 代码评审;使用你自己的 Claude 或 ChatGPT 方案的浏览器终端;配有协调者和共享记忆的项目;沙盒;以及展示需要你处理事项的 Today 页面 | Agents |
| 检查通过后合并 | 人员和 Agent 发起的拉取请求在所需检查通过且满足分支规则后会自动合并,只需几次点击即可完成设置 | 检查通过后合并 |
| 插件和集成 | Claude Code 和 Codex 插件、Claude Code 实时 CI 状态栏、官方 MCP Registry 中的 MCP 服务、diffinery CLI、gh 支持,以及 VS Code、Cursor、Windsurf 和 JetBrains 扩展 | 插件和集成 |
| API | 兼容 GitHub 的 REST(/api/v3)和 GraphQL(/api/graphql)API,以 OpenAPI 3.1 描述,并提供兼容 GitHub 的 Webhook | REST API |
| 安全 | 通行密钥(WebAuthn)、分支保护、推送保护、加密密钥、审计日志、内容审核、速率限制、配额和紧急停用开关 | 安全概览 |
| 迁移 | 从 GitHub 导入历史记录、问题、拉取请求、评审和版本;可通过 Web、CLI、API 或 MCP 进行 | 从 GitHub 迁移 |
对比
Diffinery 是一个 Forge:它托管你的代码并运行 CI。以下是它与人们通常拿来比较的工具的对比。其他产品的相关信息来自其官方网站和文档,并于 2026 年 10 月核实;每篇对比文章都注明了来源。
| Diffinery | GitHub + GitHub Actions | GitLab | Gitea / Forgejo | Runner 服务(Blacksmith、Depot) | |
|---|---|---|---|---|---|
| 产品类型 | 内置 CI 的开源 Forge | 内置 CI 的托管 Forge | 内置 CI 的 Forge | 内置 CI 的开源可自托管 Forge | 为 GitHub Actions 提供更快的 Runner;你的代码仍保留在 GitHub 上 |
| 由谁运行 | 你,在自己的 Cloudflare 账户中运行 | GitHub(Enterprise Server:你的服务器) | GitLab,或由你运行(自行管理) | 你,在自己的服务器上运行(或使用 Gitea Cloud、Codeberg) | 服务提供商 |
| 需要运维的服务器 | 无 | 无(托管服务) | 无(托管服务)或使用你自己的服务器 | 你的服务器和 Runner 机器 | 无 |
| CI 工作流格式 | .github/workflows/ 中的 GitHub Actions YAML | GitHub Actions YAML | .gitlab-ci.yml | 类似 GitHub Actions 的 YAML,“大体兼容”(Gitea)或“不以兼容为设计目标”(Forgejo) | GitHub Actions YAML,使用新的 runs-on 标签 |
| 默认的托管 Linux Runner | 4 vCPU、12 GiB;在 Cloudflare Containers 中按作业启动 | 私有仓库使用 2 vCPU、8 GB | 2 vCPU、8 GB | 由你安装的 Runner | 多种规格,按分钟计费 |
| 托管 macOS 和 Windows | 否(自托管 Runner) | 是 | Beta 版 | 由你安装的 Runner | 是 |
| 为 AI Agent 内置的防护措施 | 为每个 Agent 账户内置 | 需自行配置规则集和令牌权限 | 需自行配置审批规则和服务账户 | 未涵盖 | 不适用 |
| 内置 MCP 服务 | 是,位于 /mcp | 是 | 是 | Gitea:需单独安装 MCP 服务 | 不适用 |
| 许可证 | Apache-2.0 | 专有 | 开放核心 | MIT(Gitea)、GPL v3+(Forgejo) | 专有 |
查看详情:Diffinery 与 GitHub 的对比 · 与 GitLab 的对比 · 与 Gitea 和 Forgejo 的对比 · 与 Blacksmith 的对比 · 与 Depot 的对比 · 与 CircleCI 的对比 · 与 Buildkite 的对比 · 与 Bitbucket 的对比 · 所有 GitHub Actions 替代方案 · Cloudflare 上的其他 Git 和 CI 项目
在你自己的 Cloudflare 账户上自托管
Diffinery 专为任何人部署到自己的 Cloudflare 账户和域名而设计。使用你部署的实例的人都不需要 Cloudflare 账户;只有部署时才需要。
你需要:
- 一个启用了 R2 的 Cloudflare 账户,并订阅 Workers Paid 计划。Containers、带 SQLite 的 Durable Objects、Workflows 和 Queues 都需要付费计划。
- 该账户下的一个域名(Diffinery 会部署在某个主机名的根路径上,例如
git.example.com)。 - 一个具有部署你自己的 Diffinery中所列权限的 Cloudflare API 令牌。
- 用于执行部署的机器上安装 Node.js 22、pnpm 10、Docker、
jq、curl和openssl。
部署:
git clone https://diffinery.com/codician/diffinery.git # or the GitHub mirror
cd diffinery
export CLOUDFLARE_API_TOKEN=... # never commit it
export CLOUDFLARE_ACCOUNT_ID=...
export DIFFINERY_DOMAIN=git.example.com # your hostname
export [email protected] # who becomes site administrator on first sign-in
scripts/setup.sh --dry-run # checks tools, token and config without changing anything
scripts/setup.sh # creates the Cloudflare resources and deploys
设置脚本会在你的账户中创建缺少的资源(D1 数据库、R2 存储桶及生命周期规则、队列、Turnstile 小组件和用于邮件恢复的 Cloudflare Access 应用),应用数据库迁移,部署 Worker 和运行器镜像,生成 Worker 自身的密钥(仅生成一次),并检查网站是否正常响应。每个步骤都可以安全地重复执行,因此同一条命令也能更新现有实例。然后打开 https://<your host>/auth/access,使用一次性验证码确认你的邮箱,并添加一个通行密钥:你就是第一位管理员。
你也可以通过 Diffinery 或 GitHub Actions 中提供的 Deploy 工作流从 CI 部署。包含邮件发送、DNS、Access 和故障排除内容的完整指南见部署你自己的 Diffinery,所有设置的说明见配置。
它在 Cloudflare 上的运行方式
| 组件 | Cloudflare 产品 |
|---|---|
| Web UI、git smart HTTP、REST 和 GraphQL API、MCP | Workers(Hono) |
| 一个代码仓库:引用、对象、拉取请求、问题、评审、检查、运行 | 一个带 SQLite 的 Durable Object(RepoDO),每个代码仓库对应一个 |
| 大型对象、Git LFS、容器镜像、日志、缓存、制品 | R2 |
| 账户、组织、令牌、邀请、通知、审计日志 | D1;读取副本通过 Sessions API 读取 |
| Webhook、通知、邮件 | 队列(带死信队列)和 Email Sending |
| 工作流运行(持久化、可在重启后继续、作业超时为 6 小时) | Workflows |
| 作业运行器、Agent 沙箱和导入传输 | Containers(位于 containers/runner 的 Ubuntu 24.04 镜像) |
定时工作流(on: schedule) | Cron Triggers |
| 实时日志和拉取请求更新 | 带休眠功能的 Durable Object WebSocket |
| 登录 | 通行密钥(WebAuthn);Cloudflare Access 仅保护 /auth/access(邮件恢复路径) |
更多内容请参阅架构。
本地开发
pnpm install
pnpm -r build && pnpm -r typecheck && pnpm -r test
pnpm --filter @diffinery/app db:migrate:local
pnpm dev # http://localhost:8787, signed in as [email protected]
pnpm --filter @diffinery/app e2e # wrangler dev, real git, the runner agent and Chromium
pnpm dev 会在 wrangler dev 下运行 Worker,并使用本地 D1、R2 和队列,因此开发 Diffinery 无需 Cloudflare 账户。端到端测试套件会使用 git 推送真实代码仓库,通过真实的运行器 Agent 运行其工作流,调用 MCP 服务和 REST API(使用 @octokit/rest),并在 Chromium 中使用通行密钥登录。请参阅 CONTRIBUTING.md。
代码仓库结构
apps/diffinery the Worker: web UI, git, REST/GraphQL, MCP, Actions, D1 migrations, docs, e2e tests
apps/cli the `diffinery` command-line client
apps/vscode the VS Code, Cursor and Windsurf extension
apps/jetbrains the JetBrains IDE plugin
plugins the Claude Code and Codex plugins (marketplaces in .claude-plugin/ and .agents/plugins/)
containers/runner the runner agent, sandbox server and the container image
packages/git-core git objects, packfiles, deltas, diff and merge, in pure TypeScript
packages/workflow-yaml the GitHub Actions workflow parser, expressions, matrices and cron
packages/shared types shared by the Worker and the runner
scripts setup, bootstrap and deploy scripts for Cloudflare
Diffinery 目前尚不支持的功能
Diffinery 还很年轻,我们希望你在迁移前了解它的限制:
- 托管运行器仅支持 Linux x64。 macOS、Windows 和 Arm 作业需要使用自托管运行器。
- Git 仅支持 HTTPS。 不提供 SSH 访问。
- 不支持 Fork。 拉取请求只能在同一仓库的分支之间创建。
- 不提供 Wiki、讨论区、Pages 风格的网站、Codespaces 风格的云端编辑器或应用市场。
- 评审功能比 GitHub 简单。 目前不支持待处理评审、建议更改或解决讨论串;分支保护也不支持代码所有者评审或签名提交要求。
- 某些 GitHub 事件(例如
issues和issue_comment)虽可在工作流中使用,但不会触发运行。 - 不提供托管服务。 没有人替你运行 Diffinery:你需要部署自己的实例。
完整列表请见与 GitHub Actions 的兼容性和Diffinery 与 GitHub 的对比;我们接下来的计划则列于路线图。
常见问题
Diffinery 是什么? 一个完全运行在 Cloudflare 上的开源 Git 锻造平台和 CI 平台。它将 GitHub 的代码托管、拉取请求和 GitHub Actions 整合到一个应用中,你可以将其部署到自己的 Cloudflare 账户。
Diffinery 是开源的 GitHub Actions 替代方案吗?
是。Diffinery 可运行 .github/workflows/ 中的 GitHub Actions 工作流文件,支持相同的触发器、表达式、矩阵、needs、可复用工作流、环境、密钥、OIDC、服务容器和 Docker,并可下载和运行市场中的 Actions(uses: owner/repo@ref)。所有已知差异都列在与 GitHub Actions 的兼容性中。
Diffinery 是可自托管的 GitHub 替代方案吗? 是。与 Gitea、Forgejo 或 GitLab 一样,你需要自行运行它;但它不是部署到服务器或 Kubernetes 集群,而是部署到 Cloudflare 的无服务器平台,并且其 CI 运行 GitHub Actions 工作流文件,而非自有格式的文件。
Diffinery 与 Gitea 和 Forgejo 有何不同? 三者都是需要自行运行的开源 Git 锻造平台。Gitea 和 Forgejo 运行在你自己的服务器上,CI 则使用你安装的运行器机器。Diffinery 只运行在 Cloudflare 上:无需维护服务器或运行器机器,每个 CI 作业都会获得一个全新的容器,但你的代码会存储在 Cloudflare 的基础设施上。Gitea 和 Forgejo 提供 Wiki 和软件包注册表,而 Diffinery 不提供。请见Diffinery 与 Gitea 和 Forgejo 的对比。
Diffinery 是 Blacksmith 或 Depot 的替代方案吗? 适合不同类型的团队。Blacksmith 和 Depot 将你的代码和拉取请求保留在 GitHub 上,并按分钟计费,让你的作业在更快的机器上运行。Diffinery 也会替代 GitHub:你的仓库会迁移到自己的实例,作业则在 4-vCPU 运行器上运行,费用由你的 Cloudflare 账户按 10 ms 计费。如果你想继续使用 GitHub,且不想自行运行任何服务,那么运行器服务是更简单的选择。请见Diffinery 与 Blacksmith 的对比和与 Depot 的对比。
我的 GitHub Actions 工作流无需更改就能运行吗?
大多数可以。Diffinery 会按相同语法读取 .github/workflows/*.yml 并运行市场中的 Actions。需要托管 macOS、Windows 或 Arm 运行器的作业则需要自托管运行器。请见与 GitHub Actions 的兼容性。
Diffinery 比 GitHub Actions 更快吗?
我们不会在 GitHub 上运行作业来进行基准测试,因此不会声称有具体的提速幅度。Diffinery 的默认运行器配备 4 个 vCPU 和 12 GiB 内存,而 GitHub 面向私有仓库的标准 Linux 运行器配备 2 个 vCPU 和 8 GB 内存,因此使用多个核心的作业可获得两倍的资源。在 Diffinery 上,作业排队后大约 3 到 5 秒就会启动。请参阅实测性能。
代码留在 GitHub 上时,我可以运行 Diffinery CI 吗?
可以。一个小型 GitHub 工作流会将每次推送镜像到你的 Diffinery 实例,随后实例会运行相同的 .github/workflows/ 文件,并可在 Diffinery 上的运行失败时让 GitHub 作业失败。请参阅代码留在 GitHub 上时运行 Diffinery CI。
运行需要多少费用? Diffinery 在 Apache License 2.0 下免费开源,没有付费版本。运行费用取决于你的 Cloudflare 账户账单:Workers 付费计划费用加上使用费用。托管运行器使用 Cloudflare Containers,仅在作业运行期间计费。
它能在 Cloudflare 免费计划上运行吗? 不能。Containers、带 SQLite 的 Durable Objects、Workflows 和 Queues 都需要 Workers 付费计划。请参阅部署你自己的 Diffinery。
它支持 AI 编码 Agent 吗?
支持。Agent 可通过 MCP(https://<your host>/mcp,在官方 MCP Registry 中列为 com.diffinery/diffinery)、REST API、git 或 GitHub CLI 连接。我们提供适用于 Claude、Claude Code、Codex、Cursor 和 VS Code 的指南,以及 Claude Code 和 Codex 插件,可通过 claude plugin marketplace add codician-team/diffinery(或 https://diffinery.com/codician/diffinery.git)安装;插件源码位于 plugins/。Diffinery 也可以代你运行这些 Agent:Agent 任务会在沙箱中运行 Claude Code 或 Codex 并创建拉取请求,Agent 审查则会检查每个拉取请求。请参阅专为 AI 编码 Agent 打造和连接 AI 应用。
我可以使用 Claude 或 ChatGPT 订阅,而不是 API 密钥吗? 在终端中可以:终端是在浏览器中使用的 Shell,其中已检出仓库;你可以使用自己的套餐登录 Claude Code 或 Codex,并交给它一些可创建拉取请求的任务。无头 Agent 任务和 Agent 审查需要使用你添加的 API 密钥(Anthropic、OpenAI 或 OpenRouter),因为服务提供商允许通过 API 密钥进行自动化使用。只有私有仓库支持 ChatGPT 套餐中的 Codex,这是 OpenAI 允许的范围。请参阅终端。
AI Agent 可以合并自己创建的拉取请求吗? 默认情况下不可以。除非分支保护规则允许,否则 Agent 不能推送到受保护分支或合并到其中;其拉取请求需要经过人工批准;其检查结果永远不会满足必需检查的要求;它们推送的代码所触发的运行也不会获得密钥。请参阅防护措施。
我可以将仓库从 GitHub 迁移过来吗?
可以。导入器可以迁移单个仓库或整个组织,并保留历史记录、问题、拉取请求、审查和发布记录。密钥名称会一并迁移,并提供字段供你输入每个密钥的值。gh、Octokit、VS Code 和 JetBrains IDE 都可以与 Diffinery 配合使用。请参阅从 GitHub 迁移。
我可以在 diffinery.com 上注册吗? 不能直接注册。diffinery.com 是项目主页,也是开发 Diffinery 的实例,该站点的账户需要邀请才能获得。要先在该站点试用 Diffinery,再部署自己的实例,请申请提前体验。它并非面向团队的托管服务:要在工作中使用 Diffinery,请部署自己的实例。 Diffinery 是 Cloudflare 上唯一的 Git 平台吗? 不是。其他开源项目也在 Cloudflare 上运行 Git 或 CI,Built on Cloudflare 列出了它们的差异。据我们所知,Diffinery 是唯一一个将 Git 托管、带有 Web 界面评审的拉取请求,以及兼容 GitHub Actions 且支持市场操作的 CI 全部运行在 Cloudflare 上的平台(核查于 2026 年 10 月 25 日)。
开发工作在哪里进行? 在 Diffinery 自身上,地址为 diffinery.com/codician/diffinery。Diffinery 自己的 CI、部署和拉取请求都在那里运行。GitHub 仓库是一个镜像,欢迎在任一平台提交问题和拉取请求;请参阅 CONTRIBUTING.md。
贡献、安全和许可证
- **贡献:**请参阅 CONTRIBUTING.md,如果你是 AI 编码 Agent,也请参阅 AGENTS.md。请遵守行为准则。如有疑问,请联系 SUPPORT.md。
- 路线图和变更:ROADMAP.md 和 CHANGELOG.md。
- **安全:**请勿公开提交漏洞相关问题。请按照 SECURITY.md 中的说明私下报告。
- **引用 Diffinery:**请使用 GitHub 的“引用此仓库”按钮,或参阅 CITATION.cff。
- 许可证:Apache License 2.0。请参阅 NOTICE。
Diffinery 由 Codician 团队打造。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。







