Summary
DeepSeek V4 Pro (deepseek-v4-pro) officially supports reasoning_effort: "max", and OpenClaw's bundled DeepSeek plugin defines a 7-level V4_THINKING_LEVEL_IDS array including "xhigh" and "max". However, the TUI / Control UI /think command only exposes 5 levels — xhigh and max are invisible and unselectable.
Environment
- OpenClaw: v2026.5.2 (8b2a6e5)
- Model:
deepseek/deepseek-v4-pro
- Agent config:
thinkingDefault: "max"
- OS: Darwin 25.4.0 (arm64)
- Node.js: v22.22.2
Expected Behavior
/think should display all 7 levels for DeepSeek V4 Pro:
off, minimal, low, medium, high, xhigh, max
Actual Behavior
/think only shows 5 levels:
off, minimal, low, medium, high
xhigh and max are not visible and not selectable.
Inconsistent state
session_status reports Think: max ✅ (the API layer works correctly)
- The
/think selector in the UI cannot see max ❌
- Manually attempting to set
max in an old session reverts to high
Technical Analysis
1. DeepSeek API officially supports max
DeepSeek's Thinking Mode docs state:
Thinking Effort Control: reasoning_effort: "high/max"
In thinking mode, for compatibility, low and medium are mapped to high, and xhigh is mapped to max
2. OpenClaw's DeepSeek plugin already defines all 7 levels
File: dist/extensions/deepseek/index.js
const V4_THINKING_LEVEL_IDS = [
"off",
"minimal",
"low",
"medium",
"high",
"xhigh", // ← defined but not surfaced in UI
"max" // ← defined but not surfaced in UI
];
const DEEPSEEK_V4_THINKING_PROFILE = {
levels: V4_THINKING_LEVEL_IDS.map(buildDeepSeekV4ThinkingLevel),
defaultLevel: "high"
};
function resolveDeepSeekV4ThinkingProfile(modelId) {
return isDeepSeekV4ModelId(modelId) ? DEEPSEEK_V4_THINKING_PROFILE : void 0;
}
The plugin entry registers it correctly:
resolveThinkingProfile: ({ modelId }) => resolveDeepSeekV4ThinkingProfile(modelId),
3. The API mapping layer works correctly
File: dist/provider-stream-shared-BF5MzTUo.js
function resolveDeepSeekV4ReasoningEffort(thinkingLevel) {
return thinkingLevel === "xhigh" || thinkingLevel === "max" ? "max" : "high";
}
When thinkingLevel is "max", the API request correctly sends reasoning_effort: "max" ✅
4. Suspected root cause: thinking profile resolution chain
File: dist/thinking-Bi9AZdtM.js
const BASE_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high"];
// ← "xhigh" and "max" are NOT in the base list
function resolveThinkingProfile(params) {
const context = resolveThinkingPolicyContext(params);
// ...
const pluginProfile = resolveProviderThinkingProfile({...});
if (pluginProfile) {
const normalized = normalizeThinkingProfile(pluginProfile);
if (normalized.levels.length > 0) return normalized; // ← should return all 7 levels here
}
// fallback: returns BASE_THINKING_LEVELS (5 levels)
const profile = buildBaseThinkingProfile(defaultLevel);
if (catalogSupportsXHigh(context.compat)) appendProfileLevel(profile, "xhigh");
return profile;
}
Call chain:
resolveProviderThinkingProfile() → resolveProviderRuntimePlugin() → looks up DeepSeek plugin
- If plugin found → calls
plugin.resolveThinkingProfile(context) → resolveDeepSeekV4ThinkingProfile(modelId)
- If
modelId matches → returns DEEPSEEK_V4_THINKING_PROFILE (7 levels)
- If
modelId doesn't match → returns undefined → falls back to BASE_THINKING_LEVELS (5 levels)
Suspicion:
resolveProviderRuntimePlugin may fail to match the DeepSeek plugin (provider ID mismatch, plugin registration failure, etc.)
- Or the
modelId passed in doesn't match isDeepSeekV4ModelId's check (which only matches "deepseek-v4-flash" and "deepseek-v4-pro")
5. Session cache (secondary issue)
The thinkingLevel in old sessions' sessions.json is hardcoded to "high", even when the global thinkingDefault: "max" is set. Manually editing sessions.json works around this, but the UI-level problem still remains.
Reproduction Steps
- Configure agent
main to use deepseek/deepseek-v4-pro
- Run
/think in TUI or Control UI
- Observe the available thinking-level options
- Expected:
off, minimal, low, medium, high, xhigh, max
- Actual: only
off, minimal, low, medium, high
Impact
- Users cannot select
max reasoning effort through the UI (workaround: set via thinkingDefault)
- The
xhigh tier is completely unusable (invisible in UI and no thinkingDefault workaround for it specifically)
- Inconsistent with DeepSeek's officially documented capabilities
- Old session
thinkingLevel cache prevents config changes from taking effect
Workarounds
- New sessions: setting
thinkingDefault: "max" globally works at the API level
- Old sessions: manually edit
~/.openclaw/agents/main/sessions/sessions.json and change the session's thinkingLevel to "max"
Neither workaround addresses the UI invisibility of xhigh/max.
Summary
DeepSeek V4 Pro (
deepseek-v4-pro) officially supportsreasoning_effort: "max", and OpenClaw's bundled DeepSeek plugin defines a 7-levelV4_THINKING_LEVEL_IDSarray including"xhigh"and"max". However, the TUI / Control UI/thinkcommand only exposes 5 levels —xhighandmaxare invisible and unselectable.Environment
deepseek/deepseek-v4-prothinkingDefault: "max"Expected Behavior
/thinkshould display all 7 levels for DeepSeek V4 Pro:Actual Behavior
/thinkonly shows 5 levels:xhighandmaxare not visible and not selectable.Inconsistent state
session_statusreportsThink: max✅ (the API layer works correctly)/thinkselector in the UI cannot seemax❌maxin an old session reverts tohighTechnical Analysis
1. DeepSeek API officially supports
maxDeepSeek's Thinking Mode docs state:
2. OpenClaw's DeepSeek plugin already defines all 7 levels
File:
dist/extensions/deepseek/index.jsThe plugin entry registers it correctly:
3. The API mapping layer works correctly
File:
dist/provider-stream-shared-BF5MzTUo.jsWhen
thinkingLevelis"max", the API request correctly sendsreasoning_effort: "max"✅4. Suspected root cause: thinking profile resolution chain
File:
dist/thinking-Bi9AZdtM.jsCall chain:
resolveProviderThinkingProfile()→resolveProviderRuntimePlugin()→ looks up DeepSeek pluginplugin.resolveThinkingProfile(context)→resolveDeepSeekV4ThinkingProfile(modelId)modelIdmatches → returnsDEEPSEEK_V4_THINKING_PROFILE(7 levels)modelIddoesn't match → returnsundefined→ falls back toBASE_THINKING_LEVELS(5 levels)Suspicion:
resolveProviderRuntimePluginmay fail to match the DeepSeek plugin (provider ID mismatch, plugin registration failure, etc.)modelIdpassed in doesn't matchisDeepSeekV4ModelId's check (which only matches"deepseek-v4-flash"and"deepseek-v4-pro")5. Session cache (secondary issue)
The
thinkingLevelin old sessions'sessions.jsonis hardcoded to"high", even when the globalthinkingDefault: "max"is set. Manually editingsessions.jsonworks around this, but the UI-level problem still remains.Reproduction Steps
mainto usedeepseek/deepseek-v4-pro/thinkin TUI or Control UIoff, minimal, low, medium, high, xhigh, maxoff, minimal, low, medium, highImpact
maxreasoning effort through the UI (workaround: set viathinkingDefault)xhightier is completely unusable (invisible in UI and nothinkingDefaultworkaround for it specifically)thinkingLevelcache prevents config changes from taking effectWorkarounds
thinkingDefault: "max"globally works at the API level~/.openclaw/agents/main/sessions/sessions.jsonand change the session'sthinkingLevelto"max"Neither workaround addresses the UI invisibility of
xhigh/max.