Skip to content

Choosing a Stack

Use this guide to choose a default stack quickly, then tune for cost and reliability.

For most production apps:

const agent = await ReactiveAgents.create()
.withProvider("anthropic")
.withModel("claude-sonnet-4-20250514")
.withReasoning({ defaultStrategy: "adaptive" })
.withTools()
.withMemory("1")
.withGuardrails()
.withCostTracking()
.withObservability({ verbosity: "normal" })
.build();
DecisionStart hereMove when
ProviderAnthropicYou need local/offline (ollama) or existing proxy infra (litellm)
Model tierMid/high capabilityLatency or budget pressure dominates quality
Memory tierTier 1You need semantic similarity retrieval (Tier 2 vectors)
Reasoning strategyAdaptiveWorkload is consistent and you want deterministic behavior
ToolsBuilt-ins onlyYou need external systems via MCP/custom tools
WorkloadStrategy
API automation / deterministic tool workreactive
Long multi-step tasks with explicit plansplan-execute
Exploration and branching ideastree-of-thought
Self-critique and iterative improvementreflexion
Mixed unknown workloadsadaptive
.withProvider("ollama")
.withModel("qwen3.5")
.withContextProfile({ tier: "local", toolResultMaxChars: 800 })
.withReasoning({ defaultStrategy: "reactive" })
.withMaxIterations(6)
.withProvider("anthropic")
.withModel("claude-sonnet-4-20250514")
.withReasoning({ defaultStrategy: "adaptive" })
.withMemory("2")
.withVerification()
.withMaxIterations(20)
  • Guardrails + identity + audit
  • Tier 1 memory
  • Adaptive strategy
  • Normal observability
  • Gateway + policies + kill switch
  • Strong budgets and alerts
  • Event subscriptions for suppression/exhaustion events
  • Tools + verification + memory tier 2
  • Plan-execute or reflexion
  • Higher max iterations
  • Turning on all layers before proving need
  • Using Tier 2 memory without embedding provider configured
  • Long max iterations without budget controls
  • MCP subprocess usage without guaranteed disposal