gdrpzym/dsh-loomy-connect

DSH Loomy Connect

Use the models that ship with the Loomy desktop app inside DeepSeek Harness — no API key. Also adds a Settings card showing the signed-in account and Loomy credits (permanent + daily gift).

Uncategorizeddeepseek-harnessdshllm

DSH Loomy Connect

简体中文 | English

Exposes the text models bundled with the Loomy desktop app to DeepSeek Harness (DSH), without an API key.

The plugin reads Loomy's on-disk sign-in session and model manifest read-only. Nothing is copied, uploaded, or rewritten.

ContributionSurfaceDescription
Model providerHostRegisters a loomy provider; the model list is discovered from Loomy at startup
Settings cardBrowserTwo tabs — Account and Models — under Settings → Plugin configuration: Account shows sign-in state, masked phone, and credit balance; Models renders a table of each model's name, context window, and rate, with image models sorted last

Contents

Features

  • Zero configuration: once installed and enabled, Loomy's models appear directly in DSH's model selector.
  • Model auto-discovery: the account's model list is fetched at startup; only models with text output are served.
  • Rates and promos: the settings card's Models tab lists every model with its points multiplier (x3.0) and flags limited-time free ones, following Loomy's own numbers.
  • Account and credits: the card's status row shows the signed-in account (masked phone); the Points tab shows long-lived and daily credits — read from the same data Loomy's own UI renders from.
  • Model details: the Models tab renders a three-column table of each model's name, context window (when Loomy's list provides it), and points rate; image models are listed after the chat models.
  • Bilingual: card copy follows the DSH interface language.

Installation

Loomy desktop appInstalled and signed in at least once
DeepSeek Harness>= 0.1.5-rc.1
Node.js>= 22

From GitHub:

dsh plugin --profile web add github:gdrpzym/dsh-loomy-connect
dsh web

From a local checkout — preferred while developing, since it needs no publish step:

dsh plugin --profile web add /absolute/path/to/dsh-loomy-connect
dsh web

Verifying:

dsh --profile web --dump-config     # expect an `llm-loomy` entry

--dump-config only composes the config tree; it does not instantiate the plugin. To confirm the plugin actually boots, run dsh web and check for Loomy in the model selector.

Configuration

Paths are auto-detected per platform, so configuration is normally unnecessary. The overrides below target non-standard installs.

VariableOverrides
LOOMY_AUTH_FILESign-in session auth-session.json path
LOOMY_CONFIG_FILEModel manifest opencode.json path
LOOMY_LOCAL_STORAGE_DIRCredits cache Local Storage/leveldb directory

Resolution order per lookup: plugin config (authFile / configFile) → environment variable → detected default.

Default paths are probed across macOS and Windows; the first existing path wins:

PlatformSign-in sessionModel manifestCredits cache
Windows%APPDATA%/loomy/auth-session.json%APPDATA%/loomy-opencode/opencode.json%APPDATA%/loomy/Local Storage/leveldb

Security model

BoundaryMechanism
Network exposureGateway binds 127.0.0.1 only
Client authenticationPer-process random secret, compared with timingSafeEqual
DNS rebindingHost must be loopback
Cross-site simple requestsOrigin, when sent, must be loopback; request body must be application/json
Token custodyThe Loomy session token is read from disk inside the gateway per request; DSH never holds it

Threat model: protects against other local processes and against web pages running in the user's browser. It does not protect against code running as the same user, which can read the same files the plugin reads.

Known limitations

  • Depends on Loomy's client interface (not an official public API); Loomy updates may require plugin changes.
  • The model list and its rates come from Loomy's API; when it is unreachable the plugin falls back to Loomy's generated config, and only then to a built-in snapshot.
  • Credits are read from Loomy's local cache — Loomy exposes no credits endpoint. When no cache exists the card omits credits rather than showing 0.
  • The model manifest is read at startup; restart DSH after Loomy adds or removes models.
  • If the sign-in path is not detected on Windows, set LOOMY_AUTH_FILE explicitly.

Troubleshooting

SymptomCause
Card never appears under Plugin configurationHost half did not register the namespace; see item 4 in docs/internals.en.md
Plugin listed under Plugins but no cardSame as above — the Plugins tab reflects installed entries, not served namespaces
Cannot read properties of undefined (reading 'authFile') at bootMissing runtime Config export; see docs/internals.en.md
Card shows "not signed in" though Loomy is signed inSession path not detected; set LOOMY_AUTH_FILE
502 on every chat requestGateway could not read a valid session, usually a path detection problem
Model list is staleRestart DSH or trigger a settings change
Credits emptyLoomy has not cached a summary yet, or LOOMY_LOCAL_STORAGE_DIR is wrong

Further documentation

Architecture, gateway, and browser-card constraints are documented in docs/internals.en.md (中文版 docs/internals.md).

License

MIT

Disclaimer

  • This project is for personal learning and research only. It drives your own Loomy account on your own machine. Do not use it commercially or beyond reasonable personal use.
  • You must comply with the Loomy terms of service. Any consequence of using this project — including account restrictions, depleted credits, or service interruption — is yours to bear.
  • The author is not liable for any direct or indirect loss arising from the use or misuse of this project.
  • This project is not affiliated with, endorsed by, or sponsored by Loomy, iFlytek, or DeepSeek. Product names are used to describe compatibility only; trademarks belong to their respective owners.

Acknowledgments

The DSH provider architecture follows dsh-workbuddy-connect (MIT).