Stackness
Sign up
Strands Decider 2B: what it is and where it sits in an agent harness

Strands Decider 2B: what it is and where it sits in an agent harness

Strands Decider 2B is an open-source decision model from AWS's Strands Labs. It reads a situation and a question, then picks one of the options it was given without writing any text. It came out on 1 October 2026 under Apache-2.0 with 1.9 billion parameters, and AWS measured a median of about 115 ms per question on an RTX 3090. The model itself is not built into the Strands harness. It runs as a local server, and a Strands Agents intervention handler that you write asks it for a verdict before each tool call.

What is Strands Decider 2B?

Strands Decider 2B is a System One model: a small model that answers typed questions with probabilities instead of generated text. A question can be yes or no, one of N options, or a score on a rubric. Strands Labs, the experimental arm of AWS's open-source Strands Agents project, published it on 1 October 2026 in a launch post by Marc Brooker, Mike Chambers and Fabio Nonato de Paula.

It began as Brooker's home project, "Hobson", trained on his own GPU after TypeSafe launched Jev on 15 September (Brooker). The launch checkpoint is hobson-v19. Since then the team has shipped v21 (5 October), the reference checkpoint strands-decider-2B-qwen3.5-v1-2610 (9 October) and four Gemma 4 sizes (changelog), so the name now covers a family. The download is free, and an Amazon spokesperson told VentureBeat there is no hosted API.

Strands Decider scores every option in one forward pass

Strands Decider 2B keeps the torso of Qwen3.5-2B-Base and drops the head that predicts the next token. In its place is a pointer head of about a million parameters that compares the hidden state at the answer position with the hidden state at the end of each option. Training touches only that head and a rank-16 LoRA. A single forward pass returns one probability per option, with no decoding loop.

The Strands Decider 2B architecture, from the launch post. Image: strands-agents/harness-sdk by Strands Labs, Apache-2.0.

The launch post's example routes a support ticket:

strands-decider ask StrandsAgents/strands-decider-2B-hobson-v19 \
  --state "Help! My payouts have been failing for 3 days! " \
  --choice "Which team should handle this?=billing,sales,retail"

It picks billing with a confidence of 0.768 (billing 0.845, retail 0.091, sales 0.064). The first run also downloads the 4.5 GB Qwen base model, since Hugging Face holds only the adapter and the head. The context window is 4,096 tokens, and longer input is cut unless --strict-window is set (inference docs). It runs on CUDA, Apple MPS, MLX or a CPU. There is no official GGUF, and stock llama.cpp cannot run the community one, which needs a patched runtime.

Strands Decider runs beside the agent and answers at a typed checkpoint

Strands Decider 2B runs as its own local HTTP server (POST /v1/systemone on port 8099 in the example), the same shape as a Jev-style sidecar. What Strands adds is the seam: the Strands Agents SDK's intervention API lets a handler pause the agent loop before a tool call, a model call or a whole invocation, and return a typed action that the loop has to obey.

The interventions docs list five actions: Proceed, Deny, Guide (feedback the model retries with), Confirm (pause for a person, tool calls only) and Transform, with "deny > confirm > guide > transform > proceed" as the precedence. The API shipped in Python v1.43.0 on 12 June 2026, before the decider existed.

In the repository's example gate, before_tool_call sends the conversation and the proposed call to the decider. It asks two yes-or-no questions: are the arguments grounded in what the user said, and is the call premature?

answers = self._decider.ask(state, QUESTIONS)
args_grounded = answers["args_grounded"]["noul"]
premature = answers["premature"]["noul"]
gate = ToolCallReviewer(decider)
agent = Agent(
    model="us.anthropic.claude-haiku-4-5-20251001-v1:0",
    tools=[get_weather],
    interventions=[gate],
    system_prompt=SYSTEM_PROMPT,
    callback_handler=None,  # the gate's own log is the interesting output
)

When the grounding answer falls below a hand-picked 0.45, or the prematurity answer reaches it, the gate returns Guide and the Claude Haiku agent asks the user instead of guessing. With Jev or Laya beside an LLM, your own code calls the decider and acts on the answer. In Strands, the gate judges a tool call the model has already chosen, and the loop already knows what each verdict means.

