41 1 month ago

The agent that finishes, faster. Onyx 2.1 says in one sentence what took five, starts answering in half the time, and still tells you what is still open. Reads code and images. 12B and 31B, 32K context.

vision tools thinking 12b 31b
ollama run Natuworkguy/flash-onyx-2.1:12b

Applications

Claude Code
Claude Code ollama launch claude --model Natuworkguy/flash-onyx-2.1:12b
OpenCode
OpenCode ollama launch opencode --model Natuworkguy/flash-onyx-2.1:12b
Hermes Agent
Hermes Agent ollama launch hermes --model Natuworkguy/flash-onyx-2.1:12b
OpenClaw
OpenClaw ollama launch openclaw --model Natuworkguy/flash-onyx-2.1:12b

Models

View all →

Readme

FLASH ONYX 2.1

The flagship model of Flash. A local-first engineering agent that closes problems in the fewest moves, running entirely on your hardware.

base sizes context input local


Onyx 2.1 in one line

Onyx 2 finishes the job. Onyx 2.1 finishes it in a fraction of the words and starts answering sooner. Every standard from Onyx 2 is still here, unchanged: the ledger, the refusal to invent a flag it has not seen, the git rules, the pages that look designed. What changed is that it stopped padding, it stopped spending half your context window reading its own instructions before it says anything to you, and it finally knows when a job wants a one-liner instead of a program.


What it is better at

It says it once

The change you feel first. One sentence where Onyx 2 wrote five. The answer goes in the opening words and the reasoning follows only if it still earns its place. No restating your question back at you, no preview of what it is about to say, no recap of what you just watched it do.

Across seven side by side tests, 2.1’s answers came to 70% of Onyx 2’s length, and it was shorter on every single one. Asked for a Slack message about a slipped deploy, Onyx 2 wrote 146 characters and 2.1 wrote 86, and both of them sound like a person.

The rule that keeps this honest is that compression is words, never substance. Dropping a step, a caveat that changes the answer, a trade worth offering, or the manners a message needs is not brevity. It is a worse answer that happens to be short.

It starts answering sooner

The system prompt went from roughly 27,000 tokens to 14,200. On a 12B running on consumer hardware, that cut the cold prefill from about 290 seconds to about 152. Your machine will differ, but the ratio will not: it is half the reading before the first token.

That work is cached per model load rather than repeated per message, so the cost lands once when the model warms up and not on every turn.

It leaves you room to work

Onyx 2’s instructions ate about 27K of a 32K window before you typed anything, and a long reply could take most of what was left. 2.1 uses roughly 14K, so a long conversation has somewhere to go instead of quietly falling off the back.

Throwaway scripts

New in 2.1, and the gap it was missing. Some code is a one-off: rename 200 files, pull a number out of a log, reshape a CSV once. It runs, you read the output, you delete it.

Onyx 2 brought the full apparatus to those, and so did the first draft of 2.1. Now, when you say “quick”, “one-off”, or “don’t overthink it”, you get the one-liner:

mv ./dumps/report_2024-03-*.csv ./march/

No argparse, no logging, no main(), no docstring on a script with a lifespan of one run. Paths hardcoded at the top where you can see them, and it says so. Ugly is fine.

What does not relax: it still will not invent a flag, it prints the list before it moves anything in bulk, and it hands you the command rather than claiming to have run it. A one-off that moved the wrong 200 files is not a small mistake because the script was small.

CSS 3D that admits what CSS cannot do

Ask either model why a ring rotating around a sphere never passes behind it. Onyx 2 reaches for transform-style: preserve-3d and a translateZ nudge, which does not work, because CSS has no depth buffer and cannot hide part of one element behind another at all.

2.1 says that outright, then gives the fix that exists: split the ring into a front arc and a back arc stacked either side of the solid, or move to WebGL where the depth buffer does the work. It also knows z-index is the standard wrong answer here.

Everything else from Onyx 2’s motion and 3D work is intact: compositor-only animation, frame-rate independence, springs for anything interruptible, draw call budgets, never blocking first paint, GPU memory freed on teardown.

It stays a person while being brief

The risk in a model this terse is that it turns into a status dump. A message to people keeps its manners however short it is, so a note to your team still opens like someone talking rather than like a log line.

Incidents get priority, not volume

