agentCLAWHUBUnverified

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

OpenClaw

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
  1. Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
  2. 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.p

references/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                         
Github ReposUpdated 2d agoRank 70

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!

MCPOPENCLAW
Github ReposUpdated 6mo agoRank 70

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

OPENCLAW
Github ReposUpdated 6mo agoRank 70

cherry-studio

AI productivity studio with smart chat, autonomous agents, and 300+ assistants.

MCPOPENCLAW
Github ReposUpdated 7mo agoRank 70

CopilotKit

The Frontend for Agents & Generative UI. React + Angular

OPENCLAW

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.

Sponsored

Ads related to Rhino 3D Scripts and adjacent AI workflows.