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.
OpenCode - Personal AI AssistantBố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
opencodevà đọ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.
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ế
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ặnedittrừ 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
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
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
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ỳ
denynào cũng chặn toàn bộ; nếu không thì bất kỳasknà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:
bash
shell
task
subagent
write, patch
edit
permission (object)
permissions (mảng quy tắc)
Wildcard
*
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.
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
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:
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:
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.
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ũ.
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
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
/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 đó.
4. Chuẩn hóa MCP, Code Mode và Skills
Cấu trúc mcp.servers
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
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.
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:
Timeouts và protocol version
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ị).
<source>/git-release.md
git-release
<source>/git-release/SKILL.md
git-release
<source>/teams/release/SKILL.md
release
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.
Danh mục model
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.
Provider ID bị loại bỏ trong V2
Tổng hợp: 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
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.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.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.
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 sangmcp.servers,compactionsangkeep/buffer.Thử nghiệm phân vai agent trên project thật — đây là lợi ích lớn nhất của V2.
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.
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?