Skip to content

Commit e74de37

Browse files
committed
docs: describe the shadow-call model set as a set
The docs named a single intercepted slug, which was already wrong for clients from 0.145.0 and would go wrong again on the next bump. They now describe the prefix set and where it is configured.
1 parent c41aed9 commit e74de37

4 files changed

Lines changed: 33 additions & 7 deletions

File tree

docs-site/src/content/docs/ko/reference/cli.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ GUI가 필요하지 않습니다. `add`, `remove`, `list-custom`은 설정 파
196196
| `provider <name> <on\|off>` | `--json` | 한 프로바이더의 모든 모델을 한 번의 쓰기로 켜거나 끕니다. |
197197
| `selected <provider>` | `--set <id,id...>`, `--clear`, `--json` | 프로바이더 모델 허용 목록을 읽거나 교체합니다. `--clear`는 목록을 지워 전체 모델을 제공합니다. |
198198
| `context <status\|value <tokens>\|provider <name> <on\|off>\|all <on\|off>>` | `--json` | 컨텍스트 윈도 상한을 전역 또는 프로바이더 단위로 읽고 설정합니다. |
199-
| `shadow <status\|set> [model\|-]` | `--enabled <on\|off>`, `--json` | 백그라운드 shadow-call 모델을 읽거나 설정합니다. `-`는 모델을 지웁니다. |
199+
| `shadow <status\|set> [model\|-]` | `--enabled <on\|off>`, `--json` | Codex 백그라운드 헬퍼 호출을 대체할 모델을 읽거나 설정합니다. `-`는 모델을 지웁니다. `status`는 프록시가 가로채는 헬퍼 슬러그 `sourceModels`도 함께 보여줍니다(기본값 `gpt-5.4-mini`, 그리고 Codex 0.145.0부터 쓰이는 `gpt-5.6-luna`). |
200200

201201
```bash
202202
ocx models live --json # 지금 Codex가 실제로 보는 목록

docs-site/src/content/docs/reference/cli.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ require the proxy to be running (`ocx start`, or an installed service).
247247
| `provider <name> <on\|off>` | `--json` | Enable or disable every model of one provider in a single write. |
248248
| `selected <provider>` | `--set <id,id...>`, `--clear`, `--json` | Read or replace the provider model allowlist. `--clear` removes the allowlist so every model is offered. |
249249
| `context <status\|value <tokens>\|provider <name> <on\|off>\|all <on\|off>>` | `--json` | Read or set the context-window cap, globally or per provider. |
250-
| `shadow <status\|set> [model\|-]` | `--enabled <on\|off>`, `--json` | Read or set the background shadow-call model. `-` clears the model. |
250+
| `shadow <status\|set> [model\|-]` | `--enabled <on\|off>`, `--json` | Read or set the replacement model for Codex's background helper calls. `-` clears the model. `status` also reports `sourceModels`, the helper slugs the proxy intercepts (default `gpt-5.4-mini` and `gpt-5.6-luna`, which Codex 0.145.0 switched to). |
251251

252252
```bash
253253
ocx models live --json # what Codex can actually see right now

docs/shadow-call-intercept.md

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,24 @@
22

33
## What are shadow calls?
44

5-
Codex Desktop App makes background API calls using `gpt-5.4-mini` for internal helper tasks:
5+
Codex Desktop App makes background API calls with a hard-coded helper model for internal tasks:
66

77
- **Thread title generation** — auto-generates 3-8 word titles after your first prompt
88
- **Commit message generation** — generates git commit messages
99
- **Skill orchestration** — internal orchestration turns
1010

1111
These calls happen independently of your selected main model and use `reasoningEffort: low`.
1212

