Connect an agent
DeepSeek Harness
DeepSeek Harness (command: dsh) is an AI coding agent released by DeepSeek on August 13, 2026, with a web interface, session management and tool calling. It supports OpenAI-compatible providers. Point its configuration to Yomi API to use models such as deepseek-v4-pro.
Prerequisites
- Node.js: 24 (required by dsh; npm is bundled with Node). Reopen the terminal after installation and check with
node --version. The output must start with v24. - API key: Create and save a key from API Keys in the console. It is visible only at creation and starts with
sk-.
Installation
Install globally with npm. The command is the same on macOS, Linux and Windows:
npm install -g @deepseek-ai/dsh
Configure and start in one step
No manual configuration edits are needed. Replace sk-YOUR_KEY in the command below with your real key, then copy and run the entire block. The script installs dsh, backs up and merges your existing ~/.dsh/settings.yaml (preserving personal settings such as themes), writes the key to ~/.dsh/.env (mode 0600), then starts dsh web.
macOS / Linux
bash <<'YOMI_SETUP'
set -e
npm install -g @deepseek-ai/dsh
YOMI_API_KEY="sk-YOUR_KEY"
export YOMI_API_KEY
NODE_PATH="$(npm root -g)/@deepseek-ai/dsh/node_modules" node <<'NODE'
const fs = require('fs');
const os = require('os');
const path = require('path');
const yaml = require('js-yaml');
const home = process.env.DSH_HOME || path.join(os.homedir(), '.dsh');
const settingsPath = path.join(home, 'settings.yaml');
fs.mkdirSync(home, { recursive: true });
const current = fs.existsSync(settingsPath)
? (yaml.load(fs.readFileSync(settingsPath, 'utf8')) || {})
: {};
if (fs.existsSync(settingsPath)) {
fs.copyFileSync(settingsPath, settingsPath + '.bak.' + Date.now());
}
current['llm-pi-ai'] ??= {};
current['llm-pi-ai'].providers ??= {};
current['llm-pi-ai'].providers.yomiapi = {
displayName: 'Yomi API',
apiKeyEnv: 'YOMI_API_KEY',
api: 'openai-completions',
baseURL: 'https://api.yomiapi.com/v1',
models: [
{ id: 'deepseek-v4-pro', name: 'DeepSeek V4 Pro' },
{ id: 'deepseek-v4-flash', name: 'DeepSeek V4 Flash' },
{ id: 'gpt-5.6-sol', name: 'GPT 5.6 Sol' },
{ id: 'gpt-5.6-luna', name: 'GPT 5.6 Luna' },
{ id: 'gpt-5.6-terra', name: 'GPT 5.6 Terra' },
{ id: 'gpt-5.5', name: 'GPT 5.5' },
{ id: 'gpt-5.4', name: 'GPT 5.4' },
{ id: 'kimi-k3', name: 'Kimi K3' },
{ id: 'glm-5.2', name: 'GLM 5.2' },
],
};
current['agent-default-model'] = {
provider: 'yomiapi',
model: 'deepseek-v4-pro',
};
fs.writeFileSync(
settingsPath,
yaml.dump(current, { lineWidth: -1, noRefs: true }),
{ mode: 0o600 },
);
const envPath = path.join(home, '.env');
const oldLines = fs.existsSync(envPath)
? fs.readFileSync(envPath, 'utf8').split(/\r?\n/)
: [];
const lines = oldLines.filter(
(line) => line && !line.startsWith('YOMI_API_KEY='),
);
lines.push('YOMI_API_KEY=' + process.env.YOMI_API_KEY);
fs.writeFileSync(envPath, lines.join('\n') + '\n', { mode: 0o600 });
console.log('Yomi API configured. Default model: deepseek-v4-pro');
NODE
dsh web
YOMI_SETUP
Windows PowerShell
Run the equivalent script in PowerShell:
npm install -g @deepseek-ai/dsh
$env:YOMI_API_KEY = 'sk-YOUR_KEY'
$env:NODE_PATH = "$(npm root -g)\@deepseek-ai\dsh\node_modules"
@'
const fs = require('fs');
const os = require('os');
const path = require('path');
const yaml = require('js-yaml');
const home = process.env.DSH_HOME || path.join(os.homedir(), '.dsh');
const settingsPath = path.join(home, 'settings.yaml');
fs.mkdirSync(home, { recursive: true });
const current = fs.existsSync(settingsPath)
? (yaml.load(fs.readFileSync(settingsPath, 'utf8')) || {})
: {};
if (fs.existsSync(settingsPath)) {
fs.copyFileSync(settingsPath, settingsPath + '.bak.' + Date.now());
}
current['llm-pi-ai'] ??= {};
current['llm-pi-ai'].providers ??= {};
current['llm-pi-ai'].providers.yomiapi = {
displayName: 'Yomi API',
apiKeyEnv: 'YOMI_API_KEY',
api: 'openai-completions',
baseURL: 'https://api.yomiapi.com/v1',
models: [
{ id: 'deepseek-v4-pro', name: 'DeepSeek V4 Pro' },
{ id: 'deepseek-v4-flash', name: 'DeepSeek V4 Flash' },
{ id: 'gpt-5.6-sol', name: 'GPT 5.6 Sol' },
{ id: 'gpt-5.6-luna', name: 'GPT 5.6 Luna' },
{ id: 'gpt-5.6-terra', name: 'GPT 5.6 Terra' },
{ id: 'gpt-5.5', name: 'GPT 5.5' },
{ id: 'gpt-5.4', name: 'GPT 5.4' },
{ id: 'kimi-k3', name: 'Kimi K3' },
{ id: 'glm-5.2', name: 'GLM 5.2' },
],
};
current['agent-default-model'] = {
provider: 'yomiapi',
model: 'deepseek-v4-pro',
};
fs.writeFileSync(
settingsPath,
yaml.dump(current, { lineWidth: -1, noRefs: true }),
{ mode: 0o600 },
);
const envPath = path.join(home, '.env');
const oldLines = fs.existsSync(envPath)
? fs.readFileSync(envPath, 'utf8').split(/\r?\n/)
: [];
const lines = oldLines.filter(
(line) => line && !line.startsWith('YOMI_API_KEY='),
);
lines.push('YOMI_API_KEY=' + process.env.YOMI_API_KEY);
fs.writeFileSync(envPath, lines.join('\n') + '\n', { mode: 0o600 });
console.log('Yomi API configured. Default model: deepseek-v4-pro');
'@ | node
if ($LASTEXITCODE -eq 0) {
dsh web
}
When the script finishes, the terminal displays a local address (usually http://127.0.0.1:3080). Open it in your browser and create a session. For later use, change to your project directory and run dsh web.
Verify the connection
export YOMI_API_KEY="sk-YOUR_KEY"
dsh --profile headless "Reply with OK only"
An OK response confirms that dsh has successfully called the model through Yomi API.
Manual configuration and switching models
You can also edit ~/.dsh/settings.yaml manually. Complete example:
llm-pi-ai:
providers:
yomiapi:
displayName: Yomi API
apiKeyEnv: YOMI_API_KEY
api: openai-completions
baseURL: https://api.yomiapi.com/v1
models:
- id: deepseek-v4-pro
name: DeepSeek V4 Pro
- id: deepseek-v4-flash
name: DeepSeek V4 Flash
- id: gpt-5.6-sol
name: GPT 5.6 Sol
- id: gpt-5.6-luna
name: GPT 5.6 Luna
- id: gpt-5.6-terra
name: GPT 5.6 Terra
- id: gpt-5.5
name: GPT 5.5
- id: gpt-5.4
name: GPT 5.4
- id: kimi-k3
name: Kimi K3
- id: glm-5.2
name: GLM 5.2
agent-default-model:
provider: yomiapi
model: deepseek-v4-pro
Change agent-default-model.model to switch the default model. Existing sessions may keep their original model; refresh the page and start a new session after editing. You can also switch manually using the session's model selector. The catalog is continually updated; use Models (the Model Catalog) in the console or the following command as your reference:
curl https://api.yomiapi.com/v1/models -H "Authorization: Bearer sk-YOUR_KEY"
deepseek-v4-pro (the new official flagship released on August 13). For faster, cheaper calls, use deepseek-v4-flash. The gpt-5.6 series, Kimi K3 and GLM 5.2 work with the same configuration.Troubleshooting
401 / invalid_bearer_token
Check that the key is complete, contains no extra spaces, starts with sk- and has not been deleted in the console. If the error persists, create a new key.
dsh command not found
Reopen the terminal. If that does not help, check that npm's global bin directory is on PATH (npm bin -g).
node --version does not start with v24
dsh requires Node.js 24. Install it and try again.
