For the complete documentation index, see llms.txt. This page is also available as Markdown.

OpenCode V2: Những thay đổi quan trọng

OpenCode V2: agent phân vai, phân quyền action + resource + effect, compaction, references, MCP Code Mode và Skills.

OpenCode V2 đánh dấu một bước chuyển mình quan trọng: từ một công cụ CLI hỗ trợ chat và sửa code đơn thuần sang môi trường thực thi coding agent (agent runtime) toàn diện. Nếu V1 trả lời câu hỏi "làm sao để sửa hàm này", thì V2 tự điều phối nhiều agent chuyên trách, tự phân quyền theo loại tài nguyên, tự nén context, và tự chọn đúng model cho từng công đoạn.

Bài này là phần chuyên sâu về V2. Nếu bạn mới bắt đầu, hãy đọc bài tổng quan trước — nó phủ cài đặt, TUI, CLI, environment variables, tools, formatters, custom commands và plugin system.

OpenCode - Personal AI Assistant

Bối cảnh: V2 đang ở đâu?

  • Trạng thái: V2 hiện ở phiên bản Beta (bản phát hành docs: 2.0.6).

  • Cùng lệnh, cùng config: V2 dùng chung lệnh opencode và đọc cùng các vị trí cấu hình với V1, nên cấu hình V1 hợp lệ vẫn chạy được.

  • Đường nâng cấp: V2 nâng cấp share, permission → permissions, mcp → mcp.servers, compaction → keep/buffer, agent → agents… nhưng tất cả đều tùy chọn.

OpenCode V1
OpenCode V2

Lệnh

opencode

opencode

npm package

opencode-ai

@opencode/cli

Homebrew tap

anomalyco/tap/opencode

anomalyco/tap/opencode-v2

Cài từ curl

https://opencode.ai/install

https://opencode.ai/v2/install

Docker tag

tag chung

ghcr.io/anomalyco/opencode:2.0.0

Mô hình agent

Agent đơn lẻ ôm hết việc

Primary agent + subagents tách context

Phân quyền

Theo từng tool đơn lẻ

action + resource + effect

Plugin

API hiện hành

Server/Client API và Plugin API được tái thiết kế

Windows package manager không được hỗ trợ khi cài bằng npm/pnpm/yarn. Xem bài migration cho đầy đủ các lệnh cài theo từng công cụ.


1. Kiến trúc Agent phân vai

Thay vì bắt một agent duy nhất đảm nhận toàn bộ công việc — từ tra cứu, lên kế hoạch đến sửa code — V2 chia hệ thống thành agent chính (primary agent) và agent phụ (subagent) chạy trong child session với context riêng biệt. Đây là giải pháp trực tiếp cho vấn đề làm quá tải context.

Bốn agent tích hợp sẵn

Mode: primary — agent lập trình mặc định.

  • Vai trò: viết code, sửa file, chạy công cụ, xử lý công việc lập trình thông thường.

  • Quyền mặc định: tools được cho phép; đọc file môi trường nhạy cảm và truy cập ngoài workspace thì hỏi phê duyệt.

  • Bổ sung so với chính sách gốc: cho phép dùng question.

Mode: primary — khám phá và lập kế hoạch mà không sửa file dự án.

  • Vai trò: phân tích kiến trúc, thiết kế hướng tiếp cận, đề xuất kế hoạch triển khai.

  • Giới hạn: bị chặn quyền chỉnh sửa file dự án thông thường; được phép ghi file plan của OpenCode (~/.opencode/plan) khi được yêu cầu.

  • Bổ sung so với chính sách gốc: cho phép dùng question; chặn edit trừ file dưới ~/.opencode/plan.

Mode: subagent — đa dụng.

  • Vai trò: nghiên cứu và quy trình làm việc nhiều bước, với tool access rộng.

  • Giới hạn: không cho phép đặt câu hỏi và không được khởi chạy subagent mới.

Mode: subagent — chuyên đọc, read-only.

  • Vai trò: tìm kiếm file, grep codebase, tra cứu tài liệu web — mà không tự ý sửa code.

  • Giới hạn: chặn mọi hành động ngoài read, glob, grep, webfetch, websearch; hỏi phê duyệt cho thư mục ngoài workspace và đọc .env.

