Skip to content

OpenCode plugin 0.1.1

Choose a tag to compare

@beastlabai beastlabai released this 26 Oct 20:07
· 247 commits to master since this release

First release of opencode-multi-llm, the multi-llm workflow inside OpenCode, installed from npm. multi-llm runs plan reviews, task generation, implementation and code review across several LLM CLIs. The package adds a /multi-llm command and a model-callable multi_llm tool.

Install

Add the exact pin to ~/.config/opencode/opencode.json, then restart OpenCode:

{ "plugin": ["opencode-multi-llm@0.1.1"] }

Check that it loaded. Every failure on this route is silent: the entry stays listed and nothing reports an error.

opencode debug config | jq '.command["multi-llm"] != null'   # true = loaded

Then, once per repository, run /multi-llm --init. It writes <git-root>/.multi-llm/providers.yaml, where you pick your providers and models. After that, run a workflow: /multi-llm plans/my-feature.md. Headless, the command is opencode run --command multi-llm -- "plans/my-feature.md".

  • Requirements: opencode 1.19.4 or newer, enforced through engines (an older opencode refuses the package with a compatibility error), and uv on PATH, which supplies Python itself.
  • First run: the first start downloads the package, and the first /multi-llm builds its Python environment (pyyaml alone). Both need the network.
  • Always pin. OpenCode caches a plugin under the exact string in plugin, so an unpinned name or a range resolves once and never updates. To upgrade, change the pin and restart.

Full instructions: README §1.3 and docs/hosts.md. The latter covers troubleshooting, uninstall and local builds.

Coming from the file route

If you installed with install-host opencode, remove that command file from the checkout or plugin install you ran it from, then add the pin above:

uv run --frozen --no-dev --project "$SKILL" -- python "$SKILL/multi_llm.py" uninstall-host opencode --dry-run   # lists the files
uv run --frozen --no-dev --project "$SKILL" -- python "$SKILL/multi_llm.py" uninstall-host opencode

A leftover file does no harm, because the package's command replaces it at startup. install-host opencode --check reports BOTH routes until it's removed.

What was checked

  • The full local release gate (make opencode-package-check) on f4f024c7: rows 1–9 and 5b pass. That includes:

    • a clean install of the exact tarball by opencode 1.19.4, in a committed project and in a project with no commits;
    • five container scenarios run through the installed package with stub models and no credentials: init/status, detached launch, supervision, completion and cancellation;
    • registry absence immediately before the upload.

    Record: skills/multi-llm/tests/container/records/20261026T125425Z-opencode-release-gate.json.

  • CI on the release commit: the test suite on Ubuntu, macOS and Windows, and the package job, all green.

  • The upload is the gated tarball itself (npm publish <tarball> --ignore-scripts). The registry serves integrity sha512-XjxHpcySLlsWfUQdlApgEM82ojLfJg1SD9pkAbkGPw5pv0j0+29iQJtxGb9vEQLaQNZw8VJMSs+CSpDfswCFoQ==, identical to the gated one.

  • Installed as a user would, from registry.npmjs.org, into a fresh stock node:22-bookworm-slim container: opencode 1.19.4, uv 0.13.5, empty caches, no checkout of this repository, and a new project made with a plain git init. All eight first-release criteria pass:

    • the spec resolves with the gated integrity;
    • the installed manifest says 0.1.1;
    • the installed tree equals the package rebuilt from this tag's commit (199 files), checked before the first tool call;
    • /multi-llm resolves the installed skill;
    • the multi_llm tool runs init from the installed payload;
    • first use installs the runtime dependencies;
    • a warm status runs with the container's network cut;
    • a restart on the same pin serves the same payload.

    Record: skills/multi-llm/tests/container/records/20261026T175524Z-opencode-release-network-check.json.

Both records are attached below. The raw supporting output stays local, because it holds machine-specific paths.

Provenance

This first version was uploaded from the maintainer's machine, not from CI. npm can only attach a trusted publisher to a package that already exists, so 0.1.1 carries no npm provenance attestation. Its bytes are tied to this tag in two other ways: the uploaded file is the gated tarball, and the registry install check rebuilt the package from this tag's commit and found the installed tree identical. Later versions publish from the publish opencode plugin workflow through npm trusted publishing (OIDC), with provenance.

The workflow run that this tag's push started stopped before verifying anything. Its shared-version check refused npm's placeholder version (below). The registry install check above stands as this release's evidence.

Platforms

Linux is the verified platform. macOS and Windows are untested on this route.

0.0.0-stage on npm

npm lists a 0.0.0-stage version next to 0.1.1. It's a placeholder npm created at the package's first publish, not a release, and installs never select it. Never pin it.

No providers.yaml migration is needed (first release).