Use NeverMetered with DeepSeek Harness
DeepSeek's open-source, plugin-based coding agent (the `dsh` command), pointed at a custom endpoint.
qwen3.8-27bYOUR_API_KEY with your key.- 1
Create an API key
Create a key in API keys and name it after the tool, for example “DeepSeek Harness”. A dedicated key per tool lets you see its usage separately and give it its own parallel-stream cap. The key is shown once; the snippets below use
YOUR_API_KEYwhere it goes. - 2
Install DeepSeek Harness
Already have DeepSeek Harness? Skip this step. Open a terminal first: on macOS press ⌘ Space, type Terminal and press Return; on Windows open the Start menu, type PowerShell and press Enter. Needs a recent Node.js. It's a developer preview, so this pins the last version we verified installs cleanly — see the troubleshooting below if a newer one works and you want it instead.
npm install -g @deepseek-ai/dsh@0.1.6-alpha.2 - 3
Point DeepSeek Harness at the gateway
Writes
settings.yamlunder$DSH_HOME(or~/.dshif you haven't set one), which every DeepSeek Harness profile reads (not only the one below), and sets your key for this terminal. This replaces the whole file: if you've already customized it, add these two sections to yours instead of pasting over it.dsh_home="${DSH_HOME:-$HOME/.dsh}" mkdir -p "$dsh_home" cat > "$dsh_home/settings.yaml" <<'EOF' llm-deepseek: protocol: chat-completions baseURL: https://api.nevermetered.com/v1 apiKeyEnv: NEVERMETERED_API_KEY agent-default-model: provider: deepseek-official model: qwen3.8-27b EOF export NEVERMETERED_API_KEY="YOUR_API_KEY" - 4
Verify it works
Run a single task and exit — the documented one-shot command, no other setup needed. The request shows up in Requests within a few seconds, with its input, cached and output tokens.
dsh --profile headless "Reply with the word ready"
- Each new session also makes one small background request to title it, so on the free plan starting a session uses two of your daily requests.
- DeepSeek Harness sends a reasoning level with every request (
highby default). AddreasoningEffort: off | low | high | maxunderllm-deepseek:insettings.yamlto change it. - Without a
models:entry, DeepSeek Harness assumes a much larger context window than your plan's 128K and compacts later than it should. Addmodels: [{ id: "qwen3.8-27b", name: "qwen3.8-27b", contextWindow: 131072 }]underllm-deepseek:if you want it to compact in time.
Troubleshooting
npm error notargetorETARGETinstalling@deepseek-ai/dsh- This usually means you tried
npm install -g @deepseek-ai/dsh@latestinstead of the pinned command above — DeepSeek Harness is a developer preview and itslatestnpm tag has shipped with a broken dependency before. Reinstall withnpm install -g @deepseek-ai/dsh@0.1.6-alpha.2, or try@latestagain in a few days if you want a newer build. MISSING_CREDENTIALor401- Export
NEVERMETERED_API_KEYin the terminal you rundshfrom — the launch environment always wins oversettings.yaml. A key saved through DeepSeek Harness's own credential store also works, but an exported variable overrides it. - It still answers with
deepseek-flash - Check
agent-default-model:insettings.yamlhasmodel: qwen3.8-27bandprovider: deepseek-official, and that you're running a profile that reads the harness home'ssettings.yaml(the shipped profiles, includingheadless, do). 404 model_not_found- Use a model id exactly as
GET /v1/modelslists it, for exampleqwen3.8-27b. Plans can restrict which models a key may call. 400 context_length_exceeded- The conversation outgrew the 128K context window (input + output). Let the tool compact or start a fresh session, or get a larger window on your plan.
429 concurrency_limit_exceeded- All your parallel streams are busy and your queue allowance is full. Lower the tool's parallelism (subagents, batch size), or get more streams on your plan.
- Answers stop mid-sentence
- The response hit your plan's output cap of 65,536 tokens (finish reason
lengthormax_tokens). Ask for shorter steps, or upgrade for a higher cap. 403 email_verification_required- Free requests need a verified email. Click the link in your verification email (you can resend it from the dashboard), or upgrade.
429 daily_quota_exceeded- You've used today's free requests; agents send one request per step, so they go quickly. The allowance resets at 00:00 UTC, and paid plans have no daily limit.
503/504 request_queue_timeout- The service stayed busy longer than the queue timeout and nothing was generated. Retry with backoff, and give the tool a generous request timeout.
503 service_unavailable- No GPU capacity is online at the moment. It's temporary and your setup is fine: retry in a little while, and check the status page.