BugProof について
BugProofは、失敗したコマンドをソース、環境情報、再実行メタデータとともにポータブルな .bug アーティファクトへ記録します。開発者はマシン間で障害を再現・比較でき、MCPサーバーを通じてAIエージェントもこれらの作業を行えます。
主な機能
- 01障害を .bug アーティファクトに記録
- 02記録した障害の再実行と比較
- 03Ed25519 による署名と検証
- 04クロスプラットフォーム再実行
- 05MCP ツール、リソース、プロンプト
活用シーン
- 01失敗した CI テストをローカル再実行用に記録
- 02異なるマシンでの障害を比較
- 03実行前にアーティファクトを確認
- 04AIエージェントによる障害の記録と分析
MCP 対応
組み込みのstdio MCPサーバーは、記録、再実行、検査、比較、アーティファクト管理のツールに加え、アーティファクトのリソースとワークフロー用プロンプトを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
10掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | いいえ | 成果物名(任意) |
| command | string | はい | 実行してキャプチャするコマンド(例:"npm test") |
| timeout | string | いいえ | タイムアウト(ミリ秒、デフォルト:300000) |
| description | string | いいえ | バグのわかりやすい説明 |
| skipSecrets | boolean | いいえ | シークレットのスキャンをスキップします(デフォルト:false) |
詳細
BugProof
バグ報告ではなく、実行できるバグを。
失敗したコマンドを、誰でも自分のマシンで再現できるポータブルな .bug アーティファクトに記録します。同じコード、同じ環境、同じ失敗を再現できます。暗号署名に対応。クロスプラットフォーム。コンテナーは不要です。
https://github.com/user-attachments/assets/2315cfee-3ccf-40d7-830e-3a3d23731ab8
BugProof を使う理由
「自分のマシンでは動く」はバグ報告ではありません。
現在、バックエンドや CLI のバグを報告すると、たいてい次のようになります。
- ターミナルのスクリーンショット
- コピー&ペーストされたスタックトレース
- 関係がありそうなファイルの一覧
- 報告者がどう実行したかについての推測に基づく説明
その後、メンテナーはバージョンを合わせ、環境を再現し、適切なコマンドを見つけ、設定を推測しながら、失敗を再構築するのに何時間も費やします。その時間の大半は無駄になります。
BugProof はバグそのものを記録します。説明を記録するのではありません。 1 つのコマンドで、ソースのスナップショット、正確なコマンド、環境スキーマ、失敗のフィンガープリント、再現用メタデータを含む単一の .bug ファイルを生成します。別の開発者が bugproof replay bug.bug を実行すれば、失敗を決定論的に再現できます。
バグのための Git と考えてください。ポータブルで、コンテンツアドレス指定が可能な検証済みアーティファクトにより、「再現できますか?」がワンライナーになります。
主な特徴
- ワンコマンドで記録。 失敗するコマンドを
bugproof capture --でラップして、結果を共有できます。 - 決定論的な再現。 ソース、環境、コマンド、フィンガープリントをまとめて持ち運べます。判定は自動です。
- Docker もデーモンも不要。 Linux の名前空間、Windows の Job Objects、macOS の Seatbelt など、OS ネイティブのプリミティブを使用します。
- 暗号署名。 Ed25519 による署名と検証が組み込まれています。
bugproof keygen/--sign/verifyで改ざんを検知できるアーティファクトを作成できます。 - 自己修復する再現。
--self-healを指定すると、サンドボックス内で不足している npm/pip 依存関係を自動インストールして再試行します。 - ベストエフォートの認証情報のマスキング。 環境変数をパターンマッチングとシャノンエントロピーでスキャンします。既知のシークレット形式(API キー、トークン、JWT)は検出できますが、エントロピーの低いパスワードやバイナリー形式の認証情報は漏えいする可能性があります。
- マルチ言語対応。 Node.js、Python、Ruby、Go、Rust、Java、C/C++、.NET、Kotlin のビルドコンテキストを自動検出します。
- クロスプラットフォーム対応。 コマンド/環境の変換とアーキテクチャ不一致へのガードレールにより、Windows ↔ Linux ↔ macOS 間で再現できます。
インストール
npm install -g bugproof
要件: Node.js 18 以降と Git。オプションの言語ツールチェーン(Python、Java、Go、Rust など)は、記録したコマンドで使用する場合にのみ必要です。
インストール後に、ヘルスチェックを一度実行してください。
bugproof doctor
GitHub Action — CI の失敗を自動でキャプチャ
GitHub Actions のワークフローに 1 つのステップを追加するだけで、不安定または失敗するコマンドを .bug アーティファクトとして自動でキャプチャできます。
- name: Capture flaky test
uses: sidinsearch/BugProof/.github/actions/bugproof-action@main
with:
command: 'npm test -- --run flaky-suite'
name: flaky-test-failure
timeout: 300000
仕組み:このアクションは npmjs.org から bugproof をインストールし(npm install -g bugproof)、コマンドを bugproof capture でラップします。失敗すると、.bug アーティファクトが Actions の実行にアップロードされます。開発者はそれをダウンロードし、bugproof replay でローカル環境にて再現できます。
ユースケース:
- 不安定な CI テスト:失敗の詳細をキャプチャしてローカルでデバッグできます
- クロスプラットフォームの失敗:Linux CI ではテストが成功するのに macOS では失敗する場合、両方の失敗をキャプチャして差分を比較できます
- 断続的なクラッシュ:
bugproof capture -- node app.jsを実行すると、クラッシュ時の状態、環境、ソースがまとめられます
すべての入力:
| 入力 | 必須 | デフォルト | 説明 |
|---|---|---|---|
command | ✅ | — | キャプチャするコマンド(例:npm test) |
name | — | bug_<timestamp> | アーティファクト名 |
timeout | — | 300000 | コマンドのタイムアウト(ミリ秒) |
skip-secrets | — | false | 環境変数のシークレットスキャンをスキップ |
upload-artifact | — | true | .bug ファイルを Actions アーティファクトとしてアップロード |
node-version | — | 24 | bugproof 用の Node.js バージョン |
このリポジトリでは、アクションは .github/actions/bugproof-action/action.yml にあります。uses: sidinsearch/BugProof/.github/actions/bugproof-action@main で参照してください。BugProof は常に npmjs.org からインストールされるため、GitHub Packages のトークンは不要です。
MCP サーバー — AI エージェントとの連携
BugProof には、AI エージェント向けに 10 個のツールとリソース、プロンプトを提供する MCP(Model Context Protocol)サーバー が組み込まれています。公式 MCP Registry に io.github.sidinsearch/bugproof として登録されています。
セットアップ
Claude Code
~/.claude/settings.json に追加します:
{
"mcpServers": {
"bugproof": {
"command": "npx",
"args": ["-y", "bugproof", "mcp"]
}
}
}
Cursor
Cursor の MCP 設定(Settings → Features → MCP)に追加します:
{
"mcpServers": {
"bugproof": {
"command": "npx",
"args": ["-y", "bugproof", "mcp"]
}
}
}
Continue.dev
~/.continue/config.json に追加します:
{
"experimental": {
"mcpServers": {
"bugproof": {
"command": "npx",
"args": ["-y", "bugproof", "mcp"]
}
}
}
}
bugproof がグローバルにインストールされている場合
bugproof がすでにグローバルにインストールされている場合(npm install -g bugproof)、npx -y を省略します:
{
"mcpServers": {
"bugproof": {
"command": "bugproof",
"args": ["mcp"]
}
}
}
MCP を別途インストールする必要はありません。 npx -y bugproof mcp は npmjs.org から自動でダウンロードし、stdio 経由でサーバーを起動します。
ツール
| ツール | 説明 | AI エージェントでの使用例 |
|---|---|---|
capture | コマンドを実行し、.bug アーティファクトとしてキャプチャ | 「この失敗するテストをキャプチャして、何が変わったか教えてください」 |
replay | .bug ファイルを再生し、判定結果を返す | 「CI のアーティファクトを再生して、まだ失敗するか確認してください」 |
inspect | アーティファクトのメタデータを表示 | 「実行せずに、この .bug ファイルの内容を教えてください」 |
diff | 2 つのアーティファクトを比較 | 「CI でのキャプチャとローカルでのキャプチャを比較して、違いを教えてください」 |
doctor | サンドボックスの機能を確認 | 「このマシンは完全なサンドボックス分離に対応していますか?」 |
share | GitHub Gist 経由でアーティファクトを共有 | 「このバグをチームと共有してください」 |
pull | Gist からアーティファクトをダウンロード | 「この URL からバグのアーティファクトを取得してください」 |
watch | コマンドの失敗時に自動でキャプチャ | 「npm test を監視して、失敗したらキャプチャしてください」 |
list | ディレクトリ内の .bug アーティファクトを一覧表示 | 「このプロジェクト内のバグのアーティファクトをすべて表示してください」 |
clean | .bug アーティファクトを削除 | 「このディレクトリ内の古いバグのアーティファクトを削除してください」 |
リソース
AI エージェントは、リソース URI を通じて .bug アーティファクトの内容を直接読み取れます。
bugproof://artifact/{path}— 生の.bugアーティファクトを読み取ります(base64 エンコードされた ZIP)
プロンプト
よくある AI エージェントのタスク向けに、あらかじめ用意されたワークフローです。
| プロンプト | 説明 |
|---|---|
capture-failure | 失敗するコマンドを .bug アーティファクトとしてキャプチャする手順 |
replay-and-analyze | アーティファクトを再生し、根本原因を分析する手順 |
compare-bugs | 2 つのアーティファクトを比較し、差分を見つける手順 |
AI セッションの例
User: Capture the failing test and tell me what went wrong
Agent: [calls bugproof capture -- npm test -- --run flaky-suite]
[calls bugproof inspect on the result]
"The test failed with a timeout. Fingerprint matches a known
Redis-unreachable pattern. Here's the captured stderr..."
MCP サーバーは stdio(JSON-RPC 2.0)経由で通信します。ローカルの bugproof CLI を --json 出力付きでシェルから実行し、人が読める概要と生データの両方を含む構造化された結果を返します。bugproof がインストールされていない場合は、npx -y が npmjs.org から取得するため、グローバルインストールは不要です。
AI エージェントスキル
BugProof には、AI コーディングエージェント(Claude Code、Cursor、OpenCode、OpenClaw、Gemini CLI、GitHub Copilot など)に BugProof の効果的な使い方を教える、配布可能な AI エージェントスキルが含まれています。このスキルはオープンな Agent Skills 標準に準拠しているため、一度作成すれば、互換性のあるあらゆるエージェントで使用できます。
スキルの機能
読み込むと、このスキルによって AI エージェントは次のすべてを把握できます。
- フラグと例を含む、BugProof の全 14 コマンド
- キャプチャ、再生、差分、検査のワークフロー
- クロスプラットフォームでの再生パターン
- MCP サーバーの設定
- 命名、セキュリティ、アーティファクト管理のベストプラクティス
- 実際の 8 つの例(Node.js、Python、Go、Java、CI/CD、クロスプラットフォーム、不安定なテスト)
AI エージェントでの使用方法
ユーザーが次のように言及すると、エージェントはスキルを自動で読み込みます。
- 「このバグをキャプチャして」
- 「このバグを再生して」
- 「この失敗を再現して」
- 「このバグを共有して」
- 「.bug ファイル」
- 「自分のマシンでは動く」
- 「実行可能なバグ」
または、/bugproof を直接実行します。
スキルのインストール
オプション 1:このリポジトリをクローンする
# Clone the BugProof repository
git clone https://github.com/sidinsearch/BugProof.git
# Copy the skill to your agent's skills directory
# Claude Code:
cp -r BugProof/skills/bugproof ~/.claude/skills/
# OpenCode:
cp -r BugProof/skills/bugproof ~/.config/opencode/skills/
# OpenClaw:
cp -r BugProof/skills/bugproof ~/.agents/skills/
# Cursor:
cp -r BugProof/skills/bugproof ~/.cursor/skills/
オプション 2:スキルを直接ダウンロードする
# Download just the skill
curl -L https://github.com/sidinsearch/BugProof/archive/refs/heads/main.tar.gz | tar xz
cp -r BugProof-main/skills/bugproof ~/.claude/skills/
スキルの構成
skills/bugproof/
├── SKILL.md # Main instructions (required)
├── reference/
│ └── commands.md # Full command reference
└── examples/
└── usage-examples.md # Real-world usage examples
対応する AI エージェント
| エージェント | スキルディレクトリ |
|---|---|
| Claude Code | ~/.claude/skills/bugproof/ |
| OpenCode | ~/.config/opencode/skills/bugproof/ |
| OpenClaw | ~/.agents/skills/bugproof/ |
| Cursor | ~/.cursor/skills/bugproof/ |
| Gemini CLI | ~/.gemini/skills/bugproof/ |
| GitHub Copilot | .github/skills/bugproof/ |
このスキルはオープンな Agent Skills specification に準拠しています。標準に対応するエージェントであれば、どれでも使用できます。
60 秒クイックスタート
# 1. Reproduce a failure
$ npm test
FAIL Tests failed because Redis was unreachable.
# 2. Capture it
$ bugproof capture -- npm test
✔ Artifact captured!
Path ./bug_1778049738215.bug
Files 42 files (28.4 KB)
Fingerprint sha256:c8b3...
# 3. Share the file (Slack, email, gist, attachment...)
# 4. Anyone replays it on their machine
$ bugproof replay bug_1778049738215.bug
✔ REPRODUCTION CONFIRMED
Exit code exit 1 (match)
Verdict Reproduction confirmed (exact fingerprint match)
任意のフロー:
$ bugproof inspect bug.bug # peek at the contents
$ bugproof diff old.bug new.bug # what changed between two captures
$ bugproof share bug.bug # publish as a GitHub Gist
コマンド
BugProof には14 個のコマンドが含まれています。すべてのコマンドで、機械可読な出力を得るための --help と --json を使用できます。
| コマンド | 目的 |
|---|---|
bugproof capture | コマンドを実行してすべてを記録し、.bug アーティファクトを生成します |
bugproof replay | アーティファクトを再実行し、予期されるフィンガープリントと比較します |
bugproof watch | コマンドを透過的にラップし、失敗した場合にのみキャプチャします |
bugproof inspect | アーティファクトの内容(マニフェスト、コマンド、フィンガープリント、ファイル)を表示します |
bugproof diff | 2 つのアーティファクトを並べて比較します |
bugproof verify | .bug の Ed25519 署名を検証します(単独で実行) |
bugproof keygen | アーティファクト署名用の Ed25519 キーペアを生成します |
bugproof share | アーティファクトを GitHub Gist として公開します |
bugproof mcp | AI エージェントとの連携用に MCP サーバーを起動します |
bugproof init | .bugproofrc 設定ファイルのひな形を作成します |
bugproof prune | 孤立したサンドボックスの一時ディレクトリをガベージコレクションします |
bugproof clean | カレントディレクトリからすべての .bug アーティファクトを削除します |
bugproof pull | GitHub Gist から共有された .bug アーティファクトをダウンロードします |
bugproof doctor | サンドボックス分離機能に対する OS のサポートを確認します |
bugproof help | 任意のコマンドのヘルプを表示します |
bugproof capture [command...]
コマンドを最初から最後まで実行し、失敗を <name>.bug としてまとめます。
bugproof capture -- npm test
bugproof capture -n auth-crash -d "Login fails on expired session" -- node server.js
bugproof capture -o ./bugs/ -- npm test
bugproof capture --include-untracked -- python app.py
bugproof capture -x "*.log" -x "node_modules/**" -- go test ./...
bugproof capture --timeout 600000 -- java -cp . Main
bugproof capture --include-compiled -- mvn test # force include .class/.jar files
bugproof capture --sign --signer "[email protected]" -- ./run.sh
bugproof capture --json -- node script.js
| フラグ | 説明 |
|---|---|
-n, --name <name> | アーティファクト名(<name>.bug になります) |
-d, --description <desc> | マニフェストに埋め込まれる、人が読める説明 |
-o, --output <dir> | 出力ディレクトリ(デフォルト:カレントディレクトリ。.bugproofrc の outputDir に従います) |
-x, --exclude <pattern> | glob でファイルを除外します(繰り返し指定可能) |
--include-untracked | 未追跡ファイルもまとめます(git ls-files -o) |
--include-compiled | コンパイル済みのアーティファクト(.class、.jar、.pyc など)を強制的に含めます(デフォルトでは自動検出) |
--timeout <ms> | N ミリ秒後にコマンドを終了します(デフォルト:300000) |
--skip-secrets | 環境変数のシークレットをスキャンしません(確認プロンプトをスキップします) |
--sign [key] | デフォルトのキー、または名前付きキー/.key ファイルへのパスで署名します |
--signer <id> | 署名者の識別情報(メールアドレス、gist URL など)を埋め込みます |
--json | 構造化 JSON 出力 |
デフォルトの動作: -n を指定しない場合、アーティファクト名は bug_<timestamp>.bug になります。.bugproofrc で nameTemplate が設定されている場合は、そのテンプレートが使用されます。-o を指定しない場合、アーティファクトはカレントディレクトリに保存されます。
bugproof replay <artifact>
キャプチャしたアーティファクトを再実行し、結果を比較します。
bugproof replay bug.bug
bugproof replay bug.bug --sandbox isolated
bugproof replay bug.bug --self-heal
bugproof replay bug.bug --verify-signature
bugproof replay bug.bug --source-dir .
bugproof replay bug.bug --json
| フラグ | 説明 |
|---|---|
--sandbox <level> | workspace(デフォルト)、isolated、または full |
--self-heal | 不足している npm/pip の依存関係を自動インストールして再試行します(最大 3 回) |
--verify-signature | 有効な Ed25519 署名を必須とします。署名がないか無効な場合は 2 で終了します |
--source-dir <dir> | git 操作用のソースディレクトリを上書きします(キャプチャ時のパスではなく、カレントディレクトリのリポジトリを使用します) |
--json | 構造化 JSON 出力 |
リプレイの分離: リプレイは常に分離された一時ディレクトリで実行されます。ファイルは次のいずれかから取得されます:(1)キャプチャ時のコミットにおける git worktree/クローン、(2)元のパスにアクセスできない場合はカレントディレクトリの git リポジトリ、または(3)アーティファクトに同梱された files/ スナップショット。ソースファイルの読み込みにカレントディレクトリが使われることはありません。
bugproof keygen / verify — 暗号学的な来歴
Ed25519(RFC 8032)でアーティファクトに署名します。Node のネイティブな crypto を基盤としており、外部依存関係はありません。
# One-time: create your signing key
bugproof keygen
# → writes default.pub / default.key to ~/.bugproof/keys/
# Capture with a signature
bugproof capture --sign --signer "[email protected]" -- npm test
# Verify a received artifact
bugproof verify bug.bug
✔ SIGNATURE VALID
Algorithm ed25519
Fingerprint 179721ef7e63f6b3
Signed at 2026-05-10T22:09:30Z
Signer [email protected]
# Enforce signatures at replay time
bugproof replay --verify-signature bug.bug
署名の対象は、マニフェストの正規化されたハッシュ、失敗のフィンガープリント、バンドル内の各ファイルの SHA-256 です。ソース、出力、終了コード、メタデータを改ざんすると、署名は無効になります。
注: ID/PKI は意図的に対象外です。埋め込まれた公開鍵のフィンガープリントを、既知のもの(gist へのピン留め、チームの wiki、キーサーバーなど)と照合して信頼性を確認します。
bugproof watch [command...]
透過的なラッパーです。コマンドを通常どおり実行し、失敗した場合にのみキャプチャします。手動で実行する代わりに、そのまま置き換えて使えます。
bugproof watch -- npm test
bugproof watch -o ./bugs -- python app.py
bugproof watch --always -- node script.js # capture even on success
bugproof inspect <artifact> / diff <a> <b>
bugproof inspect bug.bug # manifest, fingerprint, file list, env schema
bugproof diff captured-v1.bug captured-v2.bug # what changed between two captures
bugproof share <artifact>
アーティファクトを GitHub Gist として公開します。企業ネットワークでは HTTPS_PROXY / HTTP_PROXY に従います。
bugproof share bug.bug
bugproof share --public bug.bug
gist スコープを持つ GITHUB_TOKEN(または BUGPROOF_GITHUB_TOKEN)が必要です。
bugproof init / prune / doctor
bugproof init # scaffold .bugproofrc in the current directory
bugproof prune # garbage-collect orphan BugBox temp directories
bugproof doctor # check OS support for sandbox isolation (namespaces, Job Objects, Seatbelt)
設定(.bugproofrc)
bugproof init によって生成されます。すべてのフィールドは任意です。
{
"exclude": ["node_modules/**", "dist/**", "*.bug"],
"outputDir": ".",
"timeout": 300000,
"skipSecrets": false,
"includeUntracked": false
}
スマートソース戦略
BugProof は、大規模なコードベースでもアーティファクトを小さく保ちます。
| 戦略 | 使用条件 | 含まれるもの | 一般的なサイズ |
|---|---|---|---|
git-full | クリーンな git リポジトリ | コミット参照のみ | 約 2 KB |
git-patch | 変更のある git リポジトリ | コミット参照と差分パッチ | 約 5 KB |
git-files | 強制モード/未追跡ファイルあり | 追跡対象および未追跡の全ファイル | 変動 |
full-copy | git リポジトリがない | コードベース全体(node_modules などを除く) | 約 10~100 MB |
git の使用を強く推奨しますが、必須ではありません。
コンパイル言語のサポート
BugProof はコンパイル言語を自動検出し、ビルド成果物を自動的にバンドルします。
| 言語 | ソースファイル | コンパイル済み成果物 | 自動的に含めるか |
|---|---|---|---|
| Java | .java | .class、.jar、.war、.ear | ✅ はい(target/、build/、out/ から) |
| Python | .py | .pyc、.pyo | ✅ はい(__pycache__/ から) |
| Go | .go | bin/、コンパイル済みバイナリ | ✅ はい(bin/、dist/ から) |
| Rust | .rs | target/ のバイナリ | ✅ はい(target/ から) |
| .NET/C# | .cs、.csproj | .dll、.exe | ✅ はい(bin/、obj/ から) |
| WebAssembly | — | .wasm | ✅ はい(すべてのビルドディレクトリから) |
| Node ネイティブ | — | .node | ✅ はい(build/、dist/ から) |
| C/C++ | .c、.cpp | .o、.obj、.exe | ❌ いいえ(プラットフォーム固有のため、ソースのみ) |
仕組み: BugProof がコンパイル言語のプロジェクト(pom.xml、go.mod、Cargo.toml など)を検出し、標準のビルドディレクトリ内にコンパイル済み成果物を見つけると、それらを自動的に含めます。フラグは不要です。
自動検出で見落とされたものを強制的に含める場合や、特殊なケースには、--include-compiled を使用してください。
サンドボックスと分離モデル
BugProof は、ネイティブ OS プリミティブ上に構築された Docker のような分離環境で、リプレイするコマンドを実行します。
| レイヤー | Linux | Windows | macOS |
|---|---|---|---|
| プロセス | PID 名前空間(unshare --pid) | Job Objects | sandbox-exec |
| ネットワーク | Network 名前空間(unshare --net) | netsh advfirewall ルール | (deny network*) |
| ファイルシステム | fuse-overlayfs(RO ソース+書き込み可能なオーバーレイ) | 分離された一時ディレクトリ | 書き込みパスの制限 |
| リソース制限 | cgroups v2(メモリ、CPU、PID) | Job Object の制限 | — |
| 環境変数のサニタイズ | LD_PRELOAD、NODE_OPTIONS などを削除 | 同様 | 同様 |
| 一時領域 | プライベートな /tmp | プライベートな %TEMP% | プライベートな /tmp |
--sandbox を使って、3 段階のサンドボックスレベルを指定できます。
workspace(デフォルト) — 最小限の分離で高速です。信頼できる成果物に適しています。isolated— 名前空間と一時領域による分離です。信頼できない成果物に推奨されます。full— ネットワーク拒否やリソース制限など、すべてのレイヤーを適用します。
注意: Windows では、
isolatedとfullによる強化はベストエフォートであり、VM レベルの封じ込めではありません。完全に信頼できないソースの成果物は、専用の VM 内でリプレイしてください。
環境スナップショット
キャプチャ時のランタイムバージョンを記録し、リプレイ時に差分を比較します。
Environment Mismatches
• node version mismatch: captured 18.0.0, current 22.1.0
✘ python 3.11.0 was available at capture but is not installed now.
追跡対象:Node.js、Python、Ruby、Go、Rust、Java、npm、pip、OS プラットフォーム、アーキテクチャ。
クロスプラットフォームでのリプレイ
| キャプチャ ↘ / リプレイ ↗ | Windows | Linux | macOS |
|---|---|---|---|
| Windows | ✅ | ✅ | ✅ |
| Linux | ✅ | ✅ | ✅ |
| macOS | ✅ | ✅ | ✅ |
変換レイヤーはコマンド(python3 ↔ python、gradlew ↔ gradlew.bat、make ↔ mingw32-make、シェルのパス)を正規化します。アーキテクチャの不一致(x64 ↔ arm64)がある場合は、Rosetta や変換に関するアドバイスを含む明示的な警告が表示されます。
セキュリティモデル
| 領域 | 仕組み |
|---|---|
| シークレット — 既知のパターン | *_TOKEN、*_KEY、*_SECRET に一致する環境変数や、AWS/GCP/Stripe の形式は、取得時にマスキングされます |
| シークレット — 未知の値 | シャノンエントロピー解析により、無害に見えるキー名でもエントロピーの高い値(1文字あたり4.5ビット以上)を検出します |
| stdout/stderr のスクラビング | アクティブな正規表現ストリームスクラバーが、取得した出力からメールアドレス、IP アドレス、クレジットカード番号、GitHub トークン、Stripe キーを除去します |
| パストラバーサル | すべてのファイルコピーについて、アーティファクトとプロジェクトの境界内に収まることを検証します |
| スクリプトインジェクション | サンドボックスコマンドは引数配列で起動します。シェル文字列経由では決して実行しません |
| 来歴 | Ed25519 署名は、マニフェスト、フィンガープリント、ファイルごとの SHA-256 を対象とします。検証はローカルで行われ、ネットワーク呼び出しはありません |
| サンドボックス環境のサニタイズ | LD_PRELOAD、NODE_OPTIONS、DYLD_* など、ランタイムを乗っ取る可能性のあるベクトルは、再現前に除去されます |
| 暗号技術 | Node の標準 crypto のみを使用し、外部の暗号依存関係はありません。テレメトリも、ホームへの通信もありません |
環境を自分で監査した場合に限り、--skip-secrets を使用してください。
ファイルの関連付け
Windows
HKCU\Software\Classes\.bug → BugProof.Artifact に登録され、open コマンドは node <package>/dist/cli.js replay "%1" です。
Linux
MIME タイプ application/x-bugproof、bugproof.desktop ハンドラー、~/.local/share/icons/hicolor/ 内のユーザーレベルのアイコンエントリーを登録します。
macOS
同梱スクリプトを使ったベストエフォートでの登録です。Finder の関連付けが有効にならない場合は、手動で再実行してください。
bash scripts/bugproof-file-association-macos.sh
アーキテクチャ
bugproof/
├── src/
│ ├── capture/ # Execution + env snapshot + language detection + packaging
│ ├── replay/ # Restore + sandbox orchestration + verdict + self-heal
│ ├── sandbox/ # OS-specific isolation (filesystem, network, process)
│ ├── share/ # Gist publisher
│ ├── diff/ # Two-artifact diff engine
│ ├── config/ # .bugproofrc loader and validation
│ ├── utils/ # signing, secrets, fingerprint, dependencies, security, …
│ └── cli.ts # Commander entrypoint (14 commands)
├── tests/ # 40 suites / 502 tests (Jest)
├── scripts/ # Postinstall, e2e matrix, file-association helpers
└── .github/workflows/ # CI/CD (tri-platform matrix, signed npm publish)
| モジュール | 担当 |
|---|---|
capture/engine.ts | ユーザーのコマンドを実行し、出力を一時ファイルにストリームし、stdout/stderr/終了ステータスを記録します |
capture/packager.ts | .bug zip にまとめ、必要に応じて Ed25519 で署名します |
capture/language-support.ts | Node/Python/Java/Go/Rust/.NET/C++/Kotlin を検出し、コンパイル済みアーティファクトも自動検出します |
capture/env-snapshot.ts | 再現時の環境差分比較用に、ランタイムのバージョンを記録します |
capture/source-strategy.ts | ソースをスマートに選択します:git-full、git-patch、stacktrace、minimal |
replay/engine.ts | サンドボックス内でコマンドを再現します |
replay/self-heal.ts | 不足している依存関係を検出してサンドボックス内にインストールし、再試行します |
replay/verdict.ts | フィンガープリントと正規化されたエラーパターンを比較します |
replay/hints.ts | 取得した出力から、実行可能なデバッグのヒントを生成します |
sandbox/bugbox.ts | OS ごとの分離レイヤーを制御します |
sandbox/cross-platform.ts | Windows/Linux/macOS 間でコマンドを変換します |
utils/signing.ts | Ed25519 の署名/検証、および正規化ペイロードのビルダー |
utils/secrets.ts | パターンとエントロピーに基づく環境変数のスキャン、PII ストリームスクラバー |
utils/fingerprint.ts | 決定論的な失敗のフィンガープリント生成、パスの正規化 |
utils/dependencies.ts | stderr から不足している npm/pip/システム依存関係を検出します |
utils/ui.ts | ターミナル UI:色、スピナー、プログレスバー、サマリーボックス |
diff/engine.ts | アーティファクトを左右に並べて比較します |
share/gist.ts | プロキシに対応した GitHub Gist パブリッシャー |
config/loader.ts | .bugproofrc 設定を読み込み、検証します |
コントリビューション
PR を歓迎します。ガイドライン、開発環境のセットアップ、テストマトリックスの要件については、CONTRIBUTING.md を参照してください。すべての PR で 3 プラットフォームを対象とした CI 全体が実行されます。新しい動作にはテストを追加してください。
ライセンス
このプロジェクトは、GNU Affero General Public License v3.0(AGPL-3.0)の下でライセンスされています。
| 使用ケース | 許可されていますか? |
|---|---|
| 個人利用および非商用利用 | ✅ 無料で、制限はありません |
| フォークおよび改変 | ✅ AGPL-3.0 の下でソースコードとともに公開する必要があります |
| ネットワークサービス(SaaS)としての運用 | ✅ 改変したソースコードを公開する必要があります |
| 商用利用/プロプライエタリな利用 | ❌ 別途商用ライセンスが必要です |
❤️ を込めて sidinsearch が制作 · Copyright © 2026 sidinsearch · AGPL-3.0 ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。