{
  "schemaVersion": "1.0",
  "item": {
    "slug": "model-switchboard",
    "name": "Model Switchboard",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/frank-bot07/model-switchboard",
    "canonicalUrl": "https://clawhub.ai/frank-bot07/model-switchboard",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/model-switchboard",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=model-switchboard",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "ARCHITECTURE.md",
      "AUDIT-OPUS.md",
      "CHANGELOG.md",
      "README.md",
      "SKILL.md",
      "model-registry.json"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/model-switchboard"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/model-switchboard",
    "agentPageUrl": "https://openagent3.xyz/skills/model-switchboard/agent",
    "manifestUrl": "https://openagent3.xyz/skills/model-switchboard/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/model-switchboard/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Model Switchboard v3.0 — Safe AI Model Configuration for OpenClaw",
        "body": "⛔ HARD RULE: NEVER edit openclaw.json model fields directly.\nAlways use this skill's commands. No exceptions. Ever."
      },
      {
        "title": "Why This Exists",
        "body": "Editing openclaw.json directly for model changes is the #1 cause of OpenClaw gateway crashes. Wrong model type in wrong slot = instant death. No backup = hours rebuilding. This skill eliminates that entirely."
      },
      {
        "title": "How It Works",
        "body": "Validates model format and role compatibility before any change\nAuto-backs up config before every modification (30 rolling backups)\nUses OpenClaw CLI (openclaw models set) — never raw JSON\nBlocks unsafe assignments (image-gen model as primary LLM = blocked)\nInstant rollback if anything goes wrong\nCanvas UI for visual model management"
      },
      {
        "title": "Quick Reference",
        "body": "SWITCHBOARD=\"$SKILL_DIR/scripts/switchboard.sh\"\n\n# View current setup\n$SWITCHBOARD status\n\n# Change models\n$SWITCHBOARD set-primary \"anthropic/claude-opus-4-6\"\n$SWITCHBOARD set-image \"google/gemini-3-pro-preview\"\n$SWITCHBOARD add-fallback \"openai/gpt-5.2\"\n$SWITCHBOARD remove-fallback \"openai/gpt-5.2\"\n$SWITCHBOARD add-image-fallback \"openai/gpt-5.1\"\n\n# Preview before applying\n$SWITCHBOARD dry-run set-primary \"openai/gpt-5.2\"\n\n# Discovery & recommendations\n$SWITCHBOARD discover          # List all available models\n$SWITCHBOARD recommend         # Get optimal suggestions\n\n# Redundancy (3-deep failover)\n$SWITCHBOARD redundancy        # Assess current redundancy\n$SWITCHBOARD redundancy-deploy # Preview optimal config\n$SWITCHBOARD redundancy-apply  # Apply optimal config\n$SWITCHBOARD redundancy-apply 4  # Custom depth\n\n# Backup & restore\n$SWITCHBOARD backup            # Manual backup\n$SWITCHBOARD list-backups      # Show all backups\n$SWITCHBOARD restore latest    # Undo last change\n\n# Import/Export (portable model configs)\n$SWITCHBOARD export config.json\n$SWITCHBOARD import config.json\n\n# Cron model validation\n$SWITCHBOARD validate-cron-models  # Check cron jobs use valid models\n\n# Diagnostics\n$SWITCHBOARD health            # Gateway + provider status\n$SWITCHBOARD validate <model> <role>  # Test compatibility"
      },
      {
        "title": "Model Roles",
        "body": "RolePurposeConfig KeyPrimaryMain LLM for all conversationsagents.defaults.model.primaryFallbackOrdered backup LLMsagents.defaults.model.fallbacksImageVision/image processingagents.defaults.imageModel.primaryImage FallbackBackup vision modelsagents.defaults.imageModel.fallbacksHeartbeatLow-cost polling modelagents.defaults.heartbeat.modelCodingSub-agent code generationSpawn-time model param"
      },
      {
        "title": "Validation Rules",
        "body": "The validation engine (scripts/validate.py) enforces:\n\nFormat: Must be provider/model-name (e.g., anthropic/claude-opus-4-6)\nCapability match: LLM roles require llm + tools capabilities\nImage roles: Require vision capability\nHard blocks: Image-generation-only models (DALL-E, Stability) blocked from ALL LLM roles\nRegistry warnings: Unknown models get a caution warning but are allowed (for OpenRouter/new models)"
      },
      {
        "title": "Known Providers",
        "body": "anthropic — Claude family (Opus, Sonnet, Haiku)\nopenai — GPT family\nopenai-codex — Codex OAuth models\ngoogle — Gemini family\nopencode — Zen proxy (routes to various models)\nzai — GLM family\nxai — Grok family\nopenrouter — Multi-provider gateway\ngroq, cerebras — Fast inference"
      },
      {
        "title": "Canvas UI",
        "body": "To show the visual dashboard:\n\n# Get UI data\nDATA=$($SWITCHBOARD ui)\n\n# Present via canvas\n# The UI reads window.__switchboardData JSON\n\nThe Canvas UI at ui/index.html shows:\n\nPrimary LLM and Image model with color coding\nFallback chains (ordered)\nProvider auth status (green/red indicators)\nModel allowlist\nConfig issues with severity levels\nBackup count"
      },
      {
        "title": "For Agents: Operating Protocol",
        "body": "When a user asks to change model assignments:\n\nRead this SKILL.md first\nShow current status: $SWITCHBOARD status\nPreview the change: $SWITCHBOARD dry-run <action> <model>\nConfirm with user before applying\nApply: $SWITCHBOARD <action> <model>\nVerify: Check gateway health after change\n\nNEVER:\n\nEdit openclaw.json directly for model fields\nSkip the dry-run for primary model changes\nApply without user confirmation\nIgnore validation failures"
      },
      {
        "title": "Troubleshooting",
        "body": "Gateway won't start:\n\n$SWITCHBOARD restore latest\nopenclaw gateway restart\n# Or: openclaw doctor --fix\n\n\"Model is not allowed\" error:\nModel isn't in the allowlist. Add it or clear the list:\n\nopenclaw config set 'agents.defaults.models.\"provider/model\"' '{\"alias\":\"Name\"}'\n# Or clear: openclaw config unset agents.defaults.models\n\nUnknown model warning:\nThe model isn't in model-registry.json. Add it for future validation:\n\n# Edit model-registry.json to add the model entry"
      },
      {
        "title": "File Structure",
        "body": "model-switchboard/\n├── SKILL.md              # This file — agent instructions\n├── README.md             # ClawHub publishing readme\n├── model-registry.json   # Known model capabilities database\n├── scripts/\n│   ├── switchboard.sh    # Main CLI tool (bash)\n│   └── validate.py       # Validation engine (python3, no deps)\n└── ui/\n    └── index.html        # Canvas dashboard (single-file, no deps)"
      }
    ],
    "body": "Model Switchboard v3.0 — Safe AI Model Configuration for OpenClaw\n\n⛔ HARD RULE: NEVER edit openclaw.json model fields directly. Always use this skill's commands. No exceptions. Ever.\n\nWhy This Exists\n\nEditing openclaw.json directly for model changes is the #1 cause of OpenClaw gateway crashes. Wrong model type in wrong slot = instant death. No backup = hours rebuilding. This skill eliminates that entirely.\n\nHow It Works\nValidates model format and role compatibility before any change\nAuto-backs up config before every modification (30 rolling backups)\nUses OpenClaw CLI (openclaw models set) — never raw JSON\nBlocks unsafe assignments (image-gen model as primary LLM = blocked)\nInstant rollback if anything goes wrong\nCanvas UI for visual model management\nQuick Reference\nSWITCHBOARD=\"$SKILL_DIR/scripts/switchboard.sh\"\n\n# View current setup\n$SWITCHBOARD status\n\n# Change models\n$SWITCHBOARD set-primary \"anthropic/claude-opus-4-6\"\n$SWITCHBOARD set-image \"google/gemini-3-pro-preview\"\n$SWITCHBOARD add-fallback \"openai/gpt-5.2\"\n$SWITCHBOARD remove-fallback \"openai/gpt-5.2\"\n$SWITCHBOARD add-image-fallback \"openai/gpt-5.1\"\n\n# Preview before applying\n$SWITCHBOARD dry-run set-primary \"openai/gpt-5.2\"\n\n# Discovery & recommendations\n$SWITCHBOARD discover          # List all available models\n$SWITCHBOARD recommend         # Get optimal suggestions\n\n# Redundancy (3-deep failover)\n$SWITCHBOARD redundancy        # Assess current redundancy\n$SWITCHBOARD redundancy-deploy # Preview optimal config\n$SWITCHBOARD redundancy-apply  # Apply optimal config\n$SWITCHBOARD redundancy-apply 4  # Custom depth\n\n# Backup & restore\n$SWITCHBOARD backup            # Manual backup\n$SWITCHBOARD list-backups      # Show all backups\n$SWITCHBOARD restore latest    # Undo last change\n\n# Import/Export (portable model configs)\n$SWITCHBOARD export config.json\n$SWITCHBOARD import config.json\n\n# Cron model validation\n$SWITCHBOARD validate-cron-models  # Check cron jobs use valid models\n\n# Diagnostics\n$SWITCHBOARD health            # Gateway + provider status\n$SWITCHBOARD validate <model> <role>  # Test compatibility\n\nModel Roles\nRole\tPurpose\tConfig Key\nPrimary\tMain LLM for all conversations\tagents.defaults.model.primary\nFallback\tOrdered backup LLMs\tagents.defaults.model.fallbacks\nImage\tVision/image processing\tagents.defaults.imageModel.primary\nImage Fallback\tBackup vision models\tagents.defaults.imageModel.fallbacks\nHeartbeat\tLow-cost polling model\tagents.defaults.heartbeat.model\nCoding\tSub-agent code generation\tSpawn-time model param\nValidation Rules\n\nThe validation engine (scripts/validate.py) enforces:\n\nFormat: Must be provider/model-name (e.g., anthropic/claude-opus-4-6)\nCapability match: LLM roles require llm + tools capabilities\nImage roles: Require vision capability\nHard blocks: Image-generation-only models (DALL-E, Stability) blocked from ALL LLM roles\nRegistry warnings: Unknown models get a caution warning but are allowed (for OpenRouter/new models)\nKnown Providers\nanthropic — Claude family (Opus, Sonnet, Haiku)\nopenai — GPT family\nopenai-codex — Codex OAuth models\ngoogle — Gemini family\nopencode — Zen proxy (routes to various models)\nzai — GLM family\nxai — Grok family\nopenrouter — Multi-provider gateway\ngroq, cerebras — Fast inference\nCanvas UI\n\nTo show the visual dashboard:\n\n# Get UI data\nDATA=$($SWITCHBOARD ui)\n\n# Present via canvas\n# The UI reads window.__switchboardData JSON\n\n\nThe Canvas UI at ui/index.html shows:\n\nPrimary LLM and Image model with color coding\nFallback chains (ordered)\nProvider auth status (green/red indicators)\nModel allowlist\nConfig issues with severity levels\nBackup count\nFor Agents: Operating Protocol\n\nWhen a user asks to change model assignments:\n\nRead this SKILL.md first\nShow current status: $SWITCHBOARD status\nPreview the change: $SWITCHBOARD dry-run <action> <model>\nConfirm with user before applying\nApply: $SWITCHBOARD <action> <model>\nVerify: Check gateway health after change\n\nNEVER:\n\nEdit openclaw.json directly for model fields\nSkip the dry-run for primary model changes\nApply without user confirmation\nIgnore validation failures\nTroubleshooting\n\nGateway won't start:\n\n$SWITCHBOARD restore latest\nopenclaw gateway restart\n# Or: openclaw doctor --fix\n\n\n\"Model is not allowed\" error: Model isn't in the allowlist. Add it or clear the list:\n\nopenclaw config set 'agents.defaults.models.\"provider/model\"' '{\"alias\":\"Name\"}'\n# Or clear: openclaw config unset agents.defaults.models\n\n\nUnknown model warning: The model isn't in model-registry.json. Add it for future validation:\n\n# Edit model-registry.json to add the model entry\n\nFile Structure\nmodel-switchboard/\n├── SKILL.md              # This file — agent instructions\n├── README.md             # ClawHub publishing readme\n├── model-registry.json   # Known model capabilities database\n├── scripts/\n│   ├── switchboard.sh    # Main CLI tool (bash)\n│   └── validate.py       # Validation engine (python3, no deps)\n└── ui/\n    └── index.html        # Canvas dashboard (single-file, no deps)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/frank-bot07/model-switchboard",
    "publisherUrl": "https://clawhub.ai/frank-bot07/model-switchboard",
    "owner": "frank-bot07",
    "version": "3.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/model-switchboard",
    "downloadUrl": "https://openagent3.xyz/downloads/model-switchboard",
    "agentUrl": "https://openagent3.xyz/skills/model-switchboard/agent",
    "manifestUrl": "https://openagent3.xyz/skills/model-switchboard/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/model-switchboard/agent.md"
  }
}