Ngoài ra còn có các agent ẩn phục vụ bảo trì nội bộ: compaction, title, summary — không thể chọn trực tiếp. Agent ẩn chỉ gồm compaction giữ nguyên chính sách gốc, còn title và summary chặn toàn bộ hành động.

Ba mode của agent

Mode
Hành vi

primary

Chạy làm agent chính cho một session. Đây là mặc định của custom agent mới.

subagent

Chỉ chạy trong child session thông qua tool subagent.

all

Chạy được cả hai vai trò.

Subagent chạy với context sạch trong foreground hoặc background child session. Quyền subagent của agent cha kiểm soát agent cha được phép khởi chạy agent nào; agent con dùng permissions do chính nó cấu hình, không phải subset của agent cha.

Vị trí lưu agent

OpenCode dò thư mục .opencode của project từ thư mục hiện tại ngược lên tới project root.

Tạo Custom Agent

Custom agent gộp system prompt + model + permissions + hiển thị vào một profile có tên. Ví dụ kinh điển — một Reviewer Agent chỉ đọc, cấm sửa source code và cấm chạy lệnh shell, trong khi Build Agent vẫn giữ đầy đủ quyền triển khai:

Sau đó chỉ cần yêu cầu agent chính:

Các tuỳ chọn của agent

Option
Mô tả

description

Giải thích mục đích. Nên có cho subagent — OpenCode dùng nó để model chọn đúng agent

mode

primary, subagent hoặc all; mặc định primary

model

provider/model kèm #variant tuỳ chọn, ví dụ anthropic/claude-sonnet-4-5#high

system

System prompt. Giá trị khác rỗng thay thế base prompt của provider cho agent đó

permissions

Danh sách quy tắc có thứ tự (xem phần 2)

steps

Số bước model tối đa, phải là số dương

hidden

Ẩn khỏi danh sách, khám phá tương tác và catalog subagent

color

Màu UI, mã hex 6 chữ số

disabled

Gỡ bỏ agent tích hợp sẵn hoặc custom agent

Định nghĩa agent bằng JSONC

Agent mặc định được chọn bằng default_agent, phải tồn tại, phải nhìn thấy được và phải hỗ trợ vai trò primary. Nếu không, OpenCode fallback về build, rồi tới agent primary nhìn thấy được đầu tiên. Thay đổi default_agent không thay agent đã lưu trên session đang tồn tại.

Cách ghi đè agent tích hợp sẵn

Dùng cùng ID để ghi đè — các định nghĩa được gộp theo thứ tự cấu hình: giá trị scalar sau thay giá trị trước, request map gộp theo key, quy tắc permission được nối thêm (không thay thế).


2. Phân quyền granular và kiểm soát an toàn

V1 quản lý quyền chủ yếu theo từng công cụ đơn lẻ. V2 chuyển sang mô hình quy tắc rõ ràng dựa trên bộ ba: hành động (action) + tài nguyên (resource) + hiệu lực (effect).

Ba trường của một quy tắc

Field
Ý nghĩa

action

Hành động/tool cần kiểm soát. Hỗ trợ wildcard.

resource

Giá trị bị tác động: đường dẫn, lệnh shell, URL, truy vấn, skill ID, agent ID. Hỗ trợ wildcard.

effect

allow (cho qua không hỏi), deny (chặn), ask (chờ quyết định từ client)

Cơ chế xét quy tắc

  • Hệ thống xét các quy tắc từ trên xuống dưới; quy tắc phù hợp xuất hiện sau cùng được áp dụng.

  • Thứ tự nạp: cấu hình ưu tiên thấp → global rules → agent rules (nối thêm sau cùng).

  • Nếu không có quy tắc nào khớp, hệ thống mặc định sẽ hỏi ý kiến người dùng trước khi thực thi.

  • Với thao tác kiểm tra nhiều tài nguyên (ví dụ patch chạm nhiều file): bất kỳ deny nào cũng chặn toàn bộ; nếu không thì bất kỳ ask nào cũng hỏi; nếu không thì cho phép.

Chuẩn hóa tên gọi

