Agent skill

Create Setting Panel

by czyt1988 in czyt1988/data-workbench

A skill your agent uses when creating property panels or configuration UI in the data-workbench Qt/C++ project.

LGPL-3.0Auto-check passedData & Analytics

Install Create Setting Panel

skills CLI
$ npx skills add czyt1988/data-workbench --skill create-setting-panel -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install czyt1988/data-workbench create-setting-panel --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
create-setting-panel
GitHub stars
102
Token cost
~3.2k tokens
SKILL.md length
761 words
Files
2
Skills in repo
4
Repo updated
First seen
Licence
LGPL-3.0

At a glance

A skill your agent uses when creating property panels or configuration UI in the data-workbench Qt/C++ project.

  • Works in 7 steps: Define PropertyId enum — values start… → Create DAPropertyPanelWidget in… → Add properties — call… → …
  • Creating property panels
  • SKILL.md covers Overview, Decision Tree, Core Pattern — 7 Universal Steps and Scenario A: ChartItem Panel…, plus 8 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

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.

When your agent uses it

  • Creating property panels
  • Configuration UI in the data-workbench Qt/C++ project
  • Include add a setting panel
  • Create property panel

Example prompts

  • “add a setting panel”
  • “create property panel”
  • “node settings”
  • “/create-setting-panel”

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. Define PropertyId enum — values start from 1
  2. Create DAPropertyPanelWidget in constructor
  3. Add properties — call addXxxProperty(PID_*, name, ...) in buildPropertyPanel()
  4. Connect signal chain — mPanel->propertyValueChanged to handler slot
  5. Dispatch in handler — switch(propertyId) with case PID_*: blocks
  6. Read values — use getxxxValue(PID_*) in handler
  7. Write back — apply to target + call target's refresh mechanism

What it can do on your machine

Read from SKILL.md and the folder at commit cf3bbda. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    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.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~67
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from czyt1988/data-workbench at commit cf3bbda, republished under its LGPL-3.0 licence (© czyt1988). 761 words, ~3,238 tokens.

Download SKILL.mdSave it as .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.
name
create-setting-panel
description
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".

Create Setting Panel

Overview

Setting panels in data-workbench use DAPropertyPanelWidget for property UI. Three patterns exist. Identify your target before implementing.

Decision Tree

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)

Core Pattern — 7 Universal Steps

These steps apply to all DAPropertyPanelWidget-based panels (Scenarios A and B):

  1. Define PropertyId enum — values start from 1
  2. Create DAPropertyPanelWidget in constructor
  3. Add properties — call addXxxProperty(PID_*, name, ...) in buildPropertyPanel()
    • Group properties with addCollapsibleGroup(title) → addXxxProperty(...) → endGroup()
    • Nest sub-panels with addSubPanel(id, groupName) for independent property groups
  4. Connect signal chain — mPanel->propertyValueChanged to handler slot
  5. Dispatch in handler — switch(propertyId) with case PID_*: blocks
  6. Read values — use getxxxValue(PID_*) in handler
  7. Write back — apply to target + call target's refresh mechanism
Grouping & Nesting Rules
  • After addCollapsibleGroup(title), all subsequent addXxxProperty() calls go into that group automatically
  • Call endGroup() to exit the current group and return to root-level layout
  • Groups can be nested: call addCollapsibleGroup() inside another group
  • addSubPanel(id, groupName) creates a nested DAPropertyPanelWidget with its own property IDs
  • Sub-panel signals bubble up: propertyValueChanged 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()

Signal Chain
ScenarioSignal Chain
ChartItem (A)mPanel → base class forwards → propertyValueChanged → subclass slot
Standalone (B)3-hop: mPanel→onPanelPropertyValueChanged→emit→onPropertyValueChanged ← P0 critical
Nested sub-panelsubPanel propertyValueChanged → auto forwards to parent propertyValueChanged → no extra wiring needed

Scenario A: ChartItem Panel (QwtPlotItem)

Inheritance: DAChartItemSettingPanel → DAAbstractChartItemSettingWidget → QWidget

