{# Agent — one screen, six tabs (043 §7, phase 4 / WS-AF1). Derived from docs/design/040/web/agent*.html. The six-tab subnav is server-rendered; every pane below it is drawn client-side by webview/static/app/agent.js from the tenant-scoped Agent readers (/api/webgate/{doctor,capabilities,memory/search,flags,identity,preferences, ledger}, /pfp.json, /api/webgate/knowledge/kb). The tabs are panes on this one page, not six routes: agent.js reveals the pane whose `data-pane` matches the active tab and hides the rest, so /agent answers with the whole screen and the switch is client-side. Every word comes from webview/copy/en.py. No inline script on any 043 template (tests/unit/webview/test_no_new_inline_script.py): the words ride on #agent-copy's data attributes and agent.js reads them off `dataset`. ⚠️ The names carry an UNDERSCORE, not a hyphen: `dataset` camel-cases a hyphen away, and the JS keys the words by the copy name, which is snake_case. The four posture axes ride here as DATA (server-computed from build_posture_card), so a person reads one plain sentence per axis and the state it is in — never the same axis twice in two vocabularies, which is what doctor and /autonomy print on one screen today. #} {% extends "shell.html" %} {% block body %}
{{ t('agent.sub') }}
{{ t('agent.sources')|safe }}