Told a secret was just pushed to main, 2.1 leads with rotating the key, because that is the only step that actually invalidates it, and treats history scrubbing as the follow-up it is. Where it does not know the exact invocation for your situation, it says so and offers to work it out rather than handing you a plausible command aimed at the wrong file.

It holds the em-dash rule

A small thing that says something larger about instruction-following under compression. Across the same seven tests, 2.1 emitted no em-dashes anywhere. Onyx 2 emitted one, in prose, in violation of its own prompt.


How this was measured

Seven prompts, one per area: explaining a Python closure bug, a rent negotiation, a Slack message, a leaked-key git incident, a small CSV function, a CSS 3D occlusion problem, and a throwaway file-moving script.

Both models, same prompts, same sampling settings, fixed seed, reasoning disabled, 12b on the same machine. 2.1 won six, tied one, and lost none.

Read that for what it is. It is seven short prompts and a single run each, graded by hand against the standards in the prompt itself, not a benchmark suite and not a claim about your workload. The one tie was the negotiation, where 2.1 gets the recommendation, the words to say, and the trade into half the length, while Onyx 2 spends its extra room listing the landlord’s turnover costs. Both answers are usable. Only the 12b was tested.


A note on reasoning **

Gemma 4 has a separate thinking channel, and it is worth knowing how it behaves here. With thinking enabled and a bounded reply budget, the model can spend the entire budget reasoning and return an empty response. Turning it off produced a complete, correct answer in 24 seconds where the same question with thinking on produced nothing in 43.

If your client exposes it, pass think: false. This is a request-level flag, not something the Modelfile sets, so it belongs in whatever drives the model. Raising num_predict does not fix it. At about 9 tokens per second on a 12B, the existing 8,192 budget is already a 14 minute worst case, and a larger one only buys longer silences.


* About how it reads

Onyx 2’s output was run through an AI-text detector and scored very low. 2.1 inherits that section of the prompt intact and has not been re-tested against any detector.

Results move with the prompt, the detector, the version of each, and the subject being written about, and detectors are unreliable in both directions. Nothing here guarantees any particular score on any particular output, and no result is promised or warranted.

Prose that reads as human is a claim about writing quality, not a tool for passing AI-generated work off as your own. Where disclosure of AI assistance is required, by a school, an employer, a client, a publisher, or the law, that obligation is yours and nothing here changes it.


** What this needs from the program running it

Onyx 2.1 is a model, not an app. It has no hands of its own, so running a command, writing a file, or looking at a page happens only where the program driving it provides those tools.

Flash provides them: shell, read and write, grep and glob, screenshot, web_search, memory and more. Point any other Ollama client at Onyx 2.1 and it reasons, writes, and answers exactly the same. It just cannot reach your machine unless that client provides tools.

Images work the same way. The model reads any image it is handed, but the client is what hands it one, so attaching a screenshot needs a client that sends images.


The numbers

Onyx 2 Onyx 2.1
Base gemma4 gemma4
Sizes 12b, 31b 12b, 31b
Context 32K 32K
Input text + images text + images
Longest reply 8,192 tokens 8,192 tokens
System prompt 903 lines 516 lines
System prompt cost ~27,000 tokens ~14,200 tokens
Context left for you ~5K ~18K
Cold prefill, 12b * ~290s ~152s
Answer length, 7 tests 6,896 chars 4,818 chars

* One machine, one run. Yours will differ.


Pick a size

Tag For
flash-onyx-2.1:12b Consumer hardware. The everyday driver.
flash-onyx-2.1:31b The flagship. Wants a bigger GPU and pays you back for it.

Build it

Clone FLASH’s GitHub repository and run the build script

python3 models/build.py models/flash-onyx-2.1.Modelfile             # every size
python3 models/build.py models/flash-onyx-2.1.Modelfile --size 31b  # just one

Then run:

/model flash-onyx-2.1:31b

Coming from Onyx 2

  • Nothing about the interface changed. Same base, same sizes, same 32K context, same 8,192 token ceiling, same tags shape. Swap flash-onyx-2:12b for flash-onyx-2.1:12b and carry on.
  • Expect shorter replies. If you were reading Onyx 2’s answers for the supporting paragraphs, 2.1 cuts most of them. The verdict, the command, and the file and line arrive first instead.
  • Ask for the long version when you want it. It is brief by default, not incapable of depth.
  • Turn reasoning off if your client lets you. See the note above.
  • Onyx 2 is still here and still builds: python3 models/build.py models/flash-onyx-2.Modelfile