DEV Community

Nathan C.
Nathan C.

Posted on

Flash Onyx 2.2 Is Out, and It Finally Finishes the Job

Flash Onyx 2.2 is live on Ollama. It's the model behind FLASH CLI, my local terminal agent, and it took longer than I planned because 2.1 kept being almost right.

ollama pull Natuworkguy/flash-onyx-2.2:12b
Enter fullscreen mode Exit fullscreen mode

Two sizes, same as before. 12b runs on normal consumer hardware. 31b is the flagship and wants a real GPU.

ollama pull Natuworkguy/flash-onyx-2.2:12b
ollama pull Natuworkguy/flash-onyx-2.2:31b
Enter fullscreen mode Exit fullscreen mode

Then point Flash at it in ~/.flash.env:

MODEL=flash-onyx-2.2:12b
Enter fullscreen mode Exit fullscreen mode

What actually changed

2.1 was fast and short. That was the whole pitch, and it was also the problem. A model that answers in one line will happily answer the wrong question in one line. Most of 2.2 is about making the short answer the right one.

It reads the ask

The biggest fix. 2.1 would give you a good answer to a nearby question. 2.2 counts the verbs in your request and satisfies each one, and it answers at the altitude you asked at. "Is this safe to deploy" gets a yes or a no. "Walk me through the auth flow" gets the walk, not a verdict nobody wanted.

It also stopped confusing questions with instructions. "Could we split this file?" gets an answer and an offer. It doesn't go split your file.

It picks a stack instead of handing you a menu

If you didn't name a stack, choosing is the job. 2.2 picks one, builds it, and tells you what it picked in a clause. A quick web game is one .html file with canvas and plain JS, no build step. Real state and routing earns React on Vite. What your repo already uses beats what it would have picked.

Files get real names too. minecraft_clone.html, clean_payroll.py. untitled, output, script, and v2 are banned outright.

Manim

This is the one I put the most work into, and it's the one I use most. Manim's API is wide and half-remembered, which is exactly the shape a hallucination takes. A method that sounds like it exists on Square usually doesn't.

2.2 builds with VGroup and .arrange() instead of hand-guessed .move_to() coordinates, computes geometry from real points when it isn't sure a convenience method is real, and gives every beat a deliberate run_time and a rate_func picked on purpose. It clears the frame between ideas, because Manim never removes what you stop referencing.

It also deletes its own fumbling. No variable assigned three times, no "wait, that's wrong" comment left in the scene you're about to render.

Games

Feel first. Playable before content: something you steer, something that ends the run, a restart.

Fixed timestep whatever the display does, with a clamped accumulator so a backgrounded tab doesn't spiral. One update(dt), one draw(), one state machine. Input polled, not handled. Coyote time at 100ms, jump buffering at 150ms, a hitbox tighter than the player and looser than the pickup.

And juice, which is most of what people mean when they say a game feels good. Hit pause, a short shake, particles, a sound on every action.

A higher finishing bar

New section, and it's the one that changed the day-to-day most. The standard is work someone who does this for a living would hand over without apologizing for it. Running is the floor, not the finish.

So: a --help that says what the tool does. An error that names the fix. A page that survives 320px. Empty input, one item, ten thousand, a name with an apostrophe, no network. Nothing half-wired, no flag parsed and ignored, no config key read nowhere. Real sample data instead of placeholder text.

It goes beyond code now

2.1 was a coding model that got vague when you asked it anything else. 2.2 has real guidance for the rest:

  • Stock trends. A trend is structure, higher highs and higher lows, not a slope on two points. Never calls a top or a bottom, never predicts a price or a date. Gives you the setup, the level that invalidates it, and the actual base rate instead of overselling pattern recognition.
  • Contracts and documents. Reads the whole thing before opining on one clause, reviews from a side, and ranks findings from deal-killer to noise. Names what the document leaves out, because the missing termination right is what the dispute is about later.
  • Arguments. States the other side's case at its strongest before answering it, concedes what's true, and wins on the one point that decides it. Ten scattered rebuttals read as noise.

One good closing line

2.2 ends on the one thing you'll want next, and only when it can name it exactly. "Built pdfsplit/ and it imports clean. Want a pyproject.toml on it?" is an offer. "Let me know if you need anything else" is noise, and it's banned. Outward-facing moves like publishing, pushing, or deleting get offered and never taken.

Sampling changes

temperature   0.7  ->  0.6
min_p         0.0  ->  0.05
num_ctx     32768  ->  65536
Enter fullscreen mode Exit fullscreen mode

Lower temperature and a real min_p floor cut the confidently-wrong API calls, which matters a lot for Manim. Doubling the context is for long sessions where it's reading a repo instead of one file.

Try it

curl -fsSL https://flashproject.dev/install.sh | bash
ollama pull Natuworkguy/flash-onyx-2.2:12b
MODEL="Natuworkguy/flash-onyx-2.2:12b" flash
Enter fullscreen mode Exit fullscreen mode

If you build something with it, or it does something dumb, tell me. 2.3 gets written from whatever breaks.

Top comments (0)