N. Corbellari
← Notes

ia

A Feedback Report on Opencode

My feedback after several months of using opencode, the open-source terminal agent: agents, subagents, fine-grained control and freedom of model choice.

Introduction

Over the past few years, artificial intelligence and LLMs in particular have developed at an unimaginable pace. With this race toward intelligence, tools are being built around these models to extend their capabilities. Among them are famous CLI tools: Claude Code, Codex, Gemini.

In this note I would like to share my experience with opencode after several months of use.

How I use it

This feedback is based on usage since April 9, 2026 — 149 days of use.

Opencode usage statistics

Discovery

Before opencode, I was using the Antigravity IDE. Being able to read and edit files myself was important to me. Not having access to the code and not being able to examine it is still something that makes me wary, even today.

Moving to an entirely terminal-based tool was challenging for me. However, I kept seeing people online say they could never go back after trying a similar tool (Codex, Claude Code, etc.). Out of curiosity, I had to try one of these tools.

Why opencode?

Claude Code is undeniably the most widely used CLI tool for AI-driven development today. So why not use Claude Code?

The first reason is dependency. I did not want to build a daily dependency on an opaque tool run by a private company. If prices go up or the tool becomes restricted, my whole way of working needs reorganizing.

The second reason is freedom. Today there are thousands of providers offering LLM access via API. If OpenAI drastically raises their API prices tomorrow, I can shop around and use another API. In a few years it may even be possible to run local LLMs smart enough to code with an agent locally. From an economic and environmental standpoint, it also becomes possible to match the AI model to the task at hand — saving both money and energy.

Open-source alternatives to Claude Code

I naturally turned to open-source, community-driven alternatives. Among them, two tools stand out:

  • Opencode
  • Pi

I will cover the Pi framework in another note — it also revolutionized the world of LLM harnesses. The opencode framework is itself built on top of the Pi framework.

The verdict

After several months of use, I could never go back. Used well, opencode multiplies your output. In this section I will give my honest opinion on the pros and cons of opencode.

The pros

Agents

Opencode offers a particularly interesting agent feature. It lets you create agents and subagents that can interact with each other to carry out a task as effectively as possible.

Opencode’s agent

An agent is an AI you interact with directly, which is given specialized “skills” beforehand. A human (or an AI) writes a markdown instruction file that gathers the agent’s directives and usage. This is how the agent becomes “specialized” (big quotes here, since it does not grow its knowledge base, it is merely steered).

But an agent is not just an AI whose prompt says “you are a senior developer”. You can define tools (predefined or built by yourself) that it can use. It is also able to create and call subagents.

By default, opencode ships with 2 main agents:

  • Plan: a read-only agent. Builds a step-by-step plan by reading a project’s files.
  • Build: an agent that can implement plans and edit files.

Opencode’s default agents: plan and build

The real power of opencode begins when you create your own agent.

How to create your own agent

In this section we will see how to create an agent specialized in writing Django tests.

In a project, create a .opencode folder with an agents folder inside:

mkdir .opencode
mkdir .opencode/agents

Then simply drop a markdown file in it with the agent’s information and instructions:

---
description: Write tests for a Django module
mode: primary
model: openai/gpt-5.6-luna
tools:
 write: true
 edit: true
 bash: true
---

# Description

You are an expert in writing Django tests.

# Instructions

Your tests must include documentation before each test, with a description of the following type:
"""
Test name:
Feature tested:
Description:
"""

After restarting opencode, the new agent shows up in the agent picker (Ctrl + p):

The new agent appears in the agent list

Let’s try it on a demo project:

Testing the agent on a demo project

Here is the agent’s answer (it failed to use django because I used uv — that is my fault, it should have been mentioned in the AGENTS.md file):

The Django agent’s answer

Let’s check the agent’s work:

Verifying the agent’s work

The agent works well: it followed the instructions given in its instruction file.

Opencode’s subagents

Subagents are assistants specialized in carrying out specific tasks. They can be called either by you using @, or by an agent to perform a specific task.

By default, opencode’s subagents are:

  • General: a versatile agent for complex questions and multi-step tasks ref.
  • Explore: a fast read-only agent to explore codebases. Cannot edit files ref.
  • Scout: a read-only agent for searching external documentation and dependencies ref.
  • Compaction: a hidden system agent that compacts a long context into a smaller summary. It runs automatically when needed and is not selectable in the UI ref.

Opencode’s default subagents

Calling a subagent

To call a subagent, simply use the @ command. Here is an example:

@explore explain the goal of this project in one sentence

Opencode then calls the subagent and passes it the query.

Calling the explore subagent with the @ command

In the example, we can see the agent made 11 tool calls.

It is also possible to create a subagent — simply change the mode yaml property from primary to sub-agent.

Fine-grained control

Opencode lets you control what the agent is allowed to do, and above all what it cannot do. This control layer builds trust in your agent: you know exactly what it may or may not do.

Controlling the agent’s permissions

Freedom leads to better strategy

One of opencode’s strengths is being able to pick which AI model to use for each agent or subagent. Dozens of providers are already configured, and if that is not enough, you can configure your own. But what is the point of such freedom?

Being able to choose a model per agent or subagent is extremely useful. Tasks considered simple can be delegated to models with lower intelligence. A few examples:

  • Documenting tests or code
  • Translating content from one language to another
  • Summarizing a part of the codebase

While tasks requiring more complexity can be assigned to smarter models such as Opus.

Choosing the model for each agent

The consequences are direct:

  • Better time management: smarter models take longer to think than a smaller one.
  • Savings: a smaller model is usually much cheaper than a model with top-tier intelligence.
  • A greener approach: granularizing intelligence across tasks can drastically reduce the energy used by a computer to complete them.

The cons

Too geeky a vision

Opencode is an excellent solution, but quite “tech”-oriented. Today it is a tool that is hard to use for someone without a computer science background.

Opencode Desktop tries to address this obstacle, but for now it is the giants OpenAI, Anthropic and Google who dominate the consumer market.

For example, it would be hard for a doctor or an HR person with no experience with bash or Linux to grasp the richness and value of opencode. Consequently, they would be prevented from using it to its full potential by customizing it.

Opencode Desktop

Too heavy for self-hosted

Local LLMs are a topic I am passionate about, and today opencode is too heavy for that. With a reasonable setup (a 16GB VRAM graphics card) using opencode in an agentic way is extremely difficult.

The main problem lies in the context opencode gives its agent. Working with a local LLM today is a balancing act: you have to find the right trade-off between context and intelligence. Opencode uses a large part of the context to instruct the agent. This considerably reduces the developer’s room for maneuver.

Opencode with a local LLM

This article has been translated by AI from the french handwritten version.