dsh-plugin-subscription-oauth
Use the AI subscriptions you already pay for as LLM providers in DeepSeek Harness — no API key.
Sign in once per provider from Settings → Subscriptions and that provider's models join the session model picker, with its plan quota shown live next to the connection. Tokens stay on your machine; every request streams through the provider's own API.
Supported providers
| Provider | What you get | Sign-in |
|---|---|---|
| Kimi Code | kimi-for-coding, k3 (1M), k3-256k — read from the endpoint's own model list |
OAuth device flow (show code, confirm in browser) |
| Grok (X Premium) | whatever the account's own model list reports (e.g. grok-4.7), ⚡ lightspeed fast variant |
Browser OAuth (auto-redirect) |
| Google Antigravity | Claude Sonnet/Opus, Gemini Flash, GPT-OSS, with reasoning tiers — read from the account's own list | Google account OAuth |
| GLM (BigModel) | whatever the coding host lists (e.g. glm-5.3, glm-5.3-flash) |
ZCode browser sign-in (polled) |
| Volcengine Ark | the plan's own coding models | Volcengine SSO |
| Xiaomi MiMo | MiMo's own model list, with the app's two-model set as the fallback | Xiaomi account (QR / password) |
| WorkBuddy (国内版) | Hy, GLM, Kimi, DeepSeek, MiniMax models | Browser OAuth (Tencent) |
Every provider also feeds the auto route, which spans them all: pick auto and the harness walks your enabled models in order until one answers.
Features
- One sign-in per provider — no API keys to find, paste, or rotate. The plugin runs the provider's own OAuth/device flow and keeps the token on disk (
~/.dsh/plugins/kimi-oauth/auth.json, mode0600). - Live plan usage — the Settings card and the composer chip show each account's remaining quota (Kimi's 5-hour / weekly windows + credit, Grok's weekly credit, Antigravity's Gemini + Claude buckets, GLM/Ark/MiMo/WorkBuddy credits), with a meter and reset time.
- Model picker integration — each provider's models appear in the session picker with context windows and reasoning tiers; hide or re-order them per provider.
- Catalogs come from the provider, not from this build — every route reads its own model list once and caches it as the provider's table, so a model released, renamed or retired server-side shows up (or disappears) without a plugin update. Signing in and the Settings refresh models action are what re-read it; browsing the picker never spends a request.
- ⚡ Fast / lightspeed variants — for models that have one (e.g. Grok 4.7 →
grok-4.7-build-fast), a bolt button beside the model selector switches to the fast variant; it reads as a reasoning rung so the base model always stays selectable. - Cross-account pool — sign in to several accounts on one provider; the plugin draws on the next account when one's allowance runs out.
- Auto fallback —
automoves to the next enabled model when a provider refuses the preferred one (renamed, rate-limited, out of quota), and stops falling back once a stream has started.
Install
dsh plugin --profile web add dsh-plugin-subscription-oauth
Then restart DeepSeek Harness and open Settings → Subscriptions (订阅).
To install a specific version, or straight from the repository:
dsh plugin --profile web add dsh-plugin-subscription-oauth@0.10.2
dsh plugin --profile web add github:EricFL1998/dsh-subscription-oauth
How to use
- Open Settings → Subscriptions. You see one card per provider; signed-in providers sort to the front,
autoleads. - Connect a provider. A browser window (or a device code) starts the provider's own sign-in. Finish it there — the card updates by itself.
- Pick a model. The provider's models now appear in the composer model picker, and the chip shows live usage.
- Expand a card to manage accounts (set default, sign out, refresh token), toggle which models appear, re-order them, add a model id this build doesn't know yet, and see the credential file / endpoints.
Tip: to use a different account on a provider, sign out first, then connect again — the browser sign-in follows whichever account the provider's page is signed in with.
What it registers
| Surface | What appears |
|---|---|
ctx.llm |
the kimi, grok, antigravity, glm, ark, mimo, workbuddy and auto provider routes (models, reasoning, streaming) |
| Settings | a Subscriptions section: one card per provider |
| Model picker | each provider's own models, plus auto spanning them all |
| Composer chip | live plan usage for the provider in force |
Hiding a provider
To keep a provider's models out of the picker without uninstalling, drop it from the route list in your profile's cordis.patch.yml:
# $DSH_HOME/profiles/<profile>/cordis.patch.yml
plugins:
dsh-plugin-subscription-oauth:
providers: [kimi, grok, antigravity, glm, ark, mimo, workbuddy]
Omit the ones you don't want. The list defaults to every implemented route.
Security
- Credentials are stored locally at
~/.dsh/plugins/kimi-oauth/auth.json(mode0600, written atomically), one section per provider. - The plugin talks only to the providers' own hosts and OAuth endpoints — no telemetry, no third-party relay.
- Your subscriptions only; nothing is shared across machines.
Develop
See the developer README for the full wire protocol, token lifetimes, troubleshooting, and how to run the test suite.
No comments yet. Be the first to write one.