IBM quietly shipped a reasoning model family that matters more than its release notes suggest. Granite 4.2 comes in three sizes — 3B, 8B, and 30B — all dense decoder-only transformers, all Apache 2.0, and all trained with the same multi-stage reinforcement learning pipeline, not just the usual “SFT + RLHF” gloss. The headline number: the 8B and 30B variants went through agentic RL — GRPO inside real sandboxed environments where they edit code, drive a terminal, and search the web. That’s no longer frontier-lab territory; it’s an open-weights 8B model.

What makes it different from every other “reasoning model”

The three sizes share architecture: GQA with 40 attention heads and 8 KV heads (8 for the 3B), RoPE with θ = 10,000,000, SwiGLU MLPs, RMSNorm (ε = 1e-5), separate input/output embeddings. Training used roughly 15T tokens across five phases, ending with a 512K-token context window. Every model has a thinking / non-thinking switch plus a low-effort mode that spends a short reasoning budget on easy questions. That’s useful in practice — I’d rather toggle thinking off for a classifier call than pay for CoT on every request.

The real differentiator is the post-training ladder. The pipeline runs in stages, each a separate GRPO run warm-starting from the previous checkpoint:

SFT ▸ RLVR ▸ Skill boosters ▸ SWE agent ▸ Terminal ▸ Search ▸ RLHF

The 3B gets foundational RL and RLHF only. The 8B and 30B add the agentic block, trained on real OpenHands-for-SWE, Terminus-2-for-terminal, and web-search-browsing trajectories. RLVR (verifiable-reward RL) used 256 prompts × 16 responses per step for a 4,096-example batch. The SWE 2 stage allowed 128 rollout turns per trajectory — the model actually reads code, edits files, and runs the test suite, rewarded only on whether the hidden tests pass.

Where it lands on the benchmarks

Task 3B 8B 30B
SWE-Bench Verified NA 47.67 57.00
Terminal-Bench 2.1 NA 20.56 29.24
τ³-bench 45.78 58.06 62.00
AIME25 78.33 86.67 89.17
LiveCodeBench v6 69.71 73.24 75.77
MMLU-Pro 67.84 74.04 77.60

For a 3B model, AIME25 at 78.33 is strong — that’s the kind of result that used to require 10× the parameters. The 30B’s SWE-Bench Verified 57.00 and Terminal-Bench 2.1 29.24 are respectable for open weights, though well behind where the frontier closed models sit. The practical read: this is a credible open-weights option for agentic coding, not yet a Claude competitor. But it’s Apache 2.0, and you can run it — and fine-tune it — on hardware you actually own.

Running it today

Getting started is standard Transformers + vLLM. The thinking switch is a chat-template argument:

text = tokenizer.apply_chat_template(messages, tokenize=False,
    add_generation_prompt=True, enable_thinking=True)  # or False, or low_effort=True

The template also strips prior thinking from multi-turn history by default (truncate_history_thinking=True), which is a nice context saver. Tool calling emits OpenAI-format function calls without glue, and the post includes ready-to-paste configs for OpenCode, Pi, and OpenHands pointed at a local vLLM server. Quantized GGUF variants ship in 14 formats from Q8_0 down to Q2_K, plus FP8 / NVFP4 / MXFP4 for vLLM.

The catch

Only the 8B and 30B models get the agentic training, so if you wanted an agentic 3B that runs on a laptop, this isn’t it. Also note the eval table has gaps — no SWE-Bench numbers for the 3B, because it skipped the agentic block. And while the 8B and 30B have 131,072-token training sequence length, the 512K context claim comes from the pre-training phase; real-world long-context behavior at that depth still needs independent verification.

Still, this is the pattern worth watching: open-weights reasoning models are absorbing the “RL in real environments” playbook that’s been exclusive to a handful of labs. For anyone building agent infrastructure on self-hosted models — the same space this blog keeps circling — Granite 4.2 gives you a concrete new option with real SWE and terminal trajectories baked in, under a license that lets you actually deploy it.

Sources