PaseoPaseo

Custom providers

Everything beyond the supported providers lives under agents.providers in ~/.paseo/config.json. You can:

  • Extend a first-class provider to point at a different API (Z.AI, Alibaba/Qwen, a proxy, a self-hosted endpoint).
  • Add profiles, multiple entries against the same underlying provider with different credentials or curated model lists.
  • Override the binary, run a nightly build, a wrapper script, or a Docker image instead of the installed CLI.
  • Add ACP agents, Gemini CLI, Hermes, or any agent speaking the Agent Client Protocol over stdio.
  • Disable a provider you don't use.

Provider IDs must be lowercase alphanumeric with hyphens (/^[a-z][a-z0-9-]*$/). Every custom entry needs extends (a first-class provider ID or "acp") and a label.

The examples below are a quick tour. The full, up-to-date reference is on GitHub: docs/custom-providers.md.

Extending a first-class provider

{
  "agents": {
    "providers": {
      "my-claude": {
        "extends": "claude",
        "label": "My Claude",
        "env": {
          "ANTHROPIC_API_KEY": "sk-ant-...",
          "ANTHROPIC_BASE_URL": "https://my-proxy.example.com/v1"
        }
      }
    }
  }
}

Z.AI (GLM) coding plan

Z.AI exposes GLM models through an Anthropic-compatible endpoint. Point ANTHROPIC_BASE_URL at their API and use ANTHROPIC_AUTH_TOKEN for the key. Third-party endpoints don't support Anthropic's server-side tools, so disable WebSearch.

{
  "agents": {
    "providers": {
      "zai": {
        "extends": "claude",
        "label": "ZAI",
        "env": {
          "ANTHROPIC_AUTH_TOKEN": "<your-zai-api-key>",
          "ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
          "API_TIMEOUT_MS": "3000000"
        },
        "disallowedTools": ["WebSearch"],
        "models": [
          { "id": "glm-5-turbo", "label": "GLM 5 Turbo", "isDefault": true },
          { "id": "glm-5.1", "label": "GLM 5.1" }
        ]
      }
    }
  }
}

Alibaba Cloud (Qwen) coding plan

Alibaba's coding plan routes Claude Code to Qwen models via an Anthropic-compatible API. Subscription keys look like sk-sp-... and must be created in the Singapore region.

{
  "agents": {
    "providers": {
      "qwen": {
        "extends": "claude",
        "label": "Qwen (Alibaba)",
        "env": {
          "ANTHROPIC_AUTH_TOKEN": "sk-sp-<coding-plan-key>",
          "ANTHROPIC_BASE_URL": "https://coding-intl.dashscope.aliyuncs.com/apps/anthropic"
        },
        "disallowedTools": ["WebSearch"],
        "models": [
          { "id": "qwen3.5-plus", "label": "Qwen 3.5 Plus", "isDefault": true },
          { "id": "qwen3-coder-next", "label": "Qwen 3 Coder Next" }
        ]
      }
    }
  }
}

Multiple profiles

Create as many entries as you want against the same first-class provider. Each one shows up as a separate option in the app with its own credentials and models.

{
  "agents": {
    "providers": {
      "claude-work": {
        "extends": "claude",
        "label": "Claude (Work)",
        "env": { "ANTHROPIC_API_KEY": "sk-ant-work-..." }
      },
      "claude-personal": {
        "extends": "claude",
        "label": "Claude (Personal)",
        "env": { "ANTHROPIC_API_KEY": "sk-ant-personal-..." }
      }
    }
  }
}

Custom binary

command is an array, first element is the binary, the rest are arguments. It fully replaces the default launch command for that provider.

{
  "agents": {
    "providers": {
      "claude": {
        "command": ["/opt/claude-nightly/claude"]
      }
    }
  }
}

ACP providers

Any agent that speaks ACP over stdio can be added with extends: "acp" and a command. Paseo spawns the process, sends an initialize JSON-RPC request, and the agent reports its capabilities, modes, and models at runtime.

{
  "agents": {
    "providers": {
      "gemini": {
        "extends": "acp",
        "label": "Google Gemini",
        "command": ["gemini", "--acp"]
      },
      "hermes": {
        "extends": "acp",
        "label": "Hermes",
        "command": ["hermes", "acp"]
      }
    }
  }
}

Adding or relabeling models

models replaces the model list entirely. additionalModels merges with runtime-discovered models (ACP) or with models, use it to add an extra entry or relabel a discovered one without redeclaring the full list. An entry with the same id as a discovered model updates it in place.

{
  "agents": {
    "providers": {
      "gemini": {
        "extends": "acp",
        "label": "Google Gemini",
        "command": ["gemini", "--acp"],
        "additionalModels": [
          { "id": "experimental-model", "label": "Experimental", "isDefault": true },
          { "id": "gemini-2.5-pro", "label": "Gemini 2.5 Pro (preferred)" }
        ]
      }
    }
  }
}

Disabling a provider

{
  "agents": {
    "providers": {
      "copilot": { "enabled": false }
    }
  }
}

Full reference

For the complete field reference (extends, label, command, env, models, additionalModels, disallowedTools, enabled, order), model and thinking-option schemas, and deeper examples for each plan, see docs/custom-providers.md on GitHub.