codexteer 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +519 -0
  3. package/assets/send-pururu.wav +0 -0
  4. package/bin/codexteer-wrapper.mjs +10 -0
  5. package/bin/codexteer.mjs +5 -0
  6. package/docs/distribution.md +186 -0
  7. package/node_modules/ws/LICENSE +20 -0
  8. package/node_modules/ws/README.md +548 -0
  9. package/node_modules/ws/browser.js +8 -0
  10. package/node_modules/ws/index.js +22 -0
  11. package/node_modules/ws/lib/buffer-util.js +131 -0
  12. package/node_modules/ws/lib/constants.js +19 -0
  13. package/node_modules/ws/lib/event-target.js +292 -0
  14. package/node_modules/ws/lib/extension.js +203 -0
  15. package/node_modules/ws/lib/limiter.js +55 -0
  16. package/node_modules/ws/lib/permessage-deflate.js +530 -0
  17. package/node_modules/ws/lib/receiver.js +743 -0
  18. package/node_modules/ws/lib/sender.js +607 -0
  19. package/node_modules/ws/lib/stream.js +161 -0
  20. package/node_modules/ws/lib/subprotocol.js +62 -0
  21. package/node_modules/ws/lib/validation.js +152 -0
  22. package/node_modules/ws/lib/websocket-server.js +562 -0
  23. package/node_modules/ws/lib/websocket.js +1407 -0
  24. package/node_modules/ws/package.json +74 -0
  25. package/node_modules/ws/wrapper.mjs +21 -0
  26. package/package.json +41 -0
  27. package/scripts/accessibility.applescript +43 -0
  28. package/scripts/inspect.applescript +72 -0
  29. package/scripts/send.applescript +45 -0
  30. package/src/app-server.mjs +117 -0
  31. package/src/bridge.mjs +79 -0
  32. package/src/checkpoint.mjs +128 -0
  33. package/src/cli.mjs +358 -0
  34. package/src/compatibility.mjs +115 -0
  35. package/src/desktop.mjs +207 -0
  36. package/src/directive.mjs +39 -0
  37. package/src/distribution.mjs +192 -0
  38. package/src/evidence.mjs +33 -0
  39. package/src/help.mjs +145 -0
  40. package/src/journal.mjs +120 -0
  41. package/src/launcher.mjs +145 -0
  42. package/src/monitor.mjs +123 -0
  43. package/src/observe.mjs +185 -0
  44. package/src/paged-read.mjs +228 -0
  45. package/src/prompt.mjs +51 -0
  46. package/src/resource.mjs +70 -0
  47. package/src/rpc.mjs +162 -0
  48. package/src/runner.mjs +32 -0
  49. package/src/runtime.mjs +130 -0
  50. package/src/settings.mjs +49 -0
  51. package/src/sound.mjs +16 -0
  52. package/src/store.mjs +78 -0
  53. package/src/subscription.mjs +118 -0
  54. package/src/supervise.mjs +57 -0
  55. package/src/thread-id.mjs +35 -0
  56. package/src/thread-store.mjs +72 -0
  57. package/src/version.mjs +19 -0
  58. package/src/wrapper.mjs +149 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 codex-steer contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,519 @@
