Introduction: Why Did I Switch AI Coding Tools Again?
Over the past few years I've cycled through AI coding tools one after another, and every one of them does its own thing: model switching, MCP setup and project prompts are scattered across different places, and a new machine means configuring everything again. What I actually want is simple: an open-source, model-agnostic CLI/desktop agent whose config travels with the repo, able to use free cloud models, paid models and local Ollama, plus MCP and project-level Skills.
OpenCode is exactly that. The same opencode.json works at the office, on my home desktop and inside an intranet. Costs stay controllable, privacy stays manageable, and new team members just clone the repo and run opencode. This post collects my current setup, the pitfalls I hit, and a recommended starter config for engineers still on the fence.
Core Strengths: One Tool for Every Model and Ecosystem
OpenCode's biggest selling point is that it is an aggregator, not tied to any single model vendor:
- Model aggregation: there are currently about 13 models with 0.30/2/$10` (per 1M tokens).
- Local models: point
opencode.jsonat Ollama on your network and pick models by use case:qwen3-vl:8bfor images and OCR,qwen3-coder:30bfor everyday coding, and the MoEqwen3.6-35b-a3b, which activates only 3B parameters and is fast. - Native MCP support: Context7, the three browser MCPs and GitHub go straight into the config file, no wrapper needed.
- Skills: skills live under the project's
.opencode/skills/and travel with the repo, so debugging flow, TDD habits and React best practices stay consistent across the team.
Hands-on Setup: From Install to First Task
Install and Launch
The simplest way is the official install script, or a global npm install:
curl -fsSL https://opencode.ai/install | bash
# or
npm install -g opencode-ai
You can also download the desktop app. Run opencode to enter the TUI and type /models to confirm the model list loads.
Free Cloud Models
I usually start with deepseek-v4.1-flash-free for everyday coding tasks. It responds quickly and is great for prototypes and side projects. A few things to know first:
- Free for a limited time: models can be pulled at any moment, so don't treat them as permanent.
- Rate limited, but the numbers aren't published: you will notice slowdowns at peak hours.
- Only usable inside OpenCode: the free chat models can't be fed to other clients via an API key; you need to sign in to the OpenCode Console or set
OPENCODE_API_KEY. - Mind your privacy: the NVIDIA models explicitly say not to send confidential data, while DeepSeek, GLM and Beam have zero retention.
Connecting Local Ollama, Step by Step
This is where I spent the most time tuning. The pitfalls are mainly context length and cross-host connections.
1. Server-side launch parameters (required):
# Raise context to 32K and allow connections from other hosts
OLLAMA_CONTEXT_LENGTH=32768 \
OLLAMA_HOST=0.0.0.0:11434 \
ollama serve
💡 Key reminder: Ollama's default context is often only 4K to 8K, so the model "suddenly forgets" halfway through and tool calls fail easily. The official docs also suggest raising context to 16K to 32K when tool calls misbehave. For cross-host access, open port 11434 in the firewall.
2. Client-side opencode.json:
Ollama exposes an OpenAI-compatible API, so the provider uses @ai-sdk/openai-compatible, and baseURL must end with /v1:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama (LAN)",
"options": {
"baseURL": "http://192.168.1.100:11434/v1"
},
"models": {
"qwen3-coder:30b": { "name": "Qwen3 Coder 30B" },
"qwen3-vl:8b": { "name": "Qwen3 VL 8B" },
"qwen3.6-35b-a3b": { "name": "Qwen3.6 35B A3B (MoE)" }
}
}
},
"model": "ollama/qwen3-coder:30b"
}
Replace 192.168.1.100 with your own Ollama host's IP, or use localhost on the same machine.
3. Verify: restart OpenCode; /models should list the local models. Give one a small task to confirm it works.
Picking a Local Model
| Model | Size | Best for |
|---|---|---|
qwen3-vl:8b | 6.2 GB | Images and OCR, runs on 16 GB RAM |
qwen3-coder:30b | 18.6 GB | Everyday coding, 32 GB RAM recommended |
qwen3.6-35b-a3b | 22.1 GB | MoE with 3B active, fast |
qwen3.5:35b | 22 GB | More complex tasks |
MCP and Skills: Turning the Agent into a Teammate Who Knows Your Project
Installing MCP
MCP servers go in the mcp block of opencode.json: type: "local" launches a command on your machine, type: "remote" connects to a URL. If you'd rather not edit by hand, run opencode mcp add in the terminal and it walks you through it.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"enabled": true
},
"playwright": {
"type": "local",
"command": ["npx", "-y", "@playwright/mcp@latest"],
"enabled": true
},
"chrome-devtools": {
"type": "local",
"command": ["npx", "-y", "chrome-devtools-mcp@latest"],
"enabled": true
}
}
}
Three Browser MCPs, Three Jobs
I have three browser-related MCPs. They confused me at first, but once the split clicked everything went smoothly:
| Situation | Use | Why |
|---|---|---|
| Pages that need login (admin panels, mail, company systems) | browse (drives your signed-in Chrome) | Reuses the login state already in your browser |
| Writing E2E tests, reproducing bugs | playwright | Clean browser environment, replayable steps |
| Console errors, Network, performance, memory | chrome-devtools | DevTools-level information |
One line to remember: browse for logins, playwright for tests, chrome-devtools for errors.
Context7: No More Made-up APIs
With Context7 installed, when the agent needs to use a library such as Next.js, Prisma or Tailwind, it pulls the latest official docs first instead of guessing parameters from memory. You really feel it with fast-moving frameworks.
GitHub MCP: Needs a Token
GitHub MCP works with repos, issues, PRs and Actions, but you must set GITHUB_PERSONAL_ACCESS_TOKEN first. The first time I installed it the tool count was 0, simply because the token wasn't set.
Skills: Writing Team Practices into Files
A skill is a folder with a SKILL.md, placed at .opencode/skills/<name>/SKILL.md in the project and versioned with the repo. OpenCode also reads .claude/skills/, so skills written for Claude Code can be shared as-is. For example, .opencode/skills/debug/SKILL.md:
---
name: debug
description: Team standard debugging flow, use when hitting a bug
---
# Debugging Skill
When you hit a bug, follow these steps:
1. **Read the logs first**: collect Console, server logs and stack traces.
2. **Then hypothesize**: list 3 possible causes from the error, with confidence.
3. **Then change code**: make the smallest fix for the most likely cause and verify it with a test.
4. **Retrospective**: record the root cause and fix in the PR description.
When the agent hits a bug it follows this flow instead of randomly changing code. The same approach works for TDD, React best practices, test writing and more.
Pitfalls and Limits: Free Doesn't Mean No Cost
- Free models can disappear any time: don't tie an important workflow to a single free model; keep local or paid models as a fallback.
- The Ollama context trap: the 4K to 8K default isn't enough, always set
OLLAMA_CONTEXT_LENGTH=32768; for cross-host use setOLLAMA_HOST=0.0.0.0:11434. - Local models need hardware: 30B-class models want 32 GB of RAM or more; MoE models are fast, but paid models are still steadier for complex refactors.
- Privacy boundary: don't send confidential code to free models that don't promise privacy; give those tasks to a local model.
Conclusion: Who Is It For? My Recommended Starter Setup
Good fit
- Engineers who want to save on subscriptions or need intranet/offline development
- Teams that want config in version control, "config as documentation"
- People who enjoy building automated workflows with MCP and Skills
Not a good fit
- People who don't want to touch JSON config and prefer a fully managed UI
- Teams deeply tied to another AI coding tool with no plan to switch soon
Starter setup
- Start with free models: after installing, pick a free model such as
deepseek-v4.1-flash-freein/modelsand try a few everyday tasks. - Connect local Ollama: add the
providerconfig above toopencode.jsonand raise context to 32K. - Install the basic three MCPs: Context7, playwright, chrome-devtools.
- Write your first Skill: start with the process your team explains most often, such as debugging or code review.
If you're looking for a portable, extensible, vendor-neutral AI coding partner, OpenCode is well worth a try.
References
- OpenCode official docs
- From Copilot to Cursor to Claude: Auto-Extracting Knowledge Docs with Claude Code Hooks
- Advanced Claude Code: GitHub Web Development, Hook Knowledge Base, Remote Control and Common MCPs
- Installing Ollama with Docker and Comparing CPU vs GPU Acceleration
- Tools First, Then MCP, Then Agent: Building a Fully Local AI Assistant with Hermes Agent
- Vibe Coding Experience Sharing



























Comments