Skip to content

[Bug]: Remote Link Child does not inherit the Home's model settings, dashboard or management CLI #6957

Closed

Description

@lidge-jun

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

  1. 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 run ocx sync --restart-codex on the Child.
  2. Compare ~/.codex/opencodex-catalog.json: identical. Compare ~/.codex/config.toml: the differences in the table above.
  3. 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.
  4. 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

  1. added
    catalogModel catalog, slugs, visibility, routed entries
    guiDashboard, tray, settings UI
    proxyHTTP proxy, routing, reverse-proxy / management auth
    on Oct 11, 2026
  2. added a commit that references this issue on Oct 11, 2026
  3. Ingwannu commented on Oct 12, 2026

    @Ingwannu
    Owner

    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.

  4. lidge-jun commented on Oct 12, 2026

    @lidge-jun
    OwnerAuthor

    Fixed on dev by #6959 (commit b993e662c7), landed through #7009 (merge 8f10f238e3). Ships in 2.84.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcatalogModel catalog, slugs, visibility, routed entriesguiDashboard, tray, settings UIproxyHTTP proxy, routing, reverse-proxy / management auth

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions