Repository navigation
Releases: sogeisetsu/opencode-go-model-picker
Release list
v1.4.0
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.mjsnow reportsmode,hidden,traits(worked out from the agent's description, name and mode, with known roles taking priority) andprovenance.fetchedAt. Built-in names it skips show up underskippedBuiltinsinstead of disappearing, and the workflow now asks you about any entry that might be one of your own agents. - New flags:
--include-builtin-names,--builtinand--extra-builtinfor agent discovery, and--rebuildfor 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 --rebuildto 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.versioninSKILL.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.mdandobserver.mdbehave 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
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 isdeepseek-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=1before running
anyscripts/refresh-*.mjs, and judge success from stdout JSON — a stderr warning
and a PowerShell exit code of 1 are not failures.
Documentation
SKILL.mdis now a focused decision surface; the details live inreferences/,
which gained section lists and clearer failure handling.- If you install by copying files, re-copy
SKILL.md,references/, andscripts/.
v1.1.0
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 datamarkers 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, anagentblock foropencode.jsonc(or the frontmattermodel: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
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/qualityrecommendation 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 whosemodelis 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-slimpresets, 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-registrystatusverification 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) withscripts/refresh-prices.mjs, and a committed LMArena score seed (references/model-scores.json) withscripts/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-slimviareferences/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/removedstatus blocks an id, while an absentstatusfield is the registry's default-active convention. - README (English and Chinese) now documents the explicit failure-path handling.
Fixed
scripts/refresh-snapshot.mjsno longer drops top-level snapshot keys such aspreferenceson write, so the remembered recommendation mode actually persists across runs.- Snapshot
schemaVersionnow writes2, matchingreferences/model-snapshot.md. scripts/refresh-prices.mjsoutput now separates seed coverage (seedUsed), priced count (priced 40/42), and null-upstream ids instead of a single misleadingmatchednumber.
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-pickerWindows (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
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