Skimless について
Skimlessは、大規模な変更を扱う人間のレビュアーやAIエージェント向けに、プルリクエストの差分を読む順に整理します。モデルを呼び出さずローカルで動作し、ファイルの優先順位、ヒューリスティックな検出結果、秘匿情報を除いたMCP応答を提供します。
主な機能
- 01レビュー優先度順にファイルを配置
- 02複数言語のヒューリスティックな検出結果を提示
- 03HTML、Markdown、JSONで出力
- 04秘密情報らしい文字列をマスキング
- 05CLI、GitHub Action、ライブラリ、MCPサーバーを提供
活用シーン
- 01大規模なプルリクエストで先に読む箇所を決定
- 02CIでレビュー用パケットを生成
- 03優先順位付きで秘匿情報を除いた差分をエージェントに提供
MCP 対応
SkimlessはMCPサーバーとして動作し、変更をレビューする前にエージェントが読む順番を取得できます。MCP応答では秘密情報らしい文字列がマスキングされ、Skimless自体はモデルを呼び出しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| cwd | string | いいえ | リポジトリのディレクトリ。デフォルトはサーバーの起動時のディレクトリです。 |
| base | string | いいえ | base...HEAD を、プルリクエストと同じ方法で比較します。例:origin/main。 |
| diff | string | いいえ | 統一 diff です。省略すると、Skimless はリポジトリで git diff を実行します。 |
| lang | enum | いいえ | パケットの言語。デフォルト:en、または skimless.config.json。en | pt |
| order | enum | いいえ | story(デフォルト)または risk。story | risk |
| format | enum | いいえ | summary(Markdown、デフォルト)または json(diff 行を除く完全なパケット)。summary | json |
| ignore | array | いいえ | スキップする Glob パターン。 |
| staged | boolean | いいえ | ステージ済みの変更のみをレビューします。 |
| budgetMinutes | number | いいえ | 読み取りにこの分数を超えるパケットにフラグを付けます。 |
詳細
Skimless
English · Português
大きくなりすぎたプルリクエストを読む順番を示します。
Skimless は差分をレビュー用パケットに変換します。最初に読むべき箇所、後回しにできるファイル、人の目で確認すべき行がわかります。Skimless はお使いのマシン上で実行されます。モデルへの問い合わせ、コメントの投稿、外部へのデータ送信は行いません。
実行時依存関係はゼロです。Node.js 22 以降に対応しています。CLI、GitHub Action、ライブラリ、AI エージェント向け MCP サーバーを提供します。パケットは英語とポルトガル語に対応しています。
npx skimless demo
skimless Do not skim this one
14 files · +86 −8 · about 2 min. 5 high-priority findings.
First pass: index.ts, fixture.ts, verify.ts.
1 src/api/index.ts Public export changed
2 src/webhooks/fixture.ts Secret-shaped string added
3 src/webhooks/verify.ts Signature compared with ==
4 .github/workflows/release.yml Workflow grants write permissions
5 src/billing/invoice.ts Billing path changed
6 test/webhooks/verify.test.ts Test file deleted
7 migrations/2026_09_23_api_keys.sql
8 src/billing/charge.ts
9 package.json Dependency manifest changed
10 Dockerfile
11 test/billing/charge.test.ts Can wait
12 docs/webhooks.md Can wait
13 package-lock.json Can wait
14 src/generated/types.ts Can wait
サンプルの verify.ts は、自分自身と比較するバッファに対して timingSafeEqual を呼び出しています。Skimless にはこのケースに対するルールはありません。該当ファイルを「実際のデータに似たキー」の下にある3番目に配置し、人が目を通せるようにします。それがこの製品の役割です。差分を読む道筋を示すのであって、判定を下すものではありません。
English packet · Pacote em português · 実際の差分:Express 4.21.2 → 5.0.0
これを開発した理由
エージェントを使って書かれたプルリクエストは大きくなりがちです。レビュー担当者は最初のファイルを開き、疲れてしまい、マイグレーションを見るときと同じように一目見ただけでロックファイルを承認します。Skimless は、どこならざっと読んでも問題なく、どこでは慎重に読む必要があるかを示します。まず公開 API、次に注意が必要な箇所、最後にノイズです。スコアは読む優先順位を示します。パケットに目立った項目がなくても、差分が安全だと証明されたわけではありません。
実行方法
npx skimless demo
npx skimless demo --lang pt --format html --out skimless.html
npx skimless review --base origin/main --format all --out skimless --fail-on high
または、npm install -g skimless を一度実行してインストールし、skimless を呼び出します。
--format all を指定すると、skimless.html、skimless.md、skimless.json が出力されます。--no-redact を指定しない限り、シークレットに似た文字列は伏せ字になります。ローカルでの --fail-on のデフォルトは none です。CI では high を使用してください。
2,000 ファイルからなる生成済み差分の場合、レビュー用パケットはノート PC で約100ミリ秒で生成されます。npm run bench を実行すると、お使いのマシンでの数値が表示されます。
import { redactPacket, reviewDiff } from "skimless";
const packet = redactPacket(reviewDiff(patch, { order: "story", lang: "pt", budgetMinutes: 25 }));
packet.readingOrder.forEach((stop) => console.log(stop.path, stop.reason));
パケットの内容
- 読む順番です。デフォルトの
storyでは、まず API と型、次に認証、署名、課金、マイグレーション、CI、その後にマニフェスト、残りのファイル、最後にテスト、ドキュメント、ロックファイル、生成コードの順に並べます。重大度の高い指摘があるファイルは、優先確認が必要なグループに繰り上がります。riskはスコアのみで並べ替えます。 - ルール ID が付いた指摘です。各ルールは一文で、JavaScript、TypeScript、Python、Ruby、Go、PHP、Java、Kotlin、Rust、C# に加え、GitHub Actions、GitLab CI、その他のランナーを対象とする21個のルールがあります。docs/rules.md をご覧ください。
- 添付できる HTML ファイル、Markdown コメント、既存の実行環境で使える JSON を出力します。
予算、無視する glob、CI の失敗レベルを設定するには、examples/skimless.config.json を skimless.config.json にコピーしてください。
CI
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pedroofrancaa/skimless@v1
with:
base: origin/${{ github.base_ref }}
fail-on: high
この Action はトークンを必要とせず、コメントも投稿しません。読む順番と指摘は、プルリクエストの Checks ページにあるジョブサマリーに出力されます。入力を環境変数経由で受け取り、シェル文字列に連結することなく、引数として git diff に渡します。docs/ci.md では、ワークフロー全体、すべての入力、GitLab CI のジョブを説明しています。
エージェントから使う
skimless mcp は MCP サーバーです。Claude Code、Cursor、VS Code などのエージェントは、変更をレビューする前に読む順番を確認し、その順番に沿ってファイルを読むことができます。
claude mcp add skimless -- npx -y skimless mcp
Skimless がモデルに問い合わせることはありません。モデルに情報を提供します。MCP の応答では、シークレットに似た文字列は常に伏せ字になるため、差分に実際のキーが含まれていてもエージェントのコンテキストに渡ることはありません。docs/mcp.md では、各クライアントのセットアップ方法、ツールの引数、使用できるプロンプトを説明しています。
対応しないこと
- 差分は実行しません。
- モデルは呼び出さず、ヒューリスティックをモデルであるかのように装うこともありません。エージェントは Skimless を呼び出せますが、Skimless がエージェントを呼び出すことはありません。
- すべてのバグを検出できるわけではありません。サンプルにある自己比較は、意図的に残している例です。
- 表示が静かだからといって、承認されたわけではありません。
開発
npm install
npm test
npm run check
node --experimental-strip-types src/cli.ts demo
日々の開発では、CLI が TypeScript ソースを直接実行します。npm run build を実行すると dist/ が生成され、npm から配布されます。
ルール、読み進める順序、ライブラリの公開範囲については docs/ で説明しています。コントリビューター向けの注意事項は CONTRIBUTING.md にあります。プロジェクトは MIT ライセンスで、GOVERNANCE.md に定めるとおり、開始時点ではメンテナーは 1 人で、意思決定は公開の場で行い、コミュニティがあるかのように装うことはありません。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。