Release 0.10.0: plan-guard and title fixes, cost cap, literal flags, agent authority, pinned installs - #70
Merged
Merged
Conversation
…agent OpenCode runs command.execute.before before any chat hook for the turn and its Session record has no agent field, so the 0.9.0 session-record fallback never fired for a goal created by a fresh session's first command: the goal started live and the routed text told the model to begin work. chat.message does receive the agent; re-evaluate the planning-only restriction there for the goal the command started, hold it, and re-route the turn as a read-only control turn. Reproduced on live OpenCode 1.18.25 and 1.18.29. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…running line Completion archives the goal, and the title sync returned early with no live goal, so the last ▶ render stayed on the session until /goal clear. Render ✅ <objective> · N turns · elapsed · tokens for an achieved result the process already titled; clear still restores the original. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… text Double-dash tokens inside a ```fence``` are no longer parsed as goal flags and a fence is never consumed as a flag value, so a command line can be quoted inside an objective. Ported from NiklasTR's fork. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Pause the goal, with the usual wrap-up prompt, once the cumulative API cost OpenCode reports reaches the cap. Surfaces in /goal status, the continuation progress budget, the near-limit warning, the compaction summary, and the goal_set/set_goal tools. Idea and first implementation by NiklasTR. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…iting goals "status" mode lets tools complete, block, pause, resume, and create a goal when none is live, but refuses replace/edit/clear so a model cannot rewrite the user's objective. Default "full" is unchanged. Prompted by felores' fork. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
OpenCode resolves an unpinned plugin to @latest once, caches it, and never re-resolves while the cache directory exists, so users following the old npm-install instructions stayed on their first-installed version. Pin the version in the install snippet and examples, document the upgrade path, add a stale-cache warning to the verify script, document ledgerFilePath, and add a 1.18.29 compatibility row. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Attach the settle handler before the barriers so an early loser's rejection is never reported as unhandled, and never wait at a barrier for an acquirer that has already settled. This was the known-flaky Windows CI test. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
OpenCode runs a command under its configured agent (cmd.agent ?? input.agent), so with the recommended "agent": "build" the /goal turn executes as build and a hold can only come from a previously reported planning-only agent. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Release 0.10.0: two defects reproduced on live OpenCode 1.18.25/1.18.29, two ported fork contributions, a new agent-authority option, and install docs that explain why an unpinned plugin never updates.
Fixes
command.execute.beforeruns before any chat hook and the SDKSessionhas noagent, so the 0.9.0 session-record fallback could never learn the agent for a fresh session's first/goal.chat.message(which carries the agent) now re-evaluates the restriction for the goal that command created, holds it, rewrites the turn as a read-only control turn, and blocks tools. Applies when thegoalcommand does not pin an agent; with"agent": "build"OpenCode runs the turn as build (cmd.agent ?? input.agent), documented in the README. Pinned by a new mutation-contract entry.▶title after completion withsessionTitleStatus: now✅ <objective> · N turns · elapsed · tokens;/goal clearstill restores the original.Ported (with credit)
maxCostUsd/--max-costcost cap (@NiklasTR).```spans in/goalargs are literal text (@NiklasTR).New
agentGoalAuthority: "full" | "status"—"status"stops agent tools from replacing, editing, or clearing the user's goal (prompted by @felores' fork). Default unchanged.Docs / chores
packages/<name>@latestcache (never re-resolved);npx opencode-goal-pluginwarns on a stale unpinned cache;opencode pluginCLI,file://needsnode_modules,ledgerFilePath, 1.18.29 compat row.simultaneous stale observerslease test (the known Windows flake).Verification
npm run release:checkexit 0: 429 tests, 69/69 mutants, type/packed/smoke contracts, 0 vulnerabilities.opencode serve1.18.25 and 1.18.29 with a deterministic provider: auto-continue → evidence-gated completion, blocker,/goal status, title✅after completion, and (with an unpinned command agent) a first-turn Plan goal held with the turn rewritten as a control turn. Harness inreports/willytop8__OpenCode-goal-plugin/canary-2026-09-06/(not part of the package).🤖 Generated with Claude Code