Current release: v0.1.0
Codex Microの物理入力を,通常のキーボードショートカットではなくChatGPT Desktop内部のMicroイベントとして送る実験用CLIです.Codexが前面にない状態でも操作することを目的としています.
Warning
Codex MicroのrendererイベントとCDP接続は公開APIではありません.ChatGPT Desktopの更新で動作しなくなる可能性があります.このリポジトリは実験用です.
- CDPの
app://.../index.htmlrendererを検出 - Codex内部イベントバスを探索
codex-micro-device-state-changedでMicro接続状態を初期化codex-micro-hid-eventを送信codex-micro-joystick-eventを送信- Unix domain socket上のJSON Lines v1プロトコル
- ACT06〜ACT12,AG00〜AG05,ENC,ENC_CW,ENC_CC
- Codex Control QMK moduleのRaw HID入力(既定VID/PIDはhifumiの
FEED:3060) - 任意VID/PIDのQMKキーボード指定と切断後の自動再接続
- QMKからのAgent 6キー、Command 7スイッチ、Dial、Joystick全入力
- Codexの6 Agent状態を取得し、QMKへRaw HID output reportで同期
- Codexなしでクライアントを試せるmockモード
- macOSまたはNode.jsからCDPポートを明示できる環境
- Node.js 22.4以降
- pnpm
git clone https://github.com/Hietan/codex-micro-bridge.git
cd codex-micro-bridge
corepack enable
pnpm install --frozen-lockfile
pnpm build
pnpm testmacOSの常駐CLIとしてソースからインストールする場合:
npm install --global .
codex-micro-bridge --versionv0.1.0ではGitHubへソースを公開します。npm registryへの公開有無はGitHub Releaseを 確認してください。registry未公開の場合も、上記のローカルインストールを利用できます。
ターミナル1:
pnpm start -- --mockターミナル2:
node dist/src/cli.js status
node dist/src/cli.js tap ACT06
node dist/src/cli.js encoder cw
node dist/src/cli.js joystick up press
node dist/src/cli.js joystick up releasemockモードではイベントをログに出しますが,Codexには接続しません.
ChatGPTを完全に終了してから,macOSでは次のように起動します.既に起動しているChatGPTへ後からCDPフラグを追加することはできません.
open -a ChatGPT --args \
--remote-debugging-address=127.0.0.1 \
--remote-debugging-port=92229222は実験用の例です.他ホストから到達できるアドレスにはbindしないでください.
接続確認:
node dist/src/cli.js probe --port 9222Agent 6スロットの状態取得だけを診断するには次を使います。プロンプトや応答本文は 返さず、スロット番号、タスク識別子、状態、選択中フラグだけを表示します。
node dist/src/cli.js snapshot --port 9222node dist/src/cli.js start --port 9222ChatGPTがまだ準備できていない状態から待機させる場合は--waitを使います.
node dist/src/cli.js start --wait --port 9222別ターミナルからFastキーをtapします.
node dist/src/cli.js tap ACT06Bridgeはpressとreleaseを順に送ります.デフォルト設定ではACT06がFast Modeに対応しますが,実際の動作はCodex Micro設定の現在の割り当てに従います.
startはQMK Codex ControlのRaw HIDインターフェース(Usage Page FF60,Usage 61)も自動検出します.既定USB IDはhifumiのFEED:3060です.接続済みなら起動時に次のように表示されます.
Codex Control Raw HID connected (feed:3060, ..., usage ff60:0061).
キーボードが未接続でもBridgeは起動し,2秒間隔で再接続を試みます.Raw HIDを使用しない場合は--no-hidを付けます.
node dist/src/cli.js start --port 9222 --no-hid別のQMKキーボードは16進VID/PIDで指定します.Usage Page/IDはモジュール既定値を 使用します.
node dist/src/cli.js start --port 9222 --hid-vid cafe --hid-pid 4001hifumiファームウェアのキー割り当ては次のとおりです.
| hifumiキー | Raw HIDキー | 既定のCodex Micro動作 |
|---|---|---|
| Push-to-talk | ACT10 |
Push-to-talk |
| Codex | ACT12 |
Codex/送信 |
| Approve | ACT07 |
Approve |
| Fast | ACT06 |
Fast Mode |
| Dial左 | ENC_CW |
推論レベルを1段下げる方向 |
| Dial右 | ENC_CC |
推論レベルを1段上げる方向 |
実際の動作はCodex DesktopのCodex Micro設定にある現在の割り当てに従います.
Push-to-talkのように保持時間が必要な入力は分けて送ります.
node dist/src/cli.js press ACT10
node dist/src/cli.js release ACT10Agentキーは物理スロットだけを送信します。Bridgeが押下時にCodex Micro設定の 現在の6スロットを読み、該当するタスク識別子を補完します。診断目的では従来どおり 明示的なタスク識別子も指定できます.
node dist/src/cli.js tap AG00
node dist/src/cli.js tap AG00 --thread-key '<task-id>'Bridgeは750ms間隔でネイティブ6スロットを確認し、状態が変わったときだけ32-byte output reportをキーボードへ返します。状態は未割当、待機、思考中、完了未読、 承認・入力待ち、エラーへ正規化されます。タスク識別子はUSB出力へ含めません。
CLIをグローバルにインストールした後、LaunchAgentを登録できます。登録時点の Node実行ファイルとCLIの絶対パス、CDPポート、USB IDがplistへ保存されます。
codex-micro-bridge service install --port 9222
codex-micro-bridge service statusログイン時にChatGPTもloopback CDP付きでバックグラウンド起動する場合は明示的に 指定します。すでに開いているChatGPTを強制終了・再起動はしません。
codex-micro-bridge service install --port 9222 --launch-chatgpt別キーボードの場合:
codex-micro-bridge service install --port 9222 --hid-vid cafe --hid-pid 4001LaunchAgentはログイン時に起動し、ChatGPTが利用可能になるまで再試行し、QMK
キーボードは挿した時点で自動接続します。状態とログのフルパスはservice status
が表示します。削除は次です。
codex-micro-bridge service uninstall--launch-chatgptを付けない場合、Bridgeの自動起動とChatGPTのCDP起動は別です。ChatGPT自体が
--remote-debugging-address=127.0.0.1 --remote-debugging-port=9222付きで起動して
いなければ、LaunchAgentは安全に待機を続けます。CDPをLANへ公開しないでください。
macOSでは,ChatGPTのプロセス引数に次の両方が存在する場合,--portを省略できます.
--remote-debugging-address=127.0.0.1
--remote-debugging-port=<port>
または環境変数を使用できます.
CODEX_MICRO_CDP_PORT=9222 node dist/src/cli.js startstart 常駐BridgeとQMK Raw HIDアダプターを起動
service macOS LaunchAgentのinstall/uninstall/status
probe Codex rendererとMicroハンドラーを確認
snapshot Agent 6スロットのネイティブ状態取得を確認
status 常駐Bridgeの状態を確認
tap キーのpress/releaseを送信
press キーのpressを送信
release キーのreleaseを送信
encoder エンコーダーの1ステップを送信
joystick ジョイスティックのpress/releaseを送信
send-json JSON Lines v1メッセージを直接送信
詳細なプロトコルはdocs/protocol.mdを参照してください.セキュリティ上の制約はSECURITY.mdにまとめています.
全体構成と互換性方針はdocs/architecture.mdを参照してください.
OpenAIの公式ドキュメントは,AgentキーがChatGPTを前面に出さずにタスクを切り替えられること,Command Key・ダイヤル・ジョイスティックが設定可能であることを説明しています.一方,このCLIが利用するrendererイベント名とCDP経路は非公開です.
pnpm install --frozen-lockfile
pnpm test
npm pack --dry-runタグとnpm公開を行う場合はCI成功後に同じバージョンで行い、対応するQMKリリースと Raw HID protocol versionをリリースノートへ記載します。npmへの公開はGitHubへの ソース公開とは別の保守者操作です。
不具合報告はIssueフォーム、 脆弱性はGitHubのprivate vulnerability reportingから報告してください。
BridgeはMIT Licenseです。状態探索の参照元は
THIRD_PARTY_NOTICES.mdに記載しています。本プロジェクトは
OpenAIの公式製品ではありません。OpenAI、Codex、ChatGPTおよび各商標はそれぞれの
権利者に帰属し、公式キーキャップ画像は同梱しません。