Rhino 3D Scripts
Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom... Skill: Rhino 3D Scripts Owner: jhauga Summary: Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCom... Tags: latest:1.1.1 Version history: v1.1.1 | 2026-05-29T00:25:40.570Z | user - Removed the file: skill-card.md - Updated documentation to add new troubleshooting and gotcha notes, including details about Rhino.Rh
Rank
62
Safety
84
Downloads
1.1k
Updated
Oct 11, 2026
Version
1.1.1
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 11, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 11, 2026
- Adoption signal
- 1.1K downloadsadoption · observed Oct 11, 2026
- Latest release
- 1.1.1release · observed May 29, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17ch25466qc0g2bcymk2dr8zx83pfny:rhino3d-scripts- Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/snapshot"
Documentation
CLAWHUB
143,211 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: rhino3d-scripts
description: 'Authoring and debugging scripts for Rhinoceros 3D (Rhino 8 and later). Use when asked to write RhinoScript (VBScript / .rvb / .vbs), RhinoPython, or RhinoCommon-based scripts; automate Rhino modeling tasks; build command macros; manipulate Rhino geometry, layers, blocks, or document objects; pick objects from the viewport; control redraw and undo; or load and run scripts from the Rhino Script Editor. Covers `rhinoscriptsyntax`, `scriptcontext`, the `Rhino.*` RhinoCommon namespaces (`Rhino.Geometry`, `Rhino.DocObjects`, `Rhino.Input`, `Rhino.UI`, `Rhino.Display`, `Rhino.FileIO`), and the Rhino 8 unified Script Editor.'
---
# Rhino 3D Scripting Skill
Write production-quality scripts for Rhinoceros 3D. Covers the three scripting surfaces (RhinoScript/VBScript, RhinoPython, direct RhinoCommon .NET) and the Rhino 8+ Script Editor.
## When to Use This Skill
- User asks to write, edit, or debug a `.rvb`, `.vbs`, or `.py` Rhino script
- User wants a Rhino **command macro** or wants to automate a sequence of Rhino commands
- User wants to manipulate geometry, layers, blocks, materials, viewports, or annotations from code
- User mentions `rhinoscriptsyntax`, `scriptcontext`, `RhinoCommon`, `Rhino.Geometry`, `RhinoDoc`, or the Script Editor
- User wants to pick objects, prompt for input, or build a small UI inside Rhino
- User asks how to load, run, or distribute a script (startup scripts, aliases, toolbar buttons)
## Choosing a Scripting Surface
Pick the surface based on the task, not preference. Recommend Python by default for new work.
| Surface | When to choose | File ext |
|---|---|---|
| **RhinoPython** (`rhinoscriptsyntax` + RhinoCommon) | Default for new scripts. Best ecosystem, readable, full RhinoCommon access. | `.py` |
| **RhinoScript** (VBScript) | Maintaining legacy `.rvb`/`.vbs` files; integrating with VBA/COM. | `.rvb`, `.vbs` |
| **RhinoCommon (C#/.NET) via Script Editor** | Performance-critical loops, complex geometry, leveraging .NET libraries. | `.cs` |
| **Command macro** | Pure sequence of existing Rhino commands; no logic. | toolbar/alias |
A macro is **not** a script — it is a string of command-line input (e.g. `! _-Line 0,0,0 10,0,0 _Enter`). Use a script the moment you need a variable, loop, or conditional.
## Prerequisites
- Rhino 7 or later (Rhino 8 strongly recommended — unified Script Editor supports Python 3, VB, and C# in one window).
- Script Editor: type `_ScriptEditor` (Rhino 8) or `_EditPythonScript` / `_EditScript` (older).
- Run a saved file from the command line with `_-RunPythonScript` or `_LoadScript` + `_RunScript`.
## Core Patterns
### Python: minimal scaffold
```python
import rhinoscriptsyntax as rs
import scriptcontext as sc
import Rhino
def main():
obj_id = rs.GetObject("Select a curve", filter=rs.filter.curve, preselect=True)
if not obj_id:
return
length = rs.CurveLength(obj_id)
print("Length: {0:.4f}".format(length))
if __name__ == _meta.json
{
"ownerId": "kn71kvdba3t2jfkk6nbgnytg0s81617g",
"slug": "rhino3d-scripts",
"version": "1.1.1",
"publishedAt": 1780014340570
}references/macros-and-loading.md
# Macros, Loading, and Running Scripts
## Command Macros (no script needed)
A macro is a string of command-line input. Anywhere Rhino accepts a command (alias, toolbar button, `_ReadCommandFile`), you can place a macro.
### Syntax rules
| Token | Meaning |
|---|---|
| `!` | **Cancel** any currently running command before this one starts. Always start macros with `!`. |
| `_` | Use the **English** (invariant) command name, so the macro works in any locale. |
| `-` | Run the command in **script mode** — suppress dialogs, accept input from the macro string. |
| `_Enter` | Press Enter at the current prompt. |
| `Pause` | Stop and wait for the user to supply this input interactively. |
| `;` | Comment to end of line. |
| Newline | Same as a space — a separator between tokens, not a command terminator. |
### Example macros
```text
! _-Line 0,0,0 10,0,0
! _-Circle 0,0,0 5 _Enter
! _SelAll _Delete
! _-Properties _Object _Name "MyObject" _EnterEnd _Enter
! _-RunPythonScript "MyScript.py"
```
## Running Saved Scripts
### Python (`.py`)
```text
_-RunPythonScript "C:\Users\example\Scripts\MyScript.py"
```
Or, with the script folder on the search path:
```text
_-RunPythonScript "MyScript.py"
```
`_EditPythonScript` opens the legacy editor; `_ScriptEditor` (Rhino 8) opens the unified editor with Python 3, VB, and C#.
### RhinoScript (`.rvb`, `.vbs`)
Two steps: **load** the file (registers its subs/functions), then **run** a named sub.
```text
_-LoadScript "MyScript.rvb"
_-RunScript MyMainSub
```
A single `.rvb` can hold many subs; `_RunScript` chooses which to invoke.
### Search Paths
`Options → Files → Search paths` — folders listed here are scanned when you reference a script by bare filename. Without this, you must give a full path.
### Startup Scripts
`Options → RhinoScript → Startup` (and `Options → Python → Startup`) — files in these lists run once when Rhino opens. Useful for registering custom commands or aliases.
**Guard against missing document** in startup code:
```python
import scriptcontext as sc
def startup():
if sc.doc is None:
return
startup()
```
## Toolbar Buttons & Aliases
A toolbar button’s **Command** field is just a macro. To make a button that runs your script:
```text
! _-RunPythonScript "MyScript.py"
```
Set the **Tooltip** to a short description; set the icon via the button editor.
To create an alias: `Options → Aliases → New`. The alias name becomes a typed command; its value is the macro.
## Invoking Macros From a Script
```python
import rhinoscriptsyntax as rs
rs.Command("! _-Line 0,0,0 10,0,0", echo=False)
```
`echo=False` suppresses command-history output but does **not** suppress prompts — always use `-` and complete every prompt within the macro string.
## rhinocode CLI (Rhino 8)
`rhinocode` is the Rhino 8 command-line tool for running scripts and commands against a running Rhino instance from an external terminal.
### Basic commands
```text
rhinocode script "C:\path\to\MyScript.preferences/methods-and-functions.md
# Methods and Functions > [!NOTE] > The `rhinoscriptsyntax` (Python) and `RhinoScript` (VBScript) APIs nearly 100% mirrors. > Function names match; only the call syntax differs. Many studios, firms, and individual users have > years of accumulated RhinoScript code they haven't bothered to port. - Function names match; only the call syntax differs - `RhinoScript` (*VBScript*) has 3 method/function and property categories not included in `rhinoscriptsyntax` (*Python*) - See [vbscript-methods.md](vbscript-methods.md) for VBScript exclusive methods and properties > [!IMPORTANT] > `RhinoScript` is exclusive to Windows. ## Application - **Python**: [AddSearchPath](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AddSearchPath) - **VBScript**: [AddSearchPath](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/addsearchpath.htm) - **Python**: [AliasCount](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasCount) - **VBScript**: [AliasCount](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliascount.htm) - **Python**: [AliasMacro](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasMacro) - **VBScript**: [AliasMacro](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliasmacro.htm) - **Python**: [AliasNames](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AliasNames) - **VBScript**: [AliasNames](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/aliasnames.htm) - **Python**: [AppearanceColor](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AppearanceColor) - **VBScript**: [AppearanceColor](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/appearancecolor.htm) - **Python**: [AutosaveFile](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AutosaveFile) - **VBScript**: [AutosaveFile](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/autosavefile.htm) - **Python**: [AutosaveInterval](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-AutosaveInterval) - **VBScript**: [AutosaveInterval](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/autosaveinterval.htm) - **Python**: [BuildDate](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-BuildDate) - **VBScript**: [BuildDate](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/builddate.htm) - **Python**: [ClearCommandHistory](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-ClearCommandHistory) - **VBScript**: [ClearCommandHistory](https://mcneel.github.io/rhinoscript-api-docs/api/rhinoscript/application_methods/clearcommandhistory.htm) - **Python**: [Command](https://developer.rhino3d.com/api/RhinoScriptSyntax/#application-Command) - **VBScript**: [Command](https://mcneel.githu
references/rhinocommon-map.md
# RhinoCommon Namespace Map Use this to decide which `Rhino.*` namespace to import for a task. All of these are accessible from Python with `import Rhino`. ## Document & Object Model | Need | Namespace | Key types | |---|---|---| | The active document, units, tolerances, undo | `Rhino` | `RhinoDoc`, `RhinoApp` | | Reading/writing objects in the doc | `Rhino.DocObjects` | `RhinoObject`, `ObjectAttributes`, `Layer`, `ObjectType` | | Tables (layers, materials, blocks, dim styles) | `Rhino.DocObjects.Tables` | `LayerTable`, `InstanceDefinitionTable`, `MaterialTable` | | Custom per-object user data | `Rhino.DocObjects.Custom` | `UserData` | | File I/O (.3dm, import/export) | `Rhino.FileIO` | `File3dm`, `File3dmObject` | ## Geometry | Need | Namespace | Key types | |---|---|---| | Points, vectors, transforms | `Rhino.Geometry` | `Point3d`, `Vector3d`, `Transform`, `Plane`, `BoundingBox` | | Curves | `Rhino.Geometry` | `Curve`, `NurbsCurve`, `PolylineCurve`, `LineCurve`, `ArcCurve` | | Surfaces & breps | `Rhino.Geometry` | `Surface`, `NurbsSurface`, `Brep`, `BrepFace`, `Extrusion` | | Meshes | `Rhino.Geometry` | `Mesh`, `MeshFace`, `MeshNgon` | | SubD | `Rhino.Geometry` | `SubD`, `SubDFace`, `SubDEdge` | | Geometry collections (vertices, edges, faces lists) | `Rhino.Geometry.Collections` | `MeshVertexList`, `BrepEdgeList` | | Intersections | `Rhino.Geometry.Intersect` | `Intersection`, `CurveIntersections` | | Mesh refinement | `Rhino.Geometry.MeshRefinements` | | | Space morphs (bend, twist, etc.) | `Rhino.Geometry.Morphs` | `BendSpaceMorph`, `TwistSpaceMorph` | ## User Interaction | Need | Namespace | Key types | |---|---|---| | Prompts, getters, command results | `Rhino.Input` / `Rhino.Input.Custom` | `RhinoGet`, `GetObject`, `GetPoint`, `GetOption` | | Commands (when building a plugin) | `Rhino.Commands` | `Command`, `Result` | | Forms, dialogs, panels | `Rhino.UI` | `Dialog`, `Panels`, `RhinoEtoExtensions` | | UI controls / data sources | `Rhino.UI.Controls` | | | Gumball | `Rhino.UI.Gumball` | | ## Display & Rendering | Need | Namespace | Key types | |---|---|---| | Viewports, display conduits, draw overlays | `Rhino.Display` | `DisplayPipeline`, `DisplayConduit`, `RhinoViewport` | | Render content (materials, environments) | `Rhino.Render` | `RenderContent`, `RenderMaterial`, `RenderTexture` | | Render mesh customization | `Rhino.Render.CustomRenderMeshes` | | | Post effects | `Rhino.Render.PostEffects` | | ## Runtime & Plugins | Need | Namespace | Key types | |---|---|---| | Plugin lifecycle, settings | `Rhino.PlugIns` | `PlugIn`, `FileImportPlugIn`, `FileExportPlugIn` | | In-process Rhino (run Rhino from external .NET) | `Rhino.Runtime.InProcess` | `RhinoCore` | | Native interop (pointers, marshalling) | `Rhino.Runtime.InteropWrappers` | | | User notifications (toasts) | `Rhino.Runtime.Notifications` | | ## Common Patterns ```python import Rhino import scriptcontext as sc import System.Drawing doc = sc.doc
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/jhauga/skills/rhino3d-scripts",
"sourceUrl": "https://clawhub.ai/jhauga/skills/rhino3d-scripts",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T13:51:48.859Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-11T13:51:48.859Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.1K downloads",
"href": "https://clawhub.ai/jhauga/rhino3d-scripts",
"sourceUrl": "https://clawhub.ai/jhauga/rhino3d-scripts",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T13:51:48.859Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.1.1",
"href": "https://clawhub.ai/jhauga/rhino3d-scripts",
"sourceUrl": "https://clawhub.ai/jhauga/rhino3d-scripts",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-29T00:25:40.570Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-jhauga-rhino3d-scripts/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.1.1",
"description": "- Removed the file: skill-card.md - Updated documentation to add new troubleshooting and gotcha notes, including details about `Rhino.RhinoApp.IsHeadless`, `RhinoMath` location, object ID return values for `AddBrep()`, `rhinoscriptsyntax` type stubs, and script naming cautions. - No new features or behavior changes; maintenance and clarification update.",
"href": "https://clawhub.ai/jhauga/rhino3d-scripts",
"sourceUrl": "https://clawhub.ai/jhauga/rhino3d-scripts",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-05-29T00:25:40.570Z",
"isPublic": true
}
]
}Record generated Oct 11, 2026.
