Agent skill

Sync Catalog

by kubeflow in kubeflow/hub

Sync a catalog plugin's generated code and domain layer after OpenAPI spec changes.

Apache-2.0Auto-check passedBackend & APIs

Install Sync Catalog

skills CLI
$ npx skills add kubeflow/hub --skill sync-catalog -a claude-code

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

GitHub CLI
$ gh skill install kubeflow/hub sync-catalog --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/kubeflow/hub.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/sync-catalog .claude/skills/sync-catalog && 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
sync-catalog
GitHub stars
186
Token cost
~2.1k tokens
SKILL.md length
801 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
Apache-2.0

At a glance

Sync a catalog plugin's generated code and domain layer after OpenAPI spec changes.

  • Works in 6 steps: Identify Plugin → Regenerate Auto-Generated Code → Sync Datastore Entries + Entity Mappings → …
  • Tasks that involve OpenAPI specifications
  • SKILL.md covers Phase 1: Identify Plugin, Phase 2: Regenerate…, Phase 3: Sync Datastore… and Phase 4: Sync Service…, plus 2 more sections
  • Calls make and go

What it does

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.

When your agent uses it

  • Tasks that involve OpenAPI specifications

Example prompts

  • “/sync-catalog”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Identify Plugin
  2. Regenerate Auto-Generated Code
  3. Sync Datastore Entries + Entity Mappings
  4. Sync Service Implementation
  5. Sync DB Provider + Property-to-API Mapping
  6. Verify + Report

What it can do on your machine

Read from SKILL.md and the folder at commit 3369d7e. 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

    Shell commands in SKILL.md call:

    • make
    • go

    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

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.

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

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 kubeflow/hub at commit 3369d7e, republished under its Apache-2.0 licence (© kubeflow). 801 words, ~2,115 tokens.

Download SKILL.mdSave it as .claude/skills/sync-catalog/SKILL.md (or your agent's skills folder).
name
sync-catalog
description
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.
user-invocable
true

Sync Catalog Plugin

Propagate OpenAPI spec changes through all downstream files for a catalog plugin.

Phase 1: Identify Plugin

Ask the user which plugin to sync. Validate by checking that these exist:

  • api/openapi/src/plugins/<name>.yaml — the spec
  • catalog/internal/plugins/<name>/plugin.go — the plugin entry point
  • catalog/internal/catalog/<name>catalog/ — the domain package

Phase 2: Regenerate Auto-Generated Code

Run these three make targets in order:

bash
make api/openapi/catalog.yaml
make -C catalog gen/openapi-server
make -C catalog gen/openapi

Report 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.

Phase 3: Sync Datastore Entries + Entity Mappings

3a: Detect new fields

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_id
  • createTimeSinceEpoch, lastUpdateTimeSinceEpoch
  • customProperties, custom_properties
  • nextPageToken, pageSize, size, items (list-level fields)
3b: Ask user which fields to persist

Present the diff to the user. For each new field show:

  • Field name
  • OpenAPI type
  • Suggested Add*() call based on type:
    • string → AddString
    • boolean → AddBoolean
    • integer / number → AddString (stored as string property by convention)
    • array / object → AddStruct

Ask: "Which of these new fields should be persisted in the datastore?" (multi-select)

3c: Apply changes

For each confirmed field, update three files:

1. DatastoreEntries in catalog/internal/plugins/<name>/plugin.go:

  • Find the entity's DatastoreEntry block
  • Add the new .Add*("<field_name>") call before the closing comma

2. Entity mappings in catalog/internal/catalog/<name>catalog/service/entity_mappings_<entity>.go:

  • Add entry to the properties map variable:
    go
    "<field_name>": {Location: filter.PropertyTable, ValueType: filter.<ValueType>, Column: "<field_name>"},
    Where ValueType is:
    • StringValueType for string/integer/number
    • BoolValueType for boolean
    • ArrayValueType for array

3. Entity mappings test in catalog/internal/catalog/<name>catalog/service/entity_mappings_<entity>_test.go:

  • Add entry to the expected properties map with the same definition
3d: Ask about filterability

Ask the user: "Which of these fields should be directly filterable as query parameters?" (multi-select from the persisted fields)

For filterable fields:

  • Add a field to the ListOptions struct in catalog/internal/catalog/<name>catalog/models/<entity>.go
  • Add a WHERE clause in apply<Entity>ListFilters in catalog/internal/catalog/<name>catalog/service/<entity>.go:
    go
    if listOptions.<FieldName> != nil {
        query = query.Where("<field_name> = ?", *listOptions.<FieldName>)
    }

Phase 4: Sync Service Implementation

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:

  • Changed signatures: Update the implementation method to match the new interface signature. Keep the existing body logic, just fix the parameters.
  • New methods: Add a stub implementation returning an empty/not-found response (same pattern as init-catalog Phase 6).
  • Removed methods: Delete the implementation method.

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.

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

Phase 5: Sync DB Provider + Property-to-API Mapping

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.

5a: Check if db_provider has real query methods

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:

  1. Export the type: rename dbXxxCatalogImpl to DBXxxCatalog so the service impl can reference it.

  2. Add List method: query the repository with ListOptions, convert results via mapping function, return the API list type with pagination.

  3. Add Get method: parse the ID, call GetByID, convert via mapping function, return the API type or 404.

  4. 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).

