RouterOps / Import

Import Studio

Turn raw router dumps into controlled profiles.

fallback1 provider node1 drift alert

Import flow

The old page dumped you into a textarea. This gives the path upfront.

Step 1
Paste a real dump
Drop raw 9router JSON exactly as captured so RouterOps can normalize the truth, not a hand-edited guess.
Step 2
Normalize the profile
Flatten aliases, combos, keys, and settings into a controlled baseline that can actually ship cleanly.
Step 3
Review rendered outputs
Check the Claude settings and canonical payload before any machine applies them.

Why this matters

Bad imports are how weird alias regressions sneak in. The import studio now reads like an operator workflow instead of a raw utility panel.

Raw input
9router dump
Normalized output
RouterOps profile
Rendered targets
Claude + router payload

Normalize a router dump

Operator-first layout: input on the left, rendered truth on the right.

Input
db.json
Action
Normalize
Output
Profile
Paste a full live dump

Import checklist

Small guardrails so this page does real work instead of just looking nice.

Paste a full router dump instead of a trimmed snippet.
Normalize first so aliases and secrets get cleaned consistently.
Review rendered outputs before treating the profile as source of truth.

Imported profile preview

Kevin baseline — normalized from raw router state.

Provider nodes
1
Connections
2
API keys
1
Alias routing
claude-opus-4.8lz/claude-opus-4.8
opus-4-8cc/claude-opus-4-8

Rendered Claude settings

Deterministic output target for `~/.claude/settings.json`.

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://localhost:20128",
    "ANTHROPIC_MODEL": "opus-4-8",
    "ANTHROPIC_API_KEY": "sec***en"
  },
  "model": "opus-4-8",
  "smallFastModel": "claude-sonnet-5",
  "theme": "auto"
}

Rendered router payload

Canonical router state that local agents should apply.

{
  "providerNodes": [
    {
      "id": "node-lz",
      "name": "LZ",
      "prefix": "lz",
      "baseUrl": "https://lightningzeus.com/v1",
      "options": {
        "id": "node-lz",
        "name": "LZ",
        "prefix": "lz",
        "baseUrl": "https://lightningzeus.com/v1"
      }
    }
  ],
  "providerConnections": [
    {
      "id": "conn-claude",
      "provider": "claude",
      "authType": "oauth",
      "name": "Account 1",
      "priority": 1,
      "isActive": true,
      "defaultModel": "opus-4-8",
      "secrets": {
        "accessToken": "sec***en",
        "refreshToken": "sec***en"
      },
      "metadata": {
        "id": "conn-claude",
        "provider": "claude",
        "authType": "oauth",
        "name": "Account 1",
        "priority": 1,
        "isActive": 1,
        "defaultModel": "opus-4-8"
      }
    },
    {
      "id": "conn-lz",
      "provider": "lz",
      "authType": "apikey",
      "name": "LightningZeus",
      "priority": 2,
      "isActive": true,
      "defaultModel": "claude-opus-4.8",
      "secrets": {
        "apiKey": "lz-***ey"
      },
      "metadata": {
        "id": "conn-lz",
        "provider": "lz",
        "authType": "apikey",
        "name": "LightningZeus",
        "priority": 2,
        "isActive": 1,
        "defaultModel": "claude-opus-4.8"
      }
    }
  ],
  "combos": [
    {
      "id": "combo-opus",
      "name": "opus-4-8",
      "models": [
        "lz/claude-opus-4.8",
        "cc/claude-opus-4-8",
        "cx/gpt-5.5"
      ],
      "kind": null
    }
  ],
  "modelAliases": {
    "claude-opus-4.8": "lz/claude-opus-4.8",
    "opus-4-8": "cc/claude-opus-4-8"
  },
  "apiKeys": [
    {
      "id": "prod-key",
      "name": "prod-key",
      "value": "rk_***90",
      "metadata": {
        "id": "prod-key",
        "name": "prod-key"
      }
    }
  ],
  "settings": {
    "comboStrategy": "fallback",
    "requireLogin": true,
    "requireApiKey": true,
    "mitmRouterBaseUrl": "http://localhost:20128"
  }
}