The handler does not care what backend sits behind it: "Strands has no opinion about what goes inside it", says the launch post. Ollaya serves the same model behind a Jev-compatible /v1/systemone endpoint, so it also runs as a plain sidecar outside Strands, as in the guide to running System One models locally.

Which harness steps can a 2B decider gate?

As of 22 October 2026, only one harness step has a Strands Decider example with code: before_tool_call, where the gate checks argument grounding and timing and returns Guide or Proceed. The launch post says "equivalent hooks" exist around the model call and the whole invocation, but shows no decider code for them. Native decision-model support in the Strands SDK is mostly still open pull requests.

Step Status on 22 October 2026 Source
Tool-call gate Demonstrated in an example the docstring calls "Experimental" and says "None of it is recommended for production as it stands" Example
Model call, whole invocation Hooks shipped, no decider example Docs
DecisionModel primitive Shipped in TypeScript v1.21.0 on 14 October, backed by an LLM; the Python port is open PR #4942
Jev and decisionapi.net providers Open pull request; it does not add Strands Decider PR #5240
Model routing by a decision model Open; today's router uses an LLM classifier PR #5219
Graph edges, swarm handoff, tool-set narrowing, decision-gated interventions Issues opened 6 October Design 0020

The harness's own "smart" intervention setting still uses an LLM risk classifier, not a decision model. No Strands document ties the decider to retrieval, to stopping the loop or to reasoning effort. The post on what a decision model should decide covers which of those calls suit a small model.

Strands Decider 2B next to Jev, Laya, jeff and Nimble

Among the free local deciders, Strands Decider 2B sits in the middle on size. Laya's encoders are a fifth of its size and jeff is under half, while Nimble is about five times larger. Jev stays closed and hosted. Each maker measured its own latency on its own hardware, so the latency row compares claims, not one run.

Strands Decider 2B Jev Laya jeff Nimble
Size 1.9B, Qwen3.5-2B + LoRA Not disclosed 421M and 322M encoders 0.8B, Qwen3.5-0.8B + LoRA 9B, Qwen3.5-9B + LoRA
Licence Apache-2.0 Closed Apache-2.0 MIT code; weights Apache 2.0, some adapters CC BY-NC 4.0 No licence file in the repo; v1 weights tagged Apache-2.0
Runs Local: CUDA, MPS, MLX, CPU Hosted API Local: PyTorch, ONNX Local: MLX, CUDA, GGUF Local, plus a hosted API
Price Free $0.042 per million input tokens, output free Free Free Free locally
Context 4,096 tokens 64k per request by default 512 to 1,024 tokens by default 8,192 tokens per question 8,192 limit
Latency, maker's figure 115 ms median, RTX 3090 70 to 500 ms end to end 33 ms, T4 22 ms, RTX PRO 6000 106 ms, H100
Harness tie-in Strands intervention example SDK and HTTP API LangChain, LlamaIndex, CrewAI, MCP extras Jeff-Code, a fork of Pi A Claude Code plugin for its hosted API

Sources: Strands Decider, Jev docs and launch post, Laya, jeff, Nimble, read 22 October 2026. laya-coreml, a Core ML port of Laya, reports 4.98 ms on an M3 Max.

The only third-party run so far is Ollaya Bench of 14 October. It tested the v1 checkpoint through Ollaya's own runtime and ranked it 5th of 41 models:

Model on Ollaya Bench Score Median latency, five questions
Nimble 9B 61.9 1.01 s
Strands Decider 2B 61.3 97.6 ms on an RTX 5090; 4.46 s on a Threadripper CPU
Laya typed-decisions 40.3 20.4 ms

Ollaya serves all three models, so it is a runtime project, not a neutral lab. Jev and jeff are not on its board.

What AWS measured, and what is only claimed

The configs, preregistrations and per-run results for Strands Decider 2B are public, and the v19 recipe's data and scripts retrain it in about 11 hours on one RTX 3090. The v1 data cannot yet be rebuilt from the repository. On the 231 public tasks of JevBench, Strands scored v19 at 167 right and v1 at 180, running JevBench's harness itself. The repository says "v19 is not on the board", so its "3rd of 33" in the 2B class is AWS placing its own number among the board's entries.