V2 đổi tên một số công cụ để nhất quán hơn:

V1
V2

bash

shell

task

subagent

write, patch

edit

permission (object)

permissions (mảng quy tắc)

Wildcard

Pattern
Khớp

*

Zero hoặc nhiều ký tự, bao gồm /

?

Đúng một ký tự

Ký tự khác

Ký tự literal

Pattern khớp với toàn bộ giá trị đã chuẩn hóa: dấu gạch chéo ngược được chuyển thành /, và so khớp không phân biệt hoa thường trên Windows. Một pattern shell kết thúc bằng * cũng khớp cả lệnh không có tham số — git status * khớp cả git status lẫn git status --short.

Ví dụ thực tế: đọc tất cả trừ .env, và Git có kiểm soát

Cấu hình này cho phép agent đọc toàn bộ mã nguồn nhưng cấm đọc file nhạy cảm; cho git status và git diff chạy tự do, còn git push bị chặn hoàn toàn.

Bảng action của V2

Tên action là chuỗi, nên plugin có thể định nghĩa action riêng.

Action
Resource tương ứng

read

Đường dẫn nội bộ tương đối, hoặc đường dẫn tuyệt đối đã chuẩn hóa bên ngoài

edit

Đường dẫn đích cho edit, write, patch

glob

Glob pattern được yêu cầu

grep

Regular expression được yêu cầu — không phải đường dẫn tìm kiếm

shell

Chuỗi lệnh do scanner sinh ra; lệnh ghép có thể sinh nhiều resource

subagent

Agent ID đích

skill

Skill ID

question

*

webfetch

URL được yêu cầu

websearch

Truy vấn tìm kiếm

external_directory

