OpenCode 2.0: server nền, OpenTunnel và code mode

Những thay đổi chính của OpenCode 2.0: server nền dùng chung, HTTP API và SSE, OpenTunnel, agent tự quản lý session, code mode và tìm tool MCP.

Đã duyệt độc lập · cập nhật 21/10/2026 · 9 min

1. OpenCode 2.0: có gì mới?

Video mở đầu bằng tin OpenCode 2.0 vừa ra mắt (video đăng ngày 18/10/2026). Người dẫn kênh The Cef Experience giới thiệu ngay một con số: repo GitHub của OpenCode có 216.000 star theo video đăng ngày 18/10/2026, và anh gọi đó là coding agent mã nguồn mở số một.

Người dẫn kênh The Cef Experience nói trước camera
Người dẫn kênh The Cef Experience mở đầu video, giới thiệu bản OpenCode 2.0.

Điểm khác biệt anh nhấn mạnh trước tiên: với Claude Code hay Codex, bạn được kỳ vọng dùng model của Anthropic hoặc của OpenAI. Còn với OpenCode, bạn dùng được bất kỳ nhà cung cấp nào, bất kỳ model nào (theo video đăng ngày 18/10/2026). Và nó là mã nguồn mở.

Trang repo opencode trên GitHub với 216k star, 29k fork, giấy phép MIT
Trang repo opencode trên GitHub lúc quay video: dòng mô tả "The open source coding agent", liên kết opencode.ai, giấy phép MIT, khoảng 216 nghìn star và 29 nghìn fork; góc dưới trái phóng to nút "Star 216k".

Repo dùng giấy phép MIT (theo video đăng ngày 18/10/2026). Nghĩa là bạn đọc được code, sửa được code, nghịch với nó tuỳ thích. Như anh nói, giới hạn chỉ là bầu trời. Theo anh, bản 2.0 có rất nhiều thay đổi thú vị, và phần còn lại của video đi lần lượt qua những thay đổi đó.

2. Kiến trúc client–server mới

Thay đổi đầu tiên nằm ở kiến trúc. Ngay từ bản 1 (theo video đăng ngày 18/10/2026), OpenCode đã có mô hình client–server, nhưng mô hình đó chưa thật sự được tận dụng. Ở bản 1, mỗi instance OpenCode có server riêng của nó: mở một terminal là có một server đi kèm.

Ở bản 2.0, theo video đăng ngày 18/10/2026, OpenCode chạy một process nền duy nhất cho mỗi máy. Bạn khởi động một service OpenCode ở chế độ nền, rồi các client khác nhau cùng dùng service đó. Bạn có thể mở một terminal, hay nhiều cửa sổ terminal, tất cả cùng nói chuyện với một process nền. Ngoài ra còn có web client, có desktop app, và anh hứa sẽ cho xem ví dụ ngay sau đó.

Đoạn The Service trong bài công bố OpenCode 2.0 kèm sơ đồ nhiều client nối vào một process
Đoạn "The Service" trong bài công bố OpenCode 2.0: từ đầu OpenCode đã theo mô hình client/server nhưng mặc định không tận dụng, chủ yếu power user mới dùng; ở 2.0 server tự chạy thành một process nền duy nhất trên máy, và TUI, web interface, desktop app đều nói chuyện với process trung tâm đó. Sơ đồ bên dưới vẽ Terminal, Web, Desktop và một script review.ts cùng nối vào một process opencode đang giữ ba session.
Bản 1Bản 2.0 Terminal AServer A Terminal BServer B TUIDesktopWeb Server nềnmột process/máy mỗi instance một server riêng mọi client dùng chung một server
Hình 2.1Khác biệt kiến trúc theo lời người dẫn: bản 1 mỗi instance có server riêng; bản 2.0 có một server nền cho cả máy và mọi client nối vào đó.

3. Một session dùng chung giữa terminal và desktop

Anh minh hoạ ý nghĩa của mô hình client–server bằng một demo. Anh khởi động OpenCode từ terminal, và trong trường hợp này là resume một session có sẵn. Trong session đó, anh đã gõ "hi from the TUI". Bên dưới, một process server OpenCode được khởi động.

Rồi anh mở desktop app của OpenCode. Ở đó anh truy cập đúng session ấy: session nằm sẵn trong danh sách, cùng cuộc hội thoại. Anh gõ "hi from desktop" trong desktop app, và tin nhắn hiện ra trong TUI. "Và đó", anh nói khi tin nhắn xuất hiện.

TUI của OpenCode hiển thị cả tin nhắn hi from the TUI và hi from desktop trong cùng một session
TUI của OpenCode, session "Greeting from TUI": tin "hi from the TUI" gõ ở terminal và tin "hi from desktop" gõ ở desktop app nằm trong cùng một cuộc hội thoại, model trả lời "Hi from desktop!". Cột phải cho thấy context đã dùng và hai MCP server github, jev.

Cơ chế phía sau như sau (theo video đăng ngày 18/10/2026). Mỗi khi một client OpenCode khởi động, dù là terminal hay desktop, nó kiểm tra xem đã có server nào đang chạy chưa. Nếu có, nó chỉ việc kết nối vào. Nếu chưa, nó khởi động một server mới.

Theo video đăng ngày 18/10/2026, mỗi lần một server khởi động, nó ghi một file service.json vào một đường dẫn cố định, ai cũng biết trước. Trên màn hình, anh mở file bằng lệnh cat ~/.local/state/opencode/service.json. Trong file có ID của server, có URL (server đang lắng nghe trên một port qua HTTP), có PID của process server, có version (trên màn hình là 2.0.28), và có một password.

4. Bên dưới: HTTP API và luồng event trực tiếp

Vì có password đó, bất kỳ client nào nói được HTTP, hoặc bất kỳ client OpenCode nào có password, đều kết nối được tới server (theo video đăng ngày 18/10/2026). Khi bạn yêu cầu một việc, chẳng hạn tạo session mới hay gửi một prompt, mọi thứ đều đi qua server này.

Điều thú vị là bạn tự làm được đúng việc mà client làm. Anh lấy password ra khỏi file service.json, rồi gửi một request HTTP tới endpoint /api/event. Endpoint này (theo video đăng ngày 18/10/2026) về cơ bản là luồng các event phát ra từ server, và khi lắng nghe endpoint đó, bạn nhận được mọi event. Hai lệnh anh gõ trên màn hình:

PW=$(jq -r .password ~/.local/state/opencode/service.json)
curl -N -u "opencode:$PW" http://127.0.0.1:49374/api/event

Port trong URL là port mà server của anh đang dùng, lấy từ service.json; trên máy bạn nó sẽ khác.

Đó chính xác là điều các client làm. Khi có gì xảy ra (theo video đăng ngày 18/10/2026), server stream nó ra bằng server-sent events, tức HTTP SSE. Anh gõ thử một tin trong TUI, và trong terminal đang chạy curl có ngay event mới. Client hiểu định dạng này và phản ứng theo: server đã trả lời, LLM đã sinh ra một câu trả lời, đây là kết quả của một tool, và những thứ tương tự.

Terminal in ra luồng event SSE dạng JSON từ server OpenCode
Luồng event từ endpoint /api/event: mỗi dòng data: là một event JSON với kiểu như session.text.started, session.text.delta, session.reasoning.ended, session.step.ended, session.usage.updated, session.execution.succeeded, kèm số token đã dùng.

Tóm lại (theo video đăng ngày 18/10/2026), bên dưới tất cả đều là HTTP, và mọi việc đều diễn ra trên server. Client chỉ điều khiển server và cho người dùng một giao diện để tương tác.

5. Truy cập từ xa với OpenTunnel

Từ đó anh rút ra hệ quả: vì server OpenCode chỉ đơn giản là một HTTP server (theo video đăng ngày 18/10/2026), bất kỳ ai truy cập được vào nó và có password hoặc token đều điều khiển được coding agent. Client không nhất thiết chạy trên cùng máy. Nó có thể là một app trên điện thoại, hoặc một agent chạy trong CI. Client đó kết nối vào backend coding agent của bạn và dùng được các MCP server cục bộ, các skill, các tool mà máy bạn có.

Theo anh, đó chính là ý tưởng đằng sau OpenTunnel: đưa một service đang chạy cục bộ trên máy bạn ra internet công cộng. Nó rất giống ngrok (theo video đăng ngày 18/10/2026). Bạn cài OpenTunnel, rồi chạy một lệnh để mở một port cụ thể ra ngoài.

Trang chủ OpenTunnel với sơ đồ browser đi qua opentunnel.xyz vào các service localhost và lệnh cài đặt
Trang chủ OpenTunnel: "a cli and sdk to create end-to-end encrypted public urls for apps running on your machine reachable from anywhere in the world". Sơ đồ vẽ trình duyệt đi qua một địa chỉ *.opentunnel.xyz vào các service trên máy như opencode, api, webhooks chạy ở localhost; bên dưới là lệnh cài bằng curl.