1
+ # codexteer
2
+
3
+ 普段のCodex Desktopを使いながら、別のAIが進捗を観測し、根拠を伴って実行途中に軌道修正を伝えるためのmacOS用CLIです。ターミナルからの単発送信にも使えます。
4
+
5
+ ## 導入
6
+
7
+ macOS、Node.js 20以降とnpm、`/Applications/ChatGPT.app`にインストールされたCodex Desktopが必要です。Claudeを監督役にする場合は、PATH上の`claude`でClaude Codeを起動できる状態にします。
8
+
9
+ ### npxで使う
10
+
11
+ リポジトリのcloneやグローバルインストールなしで実行できます。npmパッケージ名とCLI名は`codexteer`です。
12
+
13
+ 監督開始時のCLI一式を保存する機能は`0.14.1`以降に対応します。この版のnpm公開前は、次の「ソースから導入する」を使ってください。
14
+
15
+ ```bash
16
+ npx -y codexteer --version
17
+ ```
18
+
19
+ Codex Desktopでの作業を終えてアプリを終了し、ターミナルから起動します。
20
+
21
+ ```bash
22
+ npx -y codexteer desktop start
23
+ npx -y codexteer doctor --json
24
+ ```
25
+
26
+ `-y`はnpmの取得確認を省略します。通常はバージョン指定なしで使えます。監督開始後は、その時点で保存したCLIを使い続けます。起動側と操作側の製品バージョンは、必要な通信仕様が対応していれば異なっていても使えます。
27
+
28
+ <details>
29
+ <summary>特定のバージョンで実行する場合(任意)</summary>
30
+
31
+ 不具合の切り分けや、同じ版で監督を開始し直したい場合は、パッケージ名に`@バージョン`を付けられます。次は`0.14.1`を選ぶ例です。
32
+
33
+ ```bash
34
+ npx -y codexteer@0.14.1 supervise <thread-id> --agent claude
35
+ ```
36
+
37
+ </details>
38
+
39
+ ### ソースから導入する
40
+
41
+ こちらの方法ではGitとmakeも必要です。
42
+
43
+ ```bash
44
+ git clone https://github.com/vinhphatfsg/codexteer.git
45
+ cd codexteer
46
+ make install-local
47
+ ```
48
+
49
+ `~/.local/bin`をPATHに追加してください。zshの場合は次の行を`~/.zshrc`に追加し、ターミナルを開き直します。
50
+
51
+ ```bash
52
+ export PATH="$HOME/.local/bin:$PATH"
53
+ ```
54
+
55
+ Codex Desktopでの作業を終えてアプリを終了し、導入したCLIから起動します。
56
+
57
+ ```bash
58
+ codexteer desktop start
59
+ codexteer doctor --json
60
+ ```
61
+
62
+ インストールしたCLIはこのリポジトリへのシンボリックリンクです。リポジトリを移動した場合は`make install-local`を再実行してください。削除する場合は`make uninstall-local`を実行します。
63
+
64
+ ### codex-steerから移行する
65
+
66
+ 旧npmパッケージは`@vinhphatfsg/codex-steer`です。新しいパッケージの公開後は`npx -y codexteer`を使います。ソースから導入している場合は、新しいコードで`make install-local`を実行すると`codexteer`コマンドを導入できます。既存cloneのリモートURLは`https://github.com/vinhphatfsg/codexteer.git`へ更新してください。
67
+
68
+ 保存済みの履歴や起動中Desktopとの接続を引き継ぐため、内部の保存先`CODEX_HOME/codex-steer`と通信・診断用JSONの`codex_steer_*`フィールドは維持しています。保存先を手動で移動する必要はありません。改名前から保存済みコピーを使っている監督も、そのコピーを引き続き使えます。
69
+
70
+ ### Desktopの起動について
71
+
72
+ どちらの導入方法でも、`desktop start`はDesktopを起動するたびに実行します。すでに起動している場合は、一度終了してから実行してください。通常の起動に戻すには、Desktopを終了し、Dockなどから開き直します。
73
+
74
+ `desktop start`は実行ファイルと依存を`CODEX_HOME/codex-steer/runtimes/<version>-<sha256>`へ検証して配置し、そのwrapperからDesktopを起動します。元のリポジトリやnpxキャッシュに依存せず、起動後のhelperも同じ保存先を使います。配置済みの版は自動削除・上書きしません。
75
+
76
+ 監督AIが使うCLIの参照先については、次の監督手順を参照してください。MITライセンス、保存先の検証・復旧と公開手順は[配布ドキュメント](docs/distribution.md)にまとめています。
77
+
78
+ ## 使い方
79
+
80
+ 以下の`<thread-id>`は対象のタスクIDに置き換えてください。`codex://threads/...`形式のタスクURLも使えます。
81
+ コマンド一覧では`codexteer`と略記します。npxで手動実行する場合は、その部分を`npx -y codexteer`に置き換えてください。
82
+
83
+ ### Claude CodeにCodexの監視とステアリングを任せる
84
+
85
+ 上の導入を済ませ、監視したいCodexタスクのIDまたはURLをコピーします。別のターミナルの対象プロジェクトのディレクトリから、導入方法に合う方を実行してください。
86
+
87
+ ```bash
88
+ # npxで起動する場合
89
+ npx -y codexteer supervise <thread-id> --agent claude
90
+
91
+ # ソースから導入した場合
92
+ codexteer supervise <thread-id> --agent claude
93
+ ```
94
+
95
+ 対象IDを埋め込んだ監督プロンプトでClaudeを[対話起動](https://code.claude.com/docs/en/cli-reference#cli-commands)します。端末の標準入出力をそのまま使い、起動後もClaudeへ追加の指示を入力できます。
96
+
97
+ 両方とも、起動したCLI本体と依存を`CODEX_HOME/codex-steer/runtimes/<version>-<sha256>`へ検証して保存し、そのコピーへの実行コマンドを監督プロンプトに埋め込みます。監督役に渡す切り替えオプションは不要です。npxのキャッシュが新版に更新された場合や、ソース導入先を`git pull`・削除した場合も、開始済みの監督は保存した内容を使い続けます。
98
+
99
+ 実行コマンドには、生成時に検証した`CODEX_HOME`の実体パスも埋め込みます。貼り付け先の環境変数が未設定・別設定でも、生成元の接続先と履歴を使います。同じPCで使い、監督中は保存したコピーを保持してください。新しいCLIや別のプロファイルに切り替えるときは、その環境から監督を起動し直すか、プロンプトを生成し直します。同じ版・同じ内容のコピーは検証して再利用し、内容が変われば別の保存先を作ります。既存のコピーは自動削除・上書きしません。
100
+
101
+ Node本体はコピーせず、開始時の実体への絶対パスとNodeバージョンの検査を各コマンドに含めます。元のNodeは保持してください。バージョンが変われば`NODE_VERSION_MISMATCH`で操作を止めます。同じバージョンのNodeの改変や共有ライブラリまで固定するものではありません。保存先やNodeが使えなくなった場合は介入を止め、理由を報告するよう指示します。
102
+
103
+ 起動時にバージョンを指定するかどうかに関係なく、監督用CLIの保存処理は同じです。キャッシュの動作と保存処理の詳細は[配布ドキュメント](docs/distribution.md#監督役が使うcli)を参照してください。
104
+
105
+ モデルなどClaude側の起動引数は、`--`の後ろへ渡します。
106
+
107
+ ```bash
108
+ codexteer supervise <thread-id> --agent claude -- --model <model> --effort <level>
109
+ ```
110
+
111
+ 同じPCで既にClaudeを起動している場合は、監督役(オーケストレーター)向けのプロンプトを出力し、そのセッションに貼り付けても使えます。
112
+
113
+ ```bash
114
+ # npxで本文を生成する場合
115
+ npx -y codexteer supervise prompt <thread-id>
116
+
117
+ # ソースから導入した場合
118
+ codexteer supervise prompt <thread-id>
119
+ ```
120
+
121
+ 直接起動と本文だけの出力は、同じ保存・検証・生成処理を使います。`supervise prompt`もCLI一式を保存してから本文を出力します。監督手順は`codexteer help monitor`と共通で、生成プロンプト中の`doctor`・`read`・`watch`・`send`等の例には同じ実行コマンドを使います。監督役には、ヘルプ中の`codexteer`表記も指定された実行コマンドに置き換えるよう指示します。
122
+
123
+ 1. 接続を診断し、対象タスクの最新の依頼・制約・進捗、有効な指示と対応待ちの履歴を確認する。
124
+ 2. 差分を読み切ったcursorから観測を続ける。[Monitorツール](https://code.claude.com/docs/en/tools-reference#monitor-tool)が使えれば`watch --stream`、使えなければ短い`watch`を繰り返す。接続状態の通知を読み、復帰待ちの間は介入を控える。
125
+ 3. 過剰設計・スコープ逸脱・より小さな修正の余地を判断し、必要なら最新の差分を読み切ってから`send --based-on`で介入する。同じ指摘が対応中なら結果を待つ。
126
+ 4. 送信したmessage_idを保持し、受付・対応報告・検証結果を区別して追う。`unknown`は`history check`で照合し、自動再送しない。
127
+ 5. 介入内容・確認結果・未確認事項を短く報告する。停止指示を受けたら、自分のMonitor/watchと追加送信を止める。
128
+
129
+ このプロンプトは、ユーザーの最新の目的・制約の範囲内で監督と介入を委任します。その範囲の介入に毎回の確認は不要です。目的・制約が不明な場合や要件自体を変える必要がある場合は確認します。監督の委任だけで停止中タスクを再開したり、承認・質問へ代理回答したりはしません。単発送信では、ユーザーが指定した宛先・内容を使います。
130
+
131
+ 停止するときは、同じClaudeセッションで「監視とステアリングを停止して」と伝えてください。Codexの作業自体は継続します。監督はCLIとOSの既存の権限設定に従います。
132
+
133
+ IDのコピーを省く場合は、Claudeに`codexteer threads list --desktop-only --json`で候補を表示してもらい、対象を選ぶこともできます。同じプロジェクトに複数のタスクがある場合、Claudeの起動場所だけでは監視対象を特定できません。
134
+
135
+ ### タスクを探して送信する
136
+
137
+ ```bash
138
+ # 最近のタスクを表示
139
+ codexteer threads list --desktop-only --limit 20 --json
140
+
141
+ # 実行中のタスクに追加入力(受付成功時に「プルッ」の通知音)
142
+ codexteer send <thread-id> "失敗したテストの原因を先に確認してください"
143
+
144
+ # 今回だけ通知音を鳴らさずに送信
145
+ codexteer send <thread-id> "失敗したテストの原因を先に確認してください" --no-sound
146
+
147
+ # 停止中のタスクを再開
148
+ codexteer send <thread-id> "続きをお願いします" --new-turn
149
+
150
+ # 送信内容をプレビュー
151
+ codexteer send <thread-id> "メッセージ" --dry-run --json
152
+
153
+ # 複数行を標準入力から送信
154
+ printf '%s\n' '1. 原因を調査' '2. 結果を説明' | codexteer send <thread-id> -
155
+ ```
156
+
157
+ 標準の送信方式は`app-server`です。`--json`を付けると結果をJSONで返します。`delivery_status: unknown`の場合は、`codexteer history check <thread-id> --json`で受付状況を確認してから再送を判断してください。
158
+
159
+ ### 状態と進捗を読む
160
+
161
+ ```bash
162
+ codexteer status <thread-id> --json
163
+ codexteer read <thread-id> --json
164
+ codexteer read <thread-id> --since <cursor> --include-output --json
165
+ codexteer watch <thread-id> --until idle --timeout-ms 60000 --json
166
+ ```
167
+
168
+ `read`は直近50件を返します。返された`data.cursor`を次回の`--since`に渡すと、新規・更新項目を取得できます。`data.has_more: true`の場合は、返されたcursorで続きを読んでください。
169
+
170
+ 変化するたびに1行のJSONを受け取るには、次のコマンドを使います。Ctrl-Cで停止します。
171
+
172
+ ```bash
173
+ codexteer watch <thread-id> --stream --json
174
+ ```
175
+
176
+ ### 詳細な使い方
177
+
178
+ 以下は用途別のコマンド一覧です。`<...>`は実際の値に置き換えてください。`<cursor>`は`read`・`status`・`watch`の結果、`<message-id>`は`send`・`history list`、`<checkpoint-id>`は`checkpoint capture`・`checkpoint list`、`<token>`は`resource acquire`の結果から取得します。
179
+
180
+ 対話起動の`supervise <thread-id> --agent claude`を除き、各コマンドに`--json`を付けるとJSONで結果を返します。`supervise prompt`もJSONに対応します。別コマンドを実行する`run`や監督役の起動では、codexteer側のオプションを区切りの`--`より前に置いてください。
181
+
182
+ #### ヘルプ・バージョン
183
+
184
+ ```bash
185
+ # 全体の使い方
186
+ codexteer help
187
+
188
+ # コマンド別の使い方(sendをread、watch、historyなどに置き換え)
189
+ codexteer help send
190
+ codexteer send --help
191
+ codexteer help send --json
192
+
193
+ # Claude CodeのMonitorとの連携
194
+ codexteer help monitor
195
+
196
+ # バージョン
197
+ codexteer --version
198
+ ```
199
+
200
+ 引数なしの`codexteer`と`codexteer --help`でも全体のヘルプを表示します。
201
+
202
+ #### 監督役の起動
203
+
204
+ ```bash
205
+ codexteer supervise <thread-id> --agent claude
206
+ codexteer supervise <thread-id> --agent claude -- --model <model> --effort <level>
207
+ codexteer help supervise
208
+ ```
209
+
210
+ `--agent`は必須で、現在の対応値は`claude`です。PATH上の実行ファイルを、現在の作業ディレクトリ・環境変数・標準入力・標準出力・標準エラーを引き継いで起動します。シェルのaliasやfunctionは使いません。
211
+
212
+ 最初の`--`以降は対象エージェントの引数です。順序・空文字・空白・改行を保ち、codexteer側では解釈もシェルでの再展開もしません。例えば区切り後の`--help`・`--version`・`--json`もClaudeへ渡します。呼び出し元のシェルで必要な引用は付けてください。
213
+
214
+ 追加引数の後ろには、Claude側の区切り`--`と、`supervise prompt`と同じ生成処理による監督プロンプトを一つの引数として付加します。追加引数の意味や組み合わせの妥当性はClaudeが判断します。
215
+
216
+ 不正なID形式、`--agent`の不足・未対応値、区切り前の未知の引数では起動しません。Claudeが未導入・実行不可などの起動失敗は標準エラーに理由を表示し、終了コード1です。Desktopの接続と対象タスクの存在は、起動した監督役が最初に確認します。
217
+
218
+ 通常終了ではClaudeの終了コードを返します。`SIGINT`・`SIGTERM`・`SIGHUP`は起動したClaudeへ転送し、シグナル終了時は`128 + シグナル番号`を返します。対話出力を引き継ぐため、この起動形式では`--json`は非対応です。ヘルプは`help supervise --json`、本文だけの取得は`supervise prompt <thread-id> --json`を使ってください。
219
+
220
+ #### 監督役(オーケストレーター)向けのプロンプトを取得
221
+
222
+ ```bash
223
+ # 監督役へ渡す、対象タスク入りの本文を標準出力へ出力
224
+ codexteer supervise prompt <thread-id>
225
+
226
+ # タスクURLからも生成可能
227
+ codexteer supervise prompt codex://threads/<thread-id>
228
+
229
+ # JSONで対象IDと本文を取得
230
+ codexteer supervise prompt <thread-id> --json
231
+
232
+ # このコマンドのヘルプ
233
+ codexteer help supervise prompt
234
+ ```
235
+
236
+ `supervise prompt`は、Claudeなどの監督役(オーケストレーター)へ渡す初期プロンプトを生成します。対象IDと引数を検証し、CLI一式を内容ハッシュ別の保存先へ配置・検証してから、正規化したIDと保存先を本文へ埋め込みます。保存・検証に失敗した場合は本文を出力せず、直接起動の場合もClaudeを起動しません。Desktopの起動・接続、履歴取得、送信、Claudeの起動は行いません。タスクの存在と接続は監督開始時に確認します。本文には観測・根拠付き介入・結果確認・停止までの手順を含みます。
237
+
238
+ 各コマンドは開始時のNodeと保存したCLIの絶対パスを使うため、本文を貼り付ける先のPATHに`codexteer`がなくても実行できます。先頭の`CODEX_HOME='…'`で生成元のプロファイルを指定します。相対パスやシンボリックリンクで指定していたホームも、検証した実体への絶対パスを使います。空白や引用符を含むパスはシェル引数として引用します。本文に埋め込むパスに改行等の制御文字があれば、本文を出力する前に`SUPERVISION_PATH_UNSAFE`で拒否します。`CODEX_HOME`指定・引用・`--require-node-version`を含め、実行コマンドをそのまま使ってください。別のPCや別のプロファイルを監督する場合は、そこで本文を生成し直してください。
239
+
240
+ 通常出力は末尾改行付きの本文のみです。`--json`では既存CLIと同じ形式で返します。
241
+
242
+ ```json
243
+ {
244
+ "ok": true,
245
+ "command": "supervise.prompt",
246
+ "data": {
247
+ "thread_id": "01a04373-3770-71e0-a2e3-a3c196f5f5b1",
248
+ "prompt": "対象IDと保存したCLIの実行コマンドを含む監督プロンプト本文…",
249
+ "deployment": {
250
+ "codex_home": "/Users/me/.codex",
251
+ "directory": "/Users/me/.codex/codex-steer/runtimes/0.14.1-<sha256>",
252
+ "wrapper_path": "/Users/me/.codex/codex-steer/runtimes/0.14.1-<sha256>/bin/codexteer-wrapper.mjs",
253
+ "version": "0.14.1",
254
+ "sha256": "<sha256>",
255
+ "reused": false
256
+ },
257
+ "node": { "path": "/absolute/path/to/node", "version": "v25.1.0" }
258
+ }
259
+ }
260
+ ```
261
+
262
+ IDが不正な場合や引数が不足・過剰な場合は終了コード1です。通常は標準エラーへ理由を出し、本文は出力しません。`--json`では標準出力に`{"ok":false,"error":{"message":"理由"}}`を返します。起動に使う本文の生成には`--json`を付けないでください。
263
+
264
+ Codex CLIでも、`steer_prompt=$(codexteer supervise prompt <thread-id>) && codex "$steer_prompt"`のように初期プロンプトを渡せます。生成プロンプトには、Monitorが使えない場合の短い`watch`による手順と、監督AI自身の送信元名を使う案内を含みます。
265
+
266
+ #### Desktopの起動・診断・タスク選択
267
+
268
+ ```bash
269
+ # 共有接続を有効にしてDesktopを起動(--dry-runで起動せずプレビュー)
270
+ codexteer desktop start
271
+ codexteer desktop start --dry-run --json
272
+
273
+ # 接続と起動条件を診断
274
+ codexteer doctor --json
275
+
276
+ # 指定タスクの観測APIも検証
277
+ codexteer doctor --thread <thread-id> --json
278
+
279
+ # 最近のタスクを一覧表示
280
+ codexteer threads list --desktop-only --limit 20 --json
281
+
282
+ # タスクURLをIDに変換
283
+ codexteer thread resolve codex://threads/<thread-id> --json
284
+
285
+ # 対象タスクをDesktopの画面で開く
286
+ codexteer open <thread-id>
287
+ ```
288
+
289
+ `doctor`はDesktop・同梱CLI・実行中のwrapper Node・手元のCLIを動かすNodeのバージョンと、`connection.status`、`compatibility.api_checks`、`failure`を返します。対象未指定では接続だけを診断するため、観測の互換性は`unverified`です。
290
+
291
+ `codex_steer_compatibility`は操作側と実行中wrapperの製品名・バージョンの比較で、診断情報です。版の不明・不一致だけではコマンドを止めません。`runtime_compatibility`で通信仕様と操作ごとの対応状況を返し、必要な仕様が合う組み合わせはそのまま使えます。インストール済み同梱CLIと実行中CLIの版の差も`cli_version_status`に分けて表示します。
292
+
293
+ 例えば新規ターンの仕様だけが非互換なら、`send --new-turn`だけが`CAPABILITY_UNSUPPORTED`で止まり、`read`・`watch`・通常の`send`は使えます。新規ターン用のソケットがない場合も同様です。共通の通信仕様が非互換なら、接続を必要とする操作は`RUNTIME_PROTOCOL_UNSUPPORTED`で止まります。`help`・`supervise prompt`・ローカル履歴一覧・`--dry-run`は接続不要です。
294
+
295
+ 旧wrapperにも対応します。既知のv1仕様は対応表で判断し、仕様不明の環境でも読み取りだけで観測を検証できます。送信仕様が確認できない環境の送信は`CAPABILITY_UNVERIFIED`または`RUNTIME_PROTOCOL_UNVERIFIED`で止め、互換性の確認目的では送信・タスク再開をしません。対応表、各機能の仕様とエラーは[配布ドキュメント](docs/distribution.md#互換性契約)を参照してください。
296
+
297
+ `doctor --thread`は指定タスクの読み取り経路を検証し、成功すれば`compatibility.status: verified`を返します。呼び出していないAPIは`unverified`、メソッド未対応は`unsupported`、応答異常等は`failed`です。通信が途切れて検証を完了できなければ`unverified`のまま理由を返します。本文は診断出力に含めず、タスクの再開・送信・承認回答は行いません。`--thread`は`app-server`専用です。
298
+
299
+ `ready`は接続条件と今回指定した検証の結果です。新規ターンだけが使えなくても、観測に成功すれば`ready: true`になります。操作別の仕様対応は`runtime_compatibility.operations`、新規ターン用ソケットの状態は`desktop_subscription`を確認してください。`supported`は仕様上の対応、`verified`は実際に行った観測の検証で、履歴全体、送信、画面表示、承認往復は保証しません。未検証の機能は`unverified_features`に明示します。例えば、従来の履歴形式を読み取った場合の結果は次の形です(主要項目のみ)。
300
+
301
+ ```json
302
+ {"ready":true,"connection":{"status":"connected"},"compatibility":{"status":"verified","scope":"target-observation","thread_id":"01a04373-3770-71e0-a2e3-a3c196f5f5b1","api_checks":{"initialize":"verified","thread/loaded/list":"verified","thread/read":"verified","thread/turns/list":"unverified","thread/items/list":"unverified"},"unverified_features":["steering","desktop_ui","approval_roundtrip"]},"failure":null}
303
+ ```
304
+
305
+ `threads list`は`--desktop-only`を外すとDesktop以外のローカルタスクも含みます。`--limit`は1〜500件、既定は20件です。タスクや各種記録の保存先は`CODEX_HOME`に従い、未指定時は`~/.codex`を使います。
306
+
307
+ #### メッセージ送信・ステアリング
308
+
309
+ ```bash
310
+ # 実行中タスクへ追加入力
311
+ codexteer send <thread-id> "今の要件に必要な変更へ絞ってください" --json
312
+
313
+ # sendを省略した短縮形
314
+ codexteer <thread-id> "今の要件に必要な変更へ絞ってください"
315
+
316
+ # 停止中・未ロードのタスクを再開
317
+ codexteer send <thread-id> "続きをお願いします" --new-turn --json
318
+
319
+ # 送信せずプレビュー
320
+ codexteer send <thread-id> "メッセージ" --dry-run --json
321
+
322
+ # 観測した内容と根拠を付けて送信
323
+ codexteer send <thread-id> "追加の抽象化を見直してください" --source claude-code --kind suggestion --evidence <file-or-url> --based-on <cursor> --json
324
+
325
+ # 標準入力から送信
326
+ printf '%s\n' '問題点' '具体的な修正方針' | codexteer send <thread-id> -
327
+
328
+ # 本文にオプション名を含める場合
329
+ codexteer send <thread-id> -- '--new-turn の処理を確認してください'
330
+ ```
331
+
332
+ | オプション | 用途 |
333
+ | --- | --- |
334
+ | `--new-turn` | 停止中のタスクを再開。実行中は拒否します。 |
335
+ | `--dry-run` | 接続・送信せず、送信内容をプレビュー。 |
336
+ | `--no-sound` | 今回の送信を消音。既定は受付成功時に「プルッ」の通知音。 |
337
+ | `--sound` | 音ありを明示する互換オプション。`app-server`方式専用。`--no-sound`と併用不可。 |
338
+ | `--backend app-server\|ui` | 送信方式。既定は`app-server`。 |
339
+ | `--source <name>` | 送信者名。例: `claude-code`。 |
340
+ | `--kind <kind>` | `decision`(ユーザー決定の伝達)、`review`、`hypothesis`、`suggestion`。 |
341
+ | `--evidence <file-or-url>` | 根拠となるファイルやURL。複数指定可能。 |
342
+ | `--based-on <cursor>` | 観測後に新しいユーザー入力やターン変更があれば送信を停止。読み残しのないcursorを使います。 |
343
+ | `--supersedes <message-id>` | 以前の指示を新しい内容に置き換え。 |
344
+ | `--expires-at <timestamp>` | 指示の有効期限。時差付きの未来のISO日時を指定。 |
345
+ | `--checkpoint <checkpoint-id>` | 指定したチェックポイントを送信直前に照合。無効なら送信を停止。 |
346
+ | `--keep-focus` | UI方式で、送信後もDesktopを前面に維持。 |
347
+ | `--wait-ms <milliseconds>` | UI方式の画面待機時間。既定は1500ms。 |
348
+
349
+ `--source`から`--checkpoint`までの指示メタデータは`app-server`方式で使います。`accepted`は入力の受付を表します。`unknown`の場合は`history check`で確認してから再送を判断してください。
350
+
351
+ 送信音は既定でオンです。同梱の短い3音「プルッ」(約0.30秒、`assets/send-pururu.wav`)を、今回の入力が受け付けられた直後に鳴らします。`--no-sound`・`--dry-run`・受付失敗・受付未確認(UI方式を含む)では鳴りません。CodexやmacOSの通知設定は変更せず、音量・ミュートはMacの出力設定に従います。再生に失敗しても送信成功は維持され、`--json`では`data.sound.played`と鳴らなかった`reason`、通常出力では再生失敗の警告で確認できます。
352
+
353
+ #### 状態・発言・変更の読み取りと監視
354
+
355
+ ```bash
356
+ # 状態・実行中ターン・承認待ちを確認
357
+ codexteer status <thread-id> --json
358
+
359
+ # 直近の発言・コマンド・ファイル変更を読む
360
+ codexteer read <thread-id> --limit 50 --max-chars 2000 --json
361
+
362
+ # 前回からの新規・更新項目を、コマンド出力や差分本文も含めて読む
363
+ codexteer read <thread-id> --since <cursor> --include-output --json
364
+
365
+ # 過去全文の整合性も照合して読む
366
+ codexteer read <thread-id> --full-history --json
367
+
368
+ # 次の変化まで待つ
369
+ codexteer watch <thread-id> --since <cursor> --until change --timeout-ms 30000 --poll-ms 1000 --json
370
+
371
+ # タスクの停止、またはユーザー対応待ちまで待つ
372
+ codexteer watch <thread-id> --until idle --timeout-ms 60000 --json
373
+ codexteer watch <thread-id> --until attention --json
374
+
375
+ # 変化するたびにJSONを1行ずつ出力し続ける
376
+ codexteer watch <thread-id> --stream --since <cursor> --include-output --json
377
+ ```
378
+
379
+ | オプション | 対象・用途 |
380
+ | --- | --- |
381
+ | `--since <cursor>` | `read`・`watch`で前回の続きから取得。 |
382
+ | `--limit <n>` | `read`・`watch`で1回に返す項目数。1〜1000、既定50。 |
383
+ | `--max-chars <n>` | `read`・`watch`で各テキストの文字数。100〜20000、既定2000。 |
384
+ | `--include-output` | `read`・`watch`でコマンド出力・差分本文を表示。 |
385
+ | `--full-history` | `status`・`read`・`watch`で過去全文も照合。旧v1 cursorの継続にも使用。 |
386
+ | `--until change\|idle\|attention` | `watch`の待機条件。既定は`change`。 |
387
+ | `--timeout-ms <n>` | 通常の`watch`の待機上限。0〜60000ms、既定30000ms。 |
388
+ | `--poll-ms <n>` | `watch`の確認間隔。250〜10000ms、既定1000ms。 |
389
+ | `--stream` | `watch`で停止まで監視を継続。`--until`・`--timeout-ms`とは併用不可。 |
390
+
391
+ `has_more: true`なら`changed: false`でも返されたcursorで続きを読み、読み終えてから判断・送信してください。`--stream`は初回に現在を基準とし、監視開始を1回通知します。その後は作業差分と接続状態の変化を出力します。開始時の状況も読む場合は先に`read`し、そのcursorを渡します。停止はCtrl-C、Monitorで起動した場合はClaudeに停止を依頼します。
392
+
393
+ `--stream`のJSONは、`data.type`で次の2種類を区別します。
394
+
395
+ | `data.type` | 内容 |
396
+ |---|---|
397
+ | `observation` | 作業差分。従来の`events`・`attention`・`cursor`・`has_more`等を含みます。 |
398
+ | `connection` | 接続状態。`state`、`resume_cursor`、`last_observed_at`、`reconnect_attempts`等を含みます。作業差分は含みません。 |
399
+
400
+ 接続状態は`watching`(監視開始)、`reconnecting`(観測不能・復帰待ち)、`recovered`(読み取り復帰)、`needs_review`(履歴の再確認が必要)、`failed`(監視終了)です。平常時の定期通知はありません。
401
+
402
+ 観測に一度成功した後の通信切断・読み取りタイムアウト・一時的なruntime不在は、接続先を再確認し、同じタスクとcursorで再接続します。待機間隔は1→2→4→8→最大10秒、接続・初期化・読み取りを含む復帰待ちは合計60秒までです。復帰後も`has_more`があれば続きを読みます。初回の接続失敗、権限異常、不正な応答、未対応API、無効cursorでは停止します。通常の`watch`には再接続処理はありません。
403
+
404
+ 接続行の`resume_cursor`はCLIの出力完了位置、または初回の基準です。監督AIが内容を読んだ証明にはなりません。watchプロセス自体が終了した場合は、監督側が読了済みcursorを指定して明示的に再開してください。無効cursorを自動で捨てたり、配送が`unknown`の指示を再送したりはしません。
405
+
406
+ 接続状態の通知例です。`<cursor>`は実際の値に置き換わります。
407
+
408
+ ```json
409
+ {"ok":true,"command":"watch","data":{"type":"connection","thread_id":"01a04373-3770-71e0-a2e3-a3c196f5f5b1","state":"reconnecting","resume_cursor":"<cursor>","last_observed_at":"2026-09-12T10:00:00.000Z","observed_at":"2026-09-12T10:00:08.000Z","reconnect_attempts":0,"cause_code":"CONNECTION_FAILED","retry_timeout_ms":60000}}
410
+ ```
411
+
412
+ 監視の接続・読み取りで停止を伴うエラーは`ok:false`、`data.type:connection`、`data.state:needs_review|failed`、`error.code`と理由を返し、終了コード1です。復帰待ちの上限は`WATCH_RECONNECT_TIMEOUT`、無効cursorは`STALE_CURSOR`です。Ctrl-Cは接続・初期化・復帰待ちの途中でも監視だけを停止します。
413
+
414
+ #### 指示の一覧・訂正・撤回
415
+
416
+ ```bash
417
+ # 現在有効な指示を表示(--allで置換済み・撤回済み・期限切れも表示)
418
+ codexteer instructions list <thread-id> --json
419
+ codexteer instructions list <thread-id> --all --json
420
+
421
+ # 以前の指示を訂正
422
+ codexteer send <thread-id> "先ほどの指示を訂正します。既存の仕組みを使ってください" --supersedes <message-id> --json
423
+
424
+ # 有効期限を付けて送信
425
+ codexteer send <thread-id> "この方針で進めてください" --expires-at <timestamp> --json
426
+
427
+ # 理由を添えて撤回
428
+ codexteer instructions retract <thread-id> <message-id> --reason "前提が変わったため" --json
429
+ ```
430
+
431
+ `retract`には`--source`・`--based-on`・`--new-turn`・`--dry-run`も使えます。訂正・撤回は対象タスクへメッセージとして送られ、元の履歴は残ります。有効期限は指示一覧に適用され、進行中の作業を自動停止するものではありません。
432
+
433
+ #### 配送・対応履歴
434
+
435
+ ```bash
436
+ # 送信履歴を表示(--pendingで反映済み・不採用以外に絞る)
437
+ codexteer history list <thread-id> --pending --json
438
+
439
+ # 特定の送信の詳細と本文を表示
440
+ codexteer history show <thread-id> <message-id> --include-text --json
441
+
442
+ # 対象タスクの受信履歴と照合(message-idを省略するとまとめて照合)
443
+ codexteer history check <thread-id> <message-id> --json
444
+
445
+ # 対応状況と根拠を記録
446
+ codexteer history mark <thread-id> <message-id> --status applied --note "指示どおりの変更を確認" --evidence <file-or-url> --by claude-code --json
447
+ ```
448
+
449
+ `list`・`show`・`check`は`--include-text`で本文も表示します。`mark --status`は`acknowledged`(確認済み)、`applied`(反映済み)、`dismissed`(不採用)から選び、`--note`を必ず付けます。`applied`には`--evidence`も必要で、複数指定できます。`check`の`stored`は保存の確認、`mark`は記録者による対応状況の申告です。
450
+
451
+ #### 入力・実行結果・成果物のチェックポイント
452
+
453
+ ```bash
454
+ # 入力ファイルを記録し、checkpoint-idを取得
455
+ codexteer checkpoint capture <thread-id> tests --path src --path test --path package.json --path package-lock.json --json
456
+
457
+ # 記録した入力でコマンドを実行
458
+ codexteer checkpoint run <thread-id> <checkpoint-id> --timeout-ms 60000 --include-output --json -- npm test
459
+
460
+ # 成功した実行に成果物ファイルを関連付け
461
+ codexteer checkpoint attach <thread-id> <checkpoint-id> --artifact <artifact-file> --json
462
+
463
+ # 入力・実行結果・成果物の一致を確認
464
+ codexteer checkpoint verify <thread-id> <checkpoint-id> --json
465
+
466
+ # チェックポイントを一覧表示
467
+ codexteer checkpoint list <thread-id> --json
468
+
469
+ # 特定のチェックポイントを出力ログも含めて表示
470
+ codexteer checkpoint show <thread-id> <checkpoint-id> --include-output --json
471
+ ```
472
+
473
+ `capture --path`はファイル・ディレクトリを複数指定できます。除外するパスは`--exclude`で指定し、コマンドの出力先やキャッシュを入力に含めないでください。`attach --artifact`も複数指定可能です。`run --timeout-ms`は0〜86400000msで、既定の0は無制限です。入力や成果物が変わると`valid: false`になり、`run`・`verify`は終了コード1を返します。
474
+
475
+ #### 共有リソースの利用調整
476
+
477
+ ```bash
478
+ # 利用を予約し、tokenを取得
479
+ codexteer resource acquire screen --owner claude-code --ttl-ms 120000 --thread <thread-id> --reason "画面を確認" --condition "ユーザーが今回の画面利用を許可済み" --json
480
+
481
+ # 特定リソースの状態を確認
482
+ codexteer resource status screen --json
483
+
484
+ # リソースを一覧表示
485
+ codexteer resource list --json
486
+
487
+ # 予約期限を延長
488
+ codexteer resource renew screen --token <token> --ttl-ms 120000 --json
489
+
490
+ # 予約を解放
491
+ codexteer resource release screen --token <token> --json
492
+
493
+ # コマンド実行中だけ予約し、終了時に解放
494
+ codexteer resource run project-build --owner claude-code --ttl-ms 600000 --timeout-ms 60000 --include-output --json -- npm test
495
+ ```
496
+
497
+ `screen`や`project-build`は利用者が決めるリソース名です。同じ`CODEX_HOME`・同じ名前を使う参加者間で予約を共有します。`acquire`・`run`の`--owner`は必須で、`--thread`・`--reason`・`--condition`で対象タスク・用途・利用条件を記録できます。
498
+
499
+ `--ttl-ms`は1000〜86400000ms、既定600000msです。`run`は実行中に自動更新し、`--timeout-ms`で実行時間も制限できます(0〜86400000ms、既定0=無制限)。この予約は参加者間の調整用で、OSの排他ロックや画面利用の許可を与えるものではありません。
500
+
501
+ #### 画面操作による送信・診断
502
+
503
+ 実行元ターミナルにmacOSのAccessibility許可を与え、`--backend ui`を指定してください。
504
+
505
+ ```bash
506
+ # UI方式の利用条件を診断
507
+ codexteer doctor --backend ui --json
508
+
509
+ # UI方式で送信
510
+ codexteer send <thread-id> "メッセージ" --backend ui
511
+
512
+ # 画面の待機時間を指定し、送信後もDesktopを前面に維持
513
+ codexteer send <thread-id> "メッセージ" --backend ui --keep-focus --wait-ms 3000
514
+
515
+ # 対象タスクを開いてAccessibilityの画面構造を診断
516
+ codexteer debug-ui <thread-id> --wait-ms 1500
517
+ ```
518
+
519
+ UI方式は画面フォーカスに依存し、サイドチャットが開いている場合の宛先保証はありません。結果の`submitted_unverified`はキー入力の実行を表し、対象タスクへの配送確認ではありません。
Binary file
@@ -0,0 +1,10 @@
1
+ #!/Applications/ChatGPT.app/Contents/Resources/cua_node/bin/node
2
+ import { runWrapper } from "../src/wrapper.mjs";
3
+
4
+ try {
5
+ process.exitCode = await runWrapper(process.argv.slice(2));
6
+ } catch (error) {
7
+ // Protocol stdout is reserved exclusively for Desktop. Never print argv/env.
8
+ console.error(`codexteer wrapper: ${error.message}`);
9
+ process.exitCode = 1;
10
+ }
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { main } from "../src/cli.mjs";
4
+
5
+ await main(process.argv.slice(2));