Skip to content

Releases: sogeisetsu/opencode-go-model-picker

v1.4.0

Choose a tag to compare

@sogeisetsu sogeisetsu released this 17 Oct 14:57

What's new

  • Our scripts now share two small helpers. One reads JSON that carries a BOM and writes it atomically (temp file, then rename over the target). The other re-runs a script with a proxy when your system has one. So all four network scripts respect a configured proxy, and a Node runtime that can't use one says so on stderr instead of looking like a network outage.
  • Agent discovery is more complete. scripts/discover-agents.mjs now reports mode, hidden, traits (worked out from the agent's description, name and mode, with known roles taking priority) and provenance.fetchedAt. Built-in names it skips show up under skippedBuiltins instead of disappearing, and the workflow now asks you about any entry that might be one of your own agents.
  • New flags: --include-builtin-names, --builtin and --extra-builtin for agent discovery, and --rebuild for the snapshot refresh.

Changed

  • Refreshes now write the snapshot safely. If the existing snapshot can't be parsed, the script stops with a clear message and leaves your file alone — including your remembered mode and cached scores. It used to quietly start from an empty cache. Use refresh-snapshot.mjs --rebuild to discard it on purpose.
  • The catalog fetcher and the snapshot summary use the shared helpers too, so what one script writes is what the next one expects.
  • The README version badge no longer drifts from the skill. The badge is generated from metadata.version in SKILL.md, and the doc check fails if the badge or either changelog disagrees — a 1.2.0 badge on a 1.3.0 skill can't return unnoticed.
  • Observer.md and observer.md behave the same now: known-role trait matching ignores case.
  • Run the three refresh commands one after another, never in parallel — they write the same snapshot.
  • The proxy warning now fires for every runtime below the version we verified (22.23.1), not only for major versions below 22.

Fixed

  • Reading a JSON file now treats only a missing file as "no file". A permission or sharing error is an error, so a snapshot that exists but can't be read is never replaced by a fresh one. And when an atomic replace fails — a file held open on Windows — the message names the path and says the previous file is intact, instead of a bare system error.

Full diff: v1.3.0...v1.4.0

v1.3.0

Choose a tag to compare

@sogeisetsu sogeisetsu released this 03 Oct 18:06

Two versions of work are rolled up here (v1.2.0 and v1.3.0).

Better agent discovery and chain safety

  • New scripts/discover-agents.mjs: a read-only, zero-dependency CLI that lists your
    custom agents (slim and native sources) and flags risky fallback chains — duplicate
    model ids, chains outside 2–4 entries, non-Go fallback ids not confirmed in the
    local registry, and vision lanes whose model is not marked vision-verified. It
    prints compact JSON instead of making you read config files by hand.
  • New scripts/snapshot-summary.mjs: a compact digest of the cached model snapshot
    (~97% shorter than the raw file), with --ids, --trait, and --json.

Clearer recommendations

  • The recommendation table now includes a role overview column: a one-line,
    plain-language description of what each agent does, so a suggestion can be judged
    without knowing the role by heart.
  • A dominance check now closes model allocation: if another model is no worse on
    price, throughput and the trait-relevant capability (and strictly better on at
    least one), the dominated model is replaced — or must be justified in the "why"
    column (for example, a cross-provider fallback).

Correct, dated vision data

  • Image-input support is recorded with sources and dates: MiMo-V2.6 Flash/Pro and
    DeepSeek V4.1 Flash accept images. DeepSeek's Go id, lab version name and API
    request name are now spelled out (the request model name is deepseek-flash).
  • JS-rendered provider pages fall back to searching the official domain instead of
    being treated as "no evidence".

Smoother runs on Windows

  • Documented the Windows refresh path: set $env:NODE_USE_ENV_PROXY=1 before running
    any scripts/refresh-*.mjs, and judge success from stdout JSON — a stderr warning
    and a PowerShell exit code of 1 are not failures.

Documentation

  • SKILL.md is now a focused decision surface; the details live in references/,
    which gained section lists and clearer failure handling.
  • If you install by copying files, re-copy SKILL.md, references/, and scripts/.

v1.1.0

Choose a tag to compare

@sogeisetsu sogeisetsu released this 26 Sep 04:22

opencode-go-model-picker v1.1.0

Reworks the skill's output into a scannable three-part body plus a data appendix. The read-only apply gate, the recommendation modes, and the fallback-chain policy are unchanged.

What's Changed

Changed

  • Recommendation table — one row per custom agent with exactly: agent name, capability focus (trait), current model, recommended model, and the cost/throughput/capability reason. ⚠ limited-time / ⚠ geo-restricted / ⚠ trains on your data markers live in the recommended-model cell, with their full explanation in the highlights.
  • Paste-ready config — a complete copy-pasteable JSONC block per detected source: a preset block for oh-my-opencode-slim.json, an agent block for opencode.jsonc (or the frontmatter model: line for Markdown agents), both when both are detected — each labeled with its paste target, with fallback chains preserved where the source supports them.
  • Highlights — one paragraph covering the recommendation mode and its origin, whether the balanced price ceiling held, the full text of every ⚠ flag, plan changes vs the last snapshot, and any pick that needs a human decision.
  • Data appendix — sources with fetch dates (seed values explicitly labeled with the seed's date), the snapshot diff, the relevant-models price table, the first-run decision-factors table, the manual-verification list, and the verify commands.
  • The apply gate is unchanged: the skill still stops and asks before touching any config.

Synced across README.md / README-ZH.md, CONTRIBUTING (EN/ZH), docs/index.html, and test-prompts.json.

Full changelog: see CHANGELOG.md.

Full Changelog: v1.0.0...v1.1.0

v1.0.0

Choose a tag to compare

@sogeisetsu sogeisetsu released this 25 Sep 07:38

opencode-go-model-picker v1.0.0

First stable release of opencode-go-model-picker — an OpenCode Agent Skill that picks or rebalances the models used by your custom OpenCode agents (native agents, oh-my-opencode-slim presets, and agent-injecting plugins) against the latest OpenCode Go plan. Read-only by default: it fetches the plan, produces recommendations with fallback chains, and never edits your config without a preview and an explicit confirmation.

Highlights

  • Plan-aware allocation — fetches the live Go plan every run (models, per-model monthly limits, limited-time promos, estimated request counts) and allocates a model per agent by role trait, under budget / balanced / quality recommendation modes with a two-question first-run diagnostic.
  • Fallback chains — builds ordered 2–4 entry failover chains (best fit → cheaper Go model → different provider) for chain-capable sources such as oh-my-opencode-slim, and explicitly refuses to invent arrays for sources whose model is a single value.
  • Never invents numbers — every price, limit, and capability is reported with its source and fetch date. Committed price and LMArena score seeds act as dated offline fallbacks; anything unverifiable is marked for manual verification.
  • Read-only by default — output ends at an explicit 🛑 gate; nothing is written to your configuration without your confirmation.
  • Multi-source discovery — native OpenCode agents (opencode.json/opencode.jsonc, Markdown agent files), oh-my-opencode-slim presets, and other plugins that inject agents, through uniform read-only source adapters. OpenCode's built-in agents are always skipped.

What's Changed

Added

  • Explicit Failure Modes (if → then → still failing) table in the skill: serial re-run on snapshot write races, dated seed/cache fallbacks when endpoints or the network are unreachable, local-registry status verification for non-Go fallback ids, and a zero-custom-agent stop branch.
  • Visible 🛑/🔴 checkpoint markers at the output gate, the first-run mode diagnostic, and the apply gate.
  • Committed price seed (references/model-prices.json) with scripts/refresh-prices.mjs, and a committed LMArena score seed (references/model-scores.json) with scripts/refresh-scores.mjs (no API key, no browser).
  • Three recommendation modes (budget, balanced, quality) plus an auditable decision-factors table in the report.
  • Estimated request counts (per 5h / week / month) as a first-class throughput signal — equal dollar limits do not mean equal request counts.
  • Mandatory caveat flags for limited-time multipliers, geo-restricted models, and privacy-for-discount "Contributor" tiers that train on your prompts (opt-in, never recommended silently).
  • Generalized agent discovery beyond oh-my-opencode-slim via references/agent-sources.md (uniform inventory record, role-trait mapping, known-role overrides).

Changed

  • Refresh strategy deduplicated to a single source of truth in the skill; Failure Modes row 5 disambiguated — an explicit deprecated/removed status blocks an id, while an absent status field is the registry's default-active convention.
  • README (English and Chinese) now documents the explicit failure-path handling.

Fixed

  • scripts/refresh-snapshot.mjs no longer drops top-level snapshot keys such as preferences on write, so the remembered recommendation mode actually persists across runs.
  • Snapshot schemaVersion now writes 2, matching references/model-snapshot.md.
  • scripts/refresh-prices.mjs output now separates seed coverage (seedUsed), priced count (priced 40/42), and null-upstream ids instead of a single misleading matched number.

Installation

Clone the repository into your OpenCode skills directory so the folder name matches the skill's name:

Linux / macOS

git clone https://github.com/sogeisetsu/opencode-go-model-picker.git \
  ~/.config/opencode/skills/opencode-go-model-picker

Windows (PowerShell)

git clone https://github.com/sogeisetsu/opencode-go-model-picker.git `
  "$env:USERPROFILE\.config\opencode\skills\opencode-go-model-picker"

Minimal install: the skill only uses SKILL.md, references/, and scripts/ at runtime — copying just those three is enough.

Verify the helper script runs:

node scripts/fetch-go-models.mjs   # prints { fetchedAt, source, count, ids }

Full Changelog

https://github.com/sogeisetsu/opencode-go-model-picker/blob/main/CHANGELOG.md

v0.1.0

Choose a tag to compare

@sogeisetsu sogeisetsu released this 13 Sep 12:51

OpenCode Go Model Picker v0.1.0

First public release: an OpenCode Agent Skill that picks the most cost-effective
OpenCode Go model for each oh-my-opencode-slim agent, based on the current Go
plan — read-only, source-cited, and fallback-ready.

Highlights

  • Fresh on every run — fetches the current Go plan, so it never recommends a
    retired model or a stale price.
  • Read-only by default — you see the exact change before anything is written.
  • Per-agent recommendations with ordered fallback chains, so a capped model
    does not end the session.
  • Source-cited — every number carries a source and a fetch date, and
    unverifiable values are flagged instead of guessed.
  • Helper scripts — fetch-go-models.mjs (live catalog), check-docs.mjs
    (relative links and English/Chinese doc-pair validation), and
    generate-assets.mjs (SVG icon and banners).
  • Bilingual documentation (English / 中文) and a new GitHub Pages landing
    page: https://sogeisetsu.github.io/opencode-go-model-picker/

Quick start

Install the skill, then invoke it in OpenCode with its slash command — no input
needed:

/opencode-go-model-picker

See the README
for installation.

Full Changelog: https://github.com/sogeisetsu/opencode-go-model-picker/commits/v0.1.0