DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Llm Cursor — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
L

dsh-llm-cursor

Llm Cursor

Unofficial Cursor subscription login and chat for DeepSeek Harness

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:NOirBRight/dsh-llm-cursor#09766521775e0eeb3c6852c3c0c99661cc9814b9
READMECompatibilityVersions
Cursor plugin card: ToS warning, sign-in, subscription usage, and saved catalogFetch picker: choose which model families to keep in the catalogChat model picker after the catalog is saved

Compatibility and provenance

Llm Cursor is published as dsh-llm-cursor and currently resolves to version 0.2.23. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/14/2026

Versions

0.2.23stable
9/14/2026
0.2.22stable
9/13/2026
0.2.21stable
9/12/2026
Show 8 more versionsCollapse versions
0.2.20stable
9/12/2026
0.2.15stable
9/3/2026
0.2.14stable
9/1/2026
0.2.9stable
8/28/2026
0.2.8stable
8/28/2026
0.2.6stable
8/26/2026
0.2.5stable
8/22/2026
0.2.4stable
8/22/2026

Related plugins

Loading related plugins…

Latest
0.2.23
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 1
Weekly downloads
0
Last push
9/14/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in models-usage.

Usage@linxin666/dsh-usageUsage statistics plugin for the dsh web GUI: per-provider balance and coding-plan quota detection plus a live token usage ledger, with the current session provider's today usage on the sidebar entryWhale Widgetdsh-whale-widgetDeepSeek balance whale widget in the bottom-right corner of the DSH Web interface: balance/today’s usage/peak-off-peak pricing, customizable bubble click sequence (text/balance/today/peak-off-peak/image/random phrases and parallel weighted selection), per-line styles and fonts, floating quick editinUsage Stats@ychris12138/dsh-usage-statsToken usage heatmap, provider balances, and subscription quotas for the dsh web GUICodex Connectdsh-codex-connectChatGPT OAuth and Codex models for DeepSeek Harness.

README

dsh-llm-cursor

English | 中文

Unofficial Cursor subscription login and chat for DeepSeek Harness. This plugin is a separate provider route (cursor) and settings namespace (llm-cursor). It is not affiliated with Anysphere / Cursor, is not the official Cursor CLI, and it does not call official Cloud Agents or @cursor/sdk.

Ban risk — read this first. Cursor staff treat this class of private-client usage as against the Terms of Service. Your Cursor account can be restricted or banned. Installing, signing in, or sending a chat is enough. This is not a grey area and running it only on your own machine does not protect the account. Details: Risk and Terms of Service.

The package root exposes the Cordis plugin contract. The same artifact exports ./client, which contributes the Cursor card under Settings → LLM Providers.

Compatibility

Host @deepseek-ai/dsh-* packages are not version-locked: peers are * and optional. devDependencies pin the compile target (0.1.5-rc.1). Cordis stays >=4.0.2 <5.0.0.

Verified Hosts in package.json#dsh.compatibility.dshReleases are evidence, not an allowlist. Unknown newer Hosts warn once and keep the normal mount path. Only a reproduced failure is blocklisted.

catalogId and the unresolved unknown account state are attached at runtime. Published dsh-llm-providers-ui 0.2.8 omits those fields and treats unknown as unconnected; they only take effect on a newer Owner.

Installation

Verified on DeepSeek Harness 0.1.5-rc.1 and 0.1.5-rc.2. Install directly from GitHub. Signing in after install uses the same unofficial session as the rest of this plugin, so the ban risk above applies immediately:

dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/download/v0.2.9/dsh-llm-providers-ui-0.2.9.tgz
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-cursor/releases/download/v0.2.23/dsh-llm-cursor-0.2.23.tgz
dsh web

The repository tracks release-ready lib artifacts, so GitHub installation needs no build-script allowlist. A source checkout can use a link installation after running pnpm run build.

Web configuration

Open Settings → LLM Providers → Cursor. The card subtitle is the same warning as above: unofficial private endpoints; Cursor staff treat this as against ToS; the account can be banned.

Cursor plugin card: ToS warning, sign-in, subscription usage, and saved catalog

Sign in with Cursor starts a Host-owned Deep Control PKCE flow (the same session entry the official CLI uses), opens the system browser, and polls until the login completes. The session is stored only on the Host at $DSH_HOME/cursor-oauth.json (mode 0600). The card then shows the account email when known. Sign out deletes that file. The browser never receives tokens.

This plugin does not read or write ~/.cursor or official CLI credential files. There is no paste-code box and no Dashboard crsr_… API-key login.

After sign-in, Fetch available models reads the account catalog with GetUsableModels. Cursor lists every thinking-level SKU as a separate wire id; the plugin collapses those into one family and maps the chat thinking-level picker back to the matching wire id. Fast SKUs stay their own models. Fetch offers a sibling -1m row only for families Cursor actually has Max Context for (for example claude-opus-5-1m), not for every maxMode flag; saving keeps only the rows you picked. You can then reorder, rename, or edit capability flags. Chat uses that saved catalog.

Fetch picker: choose which model families to keep in the catalog

Chat model picker after the catalog is saved

Chat itself goes through HTTP/2 Connect+protobuf POST https://api2.cursor.sh/agent.v1.AgentService/Run. DSH remains the only agent loop and tool executor. When signed in, the card also shows subscription usage from the Cursor dashboard rails (Cursor Models / Other Models, and On-Demand when it has spend or a cap). Logged-out cards do not request usage; an unrecognized surface is shown as unsupported, not as an error.

The collapsed header first-paints the last successful quota from the shared browser cache when no live reading is available (never on error or unsupported); signing in, signing out, or an authoritative signed-out status purges the cached quota in every bundle copy, even without providerDirectory.

Chat without a session fails MISSING_CREDENTIAL. A stored session whose refresh fails is cleared and fails AUTH. A request 401 force-refreshes once at the adapter; remaining AUTH failures are eligible for the bundle's eight normal retries.

Compatibility headers

The Cursor session entry currently requires CLI-shaped request headers. This package sends:

  • x-cursor-client-type: cli
  • x-cursor-client-version: cli-2026.01.09-231024f (pinned in source; changelog when it changes)
  • x-ghost-mode: true (this process does not execute Cursor workspace tools)
  • X-Dsh-Plugin: dsh-llm-cursor/<version>
  • the harness attributionHeaders()

These headers are a compatibility constraint so the session entry accepts the request. They are not an attempt to impersonate the official Cursor CLI product.

HTTP/2 (including ALPN) to api2.cursor.sh is required. V1 does not add a proxy bridge; a transport failure names HTTP/2 in the error.

Risk and Terms of Service

This can get the Cursor account banned. Do not treat a successful login, a working chat, or a low usage bar as a sign that it is allowed.

This plugin talks to private Cursor client endpoints, the same class of unofficial usage as Oh My Pi’s cursor provider: Deep Control PKCE login, then HTTP/2 Connect+protobuf AgentService/Run and GetUsableModels on api2.cursor.sh, plus dashboard usage rails.

Cursor staff have said that tools in this class violate Cursor Terms of Service §1.5 (accessing the service except through official clients / reverse engineering private client APIs). See the staff reply on this forum thread. Enforcement can include account restriction or a permanent ban. Personal / local-only use, a paid subscription, and “I am not selling access” do not change that.

Official supported surfaces today are the Cursor IDE, Cursor CLI, @cursor/sdk, and Cloud Agents. Those run Cursor’s agent harness, not a raw model route that DeepSeek Harness can drive. A community request for an official OpenAI-compatible chat completions API is open with no published timeline.

This is not legal advice. Install and use at your own risk. Also see the Acceptable Use Policy.

Limitations

  • HTTP/2 (ALPN) to api2.cursor.sh is required; there is no proxy bridge.
  • The CLI version pin can break when Cursor ships a new CLI that the pin no longer satisfies. Changelog that change when it happens.
  • Usage percents come from unofficial dashboard rails, not an official usage API.
  • Token usage chunks from Run do not include cache fields, so DSH cache-hit rate stays empty.
  • Fast SKUs are separate catalog families (gpt-5.2 vs gpt-5.2-fast), not a third picker toggle.
  • 1M SKUs appear in Fetch for families Cursor offers Max Context (claude-opus-5 vs claude-opus-5-1m). Saving does not re-insert a Max row you left unchecked. The Max row always sends maxMode: true. Composer and Cursor Grok do not get a 1M row.
  • You can also add a generic context row yourself (claude-opus-5-272k). The plugin peels a trailing -<n>k / -<n>m before talking to Cursor; DSH uses n×1000 / n×1,000,000 as the compaction budget. Cursor's API only has a binary maxMode, so a 272K row still sends maxMode: false — the suffix only changes DSH's compaction trigger. Product names such as kimi-k3-max are not treated as a context tier. The composer picker groups sibling rows that share a base id.

Config

- id: llm-cursor
  name: 'dsh-llm-cursor'
  config:
    streamIdleTimeoutMs: 300000
    runLifecycle:
      parkedRunTtlMs: 900000
      bindingIdleTtlMs: 3600000
      maxOpenRuns: 64
      maxBindings: 256
      heartbeatIntervalMs: 5000
      heartbeatJitterRatio: 0.1
    retryPolicy:
      mode: normal
      maxRetries: 8
      backoff:
        initialDelayMs: 500
        maxDelayMs: 10000
        jitterRatio: 0.1

