Repository navigation
Releases
v0.0.0
[0.0.0] - 2026-11-10
Added
assets/icon-128.pngandassets/icon-256.png, withopencode.iconsandopencode.vendorinpackage.json, and
scripts/check-icons.mjs, the family icon contract's check.
Changed
-
Each Linear skill's first line says how to sign in when the tools are absent:
/connect, or on Jellyjelly_connection_request. -
The Code Mode namespace and the
linearandlinear-writeskills say whataccessdecides, in one clause for each value. -
The
jellydeclaration'saccesssetting carries its default, which Jelly displays. -
docs/scripting.mdsays a script's session needs the project as itslocation; without one, each call failsAgent not found. -
accesstakes the family's values:"all"(the default),"ask-changes"and"read-only"."all"is the
new default and uses Linear's full server, so the sign-in asks for write scope and every tool runs without asking;
"ask-changes"asks before every change;"read-only"uses Linear's read-only server and denies changes. The old
"write"means"all"and the old"read"means"read-only", and/linear-statussays they are deprecated.
Every tool the plugin registers is allowed by default, and so is thelinear_*pattern, so a tool Linear adds later
runs at once; 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. -
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/constants.ts, with a test that fails when a code in
srcis in neither, when a table code is raised nowhere, 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. -
The README prints the default block in full, and every access value's block is printed in the configuration guide,
both checked againstdefaultRules(access). The docs' tested-release sentences are checked againstTESTED_HOSTS:
2.2.3, 2.2.4, 2.2.5 and 2.2.6. The CI has anactionlintjob, andnpm run checkrunsactionlintand the icon
check. -
The
OPTIONS_INVALIDnext step foraccessnames the Git spec,github:joe-broadhead/opencode-linear#v0.0.0, not the npm name. -
The tools RPC is v2: every known tool is a method with its class (the 41 reads and the 36 writes), and
linear_issuesis the owned methodissues(a direct-only read). 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. Withaccess: "read-only"a write is a method but unavailable, since Linear's read-only server does not list it. A tool Linear adds later is still not a method.
Known limits
- Linear decides its tools. The plugin's tool table follows Linear's servers at this release.
npm run driftcompares it with Linear's live list, as a maintainer check that needs a read-only Linear key. A tool Linear adds later runs underaccess(allowed at the default) and is not a script method until the plugin classifies it. - The default
accessisall. Agents can then create, change and delete Linear items without asking. Setaccessto"ask-changes"to ask before every change, or to"read-only"to deny them. - Switching to or from
"read-only"needs a new sign-in. That value uses Linear's read-only server, which has its own sign-in. Switching between"all"and"ask-changes"keeps the sign-in. - Linear's consent page picks the workspace. The plugin cannot choose a workspace; the sign-in shows Linear's page.
- 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. - Linear's rate limits and error text are Linear's.
- 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.