Smooth Cpp Shared
openforecast-org/smooth
Work on the C++ layer that the R package and the Python port share — the headers under src/headers/, the Rcpp bindings in src/, the pybind11 bindings in src/python/, and the two build systems that…
A skill your agent uses when creating property panels or configuration UI in the data-workbench Qt/C++ project.
$ npx skills add czyt1988/data-workbench --skill create-setting-panel -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install czyt1988/data-workbench create-setting-panel --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/czyt1988/data-workbench.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/create-setting-panel .claude/skills/create-setting-panel && 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-setting-panel" agent skill from https://github.com/czyt1988/data-workbench/tree/master/skills/create-setting-panel into .claude/skills/create-setting-panel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-setting-panel", 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/czyt1988/data-workbench/tree/master/skills/create-setting-panelType 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 czyt1988/data-workbench --skill create-setting-panel -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install czyt1988/data-workbench create-setting-panel --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/czyt1988/data-workbench.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/create-setting-panel .agents/skills/create-setting-panel && 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-setting-panel" agent skill from https://github.com/czyt1988/data-workbench/tree/master/skills/create-setting-panel into .agents/skills/create-setting-panel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-setting-panel", 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 czyt1988/data-workbench --skill create-setting-panel -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install czyt1988/data-workbench create-setting-panel --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/czyt1988/data-workbench.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/create-setting-panel .cursor/skills/create-setting-panel && 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-setting-panel" agent skill from https://github.com/czyt1988/data-workbench/tree/master/skills/create-setting-panel into .cursor/skills/create-setting-panel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-setting-panel", 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/czyt1988/data-workbench.git --path skills/create-setting-panel--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 czyt1988/data-workbench --skill create-setting-panel -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install czyt1988/data-workbench create-setting-panel --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/czyt1988/data-workbench.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/create-setting-panel .gemini/skills/create-setting-panel && 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-setting-panel" agent skill from https://github.com/czyt1988/data-workbench/tree/master/skills/create-setting-panel into .gemini/skills/create-setting-panel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-setting-panel", 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 czyt1988/data-workbench create-setting-panelInstalls 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 czyt1988/data-workbench --skill create-setting-panel -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/czyt1988/data-workbench.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/create-setting-panel .github/skills/create-setting-panel && 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-setting-panel" agent skill from https://github.com/czyt1988/data-workbench/tree/master/skills/create-setting-panel into .github/skills/create-setting-panel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-setting-panel", 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 czyt1988/data-workbench --skill create-setting-panel -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install czyt1988/data-workbench create-setting-panel --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/czyt1988/data-workbench.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/create-setting-panel .opencode/skills/create-setting-panel && 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-setting-panel" agent skill from https://github.com/czyt1988/data-workbench/tree/master/skills/create-setting-panel into .opencode/skills/create-setting-panel/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "create-setting-panel", 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-setting-panelA skill your agent uses when creating property panels or configuration UI in the data-workbench Qt/C++ project.
Create Setting Panel is an agent skill from czyt1988/data-workbench. Use when creating property panels or configuration UI in the data-workbench Qt/C++ project. Triggers include "add a setting panel", "create property panel", "node settings", "workflow property editor", "chart item settings", or "app settings page".
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `SKILL_cn.md`).
It sits in Data & Analytics. It works with C++. The repository describes itself as: AI Agent-driven data analysis workbench built on C++17/Qt: directed-graph workflow engine, embedded Python (pandas/numpy), interactive publication-quality charts, C++ & Python… The licence is LGPL-3.0.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit cf3bbda. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are cpp).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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 Setting Panel loads about 3.2k tokens when it runs. Until then it costs about 67 tokens; SKILL.md has 761 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 czyt1988/data-workbench at commit cf3bbda, republished under its LGPL-3.0 licence (© czyt1988). 761 words, ~3,238 tokens.
.claude/skills/create-setting-panel/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Setting panels in data-workbench use DAPropertyPanelWidget for property UI. Three patterns exist. Identify your target before implementing.
What are you configuring?
QwtPlotItem (curve, bar, grid)?
→ Scenario A: ChartItem Panel (inherit DAChartItemSettingPanel)
Arbitrary object (node, custom data model)?
→ Scenario B: Standalone Panel (inherit QWidget + DAPropertyPanelWidget)
Application-level config (preferences, options)?
→ Scenario C: App Setting Page (inherit DAAbstractSettingPage)These steps apply to all DAPropertyPanelWidget-based panels (Scenarios A and B):
addXxxProperty(PID_*, name, ...) in buildPropertyPanel()addCollapsibleGroup(title) → addXxxProperty(...) → endGroup()addSubPanel(id, groupName) for independent property groupsmPanel->propertyValueChanged to handler slotswitch(propertyId) with case PID_*: blocksgetxxxValue(PID_*) in handleraddCollapsibleGroup(title), all subsequent addXxxProperty() calls go into that group automaticallyendGroup() to exit the current group and return to root-level layoutaddCollapsibleGroup() inside another groupaddSubPanel(id, groupName) creates a nested DAPropertyPanelWidget with its own property IDspropertyValueChanged from sub-panel forwards to parent panel automatically!!! danger "MANDATORY: Always call endGroup() immediately after addCollapsibleGroup()"
Failing to call endGroup() will cause all subsequent properties and groups to be nested under the current group, resulting in broken layout and wrong hierarchy.
Strictly follow: addCollapsibleGroup(title) → add properties → endGroup()
| Scenario | Signal Chain |
|---|---|
| ChartItem (A) | mPanel → base class forwards → propertyValueChanged → subclass slot |
| Standalone (B) | 3-hop: mPanel→onPanelPropertyValueChanged→emit→onPropertyValueChanged ← P0 critical |
| Nested sub-panel | subPanel propertyValueChanged → auto forwards to parent propertyValueChanged → no extra wiring needed |
Inheritance: DAChartItemSettingPanel → DAAbstractChartItemSettingWidget → QWidget
Key pattern:
buildPropertyPanel() is pure virtual, called at end of subclass constructorupdateUI(QwtPlotItem*) reads state back (QSignalBlocker recommended)replot()Skeleton:
class MyPanel : public DAChartItemSettingPanel {
Q_OBJECT
public:
enum PropertyID { PID_Title = 1, PID_Color = 2, PID_LineWidth = 3 };
explicit MyPanel(QWidget* parent = nullptr);
void updateUI(QwtPlotItem* item) override;
protected:
void buildPropertyPanel() override;
private Q_SLOTS:
void onPropertyValueChanged(int propertyId);
};
MyPanel::MyPanel(QWidget* parent) : DAChartItemSettingPanel(parent) {
connect(this, &DAChartItemSettingPanel::propertyValueChanged,
this, &MyPanel::onPropertyValueChanged);
buildPropertyPanel();
}
void MyPanel::buildPropertyPanel() {
auto* pp = propertyPanel();
// Collapsible group for appearance properties
pp->addCollapsibleGroup(tr("Appearance"));
pp->addStringProperty(PID_Title, tr("Title"));
pp->addColorProperty(PID_Color, tr("Color"));
pp->addIntProperty(PID_LineWidth, tr("Line Width"), 1, 1, 100);
pp->endGroup();
}Register via DAChartItemSettingPanelFactory::registerPanel(rtti, creator).
References: src/DAGui/ChartSetting/DAChartItemSettingPanel.h, src/DAGui/ChartSetting/DAChartCurveSettingPanel.{h,cpp}
Inheritance: QWidget directly, owns DAPropertyPanelWidget*
Key pattern:
buildPropertyPanel() is a protected slot, called directly in constructorreplot())Skeleton (workflow node example):
class DANodePropertyPanel : public QWidget {
Q_OBJECT
public:
enum PropertyId { PID_Name = 1, PID_Color = 2 };
explicit DANodePropertyPanel(QWidget* parent = nullptr);
void setTarget(DAWorkFlowNode* node);
protected Q_SLOTS:
void buildPropertyPanel();
void onPanelPropertyValueChanged(int propertyId);
void onPropertyValueChanged(int propertyId);
Q_SIGNALS:
void propertyValueChanged(int propertyId);
};
// Constructor: wire BOTH signal links
DANodePropertyPanel::DANodePropertyPanel(QWidget* parent)
: QWidget(parent) {
mPanel = new DAPropertyPanelWidget(this);
// Link 1: panel → forwarding slot
connect(mPanel, &DAPropertyPanelWidget::propertyValueChanged,
this, &DANodePropertyPanel::onPanelPropertyValueChanged);
// Link 2: self → handler slot (P0: often forgotten)
connect(this, &DANodePropertyPanel::propertyValueChanged,
this, &DANodePropertyPanel::onPropertyValueChanged);
buildPropertyPanel();
}
void DANodePropertyPanel::buildPropertyPanel() {
// Collapsible group for node info
mPanel->addCollapsibleGroup(tr("Node Info"));
mPanel->addStringProperty(PID_Name, tr("Name"));
mPanel->addColorProperty(PID_Color, tr("Color"));
mPanel->endGroup();
}Note: Non-chart targets do not call replot(). Emit the target object's own change signal or call its refresh method instead.
References: src/DAGui/ChartSetting/DAChartAxisSettingPanel.{h,cpp} (composition pattern), src/DAGui/DAWorkFlowNodeItemSettingWidget.h (target domain)
Use addSubPanel() when a group of properties needs its own independent property ID namespace or separate update cycle.
void MyPanel::buildPropertyPanel() {
auto* pp = propertyPanel();
// Root-level group
pp->addCollapsibleGroup(tr("General"));
pp->addStringProperty(PID_Title, tr("Title"));
pp->endGroup();
// Nested sub-panel with its own property IDs
auto* subPanel = pp->addSubPanel(SID_AxisSettings, tr("Axis Settings"));
subPanel->addCollapsibleGroup(tr("X Axis"));
subPanel->addDoubleProperty(PID_XMin, tr("Min"), 0.0);
subPanel->addDoubleProperty(PID_XMax, tr("Max"), 100.0);
subPanel->endGroup();
subPanel->addCollapsibleGroup(tr("Y Axis"));
subPanel->addDoubleProperty(PID_YMin, tr("Min"), 0.0);
subPanel->addDoubleProperty(PID_YMax, tr("Max"), 100.0);
subPanel->endGroup();
// No extra signal wiring needed — sub-panel propertyValueChanged
// bubbles up to parent panel automatically
}
// Access sub-panel later for state updates:
void MyPanel::updateUI() {
auto* subPanel = mPanel->getSubPanel(SID_AxisSettings);
QSignalBlocker blocker(subPanel);
subPanel->setDoubleValue(PID_XMin, ...);
// ...
}Key rules:
SID_*) are separate from root panel IDs (PID_*), no collisiongetSubPanel(id) returns the DAPropertyPanelWidget* for direct read/writegetSubPanelId(subPanel) reverse-lookups the ID from a pointerpropertyValueChanged auto-forwards to parent, no manual connect neededDAPropertyPanelContainerWidget wraps DAPropertyPanelWidget inside a QScrollArea and proxies all its public API. Use it when the panel may grow tall and needs scrolling.
// Container delegates all DAPropertyPanelWidget methods:
DAPropertyPanelContainerWidget* container = new DAPropertyPanelContainerWidget(this);
container->addCollapsibleGroup(tr("Settings"));
container->addStringProperty(PID_Name, tr("Name"));
container->endGroup();
connect(container, &DAPropertyPanelContainerWidget::propertyValueChanged, ...);Reference: src/DACommonWidgets/DAPropertyPanelContainerWidget.h
Inheritance: DAAbstractSettingPage → QWidget
Key pattern:
apply() is pure virtual — called on Apply/OK clicksettingChanged() on any property change (otherwise apply() is skipped)settingApplyed() after apply completesSkeleton:
class MyAppSettings : public DAAbstractSettingPage {
Q_OBJECT
public:
explicit MyAppSettings(QWidget* parent = nullptr);
void apply() override;
QString getSettingPageTitle() const override;
QIcon getSettingPageIcon() const override;
};Reference: src/DACommonWidgets/DAAbstractSettingPage.h
| Aspect | ChartItem (A) | Standalone (B) | App Page (C) |
|---|---|---|---|
| Inherits | DAChartItemSettingPanel | QWidget | DAAbstractSettingPage |
| Target | QwtPlotItem via setPlotItem() | Any object via setTarget() | N/A |
| buildPropertyPanel() | Pure virtual, called by subclass | Protected slot, called directly | N/A |
| Signal chain | Automatic via base | Manual: 2 connections required | settingChanged() signal |
| Sub-panel signals | Auto bubble-up to parent | Auto bubble-up to parent | N/A |
| Apply style | Immediate (write + replot) | Immediate (write + notify) | Deferred (apply() on OK) |
| Qwt extras | addCurveStyle/Axis/SymbolProperty | Not available | N/A |
| Factory | DAChartItemSettingPanelFactory | Manually created | DASettingWidget manages |
| Grouping | addCollapsibleGroup + endGroup | addCollapsibleGroup + endGroup | N/A |
| Method | Purpose | Read / Write |
|---|---|---|
addColorProperty / addFontProperty / addBrushProperty | Color/Font/Brush | getColorValue/setColorValue etc. |
addPenProperty | Pen | getPenValue/setPenValue |
addIntProperty / addDoubleProperty / addBoolProperty | Numeric/Bool | getIntValue/setIntValue etc. |
addStringProperty / addEnumProperty | String/Enum | getStringValue/setStringValue etc. |
addAlignmentProperty / addFilePathProperty | Alignment/Path | getAlignmentValue/setAlignmentValue etc. |
addProperty | Custom Widget | getPropertyItem(id) |
| Method | Purpose | Notes |
|---|---|---|
addCollapsibleGroup(title) | Start collapsible group | Returns group ID (1-based). Subsequent addXxxProperty auto-tracked into this group |
endGroup() | Exit current group | Next addXxxProperty goes to root layout |
addSubPanel(id, groupName) | Create nested sub-panel | Returns DAPropertyPanelWidget* with signal bubble-up |
getSubPanel(id) | Get sub-panel by ID | Returns nullptr if not found |
getSubPanelId(subPanel) | Reverse-lookup sub-panel ID | Returns -1 if not found |
getGroupPanel(groupId) | Get group's internal panel | Returns DAPropertyPanelWidget* for the group |
isGroupExpanded(groupId) | Check group expand state | Returns true/false |
setGroupExpanded(groupId, expanded) | Set group expand state | Programmatic control of collapse/expand |
addGroupLabel(text) | Deprecated decorative label | Use addCollapsibleGroup instead. No collapse functionality |
DAPropertyPanelContainerWidget proxies all DAPropertyPanelWidget methods listed above. Use rootPanel() to access the underlying DAPropertyPanelWidget directly if needed.
QButtonGroup Qt5/Qt6 compat:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
connect(group, QOverload<int>::of(&QButtonGroup::buttonClicked), ...);
#else
connect(group, &QButtonGroup::idClicked, ...);
#endifQt5/Qt6 QButtonGroup addButton:
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
group->addButton(rb, id);
#else
group->setId(rb, id);
group->addButton(rb);
#endifThe 6-function lifecycle (setTarget, getTarget, bindTarget, unbindTarget, updateUI, applySetting) is documented in docs/zh/dev-guide/ui/settingwidget-standard.md. Reference that document — do not re-explain it here.
© czyt1988, LGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/create-setting-panel of czyt1988/data-workbench.
Open the folder on GitHubat commit cf3bbda
Create Setting Panel 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 Setting Panel this skillczyt1988/data-workbench | 102 | — | ~3.2k | Automated safety check: Pass | LGPL-3.0 | |
| Smooth Cpp Sharedopenforecast-org/smooth | 107 | — | ~1.1k | Automated safety check: Pass | LGPL-2.1 | |
| Optimize Op VerifyCVCUDA/CV-CUDA | 2.7k | — | ~424 | Automated safety check: Pass | Custom licence | |
| Elodin DBelodin-sys/elodin | 547 | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| GeomasterLeonChaoX/qinyan-academic-skills | 943 | 1 repos | ~2.9k | Automated safety check: Pass | MIT | |
| GeomasterK-Dense-AI/scientific-agent-skills | 48k | 1 repos | ~2.8k | Automated safety check: Pass | MIT |
openforecast-org/smooth
Work on the C++ layer that the R package and the Python port share — the headers under src/headers/, the Rcpp bindings in src/, the pybind11 bindings in src/python/, and the two build systems that…
CVCUDA/CV-CUDA
Verify a CV-CUDA optimization campaign's deterministic definition-of-done and concise versioned MR summary per .agents/guidance/OPTIMIZATIONGUIDELINES.md.
elodin-sys/elodin
Work with Elodin-DB, the time-series telemetry database. An agent skill from elodin-sys/elodin.
LeonChaoX/qinyan-academic-skills
Comprehensive geospatial science skill covering remote sensing, GIS, spatial analysis, machine learning for earth observation, and 30+ scientific domains.
K-Dense-AI/scientific-agent-skills
Supports geospatial research workflows for remote sensing, vector and raster GIS, spatial statistics, terrain and network analysis, and machine learning for Earth observation.
agent-skills-hub/agent-skills-hub
Comprehensive geospatial science skill covering remote sensing, GIS, spatial analysis, machine learning for earth observation, and 30+ scientific domains.
czyt1988/data-workbench
A skill your agent uses when adding new Python bindings (exposing C++ classes/functions to Python) in the DAWorkBench project, or modifying existing bindings.
czyt1988/data-workbench
A skill your agent uses when creating a new C++ plugin DLL for the data-workbench platform, or modifying an existing plugin's structure, CMake, UI integration, or data access.
czyt1988/data-workbench
A skill your agent uses when integrating Python scripts with C++ in a DAWorkbench plugin — calling Python from C++, Python multithreading without UI conflicts, Python-to-C++ data exchange, Python UI…
Works with
Categories
A skill your agent uses when creating property panels or configuration UI in the data-workbench Qt/C++ project. Create Setting Panel is an agent skill from czyt1988/data-workbench. Use when creating property panels or configuration UI in the data-workbench Qt/C++ project.
Create Setting Panel fits situations like: creating property panels; configuration UI in the data-workbench Qt/C++ project; include add a setting panel; create property panel.
Run `npx skills add czyt1988/data-workbench --skill create-setting-panel -a claude-code`. Or copy the skill folder (skills/create-setting-panel in czyt1988/data-workbench) into .claude/skills/create-setting-panel in your project. Claude Code loads it when a task matches its description.
Run `npx skills add czyt1988/data-workbench --skill create-setting-panel -a codex`. Or copy the skill folder (skills/create-setting-panel in czyt1988/data-workbench) into .agents/skills/create-setting-panel 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 czyt1988/data-workbench --skill create-setting-panel -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-setting-panel, .gemini/skills/create-setting-panel, .github/skills/create-setting-panel and .opencode/skills/create-setting-panel in your project.
SKILL.md names no scripts, command-line tools or credentials: Create Setting Panel is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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 Setting Panel is published under the LGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k 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 Setting Panel: Smooth Cpp Shared (openforecast-org/smooth, 107 stars), Optimize Op Verify (CVCUDA/CV-CUDA, 2.7k stars), Elodin DB (elodin-sys/elodin, 547 stars) and Geomaster (LeonChaoX/qinyan-academic-skills, 943 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
czyt1988 (a GitHub user) maintains it in czyt1988/data-workbench, which has 102 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 12, 2026.
Source: czyt1988/data-workbench on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.