dsh-plugin-subscriptions
DSH plugin: OAuth sign-in for Claude, Codex, Grok, Antigravity, OpenRouter, Agnes AI — expose subscription LLMs as DeepSeek Harness providers
- Stars
- 0
- Language
- JavaScript
- Created
- Aug 28, 2026
- Updated
- Aug 29, 2026
Introduction
DSH Plugin Subscriptions
AI LLM plugin for DeepSeek Harness that signs in to consumer AI subscriptions with OAuth and exposes them as LLM providers.
Providers
Live
| Provider | Subscription | Notes |
|---|---|---|
| Claude | Anthropic Pro/Max | Imports credentials from Claude Code automatically; run claude first |
| Codex | ChatGPT Plus/Pro | Real-time model discovery from chatgpt.com/backend-api/codex/models |
| Grok | X Premium/Premium+ | Real-time model discovery; includes x_search, image_generate, video_generate tools |
| Google Antigravity | Google One AI Premium | 静态目录(Gemini 3 Pro / 3.1 Pro / 3 Flash, Claude 4.6 Sonnet / Opus);直接 OAuth,无需环境变量 |
| OpenRouter | OpenRouter account | OAuth PKCE → permanent API key; static catalog (GPT-4o, Claude Sonnet/Haiku 4.5, Gemini 2.5 Flash) |
| Agnes AI | AgnesCode account | OAuth PKCE → access token (reverse-engineered); static catalog (Agnes 2.5/2.0 Flash, GPT-4o, Claude Sonnet 4.5 via AgnesCode) |
| Qwen Code | Qwen Coding Plan | Device-flow OAuth via chat.qwen.ai;无需 API Key |
| iFlytek Spark | Spark API subscription | OAuth PKCE via spark-api.xf-yun.com; env vars: SPARK_CLIENT_ID, SPARK_CLIENT_SECRET |
| Baidu ERNIE | ERNIE Bot subscription | OAuth PKCE via openapi.baidu.com; env vars: ERNIE_CLIENT_ID, ERNIE_CLIENT_SECRET |
Coming soon
Gemini, Perplexity AI, GitHub Copilot, Mistral AI, Cursor, Hugging Face, Windsurf, Replicate, fal.ai, Cohere, Voyage AI, Lepton AI, OctoAI.
Features
- OAuth sign-in for subscription providers — no API keys required
- Composer model resolution straight from your subscription
- Streaming, tool calling, and image input where the provider supports them
- Usage status shown in the Subscriptions settings section
- Built-in model catalogs per provider, overridable in config
Installation
# From npm (pre-built, no build step)
dsh plugin --profile web add dsh-plugin-subscriptions
# Or from GitHub source
dsh plugin --profile web add github:randomix777/dsh-plugin-subscriptions
Usage
- Launch DSH (
dsh web) and open the printed URL. - Go to Settings → Subscriptions and press Connect next to a provider.
- Complete the OAuth flow in the browser tab that opens. On headless setups, paste the callback URL or authorization code manually.
- Claude: imports from existing Claude Code credentials (run
claudeonce if not logged in). - Antigravity: no env vars needed, complete OAuth in browser directly; optionally override with
ANTIGRAVITY_CLIENT_ID/ANTIGRAVITY_CLIENT_SECRET. - Qwen Code: device-flow OAuth via
chat.qwen.ai; no API key or env vars required, click Connect to authenticate. - Agnes AI: after browser authorization, paste the full callback URL (or just the auth code) into the DSH UI — the
agnes://deep link cannot be auto-captured by DSH.
- Claude: imports from existing Claude Code credentials (run
- In any chat, open the model selector (
/model) and pick a model under the desired provider.
Untreated providers show no card in the model picker until signed in.
Environment Variables
Antigravity and Qwen use embedded public client credentials — no setup required. Only Spark and ERNIE need env vars:
# Optional: override the built-in Antigravity OAuth client credentials
export ANTIGRAVITY_CLIENT_ID="your-custom-oauth-client-id"
export ANTIGRAVITY_CLIENT_SECRET="your-custom-oauth-client-secret"
# iFlytek Spark (register at https://console.xfyun.cn)
export SPARK_CLIENT_ID="your-spark-client-id"
export SPARK_CLIENT_SECRET="your-spark-client-secret"
# Baidu ERNIE (register at https://console.bce.baidu.com/ai/)
export ERNIE_CLIENT_ID="your-ernie-client-id"
export ERNIE_CLIENT_SECRET="your-ernie-client-secret"
Spark and ERNIE require you to register an OAuth app on the respective platform and set the env vars above.
Configuration
providers:
- id: llm-subscriptions
name: dsh-plugin-subscriptions
config:
providers: [codex, claude, grok, antigravity, openrouter, agnes, glm, spark, ernie] # subset allowed; all nine enabled by default
streamIdleTimeoutMs: 300000
models: # override built-in catalogs
codex:
- { id: gpt-5.6-sol, name: GPT-5.6 Sol, contextWindow: 272000, inputModalities: [text, image] }
Tools
Auto-registered when the corresponding provider is active:
x_search(Grok) — xAI-hosted X search, returns{ answer, citations }image_generate(Codex or Grok) — callsgpt-image-2via Codex backend orgrok-imagine-image-2.0via Grok; saves to~/.dsh/plugins/subscriptions/images/video_generate(Grok) — callsgrok-imagine-video-1.5viaapi.x.ai/v1/videos; async poll, saves MP4 to~/.dsh/plugins/subscriptions/videos/
Limitations
- Provider availability depends on your subscription status; unsigned-in providers are hidden
- Image generation requires an active Codex or Grok session
x_searchrequires Grok login and an API-capable subscription tier- OpenRouter API key is permanent (no refresh); log out and re-login to replace
- Agnes AI requires manual callback URL/code paste (no
agnes://protocol handler in DSH) - Chinese providers (GLM, Spark, ERNIE) require a registered OAuth app on the respective platform and env var credentials
Project Structure
lib/index.js— Main bundle (compiled output), all backend logiclib/client.js— Browser bundle, UI componentssrc/providers/— Source for each provider's OAuth flow, token exchange, andLlmAdapter
License
MIT