13+
The helper model is not stable across client versions. Codex used `gpt-5.4-mini` up to 0.144.x and
14+
moved to `gpt-5.6-luna` in 0.145.0, which silently disabled a single-literal intercept
15+
([#311](https://github.com/lidge-jun/opencodex/issues/311)). The intercept therefore matches a
16+
**set** of source-model prefixes — `gpt-5.4-mini` and `gpt-5.6-luna` by default — so a client bump
17+
does not quietly turn the feature off. Routed ids (`provider/model`) are never matched: a shadow
18+
call is always a bare native slug, and an explicit routed selection must not be hijacked.
19+
1320
## The problem
1421

15-
- Non-OpenAI providers (Bedrock, Azure, etc.) may not support bare `gpt-5.4-mini`, causing 404 errors
22+
- Non-OpenAI providers (Bedrock, Azure, etc.) may not support the bare helper slug, causing 404 errors
1623
- Users have no control over which model handles these helper tasks
1724
- Shadow calls consume API quota without user awareness
1825

@@ -27,6 +34,9 @@ Related GitHub issues: [#26288](https://github.com/openai/codex/issues/26288), [
2734
3. Toggle the switch to enable
2835
4. Enter a replacement model (e.g., `gpt-5.5`)
2936

37+
The panel badge and tooltip render the source models the running proxy actually intercepts, read
38+
from `GET /api/shadow-call-settings` (`sourceModels`), so the UI never names a stale slug.
39+
3040
### Via config.json
3141

3242
```json
@@ -38,13 +48,29 @@ Related GitHub issues: [#26288](https://github.com/openai/codex/issues/26288), [
3848
}
3949
```
4050

51+
`sourceModels` is an optional override. When set to a non-empty array of strings it **replaces**
52+
the defaults rather than extending them:
53+
54+
```json
55+
{
56+
"shadowCallIntercept": {
57+
"enabled": true,
58+
"model": "gpt-5.5",
59+
"sourceModels": ["gpt-5.6-luna"]
60+
}
61+
}
62+
```
63+
4164
### Behavior
4265

43-
- When enabled, ALL requests with model IDs starting with `gpt-5.4-mini` are rewritten to the configured model
66+
- When enabled, ALL requests whose bare model id starts with one of the source-model prefixes
67+
(default `gpt-5.4-mini`, `gpt-5.6-luna`) are rewritten to the configured model
4468
- Reasoning effort is forced to `low` (matching the original behavior)
4569
- The original model ID is logged as `shadowCallRewrittenFrom` in request logs
4670
- When disabled (default), no interception occurs
4771

4872
### Warning
4973

50-
Enabling this redirects ALL gpt-5.4-mini requests. If you intentionally use gpt-5.4-mini for other tasks, those will also be redirected.
74+
Enabling this redirects every request for a source model, not just Codex's background helper turns.
75+
`gpt-5.6-luna` is also a selectable chat model, so if you pick it as your main model while the
76+
intercept is on, those turns are redirected too — narrow `sourceModels` if that matters to you.

structure/05_gui-and-management-api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ this document owns is which module holds which area and what invariant that area
7777
| System | `POST /api/system/restart` restarts the proxy in place. `GET /api/system/memory` — service-process runtime/memory identity (pid, Bun version/revision, platform, RSS/heap/external/ArrayBuffers scalars, observed memory = max(RSS, external, ArrayBuffers), `bun:jsc` heap context, streamMode + eager-relay gate decision, watchdog snapshot sliced to the last 60 samples). Scalar-only payload; rides the standard management auth gate and must never move to unauthenticated `/healthz`. Consumed by `ocx doctor`'s Memory/runtime section and the dashboard Memory observability card. |
7878
| Stop | `POST /api/stop` — restore native Codex, stop any installed service, and exit the proxy. |
7979
| Diagnostics/sync | `src/server/management/config-routes.ts``GET /api/diagnostics/project-config` reports project-level Codex config that bypasses managed routing; `POST /api/sync` re-runs catalog/config sync. The diagnostic reports the bypass; it does not rewrite the project file. |
80-
| Sidecar/shadow-call settings | `src/server/management/config-routes.ts``GET/PUT /api/sidecar-settings` and `GET/PUT /api/shadow-call-settings`. PUT accepts model and backend plus optional `webSearch.reasoning` and `vision.maxDescriptionsPerTurn`; the read and PUT-response payload reports model, backend, and the vision per-turn limit. Credentials live in the provider and OAuth stores instead. |
80+
| Sidecar/shadow-call settings | `src/server/management/config-routes.ts``GET/PUT /api/sidecar-settings` and `GET/PUT /api/shadow-call-settings`. PUT accepts model and backend plus optional `webSearch.reasoning` and `vision.maxDescriptionsPerTurn`; the read and PUT-response payload reports model, backend, and the vision per-turn limit. Credentials live in the provider and OAuth stores instead. Both shadow-call responses also report the resolved `sourceModels` — the prefixes the runtime actually intercepts (`src/lib/shadow-call.ts`, default `gpt-5.4-mini` + `gpt-5.6-luna`), so no client hard-codes a helper slug that a Codex release can invalidate. |
8181
| Storage | `src/server/management/logs-usage-routes.ts``GET /api/storage`, `POST /api/storage/cleanup/preview` and `/api/storage/cleanup`, `GET /api/storage/trash`, `POST /api/storage/trash/restore`, and `GET/PUT /api/storage/cleanup-policy` plus `POST /api/storage/cleanup-policy/run`. `GET /api/storage/cleanup-policy/test-stream` and `GET /api/storage/trash/restore/test-stream` exist for progress-stream testing. Cleanup takes an explicit `mode`: `quarantine` moves to trash and is restorable, `permanent` is not. The caller must name the mode — there is no default that silently deletes. |
8282
| Provider quotas and tests | `src/server/management/provider-routes.ts``GET /api/provider-quotas`, `POST /api/providers/test`, `GET/PUT /api/provider-context-caps`, `GET /api/provider-presets`. A quota read may be served from cache or force-refreshed; absent quota data is reported as unknown rather than as a measured zero. |
8383
| Models and visibility | `src/server/management/model-routes.ts``GET /api/models`, `PUT /api/disabled-models`, `PUT /api/model-visibility`, `PUT /api/selected-models`, `GET/POST /api/custom-models`. Visibility writes trigger catalog sync through the owning server path. |

0 commit comments

Comments
 (0)