The bundle retries eligible model-request failures up to eight times by default, including AUTH. Connect and gRPC deadlines use TIMEOUT; HTTP 429 uses RATE_LIMIT; HTTP/2 faults and premature stream endings use TRANSPORT; unavailable, resource-exhausted, and HTTP 5xx failures use SERVER. Cancellation, invalid-argument, and other HTTP 4xx failures remain non-retryable.

Each adapter instance owns its active Runs, parked Runs, and conversation bindings. A parked Run expires after 15 minutes by default, while its idle binding remains available for one hour so a later tool result can open a full-history resume Run. Capacity recovery evicts the oldest parked Run and then the oldest idle binding; it never evicts active work. If all 64 Run slots are active, the request fails locally with LOCAL_CAPACITY before opening a socket. Heartbeat jitter is sampled again for every write, and provider silence after a resumed mcpResult still uses streamIdleTimeoutMs. See ADR 0002.

There is no apiKeyEnv and no user-editable chat base URL or CLI version. The selected catalog is stored under models after you save it on the plugin card.

The Models page, if it lists Cursor at all, is hint-only. Because this package does not declare apiKeyEnv, that row must not show a missing-API-key badge.

Provider authentication flow

Settings are whitelist-decoded, revision-fenced, and secret-free.

Cursor uses external authentication: Host returns a UUID/PKCE authorization URL immediately, the browser opens it, and Host polls in the background. Begin, status, cancel, and logout are attempt-scoped. Restarting DSH cancels in-memory attempts; restart and begin a new provider flow.

The Host /cursor RPC follows Connection’s authenticated trusted-host policy, including its Host/Origin checks and browser authentication. This plugin has no separate loopback or remote-management switch. For remote use, configure Connection’s trusted hosts; an SSH tunnel remains an option, for example ssh -L 3080:127.0.0.1:3080 user@host, then open http://127.0.0.1:3080.

LLM Providers UI ownership

The LLM Providers Settings page (settings.section id: providers with child settings.provider.item) and the shared llm-providers order store are owned solely by dsh-llm-providers-ui.

  • This plugin contributes only its keyed card (key: llm-cursor) and its Host llm route; it does not install the page or the shared llm-providers namespace. Load order with the owner does not matter.
  • Without the owner (Headless or Web without dsh-llm-providers-ui): the Host model route cursor still works; in Web the Providers page and this card are omitted and the browser console warns that the owner is missing. The pack gate verifies that this plugin’s browser factory does not request or bundle the owner; Web composition remains a profile responsibility.
  • The nav globe glyph is a temporary Alpha.4 DOM adapter owned only by dsh-llm-providers-ui (src/client/nav-icon.ts); this plugin does not ship that adapter.

Install dsh-llm-providers-ui explicitly in the profile alongside provider plugins (see that package's cordis.patch.yml).

License

MIT. The vendored AgentService protobuf binding is derived from oh-my-pi (MIT); see NOTICE.

Release installation (Latest)

The release artifact follows the compatibility records above; it contains built Host/Client files only and has no sibling-repository source, workstation path, link:, or workspace: dependency.

The dsh-llm-providers-ui package owns the LLM Providers page, navigation, and shared order store. This package owns only its provider card, models, credentials, and Host route. Install the Owner first for Web; headless Host routing works without the Owner.

Latest (Owner + this plugin; required together on Web):

dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/latest/download/dsh-llm-providers-ui-0.2.9.tgz
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-cursor/releases/latest/download/dsh-llm-cursor-0.2.23.tgz

Fixed versions (reproducible):

dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/download/v0.2.9/dsh-llm-providers-ui-0.2.9.tgz
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-cursor/releases/download/v0.2.23/dsh-llm-cursor-0.2.23.tgz

Update, uninstall, and verify:

# Update Owner + this plugin to Latest
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-providers-ui/releases/latest/download/dsh-llm-providers-ui-0.2.9.tgz
dsh plugin --profile web add --force \
  https://github.com/NOirBRight/dsh-llm-cursor/releases/latest/download/dsh-llm-cursor-0.2.23.tgz
# Verify the loaded version
dsh plugin --profile web list
dsh plugin --profile web doctor
# Uninstall only this plugin
dsh plugin --profile web remove dsh-llm-cursor

Configuration: use the plugin section in Settings for Web UI plugins, or the profile dsh.profile.bundles entry for Host-only plugins. Start with this README's minimal YAML/JSON example and provide credentials/backend addresses explicitly.

Rollback: rerun the fixed v0.2.23 command, verify the profile list, then restart the Web service once. Inspect journalctl --user -u dsh-web.service and dsh plugin --profile web doctor; never put a source checkout in the production profile.

Release and integrity: v0.2.23 · SHA256SUMS.