Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add bcshih/rhino-dev-skills --skill rhino-eto-uigit clone --depth 1 https://github.com/bcshih/rhino-dev-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/bcshih/rhino-dev-skills/rhino-eto-ui)<a href="https://agentmods.dev/skills/bcshih/rhino-dev-skills/rhino-eto-ui"><img src="https://agentmods.dev/badge/skills/bcshih/rhino-dev-skills/rhino-eto-ui/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/bcshih/rhino-dev-skills/rhino-eto-ui"><img src="https://agentmods.dev/badge/skills/bcshih/rhino-dev-skills/rhino-eto-ui.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00121 | $0.03915 |
| Opus 5.5 | $0.00048 | $0.01566 |
| Sonnet 5.5 | $0.00024 | $0.00783 |
| Haiku 4.5 | $0.00012 | $0.00392 |
Grade A, and why
rhino-eto-ui scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 514 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Eto.Forms — Rhino Cross-Platform UI
Eto.Forms renders to WPF/WinForms on Windows, Cocoa on macOS — one codebase for both.
Namespaces
using Eto.Forms;
using Eto.Drawing;
using Rhino.UI; // for UseRhinoStyle and Rhino-specific extensions
Modal Dialog (Blocking)
public class MyDialog : Dialog<DialogResult>
{
private TextBox _nameBox;
private NumericStepper _valueStepper;
public string InputName => _nameBox.Text;
public double InputValue => _valueStepper.Value;
public MyDialog()
{
Title = "My Dialog";
Padding = new Padding(10);
Resizable = true;
MinimumSize = new Size(300, 200);
_nameBox = new TextBox { PlaceholderText = "Enter name..." };
_valueStepper = new NumericStepper { Value = 1.0, MinValue = 0, MaxValue = 100, Increment = 0.5 };
var okButton = new Button { Text = "OK" };
okButton.Click += (s, e) => Close(DialogResult.Ok);
var cancelButton = new Button { Text = "Cancel" };
cancelButton.Click += (s, e) => Close(DialogResult.Cancel);
var layout = new DynamicLayout { Padding = new Padding(5), Spacing = new Size(5, 5) };
layout.AddRow(new Label { Text = "Name:" }, _nameBox);
layout.AddRow(new Label { Text = "Value:" }, _valueStepper);
layout.AddSeparateRow(null, okButton, cancelButton); // null = expander (pushes right)
Content = layout;
this.UseRhinoStyle();
DefaultButton = okButton;
AbortButton = cancelButton;
}
}
// Usage in a Command:
var dlg = new MyDialog();
if (dlg.ShowModal(RhinoEtoApp.MainWindow) == DialogResult.Ok)
{
string name = dlg.InputName;
double value = dlg.InputValue;
}
Non-Modal Form (Non-Blocking)
public class MyToolWindow : Form
{
public MyToolWindow()
{
Title = "My Tool";
Size = new Size(250, 400);
Location = new Point(100, 100);
// ... build content ...
this.UseRhinoStyle();
// Prevent close from destroying — hide instead
Closing += (s, e) =>
{
e.Cancel = true;
Visible = false;
};
}
}
// Show/hide (keep alive)
private static MyToolWindow _window;
public static void ShowWindow()
{
if (_window == null) _window = new MyToolWindow();
_window.Show();
_window.BringToFront();
}
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 514 lines · 121 tokens per session scan A a44b0a97f4f3
rhino-eto-ui is a skill published in the GitHub repository bcshih/rhino-dev-skills (1 stars, last pushed 4mo ago), licensed MIT. It adds 121 tokens to every session and 3,915 once invoked, about $0.0005 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
lightningcad
Use when doing architectural facade panel layout and detailing in AutoCAD, ZWCAD or GstarCAD — panel numbering, shop drawing generation, material optimization. LightningCAD: building envelope detailing plugin for AutoCAD/ZWCAD/GstarCAD.
image-to-mesh-cad-workflow
End-to-end workflow for converting a 2D concept image into a parametric 3D CAD model when manual outline tracing is unreliable. Bridges the lossy "image → text-description → manual-spline-points" gap by using AI image-to-3D-mesh services (Tripo3D, Rodin, Meshy) as an intermediate step, then auditing the imported mesh…
fusion-mcp-bridge
Use when driving Fusion 360 from Claude Code through the local MCP-Bridge (HTTP server on 127.0.0.1:7654 with bearer-token auth, single-threaded Custom-Event handler). Covers the API quirks that consistently bite without a documented protocol: component activation before geometry, single-revolve over…
cad-construction
Use after the design concept is settled (via design-first-iteration or equivalent) and the user is ready to translate it into parametric CAD geometry — component decomposition, parameter hierarchy, construction sequencing. Primary platform Fusion 360; the workflow also applies to SolidWorks, Onshape, FreeCAD…
mechanical-design-principles
Guides mechanical design decisions toward elegant, manufacturable, serviceable solutions with a strong bias toward tool-less assembly, monolithic parts, and form-follows-function. Provides the design rules (the WHAT and WHY — overhang, wall thickness, snap-fit sizing, tolerances, material matching). Load when the user…
dxf
Generates, regenerates and validates 2D DXF drawings from Python build123d models, exported by cadgen. Use for DXF files, .py drawing scripts, 2D profiles, outlines, templates, gaskets, panels, flat patterns, laser/plasma/waterjet cut layouts, and 2D drawing exports of CAD geometry. Opens and visually reviews existing…