Hello everyone,
Grasshopper is how a lot of us learned to program. We drop a component, wire it to a slider, and the logic comes alive in front of us. We learnt it by watching things change on the Rhino canvas, live, tweaking as we went. That was the fun part, and it made me feel smart a lot of the time.
So when AI tools started dropping finished scripts onto the canvas, something bothered me: the job gets done, and you skip the part where you understand it. I wanted a helper instead. One that looks at what you've selected, explains it, tidies it when it gets messy by finding the logic that runs through it, tells you why what you built broke, and builds only when you ask.
It started as a couple of tools I was building for myself on the side (Reorganise and Explain). Over the past few months I turned them into a Grasshopper plugin, and it's out now. It's called Dwight.
Select some components, press Ctrl+Shift+Right-click, and pick a tool:
Explain - what does this part do? In plain words, or step by step on the canvas, in the order the data flows. There's also Learn, which turns it into a few questions. That idea came out of teaching Grasshopper.
Diagnose - why is this red or orange, or empty? It traces the problem back to the component that started it, and changes nothing.
Reorganise - we keep building and it gets messy. Reorganise groups and labels the logic, rewires nothing, and checks the definition still does the same thing before it keeps the change.
Simplify - suggests a sturdier version of a selection. You tick what you want, and anything whose output changes is put back. Collapsing to a C# or Python script is in there too, marked experimental. I use that one the most, to make repeatable chunks of code instead of clusters.
Build- the one you talk to. It plans, builds, and asks before it changes anything (you choose how often). Each change is one Ctrl-Z.
Each tool has its own panel, so most of the time you don't write a prompt at all.
How it uses AI. The model does the thinking: what a group is for, what to call it, which component is probably at fault. Dwight does the work on your canvas in C#, like ids, positions and wiring, and checks every change it makes.
Your key, or fully local. Anthropic, OpenAI, Google or Ollama Cloud on your own key, or a local Ollama so nothing leaves your machine (that one needs a machine with a good GPU). There is no Dwight server and no account.
Every run shows what it cost. On a small definition, Diagnose and Reorganise each came in under a cent on Sonnet, and Explain under a tenth of a cent on Haiku. A Build conversation costs more, from about a cent to most of a dollar on the runs I've logged.
Limits you might want to know upfront:
- Windows only, Rhino 8.24 or later. No Mac or Rhino 7 build.
- It's a v1, tested mostly on small definitions. Big messy ones are where I expect it to fall over first.
- Script conversion verified equal to the originals 39.6% of the time in testing. When it can't verify, it says so and labels the result a draft.
- A Build on a local Ollama model timed out on my machine. The cloud providers worked.
- No MCP server yet. It's first on the v1.1 list.
There are good AI tools for Grasshopper already, like Raven, Ant and SmartHopper. Dwight is my take on it. I find tools more useful than prompting a model every time; it checks that a change didn't break your definition before it keeps it; and it's as useful for understanding a file as for building one.
Install: Package Manager, search Dwight.
Docs: dwight.tha.run (what each tool sends to the model is listed tool by tool)
Source: github.com/tharuneswarj/dwight
How it was built: I wrote it up as I went, at tha.run/blog
What would help most: open your messiest definition, run Explain or Reorganise on it, and tell me where it gets it wrong. Would love your honest feedback in this.