Skip to main content
DeepSeek Harness (the dsh command) is an open-source AI agent from DeepSeek with a web UI (MIT license). It writes and reads files, runs terminal commands and works a task through to the end — much like Claude Code, but in the browser. Through RuAPI, dsh can use deepseek-flash, Claude, GPT and other models with a single key, and you can pay in crypto (USDT) without a foreign bank card. A short overview is on www.ruapi.ai/deepseek-harness-v-rossii.
The built-in DeepSeek card in dsh does not work with RuAPI: it talks to DeepSeek’s own endpoint and uses file uploads (/v1/files), which RuAPI does not offer. Connect RuAPI through Custom model API as shown below.
dsh runs the commands the model suggests and edits files on its own. Run it in a separate empty folder (or on a separate server / VM), not in a folder with important data. dsh is a developer preview and its UI may change.

What you need

1

A RuAPI key

Console → API keys → create a key sk-.... Right after sign-up you can use the trial models deepseek-flash, claude-haiku-5-5 and gpt-6-luna.
2

Node.js 24.9 or newer

Check the version:
You need v24.9.0 or later. If it is older or the command is not found, install Node.js as described below.
3

An empty working folder

For example dsh-test. dsh will create and change files there.

Install Node.js

You need 24.9 or newer. We tested on Node.js 24; the version currently marked LTS on the nodejs.org download page is 26 — it meets dsh’s requirement too, but we haven’t tested it separately. Take the one marked LTS. npm and npx come with Node.js — no separate install needed.
  1. Download the Windows Installer (.msi) from the nodejs.org download page (x64 for most computers).
  2. Run it and click Next; the defaults are fine.
  3. Close and reopen your terminal (PowerShell or Command Prompt), otherwise it won’t see Node.js.
Or with one command in PowerShell (if winget is available):
Close and reopen the terminal after this too. If winget asks you to accept the source agreements, answer Y.
If PowerShell says “File …\npx.ps1 cannot be loaded because running scripts is disabled on this system”, type npx.cmd instead of npx: npx.cmd -v for the check and npx.cmd @deepseek-ai/dsh web to start dsh. Or use Command Prompt (cmd).
Check the install:
node -v should show v24.9.0 or later; npx -v just prints a version number (e.g. 11.19.1), which means npx is in place.
If nodejs.org is slow or the download breaks off, you can try the same installer from the npmmirror.com/mirrors/node mirror: open the folder for the version you want (for example v24.22.2/) and pick node-v…-x64.msi for Windows or node-v….pkg for macOS. It mirrors the nodejs.org files.

Step 1. Start dsh

In a terminal, create an empty folder, go into it and start dsh:
On the first run npm asks whether to install the package — answer y. The npm warn deprecated node-domexception warning is harmless. dsh opens your browser at http://127.0.0.1:3080.
If you open the page yourself, copy the whole line from the terminal, including ?token=...:
Without the token the page shows dsh web authentication required. The token is the password to your dsh — keep it out of screenshots. It changes every time dsh restarts.
Connect to the server with port forwarding (replace user@server with your login and server address):
In the same window, start dsh without opening a browser:
Keep the window open and, on your own computer, open the token line dsh printed in your browser. Better run dsh as a regular user rather than root, so the agent has fewer rights on the server.
If npx cannot download the package for a long time, try another npm mirror, for example:
To go back to the default registry: npm config set registry https://registry.npmjs.org.

Step 2. First launch

  1. A preview notice appears — close it with the button at the bottom of the window.
  2. Pick a workspace: click the folder selector above the input box, choose your folder (for example dsh-test) and click Open. Until a folder is chosen, dsh shows a message that it could not create a default workspace.
  3. dsh picks the interface language from your browser. To change it: More (bottom left) → Settings → General → Language. Russian, Chinese and several other languages are available.
dsh settings: interface language list

Step 3. Connect RuAPI

More → Settings → Models → Add model provider → Custom model API tab. dsh: Custom model API form Click Fetch available models. The full RuAPI model list opens — clear the selection first, then use search to tick the models you want. Three are enough to start: deepseek-flash, claude-haiku-5-5 and gpt-6-luna. dsh: Choose models dialog with the RuAPI model list Click Update list, then Create provider. RuAPI should show a green dot in the provider list. dsh: RuAPI provider with base URL https://www.ruapi.ai/v1 and three models All model names are on the pricing page. To add a model later: Models → Edit next to RuAPI → Customized settings → Fetch available models.

