Repository navigation
[0.0.0] - 2026-11-10
Added
access, the plugin option every OpenCode plugin of this family has:"all"(the default),"ask-changes"and
"read-only". It generates the default permission block from the tool classes, and/github-statusshows it, with a
note when the deprecatedreadOnlyoption set it.readOnlystill works:truemeans"read-only"andfalse
means"all".assets/icon-128.pngandassets/icon-256.png, withopencode.iconsandopencode.vendorinpackage.json, and
scripts/check-icons.mjs, the family icon contract's check.
Changed
-
The Code Mode catalogue no longer pins tool signatures. The namespace text names the skills;
searchfinds a tool's parameters. The host can still show unpinned tools. -
The Code Mode namespace says what
accessdecides, in one clause for each value:allruns every tool without asking,ask-changesasks before a change, andread-onlydenies one. -
github_events_listruns without a prompt at everyaccessvalue, because it is a read and Memory's collector runs it unattended. Restrict it with a rule per tool, as any tool. -
The
jellydeclaration's settings carry their defaults (access,unknownToolsandlockdown), which Jelly displays. -
Each GitHub skill's first line says how to sign in when the tools are absent.
-
docs/scripting.mdsays a script's session needs the project as itslocation; without one, each call failsAgent not found. -
Every GitHub tool is allowed by default. The generated block allows every known tool and the
github_*pattern,
so a tool GitHub adds later runs without a prompt too, andgithub_apimay change GitHub without asking. Restrict it
withaccess, with an agent's own rules, or with a rule per tool; the README's Permissions section and SECURITY say
what an all-allow default means here. -
A script's
apichange resolves the same write permission the direct path asserts:github_apion the call's
ownMETHOD /path, from a prior explicitallowonly. An allow scoped to GETs cannot POST, and a rule for another
method does not cover it, with nothing sent. -
docs/scripting.mdis the family's scripting contract: the strict envelope, the location section and its unload
note, the result wording, and the refusal table, with an example-parsing test that fails when a doc example names a
method that does not exist, omits the location header, or uses an input the tool does not take. -
One typed code table,
PLUGIN_CODESandRPC_CODESinsrc/errors.ts, with a test that fails when a code insrc
is in neither, and when the README's Troubleshooting table, the configuration guide's Errors table or the scripting
doc's refusal table drifts from it in either direction. -
unknownToolsdecides only whether GitHub lists a tool the plugin does not know:"ask"(the default) keeps it, and the generatedgithub_*rule andaccessdecide it, so it runs at the default, asks at"ask-changes"and is denied at"read-only";"hide"removes it. The value's name is older than the all-allow default and does not make a tool ask. -
The README's Troubleshooting table lists every error code with its next step. The docs' tested-release sentences are
checked againstTESTED_HOSTS: 2.2.3, 2.2.4, 2.2.5 and 2.2.6. The README prints the default block in full. -
The CI has an
actionlintjob, andnpm run checkrunsactionlintand the icon check. -
The tools RPC is v2: every known tool is a method with its class (
readfor the 61 catalogued reads,writefor the 37 catalogued writes and forapi), and a call runs only with a prior explicitallowin the agent's or the session's rules. Anaskis refused before the tool runs, so no prompt waits, and a saved "Always allow" does not authorize an ad-hoc script.apinow takesgithub_api's whole input: a write, a download and an upload run under an allow and assertgithub_apithemselves, andreadOnly: truestill refuses every change;SCRIPT_READ_ONLYis gone.ui_getand unknown tools are still not methods. -
The
OPTIONS_INVALIDnext step names the Git spec,github:joe-broadhead/opencode-github#v0.0.0, not the npm name.
Fixed
- The TUI part (
dist/tui.js) loads from a local-path install again. It is built unminified: OpenCode could not resolve the minified form of its@opentui/solidandsolid-jsimports, so the/githubstatus view never loaded. The build fails if the file is minified.
Known limits
- GitHub decides its tools. The plugin's tool table follows GitHub's hosted server at this release. A tool GitHub adds later runs under
access, is listed as unknown in/github-status, and is not a script method until the plugin classifies it.npm run driftcompares the table with the server. - The token limits what is possible. The scopes you granted decide what the account's token can do. The default
reposcope reaches every repository the account can write. - Toolsets are a selection. The default
toolsetsturn on 15 of the 24 toolsets, which show 69 tools. Nine toolsets are off by default, such ascopilotandgists, and GitHub's two issue artifact tools need a feature flag the plugin does not turn on. See the toolsets table. - An allow on
github_apicovers writes. An allow forgithub_apiauthorises everyapicall, reads included, and also its writes, downloads and uploads. Grant it only to a session that may change GitHub, or setaccessto"read-only"for a read-only script. - Tested on OpenCode 2.2.3, 2.2.4, 2.2.5 and 2.2.6 only. Other releases in
>=2.2.3 <2.3.0run untested. - GitHub's rate limits and error text are GitHub's. Errors from OpenCode and GitHub pass through unchanged.
- Updates are not automatic for a Git install, and
opencode plugin updateandopencode plugin checkdo not work on one: to move to a newer release, remove the old entry and add the new tag.