Spotpatch
huanglvjing/spotpatch
为 React 项目建立从浏览器页面元素到精确 JSX/TSX 源码、结构化上下文与可审阅修改的 SpotPatch 工作流。用户提到 SpotPatch、截图沟通前端修改、页面元素定位源码、Vite 或 Next.js 接入、组件数据链路、结构化 Prompt、AI 补丁审阅、安装检查或故障排查时使用此技能。
Build a Mendix pluggable widget from scratch with React and TypeScript and package it as an .mpk.
$ npx skills add mendixlabs/mxcli --skill create-custom-widget -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mendixlabs/mxcli create-custom-widget --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/mendix/create-custom-widget .claude/skills/create-custom-widget && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "create-custom-widget" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/create-custom-widget into .claude/skills/create-custom-widget/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-custom-widget", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/create-custom-widgetType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mendixlabs/mxcli --skill create-custom-widget -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mendixlabs/mxcli create-custom-widget --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/mendix/create-custom-widget .agents/skills/create-custom-widget && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "create-custom-widget" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/create-custom-widget into .agents/skills/create-custom-widget/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-custom-widget", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mendixlabs/mxcli --skill create-custom-widget -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mendixlabs/mxcli create-custom-widget --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/mendix/create-custom-widget .cursor/skills/create-custom-widget && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "create-custom-widget" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/create-custom-widget into .cursor/skills/create-custom-widget/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-custom-widget", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mendixlabs/mxcli.git --path .claude/skills/mendix/create-custom-widget--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mendixlabs/mxcli --skill create-custom-widget -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mendixlabs/mxcli create-custom-widget --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/mendix/create-custom-widget .gemini/skills/create-custom-widget && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "create-custom-widget" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/create-custom-widget into .gemini/skills/create-custom-widget/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-custom-widget", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mendixlabs/mxcli create-custom-widgetInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mendixlabs/mxcli --skill create-custom-widget -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/mendix/create-custom-widget .github/skills/create-custom-widget && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "create-custom-widget" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/create-custom-widget into .github/skills/create-custom-widget/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-custom-widget", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mendixlabs/mxcli --skill create-custom-widget -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mendixlabs/mxcli create-custom-widget --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mendixlabs/mxcli.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/mendix/create-custom-widget .opencode/skills/create-custom-widget && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "create-custom-widget" agent skill from https://github.com/mendixlabs/mxcli/tree/main/.claude/skills/mendix/create-custom-widget into .opencode/skills/create-custom-widget/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-custom-widget", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
create-custom-widgetBuild a Mendix pluggable widget from scratch with React and TypeScript and package it as an .mpk.
Create Custom Widget is an agent skill from mendixlabs/mxcli. Build a Mendix pluggable widget from scratch with React and TypeScript and package it as an .mpk. Use when no marketplace or built-in widget covers what is needed and a custom React component has to be written.
Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Frontend & Design, covering React components. It works with TypeScript, React and npm. The repository describes itself as: Mendix cli tool, a headless way to work with Mendix projects. Enables Mendix projects for use with 3rd party agentic coding tools like Claude Code and Copilot. Includes a… The licence is Apache-2.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 20a6c89. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
mendix.comw3.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Create Custom Widget loads about 3.3k tokens when it runs. Until then it costs about 58 tokens; SKILL.md has 597 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from mendixlabs/mxcli at commit 20a6c89, republished under its Apache-2.0 licence (© mendixlabs). 597 words, ~3,322 tokens.
.claude/skills/create-custom-widget/SKILL.md (or your agent's skills folder).Build a Mendix pluggable widget from scratch using React + TypeScript. Produces a .mpk file ready for Studio Pro.
Create a directory and generate all source files. Use PascalCase for the widget name.
mkdir -p <WidgetName>/src/components <WidgetName>/src/ui{
"name": "<widget-name>",
"widgetName": "<WidgetName>",
"version": "1.0.0",
"description": "<description>",
"license": "Apache-2.0",
"config": {
"projectPath": "./tests/testProject",
"mendixHost": "http://localhost:8080",
"developmentPort": 3000
},
"packagePath": "com.example.widgets",
"scripts": {
"dev": "pluggable-widgets-tools start:web",
"build": "pluggable-widgets-tools build:web",
"lint": "pluggable-widgets-tools lint",
"lint:fix": "pluggable-widgets-tools lint:fix"
},
"devDependencies": {
"@mendix/pluggable-widgets-tools": "^11.6.0",
"@types/big.js": "^6.0.2"
},
"dependencies": {
"classnames": "^2.2.6"
},
"resolutions": {
"react": "^19.0.0",
"react-dom": "^19.0.0",
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0"
},
"overrides": {
"react": "^19.0.0",
"react-dom": "^19.0.0",
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0"
}
}Naming rules:
name: kebab-case (npm package name)widgetName: PascalCase (matches .xml and .tsx filename)packagePath: reverse domain, dot-separated (e.g. com.example.widgets){
"extends": "./node_modules/@mendix/pluggable-widgets-tools/configs/tsconfig.base.json"
}<?xml version="1.0" encoding="utf-8" ?>
<package xmlns="http://www.mendix.com/package/1.0/">
<clientModule name="<WidgetName>" version="1.0.0" xmlns="http://www.mendix.com/clientModule/1.0/">
<widgetFiles>
<widgetFile path="<WidgetName>.xml"/>
</widgetFiles>
<files>
<file path="com/example/widgets/<widgetname>"/>
</files>
</clientModule>
</package>The <file path> must match packagePath + lowercase widget name, with dots replaced by /. For example, for HelloWorld with packagePath=com.example.widgets, the path is com/example/widgets/helloworld.
<?xml version="1.0" encoding="utf-8"?>
<widget id="com.example.widgets.<widgetname>.<WidgetName>"
pluginWidget="true"
needsEntityContext="true"
offlineCapable="true"
supportedPlatform="Web"
xmlns="http://www.mendix.com/widget/1.0/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.mendix.com/widget/1.0/ ../node_modules/mendix/custom_widget.xsd">
<name><widget Name></name>
<description><description></description>
<icon/>
<properties>
<propertyGroup caption="General">
<!-- Add properties here -->
</propertyGroup>
</properties>
</widget>The id attribute must be <packagePath>.<widgetname>.<WidgetName> — the second-to-last segment is the lowercase widget name, which becomes the JS subdirectory. This must match the <file path> in package.xml.
Set needsEntityContext="true" when the widget needs entity data. Set to "false" for standalone widgets.
| XML Type | Mendix Type | Use Case | Example |
|---|---|---|---|
string | Static text | Labels, titles | <property key="title" type="string"><caption>title</caption></property> |
boolean | Toggle | Show/hide, enable | <property key="showHeader" type="boolean" defaultValue="true"><caption>show header</caption></property> |
integer | Number | Counts, sizes | <property key="columns" type="integer" defaultValue="3"><caption>columns</caption></property> |
decimal | Decimal | Measurements | <property key="opacity" type="decimal" defaultValue="1.0"><caption>Opacity</caption></property> |
enumeration | Enum choice | Mode selection | See below |
expression | Dynamic value | Computed text | <property key="label" type="expression" defaultValue=""><caption>label</caption><returnType type="string"/></property> |
textTemplate | Template text | Formatted text with params | See below |
attribute | Entity attribute | Data binding | See below |
datasource | List data source | Lists, grids | <property key="datasource" type="datasource" isList="true"><caption>data source</caption></property> |
widgets | Child widgets | Content slots | <property key="content" type="widgets" required="false"><caption>content</caption></property> |
action | On-click action | Buttons, links | <property key="onclick" type="action"><caption>on click</caption></property> |
icon | Icon | Decorative | <property key="icon" type="icon" required="false"><caption>icon</caption></property> |
image | Image | Avatar, logo | <property key="image" type="image" required="false"><caption>image</caption></property> |
object | Compound | Complex config | See below |
<property key="alignment" type="enumeration" defaultValue="center">
<caption>Alignment</caption>
<description/>
<enumerationValues>
<enumerationValue key="left">left</enumerationValue>
<enumerationValue key="center">Center</enumerationValue>
<enumerationValue key="right">right</enumerationValue>
</enumerationValues>
</property><property key="value" type="attribute">
<caption>value</caption>
<description>The attribute to display</description>
<attributeTypes>
<attributeType name="string"/>
<attributeType name="integer"/>
<attributeType name="decimal"/>
</attributeTypes>
</property><property key="displayText" type="textTemplate">
<caption>display text</caption>
<description/>
<translations>
<translation lang="en_US">default text</translation>
</translations>
</property><property key="columns" type="object" isList="true">
<caption>columns</caption>
<description/>
<properties>
<propertyGroup caption="column">
<property key="header" type="textTemplate">
<caption>header</caption>
<translations><translation lang="en_US">column</translation></translations>
</property>
<property key="attribute" type="attribute" datasource="datasource">
<caption>attribute</caption>
<attributeTypes>
<attributeType name="string"/>
<attributeType name="integer"/>
</attributeTypes>
</property>
<property key="width" type="integer" defaultValue="100">
<caption>width (px)</caption>
</property>
</propertyGroup>
</properties>
</property>Note: datasource="datasource" links the attribute picker to the datasource property.
Use nested <propertyGroup> for Studio Pro tab organization:
<properties>
<propertyGroup caption="General">
<!-- main properties -->
</propertyGroup>
<propertyGroup caption="Appearance">
<!-- style properties -->
</propertyGroup>
<propertyGroup caption="events">
<!-- action properties -->
</propertyGroup>
</properties>import { ReactElement } from "react";
import { <WidgetName>ContainerProps } from "../typings/<WidgetName>Props";
import { MyComponent } from "./components/MyComponent";
import "./ui/<WidgetName>.css";
export function <WidgetName>(props: <WidgetName>ContainerProps): ReactElement {
// map Mendix props to React component props
return <MyComponent {...relevantProps} />;
}The typings/<WidgetName>Props.d.ts file is auto-generated by the build tool from the .xml definition. Do NOT create it manually.
// string property
props.title // string
// boolean property
props.showHeader // boolean
// expression property
props.label?.value // string | undefined (use .value to get resolved text)
// attribute property (read)
props.value?.displayValue // string
props.value?.value // actual typed value
// attribute property (write)
props.value?.setValue(newValue)
// TextTemplate property
props.displayText?.value // string (resolved template)
// action property
props.onClick?.canExecute // boolean
props.onClick?.execute() // trigger the action
// datasource property
props.dataSource?.items // ObjectItem[] | undefined
props.dataSource?.status // "available" | "loading"
// widgets property (content slot)
props.content // ReactNode
// icon property
import { icon } from "mendix/components/web/icon";
<icon icon={props.icon} />
// object list property (e.g. columns)
props.columns // Array<{ header, attribute, width }>
// access attribute value for a specific item:
props.columns[0].attribute?.get(item)?.displayValueKeep the component pure React — no Mendix API dependencies. This makes it testable and reusable.
import { ReactElement } from "react";
import classNames from "classnames";
export interface MyComponentProps {
title: string;
value?: string;
className?: string;
}
export function MyComponent({ title, value, className }: MyComponentProps): ReactElement {
return (
<div className={classNames("widget-my-component", className)}>
<h3>{title}</h3>
{value && <p>{value}</p>}
</div>
);
}Controls how the widget appears in Studio Pro's design mode:
import { <WidgetName>PreviewProps } from "../typings/<WidgetName>Props";
export type properties = PropertyGroup[];
type PropertyGroup = {
caption: string;
propertyGroups?: PropertyGroup[];
properties?: Property[];
};
type Property = {
key: string;
caption: string;
description?: string;
};
export function getProperties(
_values: <WidgetName>PreviewProps,
defaultProperties: properties
): properties {
return defaultProperties;
}.widget-<widget-name> {
/* widget styles */
}Use a .widget-<widget-name> prefix to avoid CSS collisions.
cd <widget-dir>
npm install
npm run buildOutput: dist/<version>/com.example.widgets.<WidgetName>.mpk
cp dist/*/*.mpk /path/to/mendix-project/widgets/Then open/reload the project in Studio Pro.
Properties: title (string), value (expression/string), icon (icon), trend (enumeration: up/down/neutral), onclick (action)
Properties: datasource (datasource), valueAttr (attribute/decimal), labelAttr (attribute/string), chartType (enumeration), height (integer)
Wrap a charting library (Chart.js, Recharts) inside the component.
Properties: value (attribute/string, writable), placeholder (string), onchange (action), validation (expression/string)
Set needsEntityContext="true". Use props.value.setValue() for two-way binding.
Properties: content (widgets), columns (integer), gap (integer)
Set needsEntityContext="false". Render children via {props.content}.
id in .xml matches packagePath.WidgetName<name> in package.xml matches .xml filename (without extension)<file path> in package.xml matches packagePath with / separators.tsx exports a function with the exact widget name.tsxneedsEntityContext matches whether entity data is neededProps.d.ts file (auto-generated by build tool)expression properties have <returnType>attribute properties list valid <attributeType> entriesobject properties with attributes set datasource reference| Error | Cause | Fix |
|---|---|---|
Cannot find module '../typings/...' | Haven't built yet | Run npm run build first, types are generated |
widget not showing in Studio Pro | Wrong id in XML | Ensure id="packagePath.WidgetName" |
CE0463 widget definition changed | Property mismatch | Ensure XML and component props match |
pluginWidget must be true | Missing attribute | Add pluginWidget="true" to <widget> |
© mendixlabs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/mendix/create-custom-widget of mendixlabs/mxcli.
Open the folder on GitHubat commit 20a6c89
Create Custom Widget next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Create Custom Widget this skillmendixlabs/mxcli | 128 | — | ~3.3k | Automated safety check: Pass | Apache-2.0 | |
| Spotpatchhuanglvjing/spotpatch | 134 | — | ~998 | Automated safety check: Pass | MIT | |
| Frontendstreamband/hydra-srt | 146 | — | ~582 | Automated safety check: Pass | Apache-2.0 | |
| React Emailviclafouch/meme-studio | 110 | 2 repos | ~3.6k | Automated safety check: Pass | MIT | |
| Web Artifacts Builderanthropics/skills | 180k | 41 repos | ~769 | Automated safety check: Pass | Apache-2.0 | |
| GSAP for Reactgreensock/gsap-skills | 16k | 4 repos | ~1.6k | Automated safety check: Pass | MIT |
huanglvjing/spotpatch
为 React 项目建立从浏览器页面元素到精确 JSX/TSX 源码、结构化上下文与可审阅修改的 SpotPatch 工作流。用户提到 SpotPatch、截图沟通前端修改、页面元素定位源码、Vite 或 Next.js 接入、组件数据链路、结构化 Prompt、AI 补丁审阅、安装检查或故障排查时使用此技能。
streamband/hydra-srt
A skill your agent uses for frontend work in webapp (React/TypeScript, UI implementation, tests, and refactors).
viclafouch/meme-studio
A skill your agent uses when creating HTML email templates with React components - welcome emails, password resets, notifications, order confirmations, newsletters, or transactional emails.
anthropics/skills
Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.
greensock/gsap-skills
Shows how to run GSAP animations in React and Next.js with the useGSAP hook, refs, scoped selectors and automatic cleanup on unmount.
langgenius/dify
Use when implementing or refactoring React/TypeScript components and the task requires decisions about component ownership, feature boundaries, state, data…
mendixlabs/mxcli
Push OData query options into the SQL of a Mendix resource served by a read microflow, so $filter, $orderby, $top, $skip, $count and the key lookup reach the database instead of being silently…
mendixlabs/mxcli
Chart a Mendix app with Vega-Lite through a pluggable widget that takes the specification and the data as separate properties, so the model emits rows and never assembles a chart payload.
mendixlabs/mxcli
Author Mendix AI agent documents in MDL — Model, Knowledge Base, Consumed MCP Service and Agent, with variables, tools and multi-line prompts.
mendixlabs/mxcli
Run set-based INSERT, UPDATE and DELETE against Mendix entities through OQL statements, which the runtime supports and Studio Pro cannot author.
mendixlabs/mxcli
Define event-driven APIs over Kafka with Mendix business event services — publish and subscribe contracts, CREATE/DROP/DESCRIBE.
mendixlabs/mxcli
Search the Mendix Catalog platform service registry (catalog.mendix.com) from the CLI to find services published across an organisation.
Works with
Categories
Build a Mendix pluggable widget from scratch with React and TypeScript and package it as an .mpk. Create Custom Widget is an agent skill from mendixlabs/mxcli.mpk.
Create Custom Widget fits situations like: built-in widget covers what is needed and a custom React component has to be written; tasks that involve React components.
Run `npx skills add mendixlabs/mxcli --skill create-custom-widget -a claude-code`. Or copy the skill folder (.claude/skills/mendix/create-custom-widget in mendixlabs/mxcli) into .claude/skills/create-custom-widget in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mendixlabs/mxcli --skill create-custom-widget -a codex`. Or copy the skill folder (.claude/skills/mendix/create-custom-widget in mendixlabs/mxcli) into .agents/skills/create-custom-widget in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mendixlabs/mxcli --skill create-custom-widget -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-custom-widget, .gemini/skills/create-custom-widget, .github/skills/create-custom-widget and .opencode/skills/create-custom-widget in your project.
Going by SKILL.md and its folder, Create Custom Widget needs the command-line tools its instructions call (npm). Our summary lists: Node.js.
SKILL.md names 2 domains. In commands or code: mendix.com and w3.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Create Custom Widget is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Create Custom Widget: Spotpatch (huanglvjing/spotpatch, 134 stars), Frontend (streamband/hydra-srt, 146 stars), React Email (viclafouch/meme-studio, 110 stars) and Web Artifacts Builder (anthropics/skills, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mendixlabs (a GitHub organization) maintains it in mendixlabs/mxcli, which has 128 GitHub stars. The repository holds 72 skills in this directory. The repository was last updated on October 7, 2026.
Source: mendixlabs/mxcli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.