DGC v0.47.2 is out
Navigate
Install DGC
DGC v0.47.2Edit on GitHub ↗
Providers & models/Thinking & reasoning

off · low · medium · high · xhigh, and preserving it

Thinking & reasoning

#

DGC exposes one thinking dial, mapped to the correct wire format per provider.

Levels

#

off · low · medium · high · xhigh. off is the default — a coding agent uses model-specific controls and adds instructions appropriate to each profile. xhigh requests the strongest supported tier; it cannot add a native tier a model does not offer.

  • /think — cycle, or /think high to set a level (persisted across restarts).
  • With thinking Off, a prompt containing think, think hard, think harder or ultrathink turns it on for that turn (Low, Medium, High, High). A level you set (Low through Extra high, or Ultra) is never changed by words in a prompt.
  • --think <level> — set it for one dgc -p run.
  • TUI: /think opens a picker; Settings → General → Thinking.
  • Editor: the composer thinking control and Settings → General → Thinking are the same dial. You can change it while a turn runs; the next model round uses the new level.

Native controls differ:

  • Ollama thinking models (native /api/chat and /v1 alike): Off sends thinking off; Low, Medium and High are sent as Ollama's own levels and Extra High as Max. A model that grades its thinking follows them (GLM 5.3 on Ollama's cloud thinks far less at Low); one that does not treats every level as on. An older Ollama that takes only on/off for a model refuses a level once; DGC then sends on/off for that model (and High instead of Max where Max is refused) without losing the Off switch. The editor's reasoning note says which of these applies.
  • GPT-OSS on Ollama: Low, Medium and High; Off uses Low and Extra High uses High (it has no tier above High).
  • GLM 5 on Ollama (for example glm-5.3:cloud): it keeps reasoning with thinking off and writes that reasoning into the answer, so Off uses Low; Low, Medium and High are its levels and Extra High uses Max.
  • GLM 5.3 Flash on Ollama: reasoning is always on. Off/Low use Low, Medium/High use High, and Extra High/Ultra use Max, on both native and compatible transports.
  • Other providers use their supported effort fields or budgets. Unsupported controls are negotiated away after a precise rejection; a model without reasoning support gets DGC instructions only.

Reasoning watchdog

#

A model that reasons without ever answering is stopped and asked again one level lower. think_budget_tokens (default auto) sets how far it may go. auto scales with the level, and every level allows at least the thinking budget DGC asks the provider for. Reasoning allowed before any answer:

  • Off and Low: 8,000 tokens.
  • Medium: 16,000 tokens.
  • High: 32,000 tokens.
  • Extra high (and Ultra): 64,000 tokens.

A number applies to every level instead, and 0 turns the watchdog off. A stored 8000, the old default, is read as auto.

Reasoning counts against the output cap on most providers, so a request that asks for reasoning may produce max_tokens (default 16384) of answer plus that level's allowance. The cap never exceeds the model's reported output limit or half the context window, so a 32K window keeps the 16,384 cap and Extra high needs a window of about 160K to use its full 64,000.

Ultra

#

/ultra on is an orchestration profile, not a sixth thinking level. It raises native effort to xhigh (or leaves it if you already set that), tells delegated CLIs their strongest supported effort, and makes the main agent a lead: it locates each part of the request, gives every part that changes different files its own worker (or an explorer for an area to map) in one parallel batch — up to 8 at once under Ultra, or the max_parallel_tasks width if you set one (default 4 outside Ultra, at most 8; concurrent in auto mode) — then integrates and runs the tests. A sub-agent starts cold, so it only saves time beside others: a single part, parts that share files or one investigation, and edits the lead already knows stay with the lead. Critic reviews a change when you ask for a review or when no test can check it. Long work that does not block the rest of the turn can use task with background: true; in the editor, and in the terminal while wake-ups are on, DGC starts a wake turn when that child lands.

  • /ultra · /ultra on|off — toggle; the status line shows the profile while it is on.
  • --ultra / --no-ultra — the same for one dgc launch.
  • Settings → Behaviour (terminal) or General (editor).

Permission mode is unchanged: Ultra does not grant extra filesystem, shell, or network authority. It does not invent a vendor enum named "ultra". Coupled edits stay serial; the parent still has to reconcile child results. A stronger profile can take longer and use more tokens; it does not guarantee better answers. The editor's picker and General settings explain the native control for the selected model.

Showing thinking

#

show_reasoning (/thoughts show|hide) controls whether the model's thinking is shown, muted, in the transcript. It does not change how hard the model reasons — that is /think.

Where thinking came from

#

Not every provider hands back the model's own reasoning. Some return a summary written from it, and some send nothing readable at all. Every block of thinking DGC shows says which, in a muted label after its header:

Label What it is
Thought for 4s · rawThe model's own reasoning, as a runtime serving open weights streamed it (Ollama, or llama.cpp, vLLM or LM Studio on your machine or network)
Thought for 4s · summarized by AnthropicThe provider returned a summary; the full reasoning is not available. OpenAI's reasoning summaries read summarized by OpenAI
Thought for 4s · hidden by OpenAIThe provider kept the reasoning hidden and sent no readable text, so there is nothing to open
Thought for 4sDGC cannot tell whether this is the model's own reasoning or a summary

DGC decides from the endpoint's host, the API it speaks and the model, never from the name of an event. A local or private host — localhost, a LAN address, a .local or Tailscale name — is never labelled as summarized or hidden by a provider. Thinking from a sub-agent is marked Sub-agent before its label. Hover a label in the editor for the same explanation in a sentence.

Short summaries inline

#

A short provider summary written between tool calls reads better as a line of the answer than as another fold, so it is shown inline, muted and marked · summarized. Raw thinking, thinking DGC cannot place, and anything from a sub-agent always stay collapsed.

  • /thoughts inline (the default) shows short summaries inline; /thoughts collapsed folds every block. Both also turn thinking on. In the editor, Settings → General → Show model thinking offers inline, collapsed and hidden.
  • thinking_inline_max_chars (default 280, at most 1000) is the longest summary shown inline; a summary with a code block or more than four lines stays collapsed, and 0 keeps every summary collapsed.

Thinking is saved with the session within fixed bounds, so a resumed chat shows the same blocks and labels. A block that was cut to fit says so when you open it.

Preserving thinking across turns

#

Backends differ in whether prior-turn reasoning is carried back into context:

  • Anthropic (signed thinking blocks) and Ollama (native thinking field) round-trip their own reasoning automatically.
  • The OpenAI-compatible / llama.cpp chat-completions transport strips the model's reasoning every turn.

preserve_thinking (/preserve-thinking on|off, default off) re-embeds the last turn's reasoning as a <think>…</think> block in the assistant message sent back, so a compatible/local model can build on its own earlier thinking. It helps multi-turn coherence but costs context tokens, and only affects the chat-completions path (the Anthropic/Ollama paths are untouched).

Documentation