Skip to content

Choosing a Stack

Last updated 1 day ago · 5ad31ba

Updated yesterday

"docs: first-timer onboarding fixes — broken first command, zero-key path, funnel order" · 5ad31ba · 2026-07-21

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

The fastest way to compose capabilities is a HarnessProfile preset — it sets the default-on capability bundle in one line, and you override individual pieces afterward (later calls win). (HarnessProfile ships in v0.12+; on earlier versions use the explicit .with*() chain below.)

import { ReactiveAgents, HarnessProfile } from "reactive-agents";
const agent = await ReactiveAgents.create()
.withProvider("anthropic")
.withProfile(HarnessProfile.balanced()) // memory + RI + verifier + strategy switching
.withTools()
.build();
PresetUse when
HarnessProfile.lean()Latency/cost-sensitive paths or ablations — model only, all default capabilities off.
HarnessProfile.balanced()Most production apps — the full stack (memory + reactive intelligence + verifier + strategy switching). Memory is off in a bare builder as of v0.12; balanced() enables it explicitly.
HarnessProfile.intelligent()You want cross-session compounding learning — balanced + skill persistence.

Override after the preset: .withProfile(HarnessProfile.lean()).withMemory() re-enables just memory.

For most production apps, the equivalent explicit chain:

const agent = await ReactiveAgents.create()
.withProvider("anthropic")
.withModel("claude-sonnet-4-6")
.withReasoning({ defaultStrategy: "adaptive" })
.withTools()
.withMemory()
.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-reflect
Exploration and branching ideastree-of-thought
Self-critique and iterative improvementreflexion
Mixed unknown workloadsadaptive
.withProvider("ollama")
.withModel("qwen3:4b")
.withContextProfile({ tier: "local", toolResultMaxChars: 800 })
.withReasoning({ defaultStrategy: "reactive" })
.withMaxIterations(6)
.withProvider("anthropic")
.withModel("claude-sonnet-4-6")
.withReasoning({ defaultStrategy: "adaptive" })
.withMemory({ tier: "enhanced" })
.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: "enhanced" memory without an embedding provider configured
  • Long max iterations without budget controls
  • MCP subprocess usage without guaranteed disposal