Key pattern:

  • buildPropertyPanel() is pure virtual, called at end of subclass constructor
  • updateUI(QwtPlotItem*) reads state back (QSignalBlocker recommended)
  • Signal chain is automatic via base class
  • Refresh by calling replot()

Skeleton:

cpp
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}

Scenario B: Standalone Panel (Any Target)

Inheritance: QWidget directly, owns DAPropertyPanelWidget*

Key pattern:

  • buildPropertyPanel() is a protected slot, called directly in constructor
  • Constructor takes a target identifier (e.g., node type, object ID)
  • Signal chain MUST be manually wired — two connections (see skeleton)
  • Refresh by calling target's own notify/redraw mechanism (NOT replot())

Skeleton (workflow node example):

cpp
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)

Nested Sub-Panel Pattern

Use addSubPanel() when a group of properties needs its own independent property ID namespace or separate update cycle.

cpp
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:

  • Sub-panel IDs (SID_*) are separate from root panel IDs (PID_*), no collision
  • getSubPanel(id) returns the DAPropertyPanelWidget* for direct read/write
  • getSubPanelId(subPanel) reverse-lookups the ID from a pointer
  • Sub-panel propertyValueChanged auto-forwards to parent, no manual connect needed

Using DAPropertyPanelContainerWidget

DAPropertyPanelContainerWidget wraps DAPropertyPanelWidget inside a QScrollArea and proxies all its public API. Use it when the panel may grow tall and needs scrolling.

cpp
// 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

Show full SKILL.md (309 more words)Show less

Scenario C: App Setting Page

Inheritance: DAAbstractSettingPage → QWidget

Key pattern:

  • apply() is pure virtual — called on Apply/OK click
  • Emit settingChanged() on any property change (otherwise apply() is skipped)
  • Emit settingApplyed() after apply completes

Skeleton:

cpp
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

Key Differences

AspectChartItem (A)Standalone (B)App Page (C)
InheritsDAChartItemSettingPanelQWidgetDAAbstractSettingPage
TargetQwtPlotItem via setPlotItem()Any object via setTarget()N/A
buildPropertyPanel()Pure virtual, called by subclassProtected slot, called directlyN/A
Signal chainAutomatic via baseManual: 2 connections requiredsettingChanged() signal
Sub-panel signalsAuto bubble-up to parentAuto bubble-up to parentN/A
Apply styleImmediate (write + replot)Immediate (write + notify)Deferred (apply() on OK)
Qwt extrasaddCurveStyle/Axis/SymbolPropertyNot availableN/A
FactoryDAChartItemSettingPanelFactoryManually createdDASettingWidget manages
GroupingaddCollapsibleGroup + endGroupaddCollapsibleGroup + endGroupN/A

DAPropertyPanelWidget API Quick Reference

Property Adding & Value Access
MethodPurposeRead / Write
addColorProperty / addFontProperty / addBrushPropertyColor/Font/BrushgetColorValue/setColorValue etc.
addPenPropertyPengetPenValue/setPenValue
addIntProperty / addDoubleProperty / addBoolPropertyNumeric/BoolgetIntValue/setIntValue etc.
addStringProperty / addEnumPropertyString/EnumgetStringValue/setStringValue etc.
addAlignmentProperty / addFilePathPropertyAlignment/PathgetAlignmentValue/setAlignmentValue etc.
addPropertyCustom WidgetgetPropertyItem(id)
Grouping & Nesting
MethodPurposeNotes
addCollapsibleGroup(title)Start collapsible groupReturns group ID (1-based). Subsequent addXxxProperty auto-tracked into this group
endGroup()Exit current groupNext addXxxProperty goes to root layout
addSubPanel(id, groupName)Create nested sub-panelReturns DAPropertyPanelWidget* with signal bubble-up
getSubPanel(id)Get sub-panel by IDReturns nullptr if not found
getSubPanelId(subPanel)Reverse-lookup sub-panel IDReturns -1 if not found
getGroupPanel(groupId)Get group's internal panelReturns DAPropertyPanelWidget* for the group
isGroupExpanded(groupId)Check group expand stateReturns true/false
setGroupExpanded(groupId, expanded)Set group expand stateProgrammatic control of collapse/expand
addGroupLabel(text)Deprecated decorative labelUse addCollapsibleGroup instead. No collapse functionality
DAPropertyPanelContainerWidget

