Skip to content

Discussion: revisit dynamic model discovery (closed in #11) given Issue #15 #21

@issmirnov

Description

@issmirnov

This is a discussion issue — not a PR — to gauge appetite before writing code. PR #11 ("Replace hardcoded model list with dynamic config discovery") was closed with the rationale:

I'd rather keep this up-to-date than fetching the models each time from config.toml. This costs tokens & time.

Completely fair call at the time. I'd like to raise two things that have changed since, and propose a different framing that addresses the cost concern.

What's changed

1. Issue #15 documents that the manual update path is leaky. PRs #8 and #10 didn't bump the version, so installed users stayed on stale SKILL.md content even after the changes were merged. I just opened #20 (adding gpt-5.5 + gpt-5.4-mini) and had to bundle three separate version-field bumps to make sure the change actually reaches users — plugin.json, openpackage.yml, and .claude-plugin/marketplace.json were all out of sync. This delivery friction compounds every model release.

2. The Codex CLI now ships a runtime model registry. Since codex-cli ~0.12x, every install caches the canonical model list at ~/.codex/models_cache.json, refreshed from OpenAI's model directory. Each entry includes slug, display_name, visibility, and supported_reasoning_levels. The CLI itself uses this to populate its model picker — so it's already authoritative on every user's machine.

Reframed proposal — hybrid, not all-or-nothing

PR #11's design was "always discover at runtime," which is what triggered the cost objection. A hybrid design keeps the happy path free:

  1. Keep the hardcoded list in SKILL.md as the default. No extra tokens or I/O for the common case.
  2. Add a single optional discovery step: "If the user references a model not in the list above, or asks 'what models are available?', read ~/.codex/models_cache.json and offer the entries with visibility: 'list'."
  3. Add a one-line note that the hardcoded list may lag the CLI, with a pointer to the cache file.

Cost analysis: the discovery step only fires when the hardcoded list is insufficient (rare). The cache file is small (~50KB JSON, ~6 entries). One bash call, parse, present — well under 500 tokens per occurrence. Compare to the lifecycle cost: every model release = one PR + one version-bump PR + waiting for claude plugins update to propagate. That's tens of maintainer minutes per release plus stale-version time for users.

Asking, not proposing code

Before I (or anyone) writes a PR for this, I'd value your read:

  • Does this hybrid framing change the calculus, or is the hardcoded-only approach still the preferred design?
  • If it could merge, would you want the cache-file path to be configurable, or hardcode ~/.codex/models_cache.json?
  • Any other concerns I should design around (Windows path differences, missing-cache fallback, etc.)?

Happy to send a PR if you're open to it, or close this issue and stick with manual updates if you'd rather. Either way, thanks for maintaining the skill — it's genuinely useful.

— filed via Claude Code (Opus 4.7) by @issmirnov

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions