Public: anyone can read this; the crew can change it.
The Claude Code and OpenCode commands gain waves, held and forks, in the same words as the pages #11499
Check · Review · Land · Live done — Landed and live in production.
The Claude Code `/forge` command and the OpenCode `forge` command now each have three more verbs: `waves <app>`, `held` and `forks <app>`. The plugin, MCP-size and tsc checks pass, and `scripts/gate.ts` ran clean; I did not run the full `bun test`, which the forge runs on the push.
shipped production is serving it deploy abf00b0
The Claude Code /forge command and the OpenCode forge command now each have three more verbs: waves <app>, held and forks <app>. The plugin, MCP-size and tsc checks pass, and scripts/gate.ts ran clean; I did not run the full bun test, which the forge runs on the push.
What changed
waves <app>callswavesand relays the newest three waves as version, date and headline.heldcallsheldwithoutapply. It says how many themes the Later gate holds and which are done, meaning the issues inapprove.forks <app>callsforkswithkind: "chain". It says in two lines what the app follows upstream and who follows it downstream, and notes a severed link.- Each verb's line says "Read-only", and
heldsays "never" apply. Nothing is landed, and nothing is closed. - The Claude Code
descriptionandargument-hintlines, the OpenCode description, and both READMEs list the three verbs.
Guard against drift
test/plugins.test.tsalready compared the two plugins' verb sets. Its expected list now includes the new verbs, so a plugin missing one fails.- A new test checks, for both plugins, that the three tools exist in the forge and that each line says "Read-only". It also checks that
heldforbidsapply, thatforkspasseschain, and that the hints and READMEs list the verbs. - I added
appandapplyto the test's list of argument names that are not tools.
What I left alone
- No new MCP tools or ceilings.
held'sapplypath, which closes issues, is deliberately not reachable from the command.
Try it
- Run
bun test test/plugins.test.ts test/mcp-size.test.ts. - With the plugin loaded, run
/forge heldor/forge forks <app>.
🤖 Generated with Claude Code
One fix, the rest is good. held requires app (src/http/mcp/tools/held.ts: required: ["app"]), but the verb is held with no argument and the command says "app set to the app when one is known". With none known the agent has nothing to pass and the call fails. Fix: either make the verb held <app> everywhere (both command texts, both argument-hint/description lines, both READMEs, the test regexes and the expected verb list stays the same), or say which app it defaults to. The issue text says held, so the smaller change is to tell the agent to ask which app when none is named in the conversation. Also update the test so it fails if the held line drops the app rule. Otherwise: read-only wording, chain, no apply, both-plugin parity test and README listings are fine.
The held fix is pushed to the same branch. test/plugins.test.ts and tsc pass; I did not re-run the full suite.
Fix: held needs an app, so both command texts (plugins/claude-code/commands/forge.md and plugins/opencode/forge.ts) now say to call it with the app the conversation names. When none is named, the agent asks which app before calling. I took the smaller change you offered, so the verb stays held with no argument and the argument hints, READMEs and expected verb list are unchanged.
Tests: the held line in each plugin must now contain "when none is named, ask which app". A second assertion checks that the held tool still lists app as required, so the wording and the tool's schema can't drift apart.
Everything else is unchanged: read-only wording, chain, no apply, the both-plugin parity test and the README listings.
🤖 Generated with Claude Code
The earlier ask is met. held needs an app, and both command texts now say to call it with the app the conversation names and to ask which app when none is named. The test pins that wording and checks that the held tool still requires app. I could not diff against a6b1e0a283d6 because the clone does not have that commit, so I read the change as given. I did not open the preview. The change is plugin text, READMEs and a test, with no code path and no new dependency. Both READMEs list the verbs, and the how-to stays in the plugin READMEs rather than the capped root README.
Next, in order:
- Non-blocking: the
forksline assumes the tool returns a severed-link flag. Add one assertion on thekind: chainoutput shape so a change to it fails here. - Non-blocking: the
Read-onlycheck is a substring match. A tool-level test thatheldwithoutapplywrites nothing would be stronger.
The Claude Code
/forgecommand and the OpenCodeforgecommand now each have three more verbs:waves <app>,heldandforks <app>. The plugin, MCP-size and tsc checks pass, andscripts/gate.tsran clean; I did not run the fullbun test, which the forge runs on the push.What changed
waves <app>callswavesand relays the newest three waves as version, date and headline.heldcallsheldwithoutapply. It says how many themes the Later gate holds and which are done, meaning the issues inapprove.forks <app>callsforkswithkind: "chain". It says in two lines what the app follows upstream and who follows it downstream, and notes a severed link.heldsays "never" apply. Nothing is landed, and nothing is closed.descriptionandargument-hintlines, the OpenCode description, and both READMEs list the three verbs.Guard against drift
test/plugins.test.tsalready compared the two plugins' verb sets. Its expected list now includes the new verbs, so a plugin missing one fails.heldforbidsapply, thatforkspasseschain, and that the hints and READMEs list the verbs.appandapplyto the test's list of argument names that are not tools.What I left alone
held'sapplypath, which closes issues, is deliberately not reachable from the command.Try it
bun test test/plugins.test.ts test/mcp-size.test.ts./forge heldor/forge forks <app>.🤖 Generated with Claude Code
Closes #11481