{# Agent setup (ADR-0031's onboarding half) as ONE flow with numbered stages: Harness -> MCP config -> Try it. It has two entry points (/setup/agent and /settings/agent) and one implementation; Settings -> Status re-runs the Try it check from the same service call. Every fact is the service's own (clear_record.service.setup / clear_record.service.agent_flow): the harness and MCP client config that are recorded, whether those paths are still there, what the 0.2 agent configuration this version ignores, and the hello-world check's finding. The console only renders and translates -- it never recomputes the service's answer. There is no credential to show and none to ask for: this version calls no model, so the MCP server needs no key. #} {# No id here: index.html's mount owns #agent-setup, and this fragment is swapped into it -- a second id would make the htmx target ambiguous. #}
{% if setup.state == 'ready' %} {{ tr("agent ready") }} {% elif setup.state == 'problem' %} {{ tr("agent setup problem") }} {% else %} {{ tr("no harness configured") }} {% endif %}
{% if error %}{% endif %} {% if notice %}

{{ notice }}

{% endif %} {# The service's own wording, shown verbatim: a missing recorded path, or a 0.2 [agent]/CR_AGENT_* setting this version ignores. Both are runtime strings (they embed a path or a variable name), not extractable message IDs, so wrapping them in tr() was a no-op. The console never restates the rule. #} {% for problem in setup.problems %} {% endfor %} {% for ignored in setup.ignored %} {% endfor %}
  1. {{ tr("Harness") }}

    {% include "_harness_setup.html" %}
  2. {{ tr("MCP config") }}

    {% include "_mcp_config.html" %}
  3. {{ tr("Try it") }}

    {{ tr("Run the whole chain once: a hello-world tape through transcription, read back as the transcript an MCP agent receives.") }}

    {% include "_hello_check.html" %}