Step 4. First task

  1. New Session (top left).
  2. Click the model button at the bottom right of the input box and choose, for example, deepseek-flash.
dsh: model menu with RuAPI models
  1. Send a task, for example:
dsh creates the file, runs a command and reads the result. In our test deepseek-flash did it in 9 seconds, claude-haiku-5-5 in 6, gpt-6-luna in 14. dsh: deepseek-flash via RuAPI created hello.txt and listed the files
To switch models mid-work, start a new session: the new model then starts with a clean context instead of continuing another model’s history.

Reasoning levels for deepseek-flash

deepseek-flash thinks before answering by default. To switch levels right in the chat:
  1. Settings → Models → Edit next to RuAPI → Customized settings.
  2. Click the arrow next to deepseek-flash → turn on Reasoning levels (off / low / medium / high) → Apply.
dsh: reasoning levels for deepseek-flash The model menu at the bottom right now has two levels: Model to pick the model and Effort to pick the level. dsh: Effort menu with Off, Low, Medium, High
Off alone does not turn thinking off. With Off, dsh simply sends nothing, and DeepSeek keeps thinking unless told not to. One setting has to be added to the config file — it is not in the form.
Open ~/.dsh/profiles/web/cordis.patch.yml (on Windows %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml) and add two compat lines under name: deepseek-flash:
Indent with spaces, exactly like the neighboring lines. Save the file, stop dsh (Ctrl+C) and run npx @deepseek-ai/dsh web again in the same window (in a new terminal, cd dsh-test first); the token in the address will be new. In our test Off then answered in 3 seconds without thinking (before the change: 9 seconds, 3 of them thinking), and High in 6 seconds.
The easiest way is the Open configuration file button at the top right of the Settings window — it works on the computer where dsh runs. On Windows you can also press Win+R, paste %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml and choose Notepad. On a server: nano ~/.dsh/profiles/web/cordis.patch.yml (save with Ctrl+O and Enter, exit with Ctrl+X).

Claude via the native Anthropic format (optional)

Claude models already work through the ruapi provider above. If you use Claude a lot, you can add a second provider with the native Anthropic protocol — prompt caching then kicks in one turn earlier. Add model provider → Custom model API: Fetch available models → tick the Claude models you need (for example claude-haiku-5-5) → Update list → Create provider. They appear in the model menu under RuAPI Claude. dsh: RuAPI Claude provider with Anthropic Messages protocol and base URL https://www.ruapi.ai What our test showed (three short questions in a row in one session, claude-haiku-5-5): The only difference is the second turn of each session, so one ruapi provider is enough for most people.

Costs

  • On every step dsh sends the model its system prompt, tool definitions and history — 26–36K input tokens per step in our test.
  • Most of that input usually comes from the cache (70–97% in our test; for Claude via the OpenAI format caching starts only from the third turn, see the table above), and cached tokens cost far less. More in Prompt caching.
  • The cheapest model for dsh is deepseek-flash. You can see the cost of every request in the RuAPI console → Usage Logs.

Common problems

The page was opened without the token. Copy the whole http://127.0.0.1:3080/?token=... line from the terminal.
Pick the folder yourself with the folder selector above the input box → your folder → Open.
You need Node.js 24.9 or newer. Check node -v and update Node.js.
The key is wrong or deleted. Check it in the RuAPI console and paste it again: Models → Edit → API key.
No model is ticked for the provider. Edit → Customized settings → Fetch available models → tick models → Update list → Apply.
Add compat: thinkingFormat: deepseek to the config file and restart dsh — see “Reasoning levels for deepseek-flash” above.
Before the first top-up only the trial models work (deepseek-flash, claude-haiku-5-5, gpt-6-luna). To unlock all models, top up your balance — USDT works, no foreign card needed.

Security

  • dsh stores your RuAPI key in the ~/.dsh folder on your computer. Do not share that folder.
  • A separate key for dsh is handy — you can delete it in the console if something goes wrong.
  • dsh runs commands as your user. Do not run it in folders with important data, and do not give it tasks you are not ready to review.

Next