No more notification sounds after upgrading to OpenCode V2: the opencode-notifier delivery trap

I use Paseo as a shell, connecting to a local opencode serve, and don't run the TUI in a terminal. After migrating OpenCode from v1 to v2 on October 1, opencode-notifier stopped making any sound: the plugin logs showed it loaded successfully, and system volume was normal. Digging through the 0.6.0 source made it clear—the V2 server hardcodes delivery to "command", forcibly turning off all sound and popup notifications and leaving only a custom command outlet, while the sounds were moved to the TUI component that I don't load at all.

Tools

Paseo's plugin directory

My daily driver stack is Paseo + OpenCode + OpenViking. Paseo recently shipped an official plugin directory too, so now there's both the community one at paseo.cafe and the official one at paseo.sh/plugins. I'd ported the solarized theme earlier to go easier on my eyes, and it's listed in both directories.

Tools

TRAE committed code for me — why is it signed as Claude?

After I fixed a small bug, TRAE went ahead and added Co-Authored-By: Claude Sonnet 4.6 to the commit message on its own. That's ridiculous as hell — even when I commit with Claude Code, it doesn't add a Claude signature. Add the credit system, token rate limiting, and project file uploads on top of that — ever since TRAE went commercial, it's getting less and less reassuring.

Tools

Configuring thinking-effort switching after hooking the GOAT plan up to opencode

The previous post on the goat setup missed one piece: models like deepseek-v4-flash couldn't pick a thinking depth in /models. Digging in, it turned out the GOAT plan does support it — the problem was that the hand-written models in the custom provider were missing a reasoning capability declaration, so opencode's variant generation logic stopped them at the door. In the end I added reasoning:true to every model under goat and goat-zdr, and testing showed no side effects.

Tools

Wiring the CommandCode goat plan into opencode: two-step setup + a zdr custom request header

I bought CommandCode's goat plan and wanted to use it as my main plan in opencode. The whole integration takes just two steps: first /connect to save the API key, then declare the provider in opencode.json. The goat plan requires an x-cmd-zdr: 1 header on every request, and testing confirmed you can add that in the config too.

Tools

OpenCode Go plan usage estimates: see every model on one page

OpenCode Go's monthly allowance is spread across several tables, and the official "5-hour quota" chart doesn't list all the models. So I built a chart page that automatically scrapes the official price table and, using the same methodology as the official one, works out the number of requests available per month for each model and plots it. Hover for details.

Tools

Neither DeepSeek Harness nor Qwen3.8 is a must-have for me

DeepSeek Harness got a lot of people excited, but I used it once and didn't keep going; Qwen3.8 27B's capabilities have taken off, but I haven't deployed it locally either. Weighing the urge for new things against the need for stability, OpenCode + Paseo + OpenViking is already smooth enough. Anything new that doesn't offer real, controllable, reliable help is just noise.

AI

Integrating OpenViking to unify OpenCode and Hermes memory

I hand OpenCode all kinds of tasks piecemeal throughout the day, and at night I want to say one sentence and have it wrap up with a review and summary. But before, OpenCode's memory and Hermes's memory were each stored separately, with no way to unify them. I installed OpenViking with uv, hit two pitfalls (httpx[socks], the mcp 2.0 breaking upgrade), and finally linked up OpenCode's and Hermes's memory to get fully automatic archiving and review.

Tools

Paseo, the killer tool that connects multiple coding agents

Paseo is genuinely great — lately I've been using it with OpenCode every day to write code and articles.

Tools