Lệnh cài hiện trên trang chủ OpenTunnel (dạng cài bằng curl; trang còn có các tab brew, arch, npm, cargo, github):

curl -fsSL https://opentunnel.xyz/install | sh

Chạy lệnh mở port xong, bạn nhận được một URL (theo video đăng ngày 18/10/2026). URL đó về cơ bản là port cục bộ của bạn đã được đưa ra internet công cộng, nên anh dặn: hãy cẩn thận.

Khi khởi động OpenCode, bạn chỉ định được nó dùng server nào (theo video đăng ngày 18/10/2026). Mặc định là localhost với port cố định quen thuộc, nhưng nó có thể dùng một URL từ xa, ở đây là URL của OpenTunnel.

6. Demo: kết nối từ Google Colab

Đó chính xác là điều anh đã làm để thử. Anh có một terminal trên một máy từ xa, cụ thể là một notebook Google Colab, nơi bạn mở được một terminal. Trong terminal đó, anh đặt password của server OpenCode đang chạy trên máy mình vào biến môi trường OPENCODE_PASSWORD. Rồi anh khởi động OpenCode trên máy từ xa với tuỳ chọn --server trỏ vào endpoint OpenTunnel, endpoint này dẫn về server OpenCode đang chạy cục bộ trên máy anh.

Terminal trong Google Colab chạy opencode --server, hiện danh sách lệnh của opencode
Terminal trong một notebook Google Colab: lệnh export OPENCODE_PASSWORD và opencode --server https:… (phần giá trị bị che), lần đầu báo "command not found" nên phải source /root/.bashrc rồi chạy lại. Bên dưới là danh sách lệnh con của opencode như mcp, attach, run, serve, web, models, stats, export, import, pr, session, plugin, db.

Đường đi của kết nối: endpoint này đi qua internet, qua các server của OpenTunnel, rồi được nối ngược về máy cục bộ của anh. Khi chạy, anh có quyền truy cập vào mọi MCP server, mọi tool của mình. Theo video đăng ngày 18/10/2026, đó là một client OpenCode rất giống client chạy cục bộ trên desktop app.

Anh nói thêm: thứ ở đầu kia hoàn toàn có thể là một mobile app. Đó là cách bạn điều khiển coding agent đang chạy trên một máy nào đó từ điện thoại (theo video đăng ngày 18/10/2026), với traffic đi qua internet.

7. Một agent tự quản lý được session của chính nó

Trong bài công bố, đội OpenCode nói họ đã thiết kế lại API, và giờ OpenCode biết về chính API của nó (theo bài công bố được nhắc trong video đăng ngày 18/10/2026). Ví dụ họ đưa ra: yêu cầu OpenCode chuyển session hiện tại sang một worktree mới, tức một branch nằm ở một thư mục khác.

Để thử, anh bảo session OpenCode liệt kê các tool của nó. Prompt anh gõ:

gimme list of ur tools

Trong danh sách trả về có những tool kinh điển: read, write, edit, glob, todo, research, shell, v.v. Bên dưới là một nhóm tool OpenCode, tức tool của chính harness, những tool OpenCode mở ra cho chính nó: session rename, session move, worktree create, list, remove, list MCP resources, read MCP resource, và models.

TUI liệt kê tool của GitHub, jev, nhóm opencode the harness itself và danh sách skill
Câu trả lời trong TUI: nhóm tool GitHub (PR, issue, file, repo), nhóm "jev, probabilistic decision helpers" với choose, rate, yes_no, rồi nhóm "opencode, the harness itself (8)": session_rename, session_move, worktree_create, worktree_list, worktree_remove, list_mcp_resources, read_mcp_resource, models. Dòng ghi chú cuối nói các tool github, jev và opencode chỉ chạy được bên trong code của execute, không gọi trực tiếp (lúc quay video đăng ngày 18/10/2026).

Như vậy, các tool liên quan tới OpenCode có sẵn ngang hàng với tool đọc file hay sửa file (theo video đăng ngày 18/10/2026). Khi có quyền dùng những tool này, OpenCode cứ thế đổi tên session, chuyển session hay tạo worktree. Lập luận của anh: model gọi được bất kỳ tool nào bạn đưa cho nó. Nếu tool đó tương tác với chính harness đang điều khiển model, thì agent tự điều khiển được chính nó.

8. Code mode là gì

Với anh, code mode có lẽ là ngôi sao của bản phát hành này (theo video đăng ngày 18/10/2026). Cách mọi thứ thường chạy: model gọi một tool, chờ kết quả, rồi gọi tool khác, chờ kết quả, cứ thế tiếp diễn. Với code mode, model, tức agent, viết được một chương trình gọi nhiều tool, các tool chạy cùng nhau, và agent chỉ nhận về kết quả cuối cùng.

