Running headless under a brand-new DSH_HOME reports this verbatim:
dsh: MISSING_CREDENTIAL: llm-deepseek: no API key for provider route "deepseek-official"; store DEEPSEEK_API_KEY through the credentials service (the web Models page writes it), or export DEEPSEEK_API_KEY in the launching environment
That single line carries a lot
| What it says | Maps to |
|---|---|
| What is missing | No API key for provider route "deepseek-official" |
| Where it lives | The credentials service, which the web Models page writes |
| Two ways to supply it | (1) through the credentials service; (2) export DEEPSEEK_API_KEY in the launching environment |
The second route works as measured
export DEEPSEEK_API_KEY=sk-... dsh --profile headless "your task"
With only the environment variable set, headless ran correctly under an isolated DSH_HOME (it returned the right answer) without any credential file pre-written. That matters for CI and throwaway environments.
What the credential file looks like
version: 1
refs:
DEEPSEEK_API_KEY: sk-...
records:
client-connection/browser-session:
kind: grantThree top-level keys: version, refs (the secrets), and records (authorisation records such as browser sessions). Switching DSH_HOME switches the entire credential and authorisation set, which is why isolated experiments must bring their own key.