
Why Importing Zod Directly Crashes OpenCode Plugins
The subtle version mismatch that caused ‘undefined is not an object’ errors when defining tool schemas in OpenCode plugins.

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.

How to configure skills to auto-load for specific AI agents, turning one-off invocations into persistent behaviors.

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.

Why I named this blog after a cinematographer, chose Hugo and Cloudflare, and built a system to harvest AI conversations into posts.
Configure skills to auto-load for specific agents via oh-my-opencode.json.
Wanted content-seed harvesting to be always active, not requiring manual /content-seed invocation each session.
Solution: Add skills array to agent config.
// ~/.config/opencode/oh-my-opencode.json
{
"agents": {
"sisyphus": {
"model": "...",
"skills": ["content-seed"] // ← auto-loads
}
}
}
OpenCode config validation failed with “Invalid input mcp.mcp-image” error. The MCP server configuration used wrong schema format.
"mcp-image": {
"type": "stdio", // WRONG
"command": "npx", // WRONG
"args": ["-y", "mcp-image"], // WRONG
"env": { // WRONG field name
"GEMINI_API_KEY": "...",
"IMAGE_OUTPUT_DIR": "..."
}
}
"type": "stdio" - still failed"mcp-image": {
"type": "local", // local, not stdio
"command": ["npx", "-y", "mcp-image"], // array, not separate args
"environment": { // environment, not env
"GEMINI_API_KEY": "...",
"IMAGE_OUTPUT_DIR": "..."
}
}
Key differences:
type: "local" not "stdio" (OpenCode terminology)command is a single array including args, no separate args fieldenvironment not env for env varsOpenCode MCP schema differs from Claude Desktop’s MCP schema. Always check vendor docs - don’t assume schema compatibility between different MCP hosts.
ProviderModelNotFoundError when starting OpenCode. The oh-my-opencode.json config referenced model IDs that don’t exist in the provider definitions.
ProviderModelNotFoundError
providerID: "google"
modelID: "gemini-3-flash"
suggestions: ["gemini-3-flash-preview", "antigravity-gemini-3-flash"]
~/.config/opencode/oh-my-opencode.json:multimodal-looker agentvisual-engineering categoryartistry categorywriting categoryChanged all occurrences to use valid model IDs:
// Before (invalid)
"model": "google/gemini-3-flash"
"model": "google/gemini-3-pro"
// After (valid - using antigravity provider)
"model": "google/antigravity-gemini-3-flash"
"model": "google/antigravity-gemini-3-pro"
Model IDs in oh-my-opencode.json must exactly match the model IDs defined in opencode.json provider config. The error’s suggestions field shows valid alternatives - use those exact strings.
AI와 대화하며 블로그 콘텐츠 제작 시스템을 구축한 첫 번째 기록