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 | $0.00060 | $0.01958 |
| Sonnet 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 11d 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.
- 11d 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 2mo ago), licensed MIT. It adds 121 tokens to every session and 3,915 once invoked, about $0.0006 per session on Opus 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 or ZWCAD — panel numbering, shop drawing generation, material optimization. LightningCAD: building envelope detailing plugin for AutoCAD/ZWCAD.
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
Generate, regenerate, and validate 2D DXF drawings from Python build123d sources. Use for DXF files, .py drawing scripts, @dxf models, 2D profiles, outlines, templates, gaskets, panels, flat patterns, laser/plasma/waterjet cut layouts, and 2D drawing exports of CAD geometry.