Context
In the jaw-manager dashboard, every instance row renders its runtime line as:
even when the underlying instance is actively running with a known model. Live evidence (2026-04-28, dashboard :24576):
| port |
currentCli |
currentModel |
| 3457 |
claude |
(null → "model n/a") |
| 3458 |
codex |
(null → "model n/a") |
| 3463 |
codex |
(null → "model n/a") |
| 3464 |
claude |
(null → "model n/a") |
Source of the rendered string: public/manager/src/components/InstanceRow.tsx:80
{props.instance.currentCli || 'cli n/a'} / {props.instance.currentModel || 'model n/a'}
DashboardInstance.currentModel is the field that should carry the live model id (e.g. claude-opus-4-7, gpt-5-pro, claude-haiku-4-5-20251001). It is never populated by the scan pipeline today.
Symptoms
- Instance row always shows
model n/a regardless of the active model.
- Same problem in mobile drawer and sidebar.
- Hides which Claude/GPT model variant a given instance is on, which is the most useful disambiguator when several instances share the same CLI.
Likely root cause
The dashboard scan calls each instance's /api/runtime (or equivalent) to infer state, but the runtime endpoint does not expose currentModel on most CLIs, so the field stays null end-to-end:
target serve → /api/runtime → currentModel: null
↓
manager/scan.ts → DashboardInstance.currentModel: null
↓
public/manager InstanceRow → 'model n/a'
This needs to be verified — the missing piece may be in either:
- the target
serve runtime probe (does not record the active model), or
- the manager
scan (probes the wrong endpoint / drops the field).
Acceptance
Non-goals
- No UI redesign of the runtime line. Only the data path.
- No model-version policy decisions (which model to map to which label).
Links
- Plan tracker:
devlog/_plan/260426_jaw_manager_dashboard/10.10_dashboard_lifecycle_persistence.md (sibling slice — different concern, both under jaw-manager 10.x)
- Component:
public/manager/src/components/InstanceRow.tsx:80
- Type:
src/manager/types.ts:53 (DashboardInstance.currentModel)
Context
In the jaw-manager dashboard, every instance row renders its runtime line as:
even when the underlying instance is actively running with a known model. Live evidence (2026-04-28, dashboard
:24576):Source of the rendered string:
public/manager/src/components/InstanceRow.tsx:80DashboardInstance.currentModelis the field that should carry the live model id (e.g.claude-opus-4-7,gpt-5-pro,claude-haiku-4-5-20251001). It is never populated by the scan pipeline today.Symptoms
model n/aregardless of the active model.Likely root cause
The dashboard scan calls each instance's
/api/runtime(or equivalent) to infer state, but the runtime endpoint does not exposecurrentModelon most CLIs, so the field stays null end-to-end:This needs to be verified — the missing piece may be in either:
serveruntime probe (does not record the active model), orscan(probes the wrong endpoint / drops the field).Acceptance
model n/a.model n/awhen the target genuinely cannot report a model (e.g. no message yet, or unsupported CLI).servetargets — manager must still render rows even ifcurrentModelis missing.Non-goals
Links
devlog/_plan/260426_jaw_manager_dashboard/10.10_dashboard_lifecycle_persistence.md(sibling slice — different concern, both under jaw-manager 10.x)public/manager/src/components/InstanceRow.tsx:80src/manager/types.ts:53(DashboardInstance.currentModel)