pxcキャプチャプロキシとチーム協働
Proxyman をベンチマークとしたキャプチャプロキシで、デバッグ現場をチームの共有資産に変えます。Go カーネル pxc-core と各プラットフォームのシェルの唯一の契約は /v1 HTTP/WS API。macOS の Swift、Windows の WinUI、Flutter の 3 つが同じカーネルを共有します。
01$ pxc sessions --host api.github.com --status 500 --limit 2002[ { "id": 42, "method": "POST", "path": "/v1/pay", "status": 500 } ]0304$ pxc bp respond 7 --status 201 --body '{"ok":true}'05{ "released": true, "mode": "mock" }キャプチャは終点ではありません。再現可能なデバッグ現場こそが終点です。
設計のポイント
このツールがなぜこのように作られているのか、そしてそれが何をもたらしたのか。
カーネルは /v1 API だけを公開します。Swift / WinUI / Flutter / CLI のどの端も対等な消費者であり、プラットフォームをまたぐ挙動が自然に一致します。
pxc status / sessions / body / curl はすべて構造化出力。AI がトラフィックを直接読んで問題を特定でき、スクリーンショットは不要です。
ルール1行で対象トラフィックを保留し、body をリアルタイムに確認して解放・mock・中止を選択。スクリプトを書かずに改変と再生ができます。
キャプチャの現場は HAR と cURL にエクスポートでき、issue に添付すればそのまま再現できます。「もう一度試してください」はもう不要です。
能力一覧
- Go カーネル + マルチプラットフォームシェル。UI 層は差し替え可能で、/v1 HTTP/WS が唯一の契約
- pxc CLI はエージェントのために設計:既定で JSON 出力、意味を持つ終了コード、トークンの自動解決
- サーバーサイドフィルタと全文検索:host、ステータスコード、body のキーワードで直接特定
- ブレークポイントデバッグ:トラフィックを保留し、method / URL / header / body を書き換えてから解放
- フォールトインジェクションと mock:上流に接続せず直接応答し、異常系を構築
- HAR 1.2 の全量エクスポートと cURL リプレイ。デバッグ現場をワンクリックで同僚に共有
設計指標
どれも実装における具体的な決定に対応しています。
macOS Swift / Windows WinUI / Flutter。UI は差し替え可能
カーネルの E2E 検収カバレッジ。端をまたいだ挙動一致の前提
ルール保存後 1 秒以内に反映。カーネルの再起動は不要
成功 / 失敗 / 用法エラー。スクリプトやエージェントが判断しやすい
全文検索で body のキーワードから直接特定。目視で探さない
全量エクスポート + cURL リプレイ。デバッグ現場を共有できる
プラットフォーム対応
カーネルとシェルを分離したことで、対応状況はプラットフォームごとに個別に進められます。
Swift デスクトップシェル。/v1 HTTP/WS でカーネルと通信
WinUI デスクトップシェル。同じ Go カーネルを共有
既定で JSON 出力、意味を持つ終了コード、トークン自動解決
モバイルでのキャプチャと閲覧。バインディングは kernel/bindings にあり
カーネル同梱の Web UI 成果物で、ブラウザ内からトラフィックを閲覧
一般的なやり方との違い
違いは通常機能表ではなく、「境界をどこに引くか」にあります。
コマンド概要
完全なマニュアルは CLI リファレンスページにあります。すべてのコマンドは既定で構造化された結果を出力します。
pxc statusカーネルの稼働状態・待ち受けポート・ライセンス情報を表示
--jsonpxc sessionsキャプチャ済みトラフィックを複数条件の組み合わせで検索
--host--status--method--limit--qpxc body <id>指定セッションの完全なリクエスト / レスポンスボディを読む
--req--res--rawpxc curl <id>再生可能な cURL コマンドとしてエクスポート
--no-headers実際の出力
01$ pxc sessions --host api.github.com --status 500 --limit 2002[ { "id": 42, "method": "POST", "path": "/v1/pay", "status": 500 } ]0304$ pxc bp respond 7 --status 201 --body '{"ok":true}'05{ "released": true, "mode": "mock" }モジュール
3 グループ・15 モジュール。すべてリポジトリの実際のディレクトリ構造に基づきます。
Go · Swift · WinUI · Flutter · WebSocket · HAR · FTSGo 製の pxc-core が唯一の事実源です。
internal/engineトラフィック捕捉とプロキシエンジン。ブレークポイントの保留と解放を実行する主体
kernel/internal/engineinternal/storeトラフィックの保存と検索。FTS 全文検索で body のキーワードから特定
kernel/internal/storeinternal/rulesルールエンジン:テキスト DSL のルール。保存後 1 秒でホットリロード
kernel/internal/rulesinternal/api/v1 HTTP + WebSocket 契約の実装。カーネルの唯一の対外インターフェース
kernel/internal/apiinternal/scriptingスクリプトによる拡張機能
kernel/internal/scriptinginternal/pairing / discoveryデバイスのペアリングとインスタンス発見。複数端での協働デバッグを支える
kernel/internal/{pairing,discovery}internal/license / instanceライセンスとインスタンス管理
kernel/internal/{license,instance}カーネルが認めるのは /v1 のみ。すべての端は対等な消費者です。
cmd/pxcCLI:既定で JSON 出力、意味を持つ終了コード(0/1/2)、トークン自動解決
kernel/cmd/pxccmd/pxc-coreカーネルのサービスプロセス
kernel/cmd/pxc-corecmd/pxc-mobile / pxc-licenseモバイルとライセンスのコマンド
kernel/cmd/apps/desktopデスクトップシェル(macOS Swift / Windows WinUI)
apps/desktopapps/mobile / webuiFlutter モバイルと Web UI
apps/{mobile,webui}プラットフォーム横断の一貫性を支える部分です。
shared/api-spec/v1 API の仕様。カーネルと全端がこれに揃う
shared/api-speckernel/bindingsモバイルのバインディング層
kernel/bindingskernel/webカーネル同梱の Web UI 成果物
kernel/web使い方
4 の典型的なシーン。それぞれ、そのまま実行できるステップに分解しています。
クライアントにログを足さずに、実際のリクエストとレスポンスを確認します。
- 1pxc sessions --host api.example.com --status 500 で絞り込み
- 2pxc body <id> でレスポンス内のスタックトレースを読む
- 3必要なら pxc curl <id> でローカル再生して再現
- 4pxc export で HAR を書き出し issue に添付
対象トラフィックを保留し、書き換えてから解放。スクリプトは不要です。
- 1ルールファイルに一致ルールを1行書く
- 2保存後 1 秒以内にホットリロードで反映
- 3対象リクエストが保留され、method / url / header / body をリアルタイム確認
- 4改変して解放、または mock で直接応答
上流に接続せずに、任意のステータスコードと body を返せます。
- 1pxc bp respond <id> --status 503 --body で応答を指定
- 2クライアントは構築された異常を受け取る
- 3フロントエンドの縮退動作とフォールトトレランスを検証
- 4サーバーも上流も変更不要
AI が構造化されたトラフィックを直接読み、人のスクリーンショットは不要です。
- 1エージェントが pxc status でカーネルの稼働を確認
- 2host とステータスコードで怪しいセッションを絞り込む
- 3body を読み、実際のエラー情報を取得
- 4構造化出力がそのまま分析パイプラインへ入る
データ境界とセキュリティ
この種のツールの価値の大部分は「何をしないか」にあります。以下の各項目には実装箇所を明記しています。
キャプチャカーネルはローカルで動作し、トラフィックデータは第三者サービスを経由しません。
cmd/pxc-coreデバイスのペアリングとインスタンス発見の仕組みにより、未ペアリングのインスタンスは接続できません。
internal/pairing · discoveryCLI がローカルのトークンを自動発見・解決し、コマンドラインで平文の資格情報を渡しません。
cmd/pxcルールはローカルのテキスト DSL。ファイルの場所も内容も監査可能で、1 秒のホットリロード。
~/.pxc/project/rules.txtライセンスはインスタンスに紐付き、チームで一元的に管理・回収できます。
internal/license · instanceHAR と cURL のエクスポートはユーザーの操作でのみ実行され、自動で外へ送られません。
エクスポートモジュールリリースリズム
リリース済みは何を納品したか、開発中は何を進めているかを明記します。
v0.3リリース済みカーネル- Go によるキャプチャとプロキシエンジン
- /v1 HTTP + WebSocket 契約
- FTS 全文検索
- ルールエンジンとホットリロード
v0.6リリース済みデバッグとマルチプラットフォーム- ブレークポイント保留と改変後の解放
- フォールトインジェクションと mock 応答
- macOS Swift デスクトップシェル
- HAR 1.2 エクスポートと cURL リプレイ
v0.8開発中協働とエージェント- pxc CLI の構造化出力の完成
- Windows WinUI デスクトップシェル
- Flutter モバイルのキャプチャ
- チーム共有セッションと権限
v1.0計画中エコシステム- スクリプト拡張の解放
- プロトコル拡張(gRPC / WebSocket の強化)
- CI 統合と自動アサーション
- チームワークスペースと監査
よくある質問
キャプチャ能力はプラットフォームをまたぐ必要があるからです。カーネルは /v1 HTTP/WS だけを公開し、macOS Swift、Windows WinUI、Flutter、CLI はすべて対等な消費者です。プラットフォーム横断の一貫性は契約で保証され、各端でのキャプチャの再実装には頼りません。
モジュール
3 グループ・15 のモジュール。パスはリポジトリのディレクトリに直接対応し、エンジニアが素早く位置を特定できます。
Go 製の pxc-core が唯一の事実源です。
internal/engineトラフィック捕捉とプロキシエンジン。ブレークポイントの保留と解放を実行する主体
kernel/internal/engineinternal/storeトラフィックの保存と検索。FTS 全文検索で body のキーワードから特定
kernel/internal/storeinternal/rulesルールエンジン:テキスト DSL のルール。保存後 1 秒でホットリロード
kernel/internal/rulesinternal/api/v1 HTTP + WebSocket 契約の実装。カーネルの唯一の対外インターフェース
kernel/internal/apiinternal/scriptingスクリプトによる拡張機能
kernel/internal/scriptinginternal/pairing / discoveryデバイスのペアリングとインスタンス発見。複数端での協働デバッグを支える
kernel/internal/{pairing,discovery}internal/license / instanceライセンスとインスタンス管理
kernel/internal/{license,instance}カーネルが認めるのは /v1 のみ。すべての端は対等な消費者です。
cmd/pxcCLI:既定で JSON 出力、意味を持つ終了コード(0/1/2)、トークン自動解決
kernel/cmd/pxccmd/pxc-coreカーネルのサービスプロセス
kernel/cmd/pxc-corecmd/pxc-mobile / pxc-licenseモバイルとライセンスのコマンド
kernel/cmd/apps/desktopデスクトップシェル(macOS Swift / Windows WinUI)
apps/desktopapps/mobile / webuiFlutter モバイルと Web UI
apps/{mobile,webui}プラットフォーム横断の一貫性を支える部分です。
shared/api-spec/v1 API の仕様。カーネルと全端がこれに揃う
shared/api-speckernel/bindingsモバイルのバインディング層
kernel/bindingskernel/webカーネル同梱の Web UI 成果物
kernel/web技術スタック
レイヤー設計
カーネルからシェルまで、各層の責務と実装技術。この種のツールの中核設計は「カーネルとシェルの分離」です。
Go pxc-core:トラフィック捕捉、FTS 検索、ブレークポイントとルールエンジン
/v1 HTTP + WebSocket。カーネルと全端の唯一のインターフェース
macOS Swift / Windows WinUI / Flutter
cmd/pxc。JSON 出力、終了コード 0/1/2、トークン自動発見
~/.pxc/project/rules.txt のテキスト DSL。保存後 1 秒でホットリロード
HAR 1.2 の全量エクスポートと再生可能な cURL コマンド
マルチプラットフォーム対応
カーネルは同じで、プラットフォームが違えばシェルが変わるだけです。対応状況はプラットフォームごとに個別に進められます。
Swift デスクトップシェル。/v1 HTTP/WS でカーネルと通信
WinUI デスクトップシェル。同じ Go カーネルを共有
既定で JSON 出力、意味を持つ終了コード、トークン自動解決
モバイルでのキャプチャと閲覧。バインディングは kernel/bindings にあり
カーネル同梱の Web UI 成果物で、ブラウザ内からトラフィックを閲覧
技術スタック
コマンドマニュアル
8 本のコマンド。設計前提は、構造化された出力と意味を持つ終了コードです。スクリプトも AI Agent も確実に消費できます。
pxc statusカーネルの稼働状態・待ち受けポート・ライセンス情報を表示
--jsonpxc sessionsキャプチャ済みトラフィックを複数条件の組み合わせで検索
--host--status--method--limit--qpxc body <id>指定セッションの完全なリクエスト / レスポンスボディを読む
--req--res--rawpxc curl <id>再生可能な cURL コマンドとしてエクスポート
--no-headerspxc exportフィルタ条件に一致する HAR 1.2 の全量をエクスポート
--out--host--sincepxc bp respond <id>保留中のリクエストに直接応答(mock モード)
--status--body--headerpxc rules reloadカーネルを再起動せずにルールファイルをホットリロード
--filepxc discoveryLAN 内のペアリング可能なインスタンスとデバイスを発見
--json出力の規約
CLI はプログラムのためのインターフェースであり、人間が読めるのは付随的なことです。
既定で JSON を出力し、フィールド名は安定しています。人間が読みやすい整形は呼び出し側が決め、CLI は推測しません。
成功・失敗・使い方の誤りで異なる終了コードを返します。スクリプトと Agent はテキストを解析せず、コードで分岐します。
ローカルのトークンファイルを自動検出し、コマンドラインでの平文の資格情報を避けます(シェル履歴やプロセス一覧に残るため)。
実際の呼び出し
01$ pxc sessions --host api.github.com --status 500 --limit 2002[ { "id": 42, "method": "POST", "path": "/v1/pay", "status": 500 } ]0304$ pxc bp respond 7 --status 201 --body '{"ok":true}'05{ "released": true, "mode": "mock" }アイデンティティ・エージェント・プライベートドメインの複雑さを、統治可能なひとつのカーネルへ
既存の IAM の置き換え、エージェント基盤の構築、あるいはプライベートドメイン運用の本格化——まずは 30 分のアーキテクチャ相談から始めましょう。私たちが得意とする種類の問題かを先に判断し、適さない場合は率直にお伝えします。