Biên của thư mục ngoài, thường kết thúc bằng /*

<server>_<tool>

* cho tool MCP; ký tự không hợp lệ trong cả hai tên trở thành _

execute

*; điều khiển khả năng dùng Code Mode, tool lồng nhau tự áp dụng quy tắc riêng

doom_loop và lsp không còn là permission action của V2 Core. Nếu chính sách của bạn dùng chúng, hãy loại bỏ.

Chính sách gốc mặc định

Mọi agent — kể cả custom agent — đều khởi đầu với chính sách gốc có thứ tự này:

Các agent tích hỵp sẵn nối thêm chính sách riêng:

Agent
Chính sách bổ sung

build

Cho phép question

plan

Cho phép question; chặn edit trừ file dưới ~/.opencode/plan

general

Chặn question và chặn khởi chạy subagent

explore

Chặn mọi thứ trừ read, glob, grep, webfetch, websearch; hỏi cho thư mục ngoài và .env

title, summary

Chặn toàn bộ hành động

compaction

Giữ nguyên chính sách gốc

external_directory: lớp phòng thủ cho thư mục ngoài workspace

Một đường dẫn nằm ngoài cả Location đang hoạt động lẫn worktree gốc của project sẽ cần phê duyệt external_directory trước khi được xét quyền read/edit.

Với external_directory, read và edit, tiền tố ~, ~/, $HOME, $HOME/ được mở rộng khi nạp cấu hình. Resource của shell giữ nguyên text lệnh và không mở rộng các giá trị này.

Phê duyệt và lưu quy tắc

Khi một quy tắc resolve thành ask, client có thể trả lời:

Lựa chọn
Reply
Kết quả

Allow once

once

Chỉ duyệt yêu cầu đang chờ

Allow always

always

Duyệt và lưu pattern đề xuất của tool cho project

Reject

reject

Từ chối yêu cầu này và mọi yêu cầu phê duyệt còn chờ trong session

Policies: lớp hard-deny cho tổ chức

Một policy có thể hard-deny sau khi các quy tắc và approval đã chạy — nó biến allow hoặc ask thành deny và không bao giờ cấp quyền.

Policy toàn cục và policy do Console quản lý ghi đè cấu hình project — đây là cách tổ chức chặn một lệnh mà repository vốn cho phép.

Portable shell scanner

Bật scanner thử nghiệm bằng experimental.portable_shell_scanner: true. Scanner này thay thế tree-sitter scanner mặc định, không phải fallback. Lệnh mà portable scanner không phân tích được sẽ trả về lỗi scanner, không phải từ chối permission.


3. Quản lý Context và tính năng thực tế

Compaction dựa trên Checkpoint

Khi context tiến gần giới hạn, OpenCode tự động tóm tắt mọi thứ trừ phần hội thoại gần nhất, mặc định khoảng 15.000 token. Bản tóm tắt được đặt phía trước phần hội thoại gần đó, và session tiếp tục từ đó.

Model nhìn thấy bản tóm tắt như hội thoại quá khứ. Những lần compaction sau cập nhật cùng một bản tóm tắt thay vì bắt đầu lại.

Field
Mặc định
Hành vi

auto

true

Tự compact gần giới hạn context, và phục hồi một lần khi provider từ chối request quá dài

keep.tokens

15000

Số token hội thoại gần nhất được giữ bên cạnh bản tóm tắt

buffer

10% giới hạn

Số token cần giữ trống dưới giới hạn model. Giá trị lớn hơn → bắt đầu compact sớm hơn

Native compaction của provider

Mặc định OpenCode tự viết bản tóm tắt bằng model của session. Một số provider có thể compact phía họ — bật qua settings.compaction theo provider hoặc model:

Với native compaction, provider trả về một item mã hoá, không đọc được đại diện cho hội thoại cũ.

Chủ đề
Hành vi

Hỗ trợ

OpenAI Responses models; độ hỗ trợ thay đổi theo deployment và model

Ngưỡng

Cùng auto và buffer như summary compaction

Tính di động

Checkpoint mã hoá chỉ dùng được với cùng provider, model, endpoint. Đổi model → session tiếp tục từ hội thoại gốc

Quá dài

Nếu provider từ chối vì quá dài, OpenCode thử lại với request nhỏ hơn; không chuyển sang summary

Giới hạn của compaction

Giới hạn
Kết quả

Model

Dùng model của session. Không có model compaction riêng.

Lịch sử

Cần hội thoại cũ để thay thế. Không tạo được chỗ khi request chủ yếu là instructions và tool schemas cố định

Kích thước

Nếu phần cần compact vốn đã quá dài, OpenCode gửi phiên bản text rút gọn và có thể bỏ các lượt trao đổi cũ nhất

Phục hồi

Request bị từ chối vì quá dài được compact và thử lại một lần; lần từ chối thứ hai trả về lỗi

Migration từ V1: V1 dùng hành vi tail-turn và pruning. V2 dùng summary kèm compaction.keep.tokens.

/undo và /redo tích hợp Git snapshot

Ngoài việc quay lại lịch sử trò chuyện, /undo và /redo ở V2 còn phục hồi được trạng thái file code tương ứng nếu snapshot được ghi nhận thành công.

References: tham chiếu context ngoài workspace

References cho phép khai báo và tham chiếu các nguồn context ngoài workspace chính — thư mục local khác, kho Git dùng chung, SDK nội bộ — qua gợi ý @, mà không cần copy mã nguồn vào dự án hiện tại.

Dạng rút gọn bằng chuỗi khi không cần trường khác:

Hỗ trợ: GitHub owner/repo, Git URL, dạng host/path, và remote kiểu SCP. Không hỗ trợ kho file: local. Thiếu branch thì checkout default branch của remote.

OpenCode chuẩn hóa mỗi remote và lưu một checkout cho mỗi cặp remote + branch trong thư mục data toàn cục:

  • Kho thiếu được clone bất đồng bộ — prompt không chờ.

  • Checkout có sẵn được kiểm tra nền khi references load/reload và sau mỗi prompt mới.

  • Một checkout đủ điều kiện refresh nếu lần thử gần nhất từ 24 giờ trở lại.

Ví dụ thực tế

Khi muốn so sánh cách triển khai hiện tại với thư viện nội bộ:

Agent đọc file tham chiếu để đối chiếu mà không có quyền chỉnh sửa thư mục SDK đó.

Chỉ references có description mới được giới thiệu tự động trong agent instructions (kèm alias và đường dẫn đã resolve). Reference không có description vẫn dùng được qua client nhưng không được quảng bá.


4. Chuẩn hóa MCP, Code Mode và Skills

Cấu trúc mcp.servers

Field
Bắt buộc
Mô tả

type

Có

Phải là "local"

command

Có

Executable kèm arguments

cwd

Không

Thư mục chạy process; đường dẫn tương đối resolve từ workspace

environment

Không

Biến được thêm vào process environment kế thừa

disabled

Không

Ngăn kết nối khi true

codemode

Không

Đặt false để expose tool trực tiếp. Mặc định true

timeout

Không

Ghi đè timeout của server

protocol

Không

legacy (mặc định), auto, hoặc 2026-07-28

Dùng {env:NAME} để thay thế biến môi trường. Biểu thức shell như $NAME không được mở rộng trong chuỗi JSON.

Field
Bắt buộc
Mô tả

type

Có

Phải là "remote"

url

Có

Endpoint Streamable HTTP tuyệt đối

headers

Không

HTTP headers gửi tới endpoint

oauth

Không

Cấu hình OAuth, hoặc false để tắt OAuth

disabled

Không

Ngăn kết nối khi true

codemode

Không

Mặc định true

timeout

Không

Ghi đè timeout của server

protocol

Không

legacy (mặc định), auto, hoặc 2026-07-28

Chỉ dùng oauth: false khi server hoàn toàn dùng API key hoặc header credential.

Remote server mặc định dùng OAuth. OpenCode tự khám phá authorization server, dùng PKCE, làm mới token, và thử dynamic client registration khi được hỗ trợ. Credentials nằm ngoài cấu hình project.

Field
Mô tả

client_id

Client ID đăng ký sẵn. Bỏ trống để thử dynamic registration

client_secret

Secret cho client đăng ký sẵn

scope

Scopes cách nhau bởi dấu cách

callback_port

Cổng callback local, từ 1 đến 65535

redirect_uri

URI loopback đã đăng ký

auth_server_metadata_url

URL tài liệu metadata OAuth/OIDC của authorization server

V2 dùng snake_case cho các field OAuth. Quản lý qua CLI:

Dùng disabled, không dùng enabled, để giữ một server đã cấu hình mà không kết nối. Trong TUI, chạy /mcps để xem, kết nối, ngắt kết nối hoặc xác thực server.

Timeouts và protocol version

Timeout
Mặc định
Áp dụng cho

startup

30 giây

Kết nối transport và khởi tạo server

catalog

30 giây

Liệt kê tools, prompts, resources, resource templates

execution

12 giờ

Tool calls, prompt retrieval, resource reads

protocol

Hành vi

legacy

Mặc định. Gửi initialize, nói protocol tới bản 2025-11-25

auto

Dò bằng server/discover cho bản 2026-07-28, fallback về legacy

2026-07-28

Bắt buộc bản 2026-07-28; kết nối thất bại với server cũ

Code Mode

Action execute điều khiển khả năng dùng Code Mode; các tool lồng nhau tự áp dụng quy tắc riêng. Muốn ẩn hoặc chặn tool mà không ngắt server, dùng permission action khớp tên đã chuẩn hóa:

Quy trình Skills

Các quy trình làm việc chuẩn — review pull request, chuẩn bị bản release, kiểm tra migration database — được đóng gói thành skill. Mô hình chỉ tải nội dung skill vào context khi thực sự cần thiết.

Skill ID đến từ đường dẫn file, không phải từ name trong frontmatter (name chỉ là nhãn hiển thị).

File
ID

<source>/git-release.md

git-release

<source>/git-release/SKILL.md

git-release

<source>/teams/release/SKILL.md

release

Effect
Hành vi

allow

Quảng bá và load skill khớp không cần phê duyệt

ask

Quảng bá skill khớp và hỏi trước khi load

deny

Ẩn skill khớp khỏi model và từ chối load

Plugin: breaking change quan trọng


5. Linh hoạt chọn Model

OpenCode V2 không bị giới hạn vào một model cố định mà hỗ trợ kết nối hơn 75 nhà cung cấp thông qua AI SDK và Models.dev, cho phép tuỳ chỉnh model phù hợp cho từng công đoạn.

Phân bổ model theo vai trò

  • Model năng lực cao cho khâu thiết kế kiến trúc hoặc xử lý bug khó.

  • Model chi phí thấp cho việc tra cứu của Explore Agent — vì nó chỉ đọc và grep, không cần model đắt.

  • Model chuyên biệt về code cho Build Agent.

Subagent dùng model được cấu hình của nó, hoặc thừa hưởng model của session cha nếu không cấu hình. Session lưu model đã chọn riêng — chọn primary agent theo ID không đổi model đó.

Danh mục model

Nhóm
Model được đề cập

Thương mại cao cấp

GPT 5.6, Claude Opus/Sonnet 5, Gemini 3.6 Flash, Kimi K2.7/K3, DeepSeek V4

Thử nghiệm miễn phí có thời hạn

Big Pickle, DeepSeek V4 Flash Free, Laguna S 2.1 Free

Model mới từ OpenCode

Fast Frank được hé lộ và phát triển từ OpenCode, bên cạnh Big Pickle

Cấu hình provider trong V2

Đối với provider không có sẵn trong catalog, khai báo credential, runtime package, endpoint và model đầu tiên cùng nhau:

Đối với provider có sẵn, chỉ cần ghi đè settings.baseURL để đi qua proxy — package, models và connection vốn có vẫn giữ nguyên.

Model local không cần tài khoản

OpenCode probe http://127.0.0.1:11434, phát hiện completion models và thêm vào /models không cần kết nối tài khoản.

Endpoint mặc định: LM Studio http://127.0.0.1:1234/v1, vLLM http://127.0.0.1:8000/v1.

vLLM kiểm tra /health trước khi đọc /v1/models; discovery của nó không suy luận được tool support, nên các model vLLM phát hiện được bắt đầu với tools bị tắt.

Provider ID bị loại bỏ trong V2


Tổng hợp: V1 → V2

Hạng mục
V1
V2

Cấu trúc agent

Agent đơn lẻ

primary + subagent với context riêng

Agent tích hợp sẵn

build, plan

build, plan, general, explore (+ ẩn: compaction, title, summary)

Agent scout

Không có

Không có — dùng explore

Cấu hình agent

permission (object)

permissions (mảng quy tắc)

Trường agent cũ

temperature, top_p, prompt, tools, maxSteps

Không dùng trong V2

Tên tool

bash, task, write, patch

shell, subagent, edit

Mặc định khi không có quy tắc khớp

Tuỳ agent

ask

Compaction

tail-turn + pruning

summary + keep.tokens (mặc định 15000)

MCP

Server đặt trực tiếp dưới mcp

mcp.servers

MCP protocol

—

legacy / auto / 2026-07-28

Code Mode

Không có

Mặc định, điều khiển bằng action execute

OAuth MCP

Thủ công

PKCE, dynamic client registration, tự làm mới token

Context ngoài workspace

Copy file vào project

references (path hoặc Git repository)

Chính sách tổ chức

Managed settings

experimental.policies + Console-managed policies

Plugin API

Hiện hành

Tái thiết kế — plugin V1 không tương thích


Khuyến nghị chuyển đổi

Lộ trình đề xuất

  1. Backup ~/.config/opencode/ — V1 và V2 dùng chung config locations, nên không tồn tại "bản sao song song" tự nhiên.

  2. Gỡ V1 rồi cài V2 (cùng lệnh opencode), chỉ thử trên một project không critical để so sánh hành vi compaction, phân quyền và skills.

  3. Audit plugin trước — đây là rủi ro migration lớn nhất, vì Plugin API đã tái thiết kế và code V1 không chạy trong V2.

  4. Chuyển đổi cấu hình là tùy chọn, có thể làm dần: permission → permissions, bash → shell, task → subagent, MCP sang mcp.servers, compaction sang keep/buffer.

  5. Thử nghiệm phân vai agent trên project thật — đây là lợi ích lớn nhất của V2.

  6. Chỉ bỏ V1 sau khi đã xác nhận model, credentials, agents, permissions, MCP servers và plugins đều hoạt động đúng trên V2.

Migrate từ OpenCode V1 sang OpenCode V2

Tài liệu tham khảo

Cập nhật lần cuối

Nội dung này có hữu ích không?