AIコーディングエージェントが、コード変更の影響を受ける特定のテストのみを特定して実行できるようにし、検証作業を高速化します。
別名 DiffCI/core, core, @diffci.com/diffci
- スター
- 3
- ツール
- —
- ダウンロード数(30日間)
- 11,615
- 最新バージョン
- 0.3.45
- 最終コミット
- 2026年11月14日
- ライセンス
- MIT
DiffCI MCPとは
DiffCIはMCPサーバーです。 AIコーディングエージェントが、コード変更の影響を受ける特定のテストのみを特定して実行できるようにし、検証作業を高速化します。.
プロジェクトのREADMEから生成された概要
DiffCI MCP server について
Claude Code、Cursor、CodexなどのAIコーディングエージェントを使用している開発者は、DiffCIを利用してコード変更の影響を受ける特定のテストのみを特定し、実行できます。検証範囲を絞り込むことで、このMCP serverは、ローカルでの限定的なチェックは通過したものの、後のフルCIゲートで失敗するという、エージェントが陥りがちな問題を回避するのに役立ちます。JSON-RPC 2.0を使用したローカルstdioサーバーとして動作し、動作にアカウント、APIキー、またはホスト型サービスを必要としません。
このサーバーは、影響を受けるテストの計画を生成するdiffci_select_testsや、それらの特定のテストを実行するdiffci_run_affected_testsなどの専用ツールを提供します。JavaScript、TypeScript、Vue、Go、Maven、およびpytestを使用するPythonプロジェクトを含む、さまざまな環境をサポートしています。ツールが安全に範囲を絞り込むための十分な根拠を見つけられない場合は、安全性を確保するために自動的にテストスイート全体を実行するフォールバック機能が働きます。このローカル実行モデルにより、デフォルトでデータが送信されることはなく、プライベートリポジトリでも安全に使用できます。
できること
- 1影響を受けるテストの特定現在のコード変更に基づいて、どのテストファイルを実行する必要があるかをAIに特定させます。
- 2テスト選択ロジックの説明現在の検証実行において、なぜ特定のテストが選択されたのかについて詳細な説明を求めます。
- 3コード変更のローカル検証コードをプッシュする前に、スナップショットを検証するために、関連するテストのみを実行するようエージェントに指示します。
- 4ステージングされた変更の分析現在のワーキングツリーの状態を把握するために、ステージ済み、未ステージ、および未追跡のすべてのファイルをリストアップします。
プロジェクトの README から作成されています。すべてのユースケースは、その引用と照らし合わせて確認されています。
DiffCI MCPのインストール方法
フォーマット検証日 2026年11月10日Cursor に追加Gooseに追加Claude CodeにDiffCI MCPをインストール
$ claude mcp add core -- npx -y @diffci.com/diffciCursorにDiffCI MCPをインストール
~/.cursor/mcp.json
{
"mcpServers": {
"core": {
"command": "npx",
"args": [
"-y",
"@diffci.com/diffci"
]
}
}
}VS CodeにDiffCI MCPをインストール
.vscode/mcp.json
{
"servers": {
"core": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@diffci.com/diffci"
]
}
}
}VS Code CLIにDiffCI MCPをインストール
$ code --add-mcp '{"name":"core","type":"stdio","command":"npx","args":["-y","@diffci.com/diffci"]}'Claude DesktopにDiffCI MCPをインストール
claude_desktop_config.json
{
"mcpServers": {
"core": {
"command": "npx",
"args": [
"-y",
"@diffci.com/diffci"
]
}
}
}CodexにDiffCI MCPをインストール
$ codex mcp add core -- npx -y @diffci.com/diffciCodex config.tomlにDiffCI MCPをインストール
~/.codex/config.toml
[mcp_servers.core] command = "npx" args = ["-y", "@diffci.com/diffci"]
Gemini CLIにDiffCI MCPをインストール
$ gemini mcp add -s user core npx -- -y @diffci.com/diffciGemini settings.jsonにDiffCI MCPをインストール
~/.gemini/settings.json
{
"mcpServers": {
"core": {
"command": "npx",
"args": [
"-y",
"@diffci.com/diffci"
]
}
}
}自動チェック
実行日 2026年11月13日完全なレポート →自動チェックに合格しました。これはセキュリティ監査ではありません。コードを読み、サーバーに必要最小限のアクセス権を与えてください。 チェックの仕組み
- ソースリポジトリがリンクされており、アクセス可能diffci/core is public and reachablegithub.com/diffci/core ↗合格
- パッケージがこのリポジトリをソースとして指定@diffci.com/diffci names diffci/core as sourcenpmjs.com/package/@diffci.com/diffci ↗合格
- ビルドの来歴 (Sigstore 証明)Sigstore attestation for @diffci.com/diffcinpmjs.com/package/@diffci.com/diffci/v/0.3.42#provenance ↗合格
- オープンソースライセンス (OSI)MITspdx.org/licenses/MIT.html ↗合格
- 過去1年以内にコミットまたはリリースありLast commit or release 2026-11-13github.com/diffci/core ↗合格
- OpenSSF Scorecard未チェック
- パッケージ名が有名なパッケージに酷似していないNo popular package one edit away from @diffci.com/diffci合格
- パッケージおよびその依存関係に重大な勧告なしthe package checked; no critical advisoryosv.dev ↗合格
- モデルへの隠れた指示がない0 tool descriptions and the README read; no override phrases, credential paths or hidden characters合格
- 破壊的なツールがラベル付けされている未チェック
- リモートエンドポイントが MCP ハンドシェイクに応答initialize answered with protocol 2025-06-18 in 37 ms合格
README
GitHubで見るDiffCI Core
Verification for AI coding agents. DiffCI tells Claude Code, Codex, Cursor (or you) which tests and checks a change affects, runs them before the push instead of letting them fail at the full CI gate afterwards, and leaves a receipt of what ran and what was skipped. MIT licensed, runs locally, sends nothing by default, and falls back to the full suite whenever the evidence is incomplete.
npx "@diffci.com/diffci@latest" check
Run it in any Git checkout with Node.js 22.5+. What the output means.
If DiffCI saves you CI time, a ⭐ helps others find it.
On every pull request, add one job beside your existing CI. Its job summary shows which tests the change affects and why, or that the full suite is needed and why. It runs no tests and skips or changes nothing:
- uses: actions/checkout@v7
- uses: DiffCI/core@v0.3.39
Add with: comment: "true" (and pull-requests: write on the job) and the same answer appears on the pull request itself, updated in place on each push:
Full workflow · GitLab CI/CD component
Why
Coding agents pass the narrow check they picked and miss wider breakage, then rerun the whole suite when they are unsure. We measured this on our own agent-built production app (about 1,100 commits in two months, most of them co-authored by Claude):
- 104 pushes failed the full gates after push. Each passed whatever the agent ran locally.
- Agents chose their own test files 928 times and ran the full suite 282 times, but asked a tool which tests were affected only 24 times.
- When DiffCI could narrow the run, it selected 2.2% of test files, cutting test time by 93%. None of those commits had a failing test, so this shows speed, not regression catching.
- DiffCI still fell back to the full suite on 58% of commits, mostly because a config file or
package.jsonchanged. Narrowing those safely is the main open problem, and a good place to contribute.
MCP server
This repository contains DiffCI's MCP server. It is implemented in
packages/diffci-cli/src/client/mcp.ts
and published as the diffci-mcp binary of @diffci.com/diffci: a local
stdio server speaking JSON-RPC 2.0 (initialize, tools/list, tools/call)
that runs against the checkout it is pointed at. It needs no account and sends
nothing by default.
npx -y -p @diffci.com/diffci@latest diffci-mcp
{
"mcpServers": {
"diffci": { "command": "npx", "args": ["-y", "-p", "@diffci.com/diffci@latest", "diffci-mcp"] }
}
}
| Tool | What it does |
|---|---|
diffci_changed_files |
Lists staged, unstaged and untracked changes; runs no tests |
diffci_select_tests |
Returns the affected-test plan for the current changes, with fallback reasons; runs no tests |
diffci_explain_selection |
The same plan, for explaining why each test is in it |
diffci_run_affected_tests |
Verifies the current snapshot with the affected tests, or the full suite as a fallback |
diffci_verify_changed |
Verifies the exact working-tree snapshot; fails closed |
diffci_verify |
Verifies a clean commit range and returns a receipt bound to HEAD |
diffci_check |
Compares full and selected test runs and reports paired runtime |
diffci_init |
Seeds agent instructions, MCP configs, the verify skill and a pre-push hook |
diffci_verify_workflow |
Checks that a DiffCI GitHub Actions job cannot affect the rest of CI |
Use it from your coding agent
The public integrations/agent-plugin package
packages the MCP server above as a checkout-aware local plugin for agent
marketplaces: marketplace metadata, skills, and a launcher pinned to the
published diffci-mcp binary. It does not include product services or private
source. The
cross-agent installation guide covers Codex,
Claude Code, Cursor, Grok, Meta Muse Code, and generic MCP hosts.
# Codex
codex plugin marketplace add DiffCI/core
codex plugin add diffci@diffci-local
# Claude Code
claude plugin marketplace add DiffCI/core
claude plugin install diffci@diffci-marketplace
Cursor Marketplace reads .cursor-plugin/marketplace.json
from this repository. Meta Muse Code reads the native root
marketplace.json. Before a public listing is approved,
use the local MCP configuration in the agent-plugin package or visit
https://diffci.com/mcp-server.
Installing the plugin does not make an agent use it. Paste the
short agent-instructions snippet
into CLAUDE.md or AGENTS.md so it runs DiffCI before pushing.
GitHub Action
The public action.yml ("DiffCI change impact") shows, in the
job summary of every pull request, which tests the change affects and why, or
that the full suite is needed and why. It is observation only: it runs the
pinned published DiffCI CLI outside the observed checkout, retains existing CI
jobs, skips nothing, and uploads the report as an artifact. See the
observer Action guide and
workflow example.
Set comment: "true" (with pull-requests: write) to also keep one comment on
the pull request up to date with the answer, where reviewers see it. Outputs
such as full-suite-required and affected-tests let a workflow act on the
answer; see outputs.
Set verify: "true" for a fast check:
the Action also runs the affected tests and lint/typecheck, likeliest failures
first, and fails within minutes when one breaks. It adds a job and skips
nothing, so your full test job stays as it is
(example).
The v0.3.10 corresponding source
remains publicly available at tagged Core commit 4c76be14 (cli-v0.3.10-source)
while distribution migrates to the Core-native CLI package.
diffci check compares full and selected runtime when safe to measure, writes reports outside the checkout, and sends nothing by default. Test commands can generate files; keep required CI authoritative.
Measured example: one controlled Cal.com sandbox replay measured 44.2% net reduction in install + pretest + test runtime including analysis overhead. This is a job-equivalent comparison, not production savings or a forecast for your repository. Method and limitations.
Star Core · Volunteer a pilot repository · Find a first contribution. Watch → Custom → Releases and Discussions for benchmark results and support updates. Public roadmap.
This is the standalone Core engine. It analyzes local JavaScript/TypeScript repositories, supported Vue components, root Go modules, conventional Maven reactors and Python projects tested with pytest, traces dependency impact, infers GitHub Actions structure and proposes test selections with evidence and full-run fallbacks. It works without a DiffCI account, hosted service or API key. See the release boundary for support limits.
Want to try DiffCI in an existing repository? Use the published CLI: npx @diffci.com/diffci@latest check. See the CLI quickstart for a no-execution analysis option, prerequisites, and result interpretation. To get help setting it up and have the cases that matter to your repository fixed first, join as a design partner. Tried it already? Share your result, including fallbacks, refusals and misses, and choose whether we may publish it. The commands below build the standalone engine from source.
Run locally
Requires Git and Node.js 22.5 or later.
git clone https://github.com/DiffCI/core.git
cd core
npm ci
npm run build
npm test
node dist/cli.js plan --repo /path/to/clean-checkout --base HEAD~1 --head HEAD
The target must be a clean Git repository root checked out at --head. Fetch the base commit beforehand if using a shallow clone. JSON goes to stdout; analysis errors exit nonzero and recommend full CI. Core does not execute repository scripts, contact a DiffCI backend or send telemetry. Installation requires the npm registry.
To evaluate the same command on pull requests without changing required jobs, copy the advisory GitHub Actions example.
Plans are advisory. This release does not execute, skip or cancel CI jobs. SKIP_CANDIDATE is a candidate, not permission to bypass a check. Keep full CI authoritative while evaluating Core. Missing command synthesis, unsupported configuration and incomplete evidence must not be treated as an empty test suite. Static analysis is not proof that a test can safely be omitted.
For Maven jobs whose CI runs a lifecycle goal or profiles other than test, declare them in diffci.json (or the diffci key in package.json):
{ "maven": { "goal": "verify", "profiles": ["run-its"] } }
This changes the proposed command, such as mvn -pl tools -am verify -P run-its; Core still does not run it. Confirm the command against the repository's CI workflow before using it for execution.
What is included
Declared pnpm workspaces with a single Vitest test phase can receive package-local command plans. Each selected path must belong to a discovered test in a declared package. Runtime selections are batched to keep commands below Windows limits; packages declaring --typecheck retain a separate full type-test phase. Packages with compound scripts, lifecycle hooks, overlapping ownership or discovery blind spots refuse selective execution. Commands remain advisory and must be executed separately; CLI automatic timing of multiple commands requires additional integration.
| Area | Implementation |
|---|---|
| Changes and dependencies | Git deltas, repository inventory, JS/TS dependency graph, impact traversal |
| Safety and planning | Risk signals, conservative fallback, always-run policy, test selection and command synthesis |
| CI analysis | GitHub Actions evidence, job/reference graphs, conditions and matrix inference |
| Reproducible evaluation | Synthetic benchmark and portable regression tests |
| Measurement | Current-process wall time, CPU time and ending RSS; explicit-input cost/energy/carbon estimates |
The library entry point exports analyzeCheckout, buildDependencyGraph, ImpactAnalyzer, DefaultCIPlanner, collectEvidence, inferPipeline, measure and estimateImpact. Lower-level modules are available as package subpaths. This repository is the engine source, and the published @diffci.com/diffci CLI is released from it. The corresponding source for the previously published v0.3.10 package is retained in the source archive at tagged commit 4c76be14.
npm run typecheck
npm run audit:boundary
npm run benchmark
The benchmark constructs one temporary synthetic repository containing 100 chained modules and 100 importing test files. In one Node.js process it builds that same dependency graph three times, sequentially, and removes the fixture afterward. Install dependencies first with npm ci, then run npm run benchmark under Node.js 22.5 or later. Record the emitted node and platform alongside the machine CPU, memory, operating system, and competing workload when comparing runs. The three builds share process, operating-system, and compiler warmup effects; they are not independent repetitions with controlled cold caches.
Each entry in runs has these fields:
| Field | Interpretation |
|---|---|
basis: "measured" |
The process counters were observed rather than estimated. |
scope: "current-process" |
Only the benchmark's Node.js process is covered, not the whole host, container, or CI job. |
wallSeconds |
Elapsed wall-clock time around one buildDependencyGraph call. |
cpuSeconds |
User plus system CPU time consumed by the current process during that call; it can differ from wall time. |
rssBytesAtEnd |
Resident-set size sampled after the call. It is neither peak memory nor the memory allocated by that call alone. |
nodes, edges |
Graph size. The current fixture should produce 200 nodes and 199 dependency edges. |
confidence |
Dependency-graph confidence for this synthetic fixture. COMPLETE does not prove that a real repository can safely skip tests. |
For example, wallSeconds: 0.79, cpuSeconds: 0.84, and rssBytesAtEnd: 327868416 mean that one graph build elapsed for about 0.79 seconds, consumed about 0.84 current-process CPU seconds, and ended with roughly 328 MB RSS. They do not mean that CI became 0.79 seconds faster or saved 328 MB. The script does not execute tests, installation, builds, or a full-versus-selected comparison, so its timings must not be reported as CI savings.
The separate estimateImpact API can calculate estimatedUsd, estimatedKwh, and estimatedKgCo2e only from caller-supplied computeSeconds, price, power, and grid-intensity assumptions. Those values have basis: "estimated"; they are modeled scenarios, not benchmark output, physical measurements, billing records, or verified avoided emissions.
Sponsors
DiffCI Core is supported by its GitHub Sponsors. Sponsorship funds maintenance, broader language and CI support, and reproducible benchmarks.
Partners
No Partner sponsors yet. Become the first.
Team Sponsors
No Team Sponsors yet. Team Sponsor logos also appear on diffci.com/sponsors.
Backers
No Backers yet. Backers at $25/month or above are listed here.
Sponsors' bug reports are labelled sponsor and triaged first.
Core and Cloud
| Component | Availability | License |
|---|---|---|
| This Core repository | Public source | MIT |
| DiffCI Cloud: hosting, billing, organization management, dashboard, managed services | Private source | Proprietary; not included here |
| Optional enterprise modules | Not released here | A separate source-available license would apply if offered |
Only the explicitly extracted Core files and standalone tooling are in this repository. There is no private monorepo history, customer data, deployment configuration or Cloud implementation here. Core is usable independently; it is not a promise that the private product has already migrated to consume this package.
DiffCI Cloud's team features are free for public open-source repositories: an organization whose connected repositories are all public on GitHub gets them at no cost.
What stays in Core, and never moves to Cloud, is set out in STEWARDSHIP.md. The plan DiffCI writes for each change is an open format other tools can produce or consume: the change plan. Report vulnerabilities privately as described in SECURITY.md.
Contributing
Most open work is teaching DiffCI to narrow changes it currently treats as "run everything": config files, package.json edits and lockfiles. Each case is small and comes with a synthetic fixture, so you don't need to learn the whole engine. Django, Rust and PHP support are next and split into one-PR steps: see the Django, Rust and PHP tracking issues, or the Go and Maven ones for fewer full-suite fallbacks. Pick a good first issue and see CONTRIBUTING.md; a dev container is included.
Contributors
Thank you to everyone who has improved DiffCI:
- Emmanuel Mawulolo Tagbor:
diffci check-planfor comparing a saved plan with full-suite JUnit results (#74), Yarn Classic lockfile narrowing (#63), and follow-ups (#67, #70). - @FredApps: five safety fixes for runtime module dependencies, Maven module resources, runner suites, deleted assets and Go runtime inputs (#32–#36).
- Shounak Joshi: Go package-owned
testdataselection, so a golden-file edit runs the owning package's tests instead of the full suite (#85). - @bfs2021:
bun.lockandnpm-shrinkwrap.jsonrecognition in the lockfile signal (#64). - @sarankumar1325:
bun.lockdetection in CI inference (#105), removal of dead config-file patterns with a test for every entry (#106), a shared lockfile list so every lockfile invalidates the Vue analysis cache (#107), a regression test forvite.config-only changes in Vitest projects (#109), Goreplacetargets inside the repository modelled under root-module scope instead of forcing the full suite (#110), a full run when onlybabel.config.*or.babelrc*changes, where these files used to select no tests (#108), and the shared lockfile names in reference resolution, impact analysis and the lockfile-free dependency check, replacing three hand-written copies (#118–#120). - @robertwmccarty-caelum: the Vitest reporter/timeout config fixture and its narrowing conditions (#53, landed in #65).
- Varshith Sai Pasupuleti: tests for transitive Vue selection and full fallback (#16).
Every merged contribution is credited in the release notes, here, and next to the feature in the docs.
License
See LICENSE, NOTICE and CONTRIBUTING.md. Releases before the MIT switch were published under AGPL-3.0-only and are now also available under MIT; see LICENSE-HISTORY.md. Grant eligibility depends on the particular grant agreement. No eligibility or legal separation is guaranteed by this repository layout.
See the release boundary for scope and current limitations.
Useful? Star the engine and share a reproducible pilot result.
DiffCI MCPのよくある質問
DiffCI MCPをClaude Codeに追加するには
ターミナルでclaude mcp add core -- npx -y @diffci.com/diffciを実行します。すべてのプロジェクトで利用するには--scope userを追加します。
DiffCI MCPをCursorに追加するには
~/.cursor/mcp.jsonを開き、上記のインストールセクションに示すCursor設定を使ってmcpServersの下にサーバーを追加します。
DiffCIを利用するためにアカウントやAPIキーは必要ですか?
いいえ、DiffCIのアカウント、ホスト型サービス、またはAPIキーなしで動作します。
DiffCIが影響を受けるテストを特定できない場合はどうなりますか?
根拠が不十分な場合は、フォールバックとしてテストスイート全体を実行します。
どのプログラミング言語がサポートされていますか?
JavaScript/TypeScriptリポジトリ、Vueコンポーネント、Goモジュール、Mavenリアクター、およびpytestを使用するPythonプロジェクトをサポートしています。
