AgentX docs

Thinking Patterns & Reasoning

AgentX has two reasoning systems, and it’s worth knowing which one you’re using:

  • Thinking Patterns — how agents reason in chat. A pattern is compiled into the live streamed turn (directives, hidden pre-calls, multi-pass streams) so tools, steering, and the thinking bubble all keep working. This is the system you interact with every day.
  • The offline reasoning kit — the classic CoT / ToT / ReAct / Reflection strategy classes behind POST /api/agent/run (blocking, non-streaming). Kept for programmatic task execution.

Models with native reasoning (they emit their own <think> deltas) stream that thinking live into the chat’s thinking bubble regardless of pattern — patterns shape how that thinking happens, and give non-reasoning models a visible thinking process of their own.

The patterns

PatternWhat it doesExtra LM calls
AutoPicks per message: instant keyword heuristics; an optional bounded LLM tiebreak when unsure. Never stacks a scaffold on a native reasoner.0 (rarely 1 tiny)
NativeThe model thinks freely — no scaffold, raised output floor so thinking can’t starve the answer.0
Step-by-step (cot)Explicit numbered reasoning steps inside the thinking block — gives non-reasoning models a verifiable chain.0
Step-back (step_back)A hidden pre-call distills the governing principles first; the turn then applies them explicitly.1 small
Reflection (reflection)One completion structured as draft → self-critique → improved final answer (critique stays in thinking).0
Deep reflection (deep_reflection)True multi-pass: the draft and critique stream live into the thinking bubble, then the improved final answer streams with tools.2
Consensus (self_consistency)k independent samples (2–5, tool-less) surface as thinking; a judged final answer streams. Auto only picks it for short calculation/logic turns with no tools.k (+judge rides the final turn)

Legacy values keep working with honest degradations in chat: Tree-of-Thought runs step-by-step (full ToT stays on /agent/run), and ReAct maps to native thinking with tool narration — chat’s tool loop already is reason+act with real function calls. A one-line status tells you when a degradation applied.

Choosing a pattern

Resolution per turn: Thinking mode (a per-conversation override in the Relay) → agent profile (reasoning_strategy, the “Thinking pattern” control in the profile editor) → global default (preferences.default_reasoning_strategy) → Auto.

The Thinking mode picker unifies the patterns with Research Mode as one choice — they’re mutually exclusive by design (a research turn keeps its own rigorous prompt and never stacks a pattern), so picking Research in the same menu makes that rule visible instead of letting a chosen pattern silently no-op. Options the settings disable drop out of the menu. The turn’s mode is reported on the done event (thinking_pattern + research), stamped on the persisted turn, and badged on the message. Multi-pass phases surface as live status lines (“Drafting…”, “Critiquing the draft…”, “Sampling 3 independent solutions…”).

Settings → Intelligence → Thinking Patterns

  • Patterns — master kill-switch + per-pattern availability (both explicit selection and Auto respect these).
  • Auto selection — the LLM tiebreak toggle, its model (empty = the Fast Utility role), and the minimum message length below which it never fires.
  • Pattern models & budgets — step-back and consensus-sampling models (empty = the conversation’s own model), consensus k, and the thinking output floor (0 = automatic: floored whenever a pattern is active or the model reasons natively, so thinking tokens can’t starve the visible answer).

Config lives under reasoning.* (/api/config/update, allowlisted). The classifier is a Fast Utility role member; step_back_model/sc_model inherit the active turn model.

The offline kit (/api/agent/run)

ReasoningOrchestrator classifies the task (shared heuristics with chat Auto — reasoning/selection.py) and runs the full strategy classes: Chain-of-Thought (zero-shot/few-shot), Tree-of-Thought (BFS/DFS/beam over branching thoughts), ReAct (reason+act with registered tools), Reflection (iterative critique/revision cycles, prompts in system_prompts.yaml). Strategy execution is wall-clock bounded (OrchestratorConfig.timeout_seconds), falls back to Chain-of-Thought on failure, and resolves models through the provider fallback chain like every other feature.

POST /api/agent/run
{"task": "…", "reasoning_strategy": "tot"}

Chat-first pattern values (native, step_back, deep_reflection, self_consistency) alias to their nearest kit strategy on this endpoint.

Advanced: multi-model drafting

Thinking patterns shape how one model reasons. Drafting goes wider — orchestrating several models on a single generation to trade speed, quality, and cost. It’s an advanced, opt-in layer: off by default (enable_drafting = false), with strategies defined in drafting/drafting_strategies.yaml and picked per task type. Three families:

Speculative decoding

A fast draft model generates tokens that a stronger target model verifies, accepting or rejecting each batch — cheaper tokens whenever the two agree. See the speculative-decoding flow on the System Design page.

ConfigDescription
draft_modelThe fast proposer
target_modelThe strong verifier
draft_tokensTokens per draft batch (20–30)
acceptance_thresholdMinimum score to accept (0.7–0.8)
max_iterationsMaximum draft-verify cycles

Pre-configured: fast_accurate, local_cloud, claude_fast.

Pipeline

Multi-stage generation where each stage uses a different model, prompt, and temperature for a specific role — analyze, critique/review, refine, summarize. Pre-configured: code_review (generate → review → refine), writing_pipeline (outline → draft → edit → polish), analysis_pipeline (decompose → research → synthesize).

Candidate generation

Generate several candidates and pick the best with a scoring method — majority_vote (most common answer wins), verifier (a separate model scores each), or length_preference. Pre-configured: consensus (multi-model vote), best_of_n (N candidates + verifier), diverse_ensemble (varied models), self_consistency (same model, multiple samples).

A run returns a DraftResult:

FieldTypeDescription
contentstringFinal output
strategystringStrategy name
statusDraftStatus"complete" or "failed"
draft_tokens / accepted_tokensintTokens drafted / accepted (speculative)
models_usedlist[string]Every model involved
stages_completed / candidates_generatedintPipeline stages · candidates produced
estimated_costfloatEstimated USD cost
total_time_msfloatElapsed time

Task types map to a default strategy via the defaults block — general → fast_accurate, code → code_review, writing → writing_pipeline, analysis → analysis_pipeline, consensus → consensus. Full config lives in api/agentx_ai/drafting/drafting_strategies.yaml; the result schema is in API Models.