AI Tool Setup
DeepSeek Harness
Connect DeepSeek Harness to Felo through its native DeepSeek adapter or a custom OpenAI-compatible provider.
Use this guide to run the open-source DeepSeek Harness with models served by Felo API Platform. The recommended path reuses the harness's built-in deepseek-official adapter. You can also add Felo as a separate custom OpenAI-compatible provider in the Web UI.
DeepSeek Harness is currently a developer preview and may introduce compatibility-breaking changes. Check its upstream release notes when an option or screen differs from this guide.
Before You Start
You need Node.js and one Felo API Platform key. Keep the key out of source control.
export FELO_API_KEY="YOUR_API_KEY"The examples use deepseek-v4-flash. Check Models and Pricing before selecting a different model ID.
Recommended Setup: Built-in DeepSeek Adapter
DeepSeek Harness reads the built-in adapter credential from DEEPSEEK_API_KEY and its endpoint from DEEPSEEK_BASE_URL.
export DEEPSEEK_API_KEY="$FELO_API_KEY"
export DEEPSEEK_BASE_URL="https://openapi.felo.ai/api/v1"
npx @deepseek-ai/dsh webOpen http://127.0.0.1:3080, then:
- Add or select your project workspace.
- Open Settings → Models.
- Select the
deepseek-officialprovider anddeepseek-v4-flashmodel. - Start a new session and send a small repository task.
Do not append /chat/completions to the base URL. The built-in adapter sends requests to {DEEPSEEK_BASE_URL}/chat/completions itself.
Persist the environment values
DeepSeek Harness can read a .env file from the directory where you start it. Add the following values to an untracked .env file if you do not want to export them for every session:
DEEPSEEK_API_KEY=YOUR_API_KEY
DEEPSEEK_BASE_URL=https://openapi.felo.ai/api/v1Do not commit this file. You can also use the harness credential and settings files under $DSH_HOME when you need user-level configuration.
Alternative Setup: Custom OpenAI-compatible Provider
Use this path when you want Felo to appear as a separate provider instead of overriding the built-in DeepSeek connection.
- Start the Web UI with
npx @deepseek-ai/dsh web. - Open Settings → Models.
- Choose Add custom provider.
- Enter the following values and save the provider.
| Field | Value |
|---|---|
| Provider ID | felo |
| Display name | Felo API Platform |
| Base URL | https://openapi.felo.ai/api/v1 |
| API protocol | OpenAI-compatible Chat Completions (openai-completions) |
| API key | Your Felo API key |
| Model ID | deepseek-v4-flash |
If model discovery fails, add the model ID manually. A provider's Get available models action depends on an OpenAI-compatible GET /models route and is not required for manual configuration.
Verify the Setup
Start a fresh session and ask:
Summarize this repository and identify its main packages.The setup is ready when the session completes with deepseek-v4-flash selected and no authentication or unknown-model error appears.
For a non-interactive smoke test with the recommended adapter, run from the target workspace:
npx @deepseek-ai/dsh --profile headless "List the top-level files in this workspace."Web Search Note
This setup routes model requests through Felo. DeepSeek Harness's built-in web_search provider has separate endpoint requirements even though its default credential variable is also DEEPSEEK_API_KEY. Do not point DEEPSEEK_SEARCH_BASE_URL at Felo unless you are using an explicitly compatible search endpoint. Use Felo's Chat API or other Felo Skills separately when your workflow needs Felo search.
Troubleshooting
| Issue | What to check |
|---|---|
MISSING_CREDENTIAL or 401 | Confirm DEEPSEEK_API_KEY contains the Felo key in the process that starts dsh |
| Request URL contains the path twice | Use https://openapi.felo.ai/api/v1, not a URL ending in /chat/completions |
UNKNOWN_MODEL | Select or manually add deepseek-v4-flash, or use another published Felo model ID |
| Felo is not listed separately | Use the custom-provider setup; the recommended path keeps the provider ID deepseek-official |
| Settings changed but an old session behaves differently | Start a new session so it uses the newly selected provider and model route |
| Web search authentication fails | Configure the harness search provider separately; model endpoint settings do not configure web search |