
The Tilde Trap: Why OpenCode Configs Need Absolute Paths
How assuming shell-like tilde expansion in a JSON config led to a plugin loading failure and what it taught me about path handling.

How assuming shell-like tilde expansion in a JSON config led to a plugin loading failure and what it taught me about path handling.

How a subtle race condition in file-based rate limiting allowed unlimited API calls, and the atomic operations that fixed it.

The subtle version mismatch that caused ‘undefined is not an object’ errors when defining tool schemas in OpenCode plugins.

A common developer pitfall: editing a template file in a repository instead of the actual active configuration file used by the application.

A model ID that’s ‘close enough’ isn’t close enough. When provider lookups fail silently until they don’t.

MCP config that works in Claude Desktop fails in OpenCode. Same protocol, different schema. A tale of subtle incompatibilities.

The button is visible. The selector finds it. But clicks fail silently. The culprit: an invisible overlay you never saw coming.

A shell wrapper checked for a JSON auth file. The TypeScript implementation saved a Chrome profile directory. The mismatch caused phantom ‘auth required’ errors.

Renaming a project sounds trivial until you discover how many hidden artifacts still reference the old name. A case study in env var migration pain.

Fixes pushed, build fails. Same error, over and over. The culprit: Cloudflare was building a completely different repository.