Slide Codemode: one call that carries a program, với script gọi tools.github và tools.slack chạy trong sandbox
Slide "Codemode: one call that carries a program": model viết một script thay vì truyền tham số; một sandbox (trên slide ghi "QuickJS in WASM, no files, no network, only tools") chạy script, các tool github và slack được gọi qua một "bridge", chỉ câu trả lời "3 crashes posted" quay về. Dữ liệu thô ở lại trong sandbox; thanh context window phía dưới so phần đã dùng với phần sẽ tốn nếu mọi danh sách issue đều đi qua model.

Script trên slide, tìm bug crash trong ba repo rồi đăng lên Slack, là một ví dụ đọc được của ý tưởng này:

const repos = ["api", "web", "cli"]
const lists = await Promise.all(repos.map(
  r => tools.github.list_issues({repo: r})))
const crashes = lists.flat()
  .filter(i => /crash/i.test(i.title))
await tools.slack.post({ text: crashes })
return `${crashes.length} crashes posted`

Trong bài công bố OpenCode 2.0 hiện trên màn hình, đội OpenCode viết rằng họ đã dựng một trình thông dịch JavaScript tối giản trong package @opencode/codemode; package này nhận MCP server hoặc endpoint OpenAPI rồi biến chúng thành function để agent gọi trong script, và chạy script mà không cần tới Node.js VM hay QuickJS (theo bài công bố hiện trong video đăng ngày 18/10/2026). Trên slide minh hoạ thì sandbox lại được ghi là "QuickJS in WASM".

9. Tìm tool MCP mà không làm phình context

Thay đổi thú vị tiếp theo liên quan tới MCP. Thường thì nếu bạn có nhiều MCP server, mỗi server có cả đống tool, chúng lấp đầy context window. Cách OpenCode làm bây giờ (theo video đăng ngày 18/10/2026): dựng một catalog gồm tất cả MCP server và tool của chúng, nhưng không đưa catalog đó vào context. Model chỉ được đưa một tool search. Khi cần thứ gì, ví dụ khi anh bảo nó lấy issue từ GitHub, tool list issues của GitHub không có sẵn trong context; model gọi tool search và tìm trong catalog những tool làm được việc đó.

Trong ví dụ này anh cấu hình hai MCP server: GitHub và Jev, một API ra quyết định (trên màn hình, nhóm tool của nó ghi là "probabilistic decision helpers"). Anh bảo OpenCode lấy năm issue từ GitHub và dùng MCP Jev để phân loại mức độ khẩn cấp. Prompt anh gõ trong desktop app:

grab last 5 k8s github issues and use Jev MCP to classify how urgent they are
Desktop app OpenCode: các bước Execute trả về định nghĩa tool GitHub và lời gọi search cho jev
Desktop app của OpenCode khi chạy prompt trên: model trả lời "Grabbing the latest Kubernetes issues to rate urgency", dùng ba lần Execute. Kết quả search là các định nghĩa tool như tools.github.add_issue_comment, tools.github.create_issue kèm signature; lần Execute tiếp theo gọi search({query: "jev", namespace: "jev"}).

Model bắt đầu bằng việc gọi tool search để định vị những tool liên quan tới GitHub và issue có thể có trong catalog. Nó gọi search, và giá trị trả về của lời gọi đó chính là các định nghĩa tool: GitHub add issue comment, create issue, get issue. Rồi nó làm y như vậy với Jev.

Ý chính anh rút ra: catalog có thể chứa hàng trăm, thậm chí hàng nghìn tool (theo video đăng ngày 18/10/2026), nhưng chúng không làm phình context, bạn không phải trả tiền cho chúng, và chúng không được nạp vào trừ khi cần.

10. Chạy nhiều tool trong một chương trình, và so sánh context

Đến đây code mode phát huy tác dụng. Thay vì gọi từng tool một (trước hết search issue, rồi lấy issue, rồi gọi Jev để phân loại từng issue một), theo video đăng ngày 18/10/2026, OpenCode viết một đoạn code trong code mode và chạy nó bằng tool execute, chính là tool của code mode.

Desktop app OpenCode: một Execute chứa code gọi tools.github.search_issues và chấm mức khẩn cấp bằng Jev
Bước cuối của demo: "Combining your GitHub pull and urgency rating into one shot", một lần Execute chứa code gọi tools.github.search_issues với truy vấn repo:kubernetes/kubernetes type:issue, sắp theo ngày tạo, lấy 5 issue, rồi chấm mức khẩn cấp bằng Jev theo bốn mức low, medium, high, critical. Issue đầu tiên trong danh sách được xếp mức medium.

