You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
python3 -c 'import json, pathlib; config=json.loads(pathlib.Path.home().joinpath(".config/opencode/opencode.json").read_text()); assert "command" not in config; assert "oy" not in config.get("mcp", {}).get("servers", {}); assert "tool_output" not in config'
python3 -c 'import json, pathlib; config=json.loads(pathlib.Path.home().joinpath(".config/opencode/opencode.json").read_text()); assert "command" not in config; assert "oy-audit" not in config.get("commands", {}); assert "oy" not in config.get("mcp", {}).get("servers", {}); assert "tool_output" not in config'
70
+
# The release version does not exist in npm until the tag publishes it.
71
+
# Load this checkout directly for the pre-publish runtime smoke instead.
72
+
npm ci --prefix packages/opencode --ignore-scripts
Copy file name to clipboardExpand all lines: CHANGELOG.md
+7Lines changed: 7 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,12 @@
1
1
# Changelog
2
2
3
+
## [0.13.1] - 2026-07-12
4
+
5
+
### Changed
6
+
- Made `oy setup` package-first: it now pins the matching `@oy-cli/opencode` version and removes superseded direct agent, skill, and command files/configuration.
7
+
- Updated the curl installer to start OpenCode after setup and verify that plugin ID `oy` loaded from the version-matched npm package.
8
+
- Made npm trusted publishing mandatory for tagged releases, idempotent on workflow reruns, and a prerequisite for publishing the GitHub release.
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -43,7 +43,7 @@ Keep `Cargo.lock` in sync with `Cargo.toml` after dependency changes.
43
43
## Prompt And Agent Changes
44
44
45
45
Prompt quality is live-model behavior, not a deterministic unit-test problem.
46
-
Before changing generated agents or skills, read `docs/evaluation.md` and use a
46
+
Before changing packaged agents or skills, read `docs/evaluation.md` and use a
47
47
pinned public-repository corpus when possible. Keep raw model outputs under
48
48
`.tmp/eval/`; do not commit generated `ISSUES.md`, `REVIEW.md`, or SARIF files
49
49
from local runs.
@@ -58,7 +58,7 @@ python3 scripts/eval_runner.py run --dry-run
58
58
## Design Rules
59
59
60
60
- Do not add a native LLM client, provider router, transcript store, or chat UI back to `oy`.
61
-
- Keep the three generated skills canonical for audit, review, and enhance protocols. They execute under the user's OpenCode permissions through the single `oy` agent.
61
+
- Keep the three packaged skills canonical for audit, review, and enhance protocols. They execute under the user's OpenCode permissions through the single `oy` agent.
62
62
- Keep `oy` concise but compare it with tagged OpenCode 2 Build behavior: inspect first, preserve unrelated changes, implement end-to-end, verify, and avoid destructive or unrequested Git operations.
63
63
- Do not add oy-owned plan/edit/auto permission modes. OpenCode policy is authoritative.
64
64
- Put immutable workflow-input, ordering, limit, and render enforcement in typed Rust boundaries rather than relying on prompt text.
Copy file name to clipboardExpand all lines: README.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,7 +21,7 @@ The **inputs, ordering, limits, and report rendering** are deterministic. Model
21
21
22
22
## Quick start
23
23
24
-
Requirements: OpenCode 2 with a configured provider, plus `git` for diff reviews. oy 0.13.0 no longer supports OpenCode 1.
24
+
Requirements: OpenCode 2 with a configured provider, plus `git` for diff reviews. oy 0.13.1 no longer supports OpenCode 1.
25
25
26
26
```bash
27
27
curl -fsSL https://oy.adonm.dev/install.sh | sh
@@ -30,12 +30,12 @@ oy doctor
30
30
oy audit
31
31
```
32
32
33
-
The installer uses [`mise`](https://mise.jdx.dev/) to install pinned oy 0.13.0, `@opencode-ai/cli@0.0.0-next-15353`, `tokei`, and Universal Ctags. It verifies both primary versions, stops stale OpenCode services, prunes unreferenced old mise versions, and resets generated integration files before running `oy setup`. Set `OY_RESET_SETUP=0` to preserve the generated setup in place or `OY_SKIP_SETUP=1` to skip setup. Source-built Sighthound is opt-in with `OY_INSTALL_SIGHTHOUND=1`.
33
+
The installer uses [`mise`](https://mise.jdx.dev/) to install pinned oy 0.13.1, `@opencode-ai/cli@0.0.0-next-15353`, `tokei`, and Universal Ctags. It verifies both primary versions, stops stale OpenCode services, prunes unreferenced old mise versions, and resets the integration before `oy setup` registers `@oy-cli/opencode@0.13.1`. OpenCode installs the package into its isolated cache and the installer verifies that plugin ID `oy` loaded. Set `OY_RESET_SETUP=0` to preserve the generated setup in place or `OY_SKIP_SETUP=1` to skip setup. Source-built Sighthound is opt-in with `OY_INSTALL_SIGHTHOUND=1`.
34
34
35
35
For a minimal manual install:
36
36
37
37
```bash
38
-
mise use --global node@24 cargo-binstall cargo:oy-cli@0.13.0 npm:@opencode-ai/cli@0.0.0-next-15353
38
+
mise use --global node@24 cargo-binstall cargo:oy-cli@0.13.1 npm:@opencode-ai/cli@0.0.0-next-15353
39
39
oy setup
40
40
oy doctor
41
41
```
@@ -114,15 +114,15 @@ Sighthound remains optional and source-built. The install pins immutable commit
114
114
115
115
## Agent, package, and setup
116
116
117
-
The OpenCode V2 package lives at `packages/opencode` and publishes as `@oy-cli/opencode`. It registers one `oy` primary agent, the three canonical skills, and their slash commands without permission overrides. Add `"@oy-cli/opencode@0.13.0"` to OpenCode's `plugins` array after installing the `oy` binary.
117
+
The OpenCode V2 package lives at `packages/opencode` and publishes as `@oy-cli/opencode`. It registers one `oy` primary agent, the three canonical skills, and their slash commands without permission overrides. `oy setup` pins the package version matching the binary in OpenCode's `plugins` array and removes superseded direct-file copies.
118
118
119
-
`oy setup`remains the direct-file installer: it writes the same agent and skills plus thin skill commands, but does not register MCP or change OpenCode's tool-outputbudget. Global setup uses `OPENCODE_CONFIG_DIR` when set, otherwise `~/.config/opencode/`; workspace setup uses `.opencode/`. Use `--dry-run` to preview or `--remove` to remove generated files and owned config entries.
119
+
`oy setup`is package-first: it adds the exact `@oy-cli/opencode` version matching the binary and removes exact legacy agent, skill, command, MCP, and output-budget entries. Global setup uses `OPENCODE_CONFIG_DIR` when set, otherwise `~/.config/opencode/`; workspace setup uses `.opencode/`. Use `--dry-run` to preview or `--remove` to remove the owned plugin entry and legacy generated files.
120
120
121
121
The `oy` agent has no permission overrides. Its short system prompt carries the useful OpenCode 2 defaults that a custom prompt would otherwise replace: inspect before editing, follow repository conventions, make the smallest correct change, persist through verification, preserve unrelated worktree changes, avoid destructive Git operations, and report concisely. OpenCode and the user remain authoritative for permissions and approvals.
122
122
123
123
Setup and removal stage one multi-file batch and roll back mutations already committed if a later mutation fails. This is in-process rollback, not crash journaling or durable recovery. JSON and JSONC are still pretty-reserialized, so comments and formatting are not preserved. Removal deletes owned current values; it does not restore values that existed before setup.
124
124
125
-
Launch, model, and workflow commands only validate that a complete global or workspace integration exists; they never auto-refresh it. Run `oy setup` explicitly after generated assets change (`oy upgrade` does this as an explicit post-upgrade step). All selected OpenCode runner and managed-API processes use `OY_ROOT` as their working directory.
125
+
Launch, model, and workflow commands only validate that a complete global or workspace integration exists; they never auto-refresh it. Run `oy setup` explicitly after upgrading (`oy upgrade` does this as an explicit post-upgrade step). All selected OpenCode runner and managed-API processes use `OY_ROOT` as their working directory.
126
126
127
127
oy defaults to the `opencode2` executable. This release supports exactly beta `0.0.0-next-15353` and tagged OpenCode 2.x; other prereleases and major versions fail closed until tested. `OY_OPENCODE` remains an executable override. `oy run`, `audit`, `review`, and `enhance` use the single `oy` agent. `oy run --auto` asks OpenCode to approve pending requests once while preserving explicit denies; without it, the user's normal policy applies. Set `OY_OPENCODE_MODEL=provider/model#variant` to override the noninteractive workflow model.
Copy file name to clipboardExpand all lines: ROADMAP.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,12 +10,12 @@ _Updated July 2026. Ordered by outcome, not promised release date._
10
10
11
11
**Core loop:** prepare deterministic evidence → let OpenCode reason and edit under the user's permissions → validate a durable report → rerun to confirm.
12
12
13
-
The intended integration is CLI-firstand skill-led. MCP, generated commands, config merging, and host wrappers are transitional compatibility surfaces, not the destination.
13
+
The intended integration is CLI-first, package-delivered, and skill-led. MCP and host wrappers are transitional compatibility surfaces, not the destination.
14
14
15
15
## Product principles
16
16
17
17
1.**OpenCode owns execution policy.** Users configure models, agents, permissions, edits, shell, web, sessions, and approvals in OpenCode. Oy does not maintain parallel plan/edit/auto permission modes.
18
-
2.**Keep one useful agent.** The generated`oy` agent is a concise autonomous system prompt. It adds completion discipline and engineering defaults without overriding the user's permissions.
18
+
2.**Keep one useful agent.** The packaged`oy` agent is a concise autonomous system prompt. It adds completion discipline and engineering defaults without overriding the user's permissions.
19
19
3.**Own the evidence boundary, not the model.** Oy owns collection, ordering, limits, evidence identity, and report normalization; OpenCode owns inference and general tools.
20
20
4.**Skills are the integration contract.** Audit, review, and one-finding remediation protocols should be usable from normal OpenCode sessions and should not require dedicated permission-adapter agents.
21
21
5.**Prefer files over large tool responses.** Prepare immutable workspace-local evidence artifacts, return small structured descriptors, and let OpenCode read them with native tools.
@@ -36,6 +36,7 @@ Completed in the current development cycle:
36
36
- Added `oy audit|review prepare` and `finalize` with workspace-local evidence, private state, SHA-256 artifact binding, changed-input/output rejection, and strict candidate findings.
37
37
- Rewrote audit/review skills around native OpenCode reads and edits.
38
38
- Added the `@oy-cli/opencode` V2 package for the agent, skills, and commands.
39
+
- Made setup package-first and removed direct agent/skill/command installation.
39
40
- Stopped registering MCP and global tool-output overrides in default setup.
40
41
41
42
## Completed — make the CLI the deterministic boundary
Copy file name to clipboardExpand all lines: SECURITY.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -43,11 +43,11 @@ Avoid mounting the host Docker socket into AI-assisted containers. Docker socket
43
43
44
44
## Local Files
45
45
46
-
`oy setup` writes generated files under `OPENCODE_CONFIG_DIR` when set, otherwise `~/.config/opencode/`; `oy setup --workspace` writes under `.opencode/`. An existing `opencode.jsonc` is selected before `opencode.json`. Launch/model/workflow commands validate setup but never rewrite it. Use `oy setup --dry-run` before first setup and `oy setup --remove` to remove the current oy integration.
46
+
`oy setup` writes a versioned `@oy-cli/opencode` plugin entry under `OPENCODE_CONFIG_DIR` when set, otherwise `~/.config/opencode/`; `oy setup --workspace` writes under `.opencode/`. An existing `opencode.jsonc` is selected before `opencode.json`. Launch/model/workflow commands validate setup but never rewrite it. Use `oy setup --dry-run` before first setup and `oy setup --remove` to remove the current oy integration.
47
47
48
-
Generated agent and skill files refuse to overwrite non-generated files at generated paths. Setup owns one `oy`agent, three skills, and `commands.oy-audit`, `commands.oy-review`, and `commands.oy-enhance`; unknown sibling object keys are retained. Exact transitional `mcp.servers.oy` and tool-output budget values are removed. Older generated mode and workflow-agent files are retired during setup.
48
+
Setup owns string-form `@oy-cli/opencode` package entries. It removes exact legacy generated agent/skill files and command, MCP, and output-budget values while retaining unrelated entries. Modified generated files and object-form oy plugin entries with custom options fail closed rather than being deleted or overwritten.
49
49
50
-
Setup/removal is a staged multi-file batch that restores already-mutated files if a later commit fails. It has no persistent journal and cannot promise recovery across a process or machine crash. JSONC comments and formatting are still lost during reserialization. Removal deletes oy's generated files and currently owned config values; it does not remember or restore historical pre-setup values. Back up hand-edited config before setup.
50
+
Setup/removal is a staged file batch that restores already-mutated files if a later commit fails. It has no persistent journal and cannot promise recovery across a process or machine crash. JSONC comments and formatting are still lost during reserialization. Removal deletes the current package entry, exact legacy generated files, and currently owned config values; it does not remember or restore historical pre-setup values. Back up hand-edited config before setup.
51
51
52
52
opencode owns its own local state. Treat sessions, logs, and config as sensitive because they may contain prompts, source snippets, command output, or provider metadata.
0 commit comments