Skip to content
dsh.fish
Bundle

dsh-claude-oauth

Claude Pro/Max OAuth model provider for DeepSeek Harness with Google/Gmail login in Settings, auto-token refresh, live model discovery, and real-time quota tracking

Source
grloper
stars
2 stars
License
MIT
Updated
Updated 19 hours ago

Readme

# dsh-claude-oauth

[![npm version](https://img.shields.io/badge/version-1.0.0-blue.svg)](https://github.com/grloper/dsh-claude-oauth)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![DSH Compatibility](https://img.shields.io/badge/DSH-0.1.0--rc.6%20%7C%200.1.2-green.svg)](https://github.com/deepseek-ai/deepseek-harness)
[![Author](https://img.shields.io/badge/author-grloper-orange.svg)](https://github.com/grloper)

**Claude Pro / Max OAuth integration for DeepSeek Harness (DSH)** — sign in directly with your Google / Gmail account from the DSH Web Settings page, with automatic token rotation, live model discovery, and real-time 5-hour / 7-day subscription quota tracking.

[English](README.md) · [简体中文](README.zh.md) · [Technical Article](ARTICLE.md)

---

## Preview

![Claude Settings UI](assets/claude-settings-ui.svg)

---

## Key Features

* 🚀 **One-Click Google / Gmail Sign-In in Settings**: Dedicated **Claude** section in DSH Settings (`order: 13`, beside Antigravity and Codex). Click **"Sign in with Google / Gmail"** to authenticate directly in your browser.
* ⚡ **Zero Terminal Hassle**: No manual CLI token dumping, copying strings, or editing YAML config files.
* 🔄 **Dual-Stack PKCE OAuth Engine**: Ephemeral loopback callback server listening on dual-stack IPv4 (`127.0.0.1`) and IPv6 (`::1`), avoiding Windows localhost resolution traps.
* 🛡️ **Multi-Store Credential Sync**: Exchanged tokens automatically sync to:
  * `~/.claude/.credentials.json` (shares authorization with the official Claude Code CLI)
  * `~/.dsh/.credentials.yaml` (`ANTHROPIC_OAUTH_TOKEN` and `CLAUDE_CODE_OAUTH_TOKEN`)
  * `~/.dsh/settings.yaml` (configures `llm-pi-ai.providers.anthropic` with active models)
* 📊 **Live Subscription Quota Meters**: Displays real-time **5-hour** and **7-day** quota utilization bars with reset countdowns in both Settings and the ambient chat composer dock.
* 🤖 **Live Model Catalog**: Queries `GET /v1/models` dynamically. All latest Claude releases (Claude 3.7 Sonnet, Claude Sonnet 4.5, Claude Opus 4.5, Claude Haiku 4.5) mount automatically.

---

## Architecture Flow

![OAuth Architecture Flow](assets/oauth-architecture.svg)

---

## Quick Start

### Installation

Install `dsh-claude-oauth` into your active DSH Web profile:

```bash
# From GitHub repository
dsh plugin --profile web add github:grloper/dsh-claude-oauth

# Or from local checkout
dsh plugin --profile web add ./dsh-claude-oauth
```

### Sign In via Web Settings

1. Start or open DeepSeek Harness Web GUI:
   ```bash
   dsh web
   ```
2. Open **Settings** (gear icon on the sidebar).
3. Select the **Claude** section from the navigation list.
4. Click **"Sign in with Google / Gmail"**.
5. In the opened browser window, choose **"Continue with Google"**, pick your Gmail account, and click **Authorize**.
6. The tab will display **"Claude Connected"**. Return to DSH — your account email, tier (`CLAUDE PRO` or `CLAUDE MAX`), live quota bars, and models are now active!

### Optional: Sign In via CLI

You can also authenticate directly from the command line using the bundled bin script:

```bash
claude-oauth-login
# Or via npx
npx dsh-claude-oauth
```

---

## Setting Claude as Default Agent Model

To make Claude Sonnet 4.5 your default model for all sessions:

In `~/.dsh/settings.yaml`:
```yaml
agent-default-model:
  provider: anthropic
  model: claude-sonnet-4-5
```

Or pick Claude per-session from the composer model selector.

---

## Verification & Testing

Run the included test suite:

```bash
npm run check
npm test
```

---

## License

[MIT](LICENSE) © 2026 [grloper](https://github.com/grloper)

Install

dsh plugin --profile web add github:grloper/dsh-claude-oauth

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source