From 5fe0fa6fa243f4600a5df8714d4e3f0d2bcdba02 Mon Sep 17 00:00:00 2001 From: Amolith Date: Thu, 19 Mar 2026 09:12:37 -0600 Subject: [PATCH] feat(idk): add skill for updating LLM clients --- .../updating-llm-client-model-lists/SKILL.md | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 skills/updating-llm-client-model-lists/SKILL.md diff --git a/skills/updating-llm-client-model-lists/SKILL.md b/skills/updating-llm-client-model-lists/SKILL.md new file mode 100644 index 0000000000000000000000000000000000000000..93f6f889544bf7307382aa4c041d367b9397abd9 --- /dev/null +++ b/skills/updating-llm-client-model-lists/SKILL.md @@ -0,0 +1,131 @@ +--- +name: updating-llm-client-model-lists +description: Synchronizes model configurations across Zed, Crush, Octofriend, and Pi from Plexus' /v1/models endpoint. Use when the user asks to update model lists, sync models, refresh available models, or mentions Plexus model availability. +--- + +Updates four LLM client configs from the Plexus proxy's available models. + +## Network reachability + +1. Ping `harp-willow.snowy-egret.ts.net` once +2. If unreachable and Tailscale DNS is disabled, enable it: + ```bash + tailscale set --accept-dns=true + ``` +3. Test ping again. If still unreachable, STOP and inform the user + +Remember to disable after finishing the whole process if it was previously disabled. + +```bash +tailscale set --accept-dns=false +``` + +## Fetch Plexus models + +```bash +curl -s http://harp-willow.snowy-egret.ts.net:4000/v1/models | \ + jq -r '.data[] + | select(.id | IN("nomic-embed-text-v1.5", "diff-apply", "fix-json") | not) + | [.id, (.name // .id), (.context_length | tostring), + ((.context_length * 0.2 | floor | tostring)), + (if (.supported_parameters | index("tools")) then "tools" else "" end), + (if (.supported_parameters | index("reasoning")) then "reasoning" else "" end), + (if (.architecture.input_modalities | index("image")) then "image" else "" end)] + | @tsv' | column -t -s $'\t' +``` + +This should provide all the info you need in a table. The data in this table is the same as what you'd get directly querying Plexus. The display names are the same. You do not need to query Plexus any other way. Review the display names in the table, and if they need modification, make the modification while editing the configs. + +## Rules + +- Always exclude `nomic-embed-text-v1.5` (embedding model, not supported by any client) +- Exclude `diff-apply` and `fix-json` from Zed, Crush, and Pi because it's only supported by Octofriend +- Omit special characters from display names. For example, "MiniMax-M2.7" should become "MiniMax M2.7". "nemotron-3-super" becomes "Nemotron 3 Super". + +## Update Zed config + +File: `~/.config/zed/settings.json` + +Update `language_models.Plexus.available_models[]`. Each entry: + +```json +{ + "name": "", + "display_name": "", + "max_tokens": , + "max_completion_tokens": , + "capabilities": { + "chat_completions": true, + "prompt_cache_key": false, + "tools": , + "parallel_tool_calls": true, + "images": + } +} +``` + +## Update Crush config + +File: `~/.local/share/chezmoi/dot_config/crush/crush.json` + +Update `providers.plexus.models[]`. Each entry: + +```json +{ + "id": "", + "name": "", + "context_window": , + "default_max_tokens": , + "can_reason": , + "supports_attachments": +} +``` + +After editing: `chezmoi apply ~/.config/crush/crush.json` +STOP if chezmoi has any output other than success. + +## Update Octofriend config + +File: `~/.local/share/chezmoi/dot_config/octofriend/octofriend.json5` + +Update `models[]`. Each entry: + +```json +{ + "nickname": "", + "baseUrl": "http://100.77.116.78:4000/v1", + "model": "", + "context": , + "apiEnvVar": "PLEXUS_API_KEY" +} +``` + +Leave `diffApply` and `fixJson` objects unchanged. + +After editing: `chezmoi apply ~/.config/octofriend/octofriend.json5` +STOP if chezmoi has any output other than success. + +## Update Pi config + +File: `~/.local/share/chezmoi/dot_config/pi/models.json` + +Update `providers.plexus.models[]`. Each entry: + +```json +{ + "id": "", + "name": "", + "reasoning": , + "input": <["text"] or ["text", "image"]>, + "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, + "contextWindow": , + "maxTokens": , + "compat": { + "supportsReasoningEffort": , + "supportsDeveloperRole": false + } +} +``` + +After editing: `chezmoi apply ~/.config/pi/models.json` +STOP if chezmoi has any output other than success.