The 115 ms figure is v19 per JevBench question on an RTX 3090, with a p95 of 299 ms (results). The chart in the launch post is v18, at 106 ms.

Latency against prompt length, v18. The first request, 7.7 s of server warm-up, is left out. Figure from Introducing Strands Decider 2B by Strands Labs, Apache-2.0.

On an M3 Pro GPU, the median is 153 ms for repeated short requests, 234 ms across all tasks and 622 ms cold; on its CPU, a 256-token question takes 3.5 s.

Some figures appear only in press coverage. VentureBeat, CryptoBriefing and The AI Economy reported "under 100 milliseconds" and second place among models of its size. The AI Economy also wrote that AWS found its model "matched or outperformed other decision models, such as Typesafe's Jev, LocalJev, and OpenJev." The launch post claims answers "to meaningful questions in tens of milliseconds" but measured a 115 ms median, and neither the second place nor the Jev comparison is in the post or the repository. VentureBeat traces its wording to an AWS email and wrote: "Neither the email nor those charts establish that Strands Decider beats Jev overall." Jev sits on the JevBench board that Strands scored itself against, but nobody else has run the two side by side.

Readers of the Hacker News thread found two problems:

  • Option order changes the answer. One commenter reordered the ticket example's options and billing fell from 0.843 to 0.470. Brooker called separate option encoding "one of the (many) design variants we haven't had time to experiment with yet."
  • A chart mislabels another team's points. Brooker said the two points labelled "strands-decider-2b v10" and "strands-decider-2b v11" in the launch post's accuracy chart belong to "a model called 'decider-2B', which isn't ours". The image is unchanged as of 22 October.

The model card adds its own limits: "Questions are read less than documents," and "Long, multi-step documents are the weak spot."

Who needs Strands Decider 2B and who can skip it

Strands Decider 2B suits a team already on Strands Agents that wants a cheap check before tool calls on a GPU it controls, and anyone who needs decision weights they can audit and retrain under Apache-2.0. Teams with these needs should look elsewhere for now:

  • Long context: 4,096 tokens against Jev's 64k per request.
  • Speed above all: Laya's encoders answer in tens of milliseconds, with lower scores on Ollaya Bench.
  • No servers to run: Jev is a hosted API, and the comparison of Jev with OpenAI's Decisions API covers the per-decision prices.
  • Varying option order: shuffle the options and average the runs. A commenter found v21 much less sensitive to order than v19.

As of 22 October 2026, no public Stackness stack lists Strands Decider, Laya, jeff or Nimble, and one lists Jev (data sources). The language models developers list in their stacks are still generative ones.

Where to start with Strands Decider 2B

Install the package with pip install strands-decider (0.2.0 on PyPI since 19 October), run the ask example above, then start the server and run examples/strands/tool_call_intervention.py from the repository. Keep the server on 127.0.0.1: it "has no authentication". Before trusting a threshold, score your own questions with the System One benchmark guide.

The move it implements is using a fast small decision model instead of an LLM call for a structured check.

Strands Decider 2B in brief

  • Licence: Apache-2.0 for the code, the adapter and the head. The v19, v21 and Gemma 4 training mixes include rows from datasets whose terms restrict commercial use; the v1 checkpoint drops them. Check data/sources.md before you fine-tune for a product.
  • Hosted version: none. The repository includes a SageMaker deployment guide.
  • llama.cpp or Ollama: no official GGUF, and stock clients cannot run the community GGUF. Ollaya and a WebGPU port run ONNX versions.
  • Needs a GPU: no, but a CPU answer takes seconds, not milliseconds.

New posts by email

About one email a week with what we published. No account needed.

One email to confirm first. Every email has a one-click unsubscribe.

Which of these do you use?

Nobody on Stackness runs Strands Decider yet. Tick what you use and be the first.

Lonny skating the lakeside path, kickflipping onto a bench, grinding it and flipping offStackness gamesPlay Lonny Eagle Amateur Skater 4A pixel art skateboarding game. Signing up opens it straight away.+2 secret games you unlock as you goSign up to play