ToolJet Marketplace Plugin Builder
ToolJet/ToolJet
Turns an API description, such as an OpenAPI file or a Postman collection, into a connector plugin for ToolJet's marketplace and checks it with the repo's validator.
Sync a catalog plugin's generated code and domain layer after OpenAPI spec changes.
$ npx skills add kubeflow/hub --skill sync-catalog -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kubeflow/hub sync-catalog --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/kubeflow/hub.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/sync-catalog .claude/skills/sync-catalog && 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 "sync-catalog" agent skill from https://github.com/kubeflow/hub/tree/main/.agents/skills/sync-catalog into .claude/skills/sync-catalog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-catalog", 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/kubeflow/hub/tree/main/.agents/skills/sync-catalogType 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 kubeflow/hub --skill sync-catalog -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kubeflow/hub sync-catalog --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kubeflow/hub.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/sync-catalog .agents/skills/sync-catalog && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sync-catalog" agent skill from https://github.com/kubeflow/hub/tree/main/.agents/skills/sync-catalog into .agents/skills/sync-catalog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-catalog", 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 kubeflow/hub --skill sync-catalog -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kubeflow/hub sync-catalog --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kubeflow/hub.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/sync-catalog .cursor/skills/sync-catalog && 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 "sync-catalog" agent skill from https://github.com/kubeflow/hub/tree/main/.agents/skills/sync-catalog into .cursor/skills/sync-catalog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-catalog", 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/kubeflow/hub.git --path .agents/skills/sync-catalog--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 kubeflow/hub --skill sync-catalog -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kubeflow/hub sync-catalog --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kubeflow/hub.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/sync-catalog .gemini/skills/sync-catalog && 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 "sync-catalog" agent skill from https://github.com/kubeflow/hub/tree/main/.agents/skills/sync-catalog into .gemini/skills/sync-catalog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-catalog", 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 kubeflow/hub sync-catalogInstalls 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 kubeflow/hub --skill sync-catalog -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kubeflow/hub.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/sync-catalog .github/skills/sync-catalog && 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 "sync-catalog" agent skill from https://github.com/kubeflow/hub/tree/main/.agents/skills/sync-catalog into .github/skills/sync-catalog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-catalog", 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 kubeflow/hub --skill sync-catalog -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kubeflow/hub sync-catalog --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kubeflow/hub.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/sync-catalog .opencode/skills/sync-catalog && 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 "sync-catalog" agent skill from https://github.com/kubeflow/hub/tree/main/.agents/skills/sync-catalog into .opencode/skills/sync-catalog/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sync-catalog", 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.
sync-catalogSync a catalog plugin's generated code and domain layer after OpenAPI spec changes.
Sync Catalog is an agent skill from kubeflow/hub. Sync a catalog plugin's generated code and domain layer after OpenAPI spec changes. Regenerates stubs, detects new fields, updates datastore entries, entity mappings, and service implementation. Interactive — asks the user which new fields to persist and make filterable.
Its SKILL.md is about 2.1k 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 Backend & APIs, covering OpenAPI specifications. It works with OpenAPI. The repository describes itself as: Model Registry provides a single pane of glass for ML model developers to index and manage models, versions, and ML artifacts metadata. It fills a gap between model… The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3369d7e. 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:
makegoFrom 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.
Sync Catalog loads about 2.1k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 801 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 kubeflow/hub at commit 3369d7e, republished under its Apache-2.0 licence (© kubeflow). 801 words, ~2,115 tokens.
.claude/skills/sync-catalog/SKILL.md (or your agent's skills folder).Propagate OpenAPI spec changes through all downstream files for a catalog plugin.
Ask the user which plugin to sync. Validate by checking that these exist:
api/openapi/src/plugins/<name>.yaml — the speccatalog/internal/plugins/<name>/plugin.go — the plugin entry pointcatalog/internal/catalog/<name>catalog/ — the domain packageRun these three make targets in order:
make api/openapi/catalog.yaml
make -C catalog gen/openapi-server
make -C catalog gen/openapiReport what was regenerated. Check go build ./catalog/... — if it fails, proceed to Phase 4 (service sync) first since interface mismatches are the most common cause.
Note: catalog/internal/server/openapi/type_asserts_overrides.go is a hand-maintained file that overrides auto-generated assert functions for polymorphic types (e.g., AssertCatalogArtifactRequired, AssertFilterOptionRequired). If gen/openapi-server regenerates type_asserts.go and the build fails with undefined assert function errors, check whether this overrides file needs updating for the new types.
Read the plugin's OpenAPI spec (api/openapi/src/plugins/<name>.yaml) and extract all properties from each entity schema under components.schemas.
Read the current DatastoreEntries in catalog/internal/plugins/<name>/plugin.go and extract the registered property names (the string arguments to .AddString(), .AddStruct(), .AddBoolean()).
Compute the diff: fields in the spec but not in DatastoreEntries.
Exclude these fields from the diff (they are handled automatically by the schema layer, not as properties):
id, name, externalId, external_idcreateTimeSinceEpoch, lastUpdateTimeSinceEpochcustomProperties, custom_propertiesnextPageToken, pageSize, size, items (list-level fields)Present the diff to the user. For each new field show:
Add*() call based on type:string → AddStringboolean → AddBooleaninteger / number → AddString (stored as string property by convention)array / object → AddStructAsk: "Which of these new fields should be persisted in the datastore?" (multi-select)
For each confirmed field, update three files:
1. DatastoreEntries in catalog/internal/plugins/<name>/plugin.go:
DatastoreEntry block.Add*("<field_name>") call before the closing comma2. Entity mappings in catalog/internal/catalog/<name>catalog/service/entity_mappings_<entity>.go:
"<field_name>": {Location: filter.PropertyTable, ValueType: filter.<ValueType>, Column: "<field_name>"},StringValueType for string/integer/numberBoolValueType for booleanArrayValueType for array3. Entity mappings test in catalog/internal/catalog/<name>catalog/service/entity_mappings_<entity>_test.go:
Ask the user: "Which of these fields should be directly filterable as query parameters?" (multi-select from the persisted fields)
For filterable fields:
ListOptions struct in catalog/internal/catalog/<name>catalog/models/<entity>.goapply<Entity>ListFilters in catalog/internal/catalog/<name>catalog/service/<entity>.go:if listOptions.<FieldName> != nil {
query = query.Where("<field_name> = ?", *listOptions.<FieldName>)
}Read the regenerated service interface from catalog/internal/server/openapi/api_<name>.go.
Read the current service implementation from catalog/internal/server/openapi/api_<name>_catalog_service_service.go.
Compare method signatures:
If the service implementation file doesn't exist yet (e.g., it was deleted during a regen), recreate it following the init-catalog Phase 6 pattern.
The db_provider (catalog/internal/catalog/<name>catalog/db_<name>.go) is the bridge between
the repository layer and the OpenAPI models. When the spec gains new fields, the property-to-API
mapping function must be updated to include them.
Read catalog/internal/catalog/<name>catalog/db_<name>.go. If it still has the generated TODO
stubs (no List* or Get* methods), wire it up:
Export the type: rename dbXxxCatalogImpl to DBXxxCatalog so the service impl can reference it.
Add List method: query the repository with ListOptions, convert results via mapping function, return the API list type with pagination.
Add Get method: parse the ID, call GetByID, convert via mapping function, return the API type or 404.
Add a ListParams struct for the method parameters (Name, SourceIDs, FilterQuery, OrderBy, SortOrder, NextPageToken, PageSize).
Note: Plugins do NOT implement a FindSources method — sources are managed by the
model catalog via the shared /sources endpoint with assetType filtering.
Reference: catalog/internal/catalog/modelcatalog/db_catalog.go (ListModels, GetModel, mapDBModelToAPIModel).
Read the generated client model struct from catalog/pkg/openapi/model_<entity>.go to get all
available fields and their Go types.
Read the current mapDB<Entity>ToAPI function (or create it if missing). For each field in the
API model that comes from a stored Property, ensure there's a case in the Properties switch:
*string): res.<Field> = prop.StringValue*bool): res.<Field> = prop.BoolValue[]string): JSON unmarshal from prop.StringValue*int32): parse from prop.IntValue or prop.StringValueWhen new fields were added to DatastoreEntries in Phase 3, add corresponding cases here.
If the db_provider type or constructor changed (e.g., from unexported to exported, or new
constructor parameters), update RegisterRoutes in catalog/internal/plugins/<name>/plugin.go
to match.
Ensure the service constructor receives the provider:
provider := <pkg>.NewDB<PascalName>Catalog(p.services, p.loader.Sources)
svc := openapi.New<PascalName>CatalogServiceAPIService(provider)go build ./catalog/...
go test ./catalog/internal/catalog/<name>catalog/... -count=1If build fails, read errors and fix. Common issues:
fmt, utils)*int32 vs int32, *string vs string)Print summary:
Sync complete for plugin "<name>":
Regenerated:
- api/openapi/catalog.yaml (merged spec)
- catalog/internal/server/openapi/api_<name>*.go (server stubs)
- catalog/pkg/openapi/model_*.go (client types)
Datastore entries updated:
- <list of added fields with Add* type>
Entity mappings updated:
- <list of added property definitions>
DB provider:
- <methods added/updated, mapping cases added>
Service implementation:
- <methods updated/added/removed>
Build: PASS/FAIL
Tests: PASS/FAIL
Remaining manual work:
- Add complex filter logic for fields that need more than equality matching
- Update loader if new fields affect data ingestion© kubeflow, 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 .agents/skills/sync-catalog of kubeflow/hub.
Open the folder on GitHubat commit 3369d7e
Sync Catalog 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 |
|---|---|---|---|---|---|---|
| Sync Catalog this skillkubeflow/hub | 186 | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| ToolJet Marketplace Plugin BuilderToolJet/ToolJet | 41k | — | ~2.1k | Automated safety check: Pass | AGPL-3.0 | |
| Step Partsearthtojake/text-to-cad | 18k | 1 repos | ~1.5k | Automated safety check: Pass | MIT | |
| API DesignerJeffallan/claude-skills | 12k | 2 repos | ~2k | Automated safety check: Pass | MIT | |
| OpenAPI to MCP Servermcp-use/mcp-use | 11k | — | ~5.2k | Automated safety check: Pass | Apache-2.0 | |
| Use Yaakmountain-loop/yaak | 19k | — | ~1.9k | Automated safety check: Pass | MIT |
ToolJet/ToolJet
Turns an API description, such as an OpenAPI file or a Postman collection, into a connector plugin for ToolJet's marketplace and checks it with the repo's validator.
earthtojake/text-to-cad
Find, evaluate, and download common purchasable CAD parts from step.parts, including named off-the-shelf actuators, servos, motors, electronics boards, connectors, screws, bolts, nuts, washers…
Jeffallan/claude-skills
Designs REST and GraphQL APIs from resource modeling to an OpenAPI 3.1 contract, with versioning, pagination and RFC 7807 error handling.
mcp-use/mcp-use
Turns an OpenAPI or Swagger spec into an MCP server with the mcp-use TypeScript SDK, mapping each operation to a tool, wiring auth, testing and deploying.
mountain-loop/yaak
A skill your agent uses when the user mentions Yaak, a Yaak workspace, or the yaak command, or asks to call, hit, or smoke test HTTP/REST endpoints, save or organize API requests for reuse or manual…
AmazingAng/old-coder
Reviews or designs an HTTP/JSON API's endpoints, auth, pagination, versioning and deprecations, guarding against inventing a bespoke interface or silently breaking consumers.
kubeflow/hub
Generate or update sample YAML data for a catalog plugin. An agent skill from kubeflow/hub.
kubeflow/hub
A skill your agent uses when the user asks to "create an agent catalog", "generate agent catalog source", "build agent catalog from repo", "catalog my agents", or wants to scan a repository…
kubeflow/hub
Add an endpoint or query parameter to a catalog plugin's OpenAPI spec.
kubeflow/hub
Scaffold a new catalog plugin: run catalog-gen, replace all panic("TODO") stubs with minimal working implementations, generate OpenAPI server stubs, and verify the build compiles.
Works with
Categories
Sync a catalog plugin's generated code and domain layer after OpenAPI spec changes. Sync Catalog is an agent skill from kubeflow/hub. Sync a catalog plugin's generated code and domain layer after OpenAPI spec changes.
Sync Catalog fits situations like: tasks that involve OpenAPI specifications.
Run `npx skills add kubeflow/hub --skill sync-catalog -a claude-code`. Or copy the skill folder (.agents/skills/sync-catalog in kubeflow/hub) into .claude/skills/sync-catalog in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kubeflow/hub --skill sync-catalog -a codex`. Or copy the skill folder (.agents/skills/sync-catalog in kubeflow/hub) into .agents/skills/sync-catalog 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 kubeflow/hub --skill sync-catalog -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sync-catalog, .gemini/skills/sync-catalog, .github/skills/sync-catalog and .opencode/skills/sync-catalog in your project.
Going by SKILL.md and its folder, Sync Catalog needs the command-line tools its instructions call (make and go).
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.
Sync Catalog 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 2.1k tokens (SKILL.md is roughly 8.5k 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 Sync Catalog: ToolJet Marketplace Plugin Builder (ToolJet/ToolJet, 41k stars), Step Parts (earthtojake/text-to-cad, 18k stars), API Designer (Jeffallan/claude-skills, 12k stars) and OpenAPI to MCP Server (mcp-use/mcp-use, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kubeflow (a GitHub organization) maintains it in kubeflow/hub, which has 186 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 6, 2026.
Source: kubeflow/hub on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.