{# SETTINGS · Configure (R4c, FUNCTIONAL). A per-agent harness/model/reasoning configurator for the SELECTED project. Lists the project's agents (from /projects/{key}/runtime, falling back to /roster) and, per agent, three editable dropdowns: - harness : claude-code · codex · kaidera · pi - model : populated PER harness from each CLI/provider catalog, with curated fallbacks only when discovery is unavailable. Changing the harness re-populates the model + reasoning dropdowns CLIENT-SIDE from cfg_harness_map (no round-trip). - reasoning : populated from the selected model's discovered effort levels. Each row shows the agent's CURRENT EFFECTIVE config — the registry value (from runtime capabilities) overlaid with any console-local override. Save POSTs that one agent's override to the console app-DB settings store and swaps a per-row confirmation banner in place. NOTE — console-local overrides (feature-gap #81, the CTO's reversed decision): The override is saved CONSOLE-LOCAL ONLY (app-DB — the fast display/routing overlay). The Cortex agent registry (the source of truth, E006 Inc04) is NOT written on save; committing the config to the registry is the explicit "Promote to registry" action in the SPA config modal (POST .../promote → the `POST /agents` UPSERT whose conflict-update jsonb-merges `capabilities`). PROFILE (designation + role): Each card also edits the agent PROFILE — a `designation` (Interactive-Lead / Non-interactive AI worker / Deterministic / registry-default) and a free-text `role` override. Worker type drives the col-2 Interactive vs AI Workers grouping OVERRIDE-FIRST: an explicit designation wins over the registry-derived heuristic. Blank ("Registry default") falls back to the heuristic. Saved through the SAME POST /settings/configure (console-local only; designation classification layers locally until the Cortex roster_policy lands). Context: selected_key : current project key cfg_agents : [{name, display_name, initials, role, reg_harness, reg_harness_label, reg_model, reg_reasoning, reg_role, reg_designation, harness, harness_label, model, reasoning, designation, ov_harness, ov_model, ov_reasoning, ov_designation, ov_role, has_override, model_is_catalog, model_options, model_groups, reasoning_levels, designation_options}] cfg_agent_count : number of agents cfg_harness_options : [{value,label}] for the harness
{{ a.initials }} {{ a.display_name }} {{ a.role }} {% if a.designation == "interactive" %} Interactive · Lead {% else %} {{ 'Deterministic' if a.designation == 'deterministic' else 'AI Worker' }} {% endif %} {% if a.has_override %} override {% endif %}
{# ---------- PROFILE: worker type + role (drives col-2 grouping) ---------- #}
{# ---------- worker type (Interactive-Lead / AI Worker / Deterministic) ---------- The {% for opt in a.designation_options %} {% endfor %} registry: {{ a.reg_designation or "—" }} · internal worker type {# ---------- auto-run eligibility ---------- Worker type controls chat/model capability. This flag separately controls whether project dispatch may auto-run handoffs assigned to this agent. #} {% set sel_auto_dispatch = 'true' if a.ov_auto_dispatch and a.auto_dispatch else ('false' if a.ov_auto_dispatch else '') %} {# ---------- role (free-text override) ---------- #}
{# ---------- harness ---------- #} {# ---------- model (populated per harness) ---------- #} {# ---------- reasoning / effort (per harness) ---------- #}
{# per-row save-result banner swaps in here #}
{% endfor %} {% else %}

No agents

No agents are registered for {{ selected_key or "this project" }} in the live runtime. Agents are added via cortex-add-agent; once registered they appear here for harness/model/reasoning configuration.

{% endif %}

Harness → model → reasoning relationships follow each installed CLI or connected provider's current catalog. Curated model data is used only when discovery is unavailable.

{# Static harness→{models,reasoning}+catalog map for client-side repopulation. #}