This document aggregates development-facing information.
- Table of contents
| Component | Category | Planned | In Progress | Testing | Released 🎉 |
|---|---|---|---|---|---|
| Get GhJSON (GhGet) Read the current Grasshopper file and convert it to GhJSON format. Filter by runtime messages, component state, preview, type, category, and more. |
Grasshopper | ⚪ | 🟡 | 🟠 | 🟢 |
| Place GhJSON (GhPut) Place components on the canvas from a GhJSON format |
Grasshopper | ⚪ | 🟡 | 🟠 | 🟢 |
| Merge GhJSON (GhMerge) Merge two GhJSON documents into one, with the target document taking priority on conflicts. |
Grasshopper | ⚪ | 🟡 | 🟠 | 🟢 |
| Retrieve Components (GhRetrieveComponents) Retrieve all available Grasshopper components in your environment as JSON with optional category filter. |
Grasshopper | ⚪ | 🟡 | 🟠 | 🟢 |
| Tidy Up (GhTidyUp) Organize selected components into a tidy grid layout based on dependencies. |
Grasshopper | ⚪ | 🟡 | 🟠 | 🟢 |
| AI GroupTitle (AiGroupTitle) Group components and set a meaningful title to the group |
Grasshopper | ⚪ | - | - | - |
| AI Grasshopper Generate (AIGhGenerate) Automatically generate Grasshopper definitions using AI |
Grasshopper | ⚪ | - | - | - |
| Save GhJSON file (SaveGhJSON) Save the current Grasshopper file as a GhJSON format |
Grasshopper | ⚪ | - | - | - |
| Load GhJSON file (LoadGhJSON) Load a GhJSON file and convert it to a Grasshopper document |
Grasshopper | ⚪ | - | - | - |
| AI Chat (AiChat) Interactive AI-powered conversational interface with tool calling |
AI | ⚪ | 🟡 | 🟠 | 🟢 |
| AI File Context (AiFileContext) Set a context for the current document |
AI | ⚪ | 🟡 | 🟠 | 🟢 |
| AI Models (AiModels) Retrieve the list of available models from the selected AI provider |
AI | ⚪ | 🟡 | 🟠 | 🟢 |
| Context Parameters (ContextParameters) Set context parameters for the AI component |
AI | ⚪ | - | - | - |
| AI Text Evaluate (AiTextEvaluate) Return a boolean from a text content using AI-powered checks |
Text | ⚪ | 🟡 | 🟠 | 🟢 |
| AI Text Generate (AiTextGenerate) Generate text content using AI |
Text | ⚪ | 🟡 | 🟠 | 🟢 |
| AI Text List Generate (AiTextListGenerate) Generate lists of text content using AI |
Text | ⚪ | 🟡 | 🟠 | 🟢 |
| AI Image Generate (AiImageGenerate) Generate images using AI |
Img | ⚪ | 🟡 | 🟠 | 🟢 |
| Image Viewer (ImageViewer) Display bitmap images on the canvas and save them to disk |
Img | ⚪ | 🟡 | 🟠 | 🟢 |
| AI Script Review (AiScriptReview) Review script components using AI-based static analysis |
Script | ⚪ | 🟡 | 🟠 | 🟢 |
| AI Script Generate (AiScriptGenerate) Create or edit Grasshopper script components using AI. Supports create mode (from prompts) and edit mode (from selected components). |
Script | ⚪ | 🟡 | 🟠 | 🟢 |
| AI List Evaluate (AiListEvaluate) Return a boolean from a list of elements using AI analysis |
List | ⚪ | 🟡 | 🟠 | 🟢 |
| AI List Filter (AiListFilter) Process items in lists (reorder, shuffle, filter, etc.) based on AI-driven rules |
List | ⚪ | 🟡 | 🟠 | 🟢 |
| Web Page Read (WebPageRead) Retrieve plain text content of a webpage (Wikipedia, Discourse, GitHub, Stack Exchange, etc.) |
Knowledge | ⚪ | 🟡 | 🟠 | 🟢 |
| McNeel Forum Search (McNeelForumSearch) Search McNeel Discourse forum with configurable limit |
Knowledge | ⚪ | 🟡 | 🟠 | 🟢 |
| McNeel Forum Post Get (McNeelForumPostGet) Retrieve a McNeel Discourse forum post by ID |
Knowledge | ⚪ | 🟡 | 🟠 | 🟢 |
| McNeel Forum Post Open (McNeelForumPostOpen) Open a McNeel forum post URL in the default browser |
Knowledge | ⚪ | 🟡 | 🟠 | 🟢 |
| McNeel Forum Deconstruct Post (McNeelForumDeconstructPost) Deconstruct forum post JSON into individual fields |
Knowledge | ⚪ | 🟡 | 🟠 | 🟢 |
| AI McNeel Forum Post Summarize (AIMcNeelForumPostSummarize) Generate AI summary of a McNeel Discourse forum post |
Knowledge | ⚪ | 🟡 | 🟠 | 🟢 |
| AI McNeel Forum Topic Summarize (AIMcNeelForumTopicSummarize) Generate AI summary of a McNeel Discourse forum topic |
Knowledge | ⚪ | 🟡 | 🟠 | 🟢 |
| Deconstruct Metrics (DeconstructMetrics) Break down the usage metrics into individual values |
Misc | ⚪ | 🟡 | 🟠 | 🟢 |
| AI JSON Generate (AiJsonGenerate) Generate an AI response in strict JSON output |
JSON | ⚪ | - | - | - |
| JSON Schema (JsonSchema) Set a JSON schema for the AI component |
JSON | ⚪ | - | - | - |
| JSON Object (JsonObject) Set a JSON object for the definition of the JSON Schema |
JSON | ⚪ | - | - | - |
| JSON Array (JsonArray) Set a JSON array for the definition of the JSON Schema |
JSON | ⚪ | - | - | - |
AI Tools are the interface between AI and Grasshopper, allowing to, for example, read your selected components, get the available Grasshopper components, or write a new script. All these tools are available to the provider to use while chatting in the AI Chat component.
| Tool Name | Category | Description | Planned | In Progress | Testing | Released 🎉 |
|---|---|---|---|---|---|---|
text_evaluate |
DataProcessing | Evaluates text against a true/false question | ⚪ | 🟡 | 🟠 | 🟢 |
text_generate |
DataProcessing | Generates text based on a prompt and optional instructions | ⚪ | 🟡 | 🟠 | 🟢 |
img_generate |
DataProcessing | Generates an image based on a prompt and optional instructions | ⚪ | 🟡 | 🟠 | 🟢 |
list_evaluate |
DataProcessing | Evaluates a list based on natural language question | ⚪ | 🟡 | 🟠 | 🟢 |
list_filter |
DataProcessing | Filters a list based on natural language criteria | ⚪ | 🟡 | 🟠 | 🟢 |
list_generate |
DataProcessing | Generates a list based on a natural language prompt | ⚪ | 🟡 | 🟠 | 🟢 |
json_generate |
DataProcessing | Generate an AI response in strict JSON output | ⚪ | - | - | - |
get_input |
DataProcessing | Send data from Grasshopper to AI Chat | ⚪ | - | - | - |
get_output |
DataProcessing | Receive data from AI Chat to Grasshopper | ⚪ | - | - | - |
script_review |
Script | Review a script for potential issues using AI-powered checks | ⚪ | 🟡 | 🟠 | 🟢 |
script_generate |
Script | Create Grasshopper script components based on instructions (hidden from chat) | ⚪ | 🟡 | 🟠 | 🟢 |
script_generate_and_place_on_canvas |
Script | Generate a new script component and place it on canvas in one call | ⚪ | 🟡 | 🟠 | 🟢 |
script_edit |
Script | Edit Grasshopper script components based on instructions (hidden from chat) | ⚪ | 🟡 | 🟠 | 🟢 |
script_edit_and_replace_on_canvas |
Script | Edit a script component by GUID and replace it on canvas in one call | ⚪ | 🟡 | 🟠 | 🟢 |
instruction_get |
Instructions | Returns operational instructions for SmartHopper by topic (canvas, ghjson, scripting, etc.) | ⚪ | 🟡 | 🟠 | 🟢 |
web_generic_page_read |
Knowledge | Retrieve plain text content of a webpage with robots.txt compliance | ⚪ | 🟡 | 🟠 | 🟢 |
mcneel_forum_search |
Knowledge | Search McNeel Discourse forum with configurable limit | ⚪ | 🟡 | 🟠 | 🟢 |
mcneel_forum_post_get |
Knowledge | Retrieve filtered McNeel Discourse forum post by ID | ⚪ | 🟡 | 🟠 | 🟢 |
mcneel_forum_post_summarize |
Knowledge | Generate AI-powered summary of a McNeel Discourse forum post | ⚪ | 🟡 | 🟠 | 🟢 |
mcneel_forum_topic_get |
Knowledge | Retrieve all posts in a McNeel Discourse forum topic by ID | ⚪ | 🟡 | 🟠 | 🟢 |
mcneel_forum_topic_summarize |
Knowledge | Generate AI-powered summary of a McNeel Discourse forum topic | ⚪ | 🟡 | 🟠 | 🟢 |
gh_list_categories |
Components | List available Grasshopper categories | ⚪ | 🟡 | 🟠 | 🟢 |
gh_list_components |
Components | List Grasshopper components (optionally filtered by category) | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get |
Components | Retrieve Grasshopper components as GhJSON with optional filters (attr, category, type, guid, connectionDepth, metadata, runtimeData) | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_selected |
Components | Retrieve only the selected components from the Grasshopper canvas as GhJSON | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_selected_with_data |
Components | Retrieve selected components as GhJSON with runtime data snapshot | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_by_guid |
Components | Retrieve specific components by GUID as GhJSON | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_by_guid_with_data |
Components | Retrieve specific components by GUID as GhJSON with runtime data | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_errors |
Components | Retrieve only components that have error messages as GhJSON | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_errors_with_data |
Components | Retrieve errored components as GhJSON with runtime data | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_locked |
Components | Retrieve only locked (disabled) components as GhJSON | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_hidden |
Components | Retrieve only components with preview turned off as GhJSON | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_visible |
Components | Retrieve only components with preview turned on as GhJSON | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_start |
Components | Retrieve start nodes (data sources with no incoming connections) as GhJSON | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_start_with_data |
Components | Retrieve start nodes as GhJSON with runtime data | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_end |
Components | Retrieve end nodes (data sinks with no outgoing connections) as GhJSON | ⚪ | 🟡 | 🟠 | 🟢 |
gh_get_end_with_data |
Components | Retrieve end nodes as GhJSON with runtime data | ⚪ | 🟡 | 🟠 | 🟢 |
gh_put |
Components | Place Grasshopper components on the canvas from GhJSON format | ⚪ | 🟡 | 🟠 | 🟢 |
gh_merge |
Components | Merge two GhJSON documents into one (target takes priority on conflicts) | ⚪ | 🟡 | 🟠 | 🟢 |
gh_component_toggle_preview |
Components | Show or hide component geometry preview by GUID | ⚪ | 🟡 | 🟠 | 🟢 |
gh_component_hide_preview_selected |
Components | Hide geometry preview for currently selected components | ⚪ | 🟡 | 🟠 | 🟢 |
gh_component_show_preview_selected |
Components | Show geometry preview for currently selected components | ⚪ | 🟡 | 🟠 | 🟢 |
gh_component_toggle_lock |
Components | Lock (disable) or unlock (enable) components by GUID | ⚪ | 🟡 | 🟠 | 🟢 |
gh_component_lock_selected |
Components | Lock currently selected components | ⚪ | 🟡 | 🟠 | 🟢 |
gh_component_unlock_selected |
Components | Unlock currently selected components | ⚪ | 🟡 | 🟠 | 🟢 |
gh_move |
Components | Move component pivot by GUID with absolute or relative positioning | ⚪ | 🟡 | 🟠 | 🟢 |
gh_tidy_up |
Components | Organize selected components into a tidy grid layout | ⚪ | 🟡 | 🟠 | 🟢 |
gh_generate |
Components | Generate Grasshopper definitions using AI | ⚪ | 🟡 | - | - |
gh_connect |
Components | Connect Grasshopper components by creating wires between outputs and inputs | ⚪ | 🟡 | - | - |
gh_group |
Components | Group components and set a meaningful title | ⚪ | 🟡 | - | - |
gh_parameter_data_mapping_none |
Parameters | Set a parameter's data mapping to None | ⚪ | - | - | - |
gh_parameter_data_mapping_flatten |
Parameters | Set a parameter's data mapping to Flatten | ⚪ | 🟡 | - | - |
gh_parameter_data_mapping_graft |
Parameters | Set a parameter's data mapping to Graft | ⚪ | 🟡 | - | - |
gh_parameter_reverse |
Parameters | Reverse the order of items in a parameter | ⚪ | 🟡 | - | - |
gh_parameter_simplify |
Parameters | Simplify geometry in a parameter (remove redundant control points) | ⚪ | 🟡 | - | - |
rhino_get_geometry |
Rhino | Retrieve geometry from the active Rhino document (by selection, layer, or type) | ⚪ | 🟡 | - | - |
rhino_read_3dm |
Rhino | Analyze a Rhino .3dm file and extract information about objects, layers, and metadata | ⚪ | 🟡 | - | - |
script_parameter_add_input |
NotTested | Add a new input parameter to a script component | ⚪ | 🟡 | - | - |
script_parameter_add_output |
NotTested | Add a new output parameter to a script component | ⚪ | 🟡 | - | - |
script_parameter_remove_input |
NotTested | Remove an input parameter from a script component | ⚪ | 🟡 | - | - |
script_parameter_remove_output |
NotTested | Remove an output parameter from a script component | ⚪ | 🟡 | - | - |
script_parameter_set_type_input |
NotTested | Set the type hint for a script input parameter | ⚪ | 🟡 | - | - |
script_parameter_set_type_output |
NotTested | Set the type hint for a script output parameter | ⚪ | 🟡 | - | - |
script_parameter_set_access |
NotTested | Set how a script input parameter receives data (item/list/tree) | ⚪ | 🟡 | - | - |
script_toggle_std_output |
NotTested | Show or hide the standard output parameter ('out') in a script component | ⚪ | 🟡 | - | - |
script_set_principal_input |
NotTested | Set which input parameter drives the component's iteration | ⚪ | 🟡 | - | - |
script_parameter_set_optional |
NotTested | Set whether a script input parameter is required or optional | ⚪ | 🟡 | - | - |
Notes:
web_generic_page_readsupports dedicated flows for Wikipedia/Wikimedia APIs, Discourse raw markdown (/posts/{id}.json), GitHub/GitLab raw files, and Stack Exchange questions via the public API. Use it for AI-friendly text without extra HTML cleanup.instruction_getis an internal tool that provides operational instructions to the AI agent by topic. It is always available.
Is there something missing? Do you have a suggestion? Please open a discussion in the Ideas section in the Discussions tab.
SmartHopper currently supports the following AI providers and features:
| Provider | Status | API Registration | Streaming | Reasoning exposed by API | Live reasoning streaming in UI | Temperature config | Tool calling | JSON output | Image generation |
|---|---|---|---|---|---|---|---|---|---|
| OpenAI | ✅ Supported | OpenAI Platform | Yes | Yes (o‑series & gpt‑5 structured content) | Yes | Yes (non o‑series & non gpt‑5) | Yes | Yes | Yes (DALL‑E) |
| MistralAI | ✅ Supported | Le Plateforme | Yes | Yes (thinking blocks) | Yes | Yes | Yes | Yes | No |
| DeepSeek | ✅ Supported | DeepSeek Platform | Yes | Yes (reasoning_content) | Yes | Yes | Yes | Yes | No |
| Anthropic | ✅ Supported | Claude Console | Yes | No | No | Yes | Yes | Yes | No |
| OpenRouter | ✅ Supported | OpenRouter | No | No (varies by routed model) | No | Varies | Varies | Varies | Varies |
Notes:
- “Temperature config” indicates whether the provider/model family supports a temperature parameter in SmartHopper. For OpenAI o‑series and gpt‑5, temperature is omitted by design; other OpenAI models support it.
- “Live reasoning streaming in UI” depends on the provider exposing a distinct reasoning/thinking channel and SmartHopper adapter support.
- OpenRouter capabilities vary by the routed underlying model; current SmartHopper adapter does not enable streaming/reasoning there.
Do you want more providers? Please open a discussion in the Ideas section in the Discussions tab.
The following table summarizes the models explicitly registered as defaults in each provider’s model registry. Source files:
src/SmartHopper.Providers.OpenAI/OpenAIProviderModels.cssrc/SmartHopper.Providers.MistralAI/MistralAIProviderModels.cssrc/SmartHopper.Providers.DeepSeek/DeepSeekProviderModels.cssrc/SmartHopper.Providers.Anthropic/AnthropicProviderModels.cssrc/SmartHopper.Providers.OpenRouter/OpenRouterProviderModels.cs
Notes:
- “Default For” lists the feature areas the model is set as default for (e.g.,
Text2Text,ToolChat). - “Capabilities” lists the core capability flags registered for the model.
- “Verified” reflects the
Verifiedflag in the registry; “Deprecated” reflects theDeprecatedflag (none of the current defaults are flagged deprecated).
| Provider | Model | Verified | Streaming | Deprecated | Default For | Capabilities |
|---|---|---|---|---|---|---|
| Anthropic | claude-haiku-4-5 |
⭐ | ✅ | - | Text2Text, ReasoningChat, ToolReasoningChat | TextInput, ImageInput, TextOutput, FunctionCalling, Reasoning |
| Anthropic | claude-sonnet-4-5 |
⭐ | ✅ | - | Text2Text, Text2Json, ReasoningChat, ToolReasoningChat | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling, Reasoning |
| Anthropic | claude-opus-4-5 |
- | ✅ | - | - | TextInput, TextOutput, JsonOutput, FunctionCalling, ImageInput, Reasoning |
| DeepSeek | deepseek-chat |
- | ✅ | - | Text2Text, ToolChat | TextInput, TextOutput, JsonOutput, FunctionCalling |
| DeepSeek | deepseek-reasoner |
- | ✅ | - | ToolReasoningChat | TextInput, TextOutput, JsonOutput, FunctionCalling, Reasoning |
| MistralAI | mistral-small |
⭐ | ✅ | - | Text2Text, ToolChat, Text2Json | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling |
| MistralAI | mistral-medium |
⭐ | ✅ | - | - | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling |
| MistralAI | mistral-large-latest |
- | ✅ | - | - | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling |
| MistralAI | magistral-small-latest |
- | ✅ | - | ToolReasoningChat | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling, Reasoning |
| MistralAI | magistral-medium-latest |
- | ✅ | - | - | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling, Reasoning |
| OpenAI | gpt-5-nano |
- | ✅ | - | Text2Text | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling, Reasoning |
| OpenAI | gpt-5-mini |
⭐ | ✅ | - | Text2Text, ToolChat, Text2Json, ToolReasoningChat | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling, Reasoning |
| OpenAI | gpt-5.1 |
- | ✅ | - | - | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling, Reasoning |
| OpenAI | dall-e-3 |
⭐ | - | - | Text2Image | TextInput, ImageOutput |
| OpenAI | gpt-image-1-mini |
- | - | - | Text2Image, Image2Image | TextInput, ImageInput, ImageOutput |
| OpenRouter | openai/gpt-5-mini |
- | ✅ | - | Text2Text | TextInput, ImageInput, TextOutput, JsonOutput, FunctionCalling, Reasoning |
Some models are still supported but not recommended for script‑oriented tools due to quality and stability trade‑offs. These models are marked with DiscouragedForTools in the provider registries and surface in the UI as a "Not Recommended" badge when used with those tools.
- MistralAI
mistral-small-latest/mistral-small→ discouraged for:script_generate,script_edit
- Anthropic
claude-haiku-4-5/claude-haiku-4-5-20251001/claude-3-5-haiku-latest/claude-3-5-haiku-20241022/claude-3-haiku-20240307→ discouraged for:script_generate,script_edit
Data type serialization is handled by the ghjson-dotnet library. See its documentation for the full list of supported data types, serialization formats, and extensibility patterns.
—
Is there something missing? Do you have a suggestion? Please open a discussion in the Ideas section in the Discussions tab.