Install
openclaw skills install @pondsi/modelselectoropenclawUse when the OpenClaw Control UI chat model picker is one long flat provider-grouped list and picking a model is slow, when you have many providers each with many models, when the user wants a two-column provider/model picker (left = provider navigation, right = only that provider's models), when the per-chat account row (e.g. deepseek:default) should be hidden, or when a previously installed picker enhancement disappeared after an upgrade. Installs, repairs, verifies or uninstalls a browser-side enhancement injected into the Control UI's index.html.
openclaw skills install @pondsi/modelselectoropenclawPick the right model in two clicks, even with dozens of providers and hundreds of models.
The OpenClaw Control UI renders its model picker as one long flat list, grouped by provider. With many providers — each carrying many models — finding a model means a lot of scrolling and eyeballing. This skill turns that list into a two-column master-detail picker with a provider navigation column:
┌─────────────┬────────────────────────────────┐
│ All │ [ search ] │
│ ▸ DeepSeek │ deepseek-v4-flash │
│ ▸ Qwen │ deepseek-v4-pro │
│ ▸ GLM │ deepseek-reasoner │
│ ▸ Mistral │ … only this provider's models │
└─────────────┴────────────────────────────────┘
.chat-model-account, e.g.
deepseek:default) inside the menu — it is unrelated to picking a provider/model.--bg-hover, --accent, --border),
so dark / light / custom themes follow automatically.clamp(84px, 26%, 132px); the native
flat list is used only below 340px viewport width. The official search filter keeps the
two-column layout and simply hides provider groups with no visible match.localStorage and restored on the next open, and a double-click on the grip resets it.
Long model names also carry a hover tooltip.Disclosure (Intended Behavior)
This skill patches the local OpenClaw installation. By design it performs exactly these local file operations inside the OpenClaw package directory (
<npm-global>/node_modules/openclaw/dist/control-ui/):
Operation Scope control Append/replace ONE <script>line at the end ofindex.htmlfirst run saves index.html.bak-pclnext to it; idempotent;-RemoverevertsCopy pcl-model-picker.v8.jsintoassets/versioned filename + content fingerprint in the URL Delete older pcl-model-picker.v*.jsfileskeeps the latest TWO versions, deletes only files matching pcl-model-picker.v*.jsPoll ./(same-origin app shell) every 5 min for update detectionbrowser-side only; same-origin fetch('./',{cache:'no-store'}); no external host, no telemetryNothing else is touched: no packaged JS/CSS/SW files are modified, no external network access, no telemetry. The injected script runs in the browser only, on the model picker DOM; its only network call is a same-origin
fetch('./')(cache: no-store) used to notice server-side updates and reload the tab — no external host is contacted and no data leaves the machine. The patch is lost when OpenClaw is upgraded (npm overwritesdist/); re-run to restore. Installing means accepting these local file modifications.
Run the patch script from this skill's scripts/ directory:
powershell -ExecutionPolicy Bypass -File scripts/pcl-patch.ps1
openclaw CLI on PATH). Non-standard layout: pass -Dist "<...>\dist\control-ui".[PCL] 完成 / Done plus the injected tag line.In the Control UI browser console:
window.pclModelPickerDiag()
Returns {version, selfFp, innerWidth, stylePresent, storedSize, heartbeats, lastEvent, pickers, menus, instances[]}.
instances[] reports each picker instance (state, twoCol, filtering, rendered, rail,
chips). state is two-col when active, two-col-filtering while the official search
filter is on (layout stays two-column), fallback-narrow below 340px.
The document also carries <html data-pcl-model-picker="v8">.
Self-heal events: window.pclModelPickerLog(). To force an update check:
await window.pclModelPickerCheckUpdate().
npm overwrites dist/control-ui/, so the tag and the asset disappear. Re-run the same
command; it is idempotent and re-injects. Done when the script reports the tag replaced.
The GitHub repository additionally ships an optional Windows auto-repair watchdog
(platform/pcl-watchdog.ps1) that detects this wipe and re-runs the installer on a
schedule. It is not part of this ClawHub artifact.
powershell -ExecutionPolicy Bypass -File scripts/pcl-patch.ps1 -Remove
Removes the tag from index.html and all pcl-model-picker.v*.js assets. The backup
index.html.bak-pcl stays on disk for reference.
Control UI's Service Worker is cache-first for /assets/ and the HTTP response is
immutable. The installer therefore puts a content fingerprint in the injected URL
(./assets/pcl-model-picker.v8.js?h=<sha256-8>) and bumps the filename on content changes.
If you edit the JS yourself, re-run pcl-patch.ps1 (it recomputes the fingerprint) or rename
the file to the next version. Since 1.2.0 a missed reload is self-healing: open tabs detect
the newer build and reload themselves.
window.pclModelPickerDiag().
stylePresent: false or a lastEvent of style-injected means the document had lost the
stylesheet and the heartbeat just restored it. state: "fallback-narrow" means the
viewport is below 340px (zoom/high DPI/split view). If instances[] shows a rendered
instance with twoCol: false for more than a second, the script is not running — re-run
the patch script. If the server was patched but the tab is old, the tab reloads itself
within ~5 minutes (or run await window.pclModelPickerCheckUpdate()).index.html.
Re-run the patch script, then reload.pcl-patch.ps1.-Dist explicitly. On Linux/macOS use pwsh
and the POSIX candidate paths (already built in).Select-String pcl-model-picker <dist>\index.html should show exactly
one <script defer src="./assets/pcl-model-picker.v7.js?h=…"> line.scripts/pcl-patch.ps1 — idempotent installer/remover (auto-detects the install dir)scripts/pcl-model-picker.v8.js — the browser-side enhancement (IIFE, no dependencies)MIT License with mandatory attribution — credit Pondsi. See LICENSE.
(概要 —— 安装 / 验证 / 卸载命令与 English 节完全一致,不再重复)
把 Control UI 聊天输入框的模型选择器,从官方「按供应商分组的扁平长列表」升级为
「左列供应商导航 + 右列仅显示该供应商模型」的双列 master-detail 布局,并隐藏菜单内与
选模型无关的「此聊天使用的账户」行。纯浏览器端增强:只向 index.html 注入一行 <script>
并新增一个独立 JS 文件,随时可一键卸载。
(摘要 —— 安裝 / 驗證 / 卸載指令與 English 節完全相同,不再重複)
將 Control UI 聊天輸入框的模型選擇器,從官方「依供應商分組的扁平長清單」升級為 「左欄供應商導覽 + 右欄僅顯示該供應商模型」的兩欄 master-detail 版面,並隱藏選單內與 選模型無關的「此聊天使用的帳號」列。純瀏覽器端增強,可一鍵卸載。
(요약 — 설치/확인/제거 명령은 English 절과 완전히 동일하며 반복하지 않습니다)
Control UI 채팅 입력란의 모델 선택기를 공식 「공급자별로 묶인 평면 목록」에서 「왼쪽 열 = 공급자 탐색 + 오른쪽 열 = 해당 공급자의 모델만」 2열 master-detail 레이아웃으로 바꾸고, 모델 선택과 무관한 「이 대화에서 사용하는 계정」 행을 숨깁니다. 브라우저 측 향상만 하며 언제든 제거할 수 있습니다.
(кратко — команды установки/проверки/удаления идентичны разделу English)
Превращает выбор модели в Control UI из официального «плоского списка, сгруппированного по провайдерам» в двухколоночный master-detail макет «слева — навигация по провайдерам, справа — только модели выбранного провайдера» и скрывает служебную строку «аккаунт для этого чата». Это чисто браузерное улучшение, удаляется одной командой.
(要旨 —— インストール / 検証 / アンインストールのコマンドは English 節と同一です)
Control UI のチャット入力欄のモデル選択を、公式の「プロバイダー別に並んだ平坦なリスト」から 「左列=プロバイダー移動 / 右列=そのプロバイダーのモデルのみ」の 2 列 master-detail レイアウトに変え、モデル選択と無関係な「このチャットで使用するアカウント」行を非表示にします。 ブラウザー側のみの拡張で、いつでもワンコマンドで削除できます。
(Resumen — los comandos de instalación/verificación/desinstalación son idénticos a la sección English)
Convierte el selector de modelos del chat de Control UI, de la «lista plana agrupada por proveedor» oficial, en un diseño master-detail de dos columnas: «izquierda = navegación por proveedor, derecha = solo los modelos de ese proveedor», y oculta la fila «cuenta usada en este chat». Es una mejora puramente del navegador; se desinstala con un comando.
(Résumé — les commandes d'installation/vérification/désinstallation sont identiques à la section English)
Transforme le sélecteur de modèles du chat de Control UI, de la « liste plate groupée par fournisseur » officielle, en une disposition maître-détail à deux colonnes : « gauche = navigation par fournisseur, droite = uniquement ses modèles », et masque la ligne « compte utilisé dans ce chat ». Amélioration purement côté navigateur, désinstallable en une commande.
Pondsi (+MiMo-v2.5 +deepseek-v4.1-flash-expires-on-0910 +GLM5.3-flash) — automatically committed by OpenClaw