Repository navigation
[Bug]: Remote Link Child does not inherit the Home's model settings, dashboard or management CLI #6957
Description
Client or integration
OpenCodex dashboard
Area
Proxy and routing
Summary
A Remote Link Child (Home-initiated, transport: "link") relays inference to the Home correctly, and its Codex catalog matches the Home's (opencodex-catalog.json is identical model by model, field by field). Everything else that the Home's configuration decides stays local to the Child or is unreachable from it. Three surfaces are affected.
1. Model settings outside the catalog do not follow the Home. The Child's Codex config.toml keeps its own values for settings the Home's OpenCodex writes into Codex. Observed after ocx sync --restart-codex on the Child:
| Codex setting | Home | Child |
|---|---|---|
model_reasoning_effort |
high |
medium |
desktop.enabled-reasoning-efforts |
[low, medium, high, xhigh, ultra, max] |
absent |
desktop.show-ultra-in-model-picker-slider |
false |
absent |
features.multi_agent / agents.max_threads |
true / 100 |
absent |
Home-side settings such as subagent models, effort caps and defaults, injection model, and sidecar and compaction routing have no path to the Child. The Child's Codex therefore offers different effort levels and defaults while using the Home's models. Which of these keys OpenCodex owns needs to be confirmed in the code, but the reasoning-effort ones come from OpenCodex settings.
2. The Child dashboard cannot show the Home. On the Child, Dashboard shows "Dashboard data could not be loaded. Check the connection and retry." Every management route the dashboard polls returns 404 from the Child's client runtime: /api/system/health, /api/startup-health, /api/providers, /api/models, /api/settings, /api/usage, /api/effort-caps, /api/injection-model, /api/shadow-call-settings, /api/sidecar-settings, /api/v2, /api/diagnostics/project-config. The usage strip in the header shows the Child's own local provider quota (for example "Anthropic Claude 100%") while the Home's account for the same provider is at 27%. It describes the wrong machine without saying so.
The cause is in the link design: src/client/machine-listener.ts sets relayEnabled = !linkMode && connection.managementTransport === "relay", so a link Child never gets the /api/machine/hub-relay/ management relay that hub clients have. On the Home side, linkRouteAllowed in src/link/routes.ts admits only data-plane routes on the link listener.
3. The CLI on a Child is inconsistent. Run on the Child:
| Command | Result |
|---|---|
ocx models live, ocx effort, ocx inspect catalog, ocx logs |
refused: "client role … no management API … run the command on the hub" |
ocx models order status |
refused, different wording |
ocx usage |
"Hub does not support client usage; upgrade the hub" |
ocx account list |
Error: not_found |
ocx provider list, ocx config get disabledModels |
prints the Child's own local providers and disabled models, with no note that the Home's values are in effect |
ocx status |
"Hub … this hub is too old to report its state", "Remote hub: connected"; Remote Link is described as a hub |
The refusal text also points to "the hub dashboard (the dashboard on this machine relays to it when the connection uses the relay transport)", which is never true for a link Child.
Reproduction
- Link a Child from the Home dashboard (
#remote→ Home → Add Child), restart the Child's proxy ([Bug]: Home-initiated Remote Link shows Connected, but the Child keeps answering locally until its proxy restarts #6939), and runocx sync --restart-codexon the Child. - Compare
~/.codex/opencodex-catalog.json: identical. Compare~/.codex/config.toml: the differences in the table above. - Open the Child's dashboard: Dashboard fails to load. With the Child's admin token,
curl -H "authorization: Bearer $T" http://127.0.0.1:<port>/api/providers→404 {"error":"not_found"}. The same holds for every route listed above. - Run the CLI commands in the table on the Child.
Expected:
- A link Child applies the Home's OpenCodex-owned Codex model settings (default and enabled reasoning efforts, multi-agent and subagent settings, and similar) whenever it syncs the Home catalog, and reports which values came from the Home.
- The Child dashboard shows the Home's state read-only through an authenticated management relay over the link. At minimum it shows a clear "managed by Home " state instead of a load error, and it never presents local quota as current.
- CLI commands on a Child either read the Home through the same relay or refuse with one consistent message that names the Home and the link. Local reads (
provider list,config get) are labeled as local and inactive.
Version
Children 2.83.0 (macOS Desktop, Linux deb, Windows Desktop). Home 2.81.0, so the ocx usage and ocx status "upgrade the hub" lines may depend on the Home's version. The link relay gating above is unchanged on dev 9b6f4b2632.
Operating system
Home macOS 27 arm64; Children macOS 26.6/27 arm64, Ubuntu 24.04 x86_64, Windows 11 x64
Provider and model
Any. The screenshots were taken with anthropic and anthropic2 models.
Logs or error output
GET /api/providers 404 {"error":"not_found","method":"GET","path":"/api/providers"}
GET /api/models 404 {"error":"not_found","method":"GET","path":"/api/models"}
GET /api/settings 404 {"error":"not_found","method":"GET","path":"/api/settings"}
$ ocx usage --range today
Error: Hub does not support client usage; upgrade the hub
$ ocx account list
Error: not_found
Screenshots and supporting files
Child dashboard: "Dashboard data could not be loaded. Check the connection and retry." The header strip shows the Child's local Anthropic quota at 100%.
Redacted configuration
Child config.json: runtimeRole: "client", client.transport: "link", client.managementTransport: "direct", client.managementUrl = the link tunnel origin.
Checks
- I searched existing issues and documentation.
- I removed secrets, tokens, account details, request credentials, and personal data.
Activity
pr-assets: #6957 link Child dashboard managed by Home (isolated liste…
Ingwannu commentedon Oct 12, 2026
The proposed implementation is #6959; it is not landed or released. Review currently has a concrete blocker at
e4b29de910: two newly allowed Child GET routes invoke model discovery/initial-selection persistence on the Home, violating the proposed read-only contract. @lidge-jun reproduced it in that PR, and I independently checked the source path and recorded a formal change request.The author is preparing the follow-up; no contributor branch was taken over and no Home/Child configuration was changed here. Keep this issue open until the read-only projections, Home settings inheritance and current required review/CI are verified on the corrected head.
fix(link): relay read-only Home management to Remote Link Children an…
fix(link): read-only Home management, Home Codex settings and one CLI…
lidge-jun commentedon Oct 12, 2026
Fixed on
devby #6959 (commitb993e662c7), landed through #7009 (merge8f10f238e3). Ships in 2.84.0.