5b: Sync the property-to-API mapping function

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 fields (*string): res.<Field> = prop.StringValue
  • Boolean fields (*bool): res.<Field> = prop.BoolValue
  • Array fields ([]string): JSON unmarshal from prop.StringValue
  • Integer fields (*int32): parse from prop.IntValue or prop.StringValue

When new fields were added to DatastoreEntries in Phase 3, add corresponding cases here.

5c: Update RegisterRoutes if needed

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:

go
provider := <pkg>.NewDB<PascalName>Catalog(p.services, p.loader.Sources)
svc := openapi.New<PascalName>CatalogServiceAPIService(provider)

Phase 6: Verify + Report

bash
go build ./catalog/...
go test ./catalog/internal/catalog/<name>catalog/... -count=1

If build fails, read errors and fix. Common issues:

  • Unused imports after method removal
  • Missing imports after adding filter logic (fmt, utils)
  • Interface signature mismatches
  • Pointer vs value mismatches on list fields (*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

Files

Just SKILL.md in .agents/skills/sync-catalog of kubeflow/hub.

Open the folder on GitHubat commit 3369d7e

Compare with similar skills

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.

Sync Catalog compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Sync Catalog this skillkubeflow/hub186—~2.1kAutomated safety check: PassApache-2.0
ToolJet Marketplace Plugin BuilderToolJet/ToolJet41k—~2.1kAutomated safety check: PassAGPL-3.0
Step Partsearthtojake/text-to-cad18k1 repos~1.5kAutomated safety check: PassMIT
API DesignerJeffallan/claude-skills12k2 repos~2kAutomated safety check: PassMIT
OpenAPI to MCP Servermcp-use/mcp-use11k—~5.2kAutomated safety check: PassApache-2.0
Use Yaakmountain-loop/yaak19k—~1.9kAutomated safety check: PassMIT

Similar skills

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

    41k GitHub stars~2.1k tokensUpdated today
    Backend & APIsAuto-check passed
  • Step Parts

    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…

    18k GitHub starsUsed in 1 repo~1.5k tokens
    Backend & APIsAuto-check passed
  • API Designer

    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.

    12k GitHub starsUsed in 2 repos~2k tokens
    Backend & APIsAuto-check passed
  • OpenAPI to MCP Server

    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.

    11k GitHub stars~5.2k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Use Yaak

    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…

    19k GitHub stars~1.9k tokensUpdated today
    Backend & APIsAuto-check passed
  • Old Coder API Design

    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.

    749 GitHub starsUsed in 1 repo~3.4k tokens
    Backend & APIsAuto-check passed

More from kubeflow/hub

  • Generate or update sample YAML data for a catalog plugin. An agent skill from kubeflow/hub.

    186 GitHub stars~1.1k tokensUpdated yesterday
    Auto-check passed
  • 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…

    186 GitHub stars~5.4k tokensUpdated yesterday
    Auto-check: notes
  • Catalog Add Route

    kubeflow/hub

    Add an endpoint or query parameter to a catalog plugin's OpenAPI spec.

    186 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed
  • Init Catalog

    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.

    186 GitHub stars~3.9k tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Sync Catalog

What does Sync Catalog do?

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.

When should I use Sync Catalog?

Sync Catalog fits situations like: tasks that involve OpenAPI specifications.

How do I install Sync Catalog in Claude Code?

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.

How do I install Sync Catalog in Codex?

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.

Can I use Sync Catalog 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 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.

What does Sync Catalog need to run?

Going by SKILL.md and its folder, Sync Catalog needs the command-line tools its instructions call (make and go).

Does Sync Catalog 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 Sync Catalog 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 Sync Catalog use?

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.

How many tokens does Sync Catalog use?

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.

What are the alternatives to Sync Catalog?

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.

Who maintains Sync Catalog?

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.