Ở đây bạn thấy nhiều tool được ghép trong cùng một chương trình; chúng chạy một lần và model chỉ nhận kết quả cuối. Bất cứ điều gì làm được bằng code đều làm được ở đây: lọc, lặp, gọi các function khác nhau. Theo video đăng ngày 18/10/2026, code mode cho bạn toàn bộ sức mạnh của ngôn ngữ lập trình, và thêm vào đó là không làm phình context.

Anh chỉ vào thanh context window trên slide để so sánh: đây là hình dạng context nếu mọi tool đều được gọi thẳng qua model. Còn khi chỉ có lời gọi tool code, mà OpenCode gọi là execute, thì lời gọi đó chiếm rất ít chỗ trong context. Trên slide minh hoạ, thanh context ghi 41% đã dùng cho cách gọi qua code mode, với phần sọc cam phía sau là phần sẽ tốn thêm "if every issue list had gone through the model" (con số minh hoạ trên slide của video đăng ngày 18/10/2026, không phải số đo).

Gọi tool từng bướcCode mode searchget issuesclassify ×5 Contextnhận mọi kết quảtrung gian execute sandbox githubjevlọc, lặp chỉ kết quả cuốivề context
Hình 10.1Theo cách người dẫn giải thích: gọi tool từng bước thì mọi kết quả trung gian đi qua context; với code mode, model gửi một lời gọi execute chứa chương trình, các tool chạy bên trong và chỉ kết quả cuối quay về.

11. Plugin và lời kết

Cuối cùng, trong bài công bố, đội OpenCode nói plugin giờ được dùng để xây chính các tính năng nội bộ (theo bài công bố hiện trong video đăng ngày 18/10/2026). Anh hiểu điều đó nghĩa là plugin sẽ là công dân hạng nhất và sẽ được bảo trì tốt. Họ còn nói tới việc dùng plugin để sửa đổi TUI: OpenCode có thư viện TUI riêng là OpenTUI, và họ đưa ra ví dụ về cách bạn thay đổi giao diện.

Đoạn Plugins trong bài công bố OpenCode 2.0 về hơn 80 plugin nội bộ và TUI plugin
Đoạn về plugin trong bài công bố, hiện trong video đăng ngày 18/10/2026: OpenCode 1.0 đã có hệ thống plugin nhưng chưa được chú ý đủ; ở 2.0 gần như mọi tính năng được làm thành plugin nội bộ, hiện có hơn 80 cái, để bảo đảm Plugin API luôn được bảo trì. TUI plugin được nâng từ experimental lên stable, chạy trên OpenTUI, kèm một ví dụ "something useless" là hiệu ứng chữ rơi trong terminal.

Điều anh thích ở đây là OpenCode đang ngang tầm Claude Code, và theo anh, có người sẽ cho rằng nó còn tốt hơn ở một vài mảng (nhận định của anh trong video đăng ngày 18/10/2026). Việc có cạnh tranh, cùng với khả năng dùng một coding agent mã nguồn mở và đổi nhà cung cấp model tuỳ ý, theo anh tạo ra một cuộc cạnh tranh lành mạnh, và đó là điều tuyệt vời vì tất cả chúng ta đều được lợi.

Anh kết video bằng lời mong nội dung đã hữu ích, và hẹn gặp lại ở video sau.

Nguồn và liên kết 10 nguồn

  1. Tên gốc: OpenCode 2.0 Released: The #1 Open-Source Coding Agent
  2. Sự kiện: YouTube
  3. Video gốc: https://www.youtube.com/watch?v=Zwdp5vmmG9Q youtube.com
  4. Kênh YouTube The Cef Experience (The Cef Experience): youtube.com/channel/UCzzvWtgD32MJtWagT7V-8HQ youtube.com
  5. Repo OpenCode trên GitHub, "The open source coding agent", giấy phép MIT: github.com/anomalyco/opencode github.com
  6. Trang chủ OpenCode: opencode.ai opencode.ai
  7. Tài liệu về server của OpenCode: opencode.ai/docs/server opencode.ai
  8. Changelog của OpenCode: opencode.ai/changelog opencode.ai
  9. OpenTunnel, công cụ tạo URL công khai cho app chạy trên máy: opentunnel.xyz opentunnel.xyz
  10. OpenTUI, thư viện xây giao diện terminal mà TUI của OpenCode dùng: github.com/anomalyco/opentui github.com