Feishu's official MCP causes a memory leak: tracking down orphan processes from lark-mcp

Mac memory mysteriously eaten up, and it turns out dozens of orphan node processes were left behind by Feishu's official lark-mcp. The root cause is that its stdio lifecycle only handles data inflow, not pipe closure, so the process doesn't kill itself after the host exits. Upstream issues and PRs were filed but have just sat there unmerged, and the repo hasn't been updated for over a year.

Tools

It's Time to Make AI Put Files in the Trash Before Deleting Them

While working with WorkBuddy, I noticed that deleted temp files end up in the Trash, whereas my opencode reaches for rm at the drop of a hat. Digging into that detail led me to discover that macOS 15 already ships with a built-in trash command that can replace rm.

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

Paseo Solarized Light theme plugin: low contrast, easy on the eyes, install from GitHub with one command

I built a Solarized Light eye-friendly theme plugin for Paseo. It's implemented with the official addTheme plugin API, so you don't need to modify any Paseo files and nothing gets lost when you upgrade. Paseo 0.7.0 and later supports installing plugins straight from GitHub — one command and you're done.

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

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

Fixing coreaudiod eating up to 45G of memory

The coreaudiod process was using 45G of memory. Digging into it, the leak came from a Claude Code hook playing sound effects. Fixed it by uninstalling PeonPing and switching to Ghostty's native terminal sound effects instead.

Tools

From Lobster to Hermes

Hermes has these advantages over Lobster: model errors get output to the console. The gateway has logs you can check, and crucially, I know where to look. The docs are thorough — no Chinese translation, sure, but they're complete; you can find clear documentation for any issue or command. Each agent has its own separate profile config and gateway, so combinations are more flexible, and the backend can be local or remote. It runs on Docker, so it's use-and-go, with automatic directory mounting. It comes with factory settings that are beginner-friendly — you can get it running smoothly without much configuration. Its built-in security mechanisms are just enough to run basic functionality; unlike Lobster, where you can't use it unless you crank permissions to the max, and maxing them out is unsafe. The difference in how much users have to understand just to get started is night and day. Memory operations are fast, and actions show up in the chat. You can clearly see exactly what she has remembered.

Tools
123