DAPropertyPanelContainerWidget proxies all DAPropertyPanelWidget methods listed above. Use rootPanel() to access the underlying DAPropertyPanelWidget directly if needed.

Compatibility Notes

QButtonGroup Qt5/Qt6 compat:

cpp
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    connect(group, QOverload<int>::of(&QButtonGroup::buttonClicked), ...);
#else
    connect(group, &QButtonGroup::idClicked, ...);
#endif

Qt5/Qt6 QButtonGroup addButton:

cpp
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    group->addButton(rb, id);
#else
    group->setId(rb, id);
    group->addButton(rb);
#endif

What NOT to Duplicate

The 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

Files

SKILL.md and 1 other file in skills/create-setting-panel of czyt1988/data-workbench.

  • SKILL.md
  • SKILL_cn.md

Open the folder on GitHubat commit cf3bbda

Compare with similar skills

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.

Create Setting Panel compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Create Setting Panel this skillczyt1988/data-workbench102—~3.2kAutomated safety check: PassLGPL-3.0
Smooth Cpp Sharedopenforecast-org/smooth107—~1.1kAutomated safety check: PassLGPL-2.1
Optimize Op VerifyCVCUDA/CV-CUDA2.7k—~424Automated safety check: PassCustom licence
Elodin DBelodin-sys/elodin547—~2.9kAutomated safety check: PassApache-2.0
GeomasterLeonChaoX/qinyan-academic-skills9431 repos~2.9kAutomated safety check: PassMIT
GeomasterK-Dense-AI/scientific-agent-skills48k1 repos~2.8kAutomated safety check: PassMIT

Similar skills

  • 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…

    107 GitHub stars~1.1k tokensUpdated today
    Data & AnalyticsAuto-check passed
  • Optimize Op Verify

    CVCUDA/CV-CUDA

    Verify a CV-CUDA optimization campaign's deterministic definition-of-done and concise versioned MR summary per .agents/guidance/OPTIMIZATIONGUIDELINES.md.

    2.7k GitHub stars~424 tokensUpdated 22 days ago
    Data & AnalyticsAuto-check passed
  • Elodin DB

    elodin-sys/elodin

    Work with Elodin-DB, the time-series telemetry database. An agent skill from elodin-sys/elodin.

    547 GitHub stars~2.9k tokensUpdated today
    Data & AnalyticsAuto-check passed
  • Geomaster

    LeonChaoX/qinyan-academic-skills

    Comprehensive geospatial science skill covering remote sensing, GIS, spatial analysis, machine learning for earth observation, and 30+ scientific domains.

    943 GitHub starsUsed in 1 repo~2.9k tokens
    Data & AnalyticsAuto-check passed
  • Geomaster

    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.

    48k GitHub starsUsed in 1 repo~2.8k tokens
    Data & AnalyticsAuto-check passed
  • Geomaster

    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.

    111 GitHub starsUsed in 1 repo~5.2k tokens
    Data & AnalyticsAuto-check passed

More from czyt1988/data-workbench

  • Add Python Binding

    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.

    102 GitHub stars~4.6k tokensUpdated 26 days ago
    Auto-check passed
  • Create Cpp Plugin

    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.

    102 GitHub stars~5.5k tokensUpdated 26 days ago
    Auto-check passed
  • Python Script Integration

    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…

    102 GitHub stars~5.5k tokensUpdated 26 days ago
    Auto-check passed

Works with

Questions about Create Setting Panel

What does Create Setting Panel do?

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.

When should I use Create Setting Panel?

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.

How do I install Create Setting Panel in Claude Code?

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.

How do I install Create Setting Panel in Codex?

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.

Can I use Create Setting Panel in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Create Setting Panel need to run?

SKILL.md names no scripts, command-line tools or credentials: Create Setting Panel is instructions for the agent only.

Does Create Setting Panel access the network?

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.

Is Create Setting Panel safe to install?

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.

What licence does Create Setting Panel use?

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.

How many tokens does Create Setting Panel use?

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.

What are the alternatives to Create Setting Panel?

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.

Who maintains Create Setting Panel?

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.