Vnstock Logo

TUI là gì? Giao diện terminal từ Claude đến Vnstock

05/11/2026đọc 25 phút
TUI là gì? Giao diện terminal từ Claude đến Vnstock

Nếu từng dùng Claude Code, Antigravity CLI hoặc một công cụ AI ngay trong terminal, bạn có thể đã gặp trải nghiệm này: màn hình vẫn chỉ có chữ, nhưng chữ được chia thành khung, có màu, có dấu nhắc, có vùng nhập nội dung, có gợi ý phím và thay đổi theo trạng thái đang chạy.

Nó không giống một câu lệnh đơn lẻ. Nó cũng chưa phải cửa sổ đồ họa có nút bấm và chuột như ứng dụng desktop. Kiểu giao diện nằm giữa hai thế giới đó thường được gọi là TUI — Terminal User Interface, hay giao diện người dùng trong terminal.

TUI xuất hiện ngày càng nhiều trong công cụ dành cho lập trình viên và AI agent vì nó giữ người dùng ở ngay nơi code, log, môi trường chạy và Git đang tồn tại. Nhưng TUI không đơn giản là “CLI được tô màu”. Đằng sau nó vẫn có thiết kế trải nghiệm, trạng thái, cách nhận phím và vòng lặp hiển thị giống những ứng dụng khác.

Trong bài này, mình sẽ giải thích TUI bằng ngôn ngữ bình dân, phân biệt nó với CLI, bóc các lớp tạo nên một giao diện terminal và dùng chính trải nghiệm của vnstock thế hệ 6 làm ví dụ.

Tóm tắt nhanh

  • Terminal là cửa sổ hoặc môi trường hiển thị văn bản và nhận phím.
  • Shell là chương trình đọc lệnh như zsh, bash hoặc PowerShell.
  • CLI thường nhận một lệnh cùng tham số, thực hiện công việc rồi trả kết quả.
  • Interactive prompt giữ một phiên mở để người dùng nhập nhiều lệnh liên tiếp.
  • TUI dùng terminal như một bề mặt giao diện: có bố cục, trạng thái, lựa chọn, phím tắt hoặc nội dung được cập nhật trong phiên.
  • Không có đường biên tuyệt đối giữa interactive CLI và TUI. Có những TUI toàn màn hình; cũng có TUI nhẹ chỉ thêm khung, màu, gợi ý và một vòng tương tác trên chính dòng lệnh.
  • vnstock thế hệ 6 dùng mô hình lai: vnstock <lệnh> phục vụ CLI và automation; gõ vnstock trong terminal sẽ mở một TUI nhẹ dành cho con người.

Phân biệt Terminal, Shell, CLI và TUI

Ba khái niệm này thường bị gọi lẫn nhau:

Terminal là căn phòng

Terminal là nơi chữ được hiển thị và phím bấm được chuyển cho chương trình. Trên máy tính hiện đại, thứ bạn mở thường là terminal emulator — ứng dụng mô phỏng thiết bị terminal ngày trước, chẳng hạn Terminal trên macOS, Windows Terminal, iTerm2, Ghostty hoặc terminal tích hợp trong VS Code.

Bạn có thể hiểu terminal giống một căn phòng. Nhiều loại chương trình khác nhau có thể chạy trong cùng căn phòng đó.

Shell là người nhận yêu cầu

Shell như bash, zsh, fish hoặc PowerShell đọc những gì bạn gõ, tìm chương trình tương ứng và khởi chạy nó.

Khi gõ:

Shell
vnstock doctor

shell tách tên chương trình vnstock khỏi phần yêu cầu doctor, rồi chuyển chúng cho ứng dụng.

CLI là cách nói chuyện bằng lệnh

CLI là viết tắt của Command-Line Interface — giao diện dòng lệnh. Một CLI điển hình có cấu trúc:

Text
chương-trình  hành-động  đối-tượng  --tùy-chọn

Ví dụ:

Shell
vnstock doc Market.equity.ohlcv

Bạn đã biết mình muốn gì, đưa đủ thông tin trong một dòng, chương trình in kết quả rồi kết thúc. Cách này rất hợp cho script, quy trình tự động và AI agent vì đầu vào, đầu ra cùng mã thoát đều có thể được xử lý bằng máy.

Tài liệu giảng dạy về môi trường dòng lệnh của Stanford cũng tách terminal, shell, CLI và TUI thành các khái niệm liên quan nhưng không đồng nhất.1

Bốn khái niệm khác nhau: terminal là nơi hiển thị, shell nhận yêu cầu, CLI nói bằng lệnh, TUI là giao diện trong phiênTerminal, shell, CLI và TUI liên quan nhưng không đồng nhất

TUI (Terminal User Interface) là gì?

TUI có thể được mở rộng thành Text User Interface, Textual User Interface hoặc Terminal User Interface. Trong ngữ cảnh hiện đại, cách gọi “Terminal User Interface” giúp mô tả đúng nơi nó hoạt động.

Một TUI không chỉ chờ một dòng lệnh rồi in kết quả. Nó giữ trạng thái của phiên và dùng lưới ký tự trong terminal để tạo trải nghiệm tương tác, chẳng hạn:

  • khung và vùng nội dung;
  • danh sách có mục đang được chọn;
  • bảng có cột được căn chỉnh;
  • thanh tiến trình hoặc trạng thái đang chạy;
  • vùng nhập nội dung;
  • phím tắt và gợi ý;
  • thông báo lỗi ngay tại nơi người dùng đang thao tác;
  • nội dung được cập nhật mà không cần mở cửa sổ mới.

Những chương trình như Vim, htop, lazygit hay trình quản lý file trong terminal là các ví dụ TUI dễ nhận ra. Chúng chiếm phần lớn màn hình, nhận từng phím ngay khi bấm và tự vẽ lại các vùng nội dung.

Nhưng TUI không nhất thiết phải toàn màn hình. GitHub mô tả TUI theo nghĩa rộng là giao diện vượt ra ngoài việc in từng dòng tĩnh: có lựa chọn, biểu mẫu tương tác, tiến trình hoặc nội dung cập nhật.2 Theo cách hiểu này, một dấu nhắc tương tác có khung, trạng thái, gợi ý lệnh và giữ phiên cũng nằm trên phổ TUI, dù nó vẫn để lại nội dung cũ trong lịch sử cuộn của terminal.

TUI và CLI khác nhau ở đâu? Bảng so sánh chi tiết

Khác biệt lớn nhất không nằm ở việc cả hai đều dùng chữ. Nó nằm ở hợp đồng tương tác.

Khía cạnhCLITUI
Cách bắt đầuLệnh và tham số thường được đưa vào ngay từ đầuMở một phiên rồi thao tác bên trong
Trạng tháiMỗi lần gọi thường tương đối độc lậpGiao diện giữ trạng thái đang xem, đang chọn hoặc đang chạy
Khả năng khám pháDựa vào --help, tài liệu và trí nhớ lệnhCó menu, gợi ý, vùng trạng thái hoặc phím tắt ngay trên màn hình
Tự động hóaRất tốt: dễ pipe, redirect, lên lịch và đọc mã thoátKhông phải lựa chọn mặc định cho script vì cần tương tác
Đầu raVăn bản hoặc JSON có cấu trúcMàn hình được tổ chức cho con người đọc và điều khiển
Điều hướngGõ tên hành độngPhím mũi tên, Tab, phím tắt, lựa chọn hoặc câu lệnh trong phiên
Vòng đờiChạy xong rồi thoátGiữ phiên cho tới khi người dùng thoát

CLI mạnh khi người dùng biết chính xác hành động cần làm. TUI mạnh khi người dùng cần quan sát trạng thái, khám phá lựa chọn hoặc thực hiện nhiều bước liên tiếp.

Hai cách này không loại trừ nhau. Thiết kế tốt thường giữ cả hai:

Text
Con người gõ chương trình không kèm tham số
                    ↓
               Mở TUI

Script hoặc AI gọi chương trình kèm lệnh/JSON
                    ↓
               Chạy CLI

Phần logic thực hiện công việc có thể dùng chung. Khác biệt nằm ở lớp nhận yêu cầu và trình bày kết quả.

Interactive prompt (REPL) có phải TUI không?

Đây là vùng dễ gây tranh luận vì không có một vạch kẻ duy nhất được mọi người sử dụng.

Một Python REPL đơn giản:

Text
>>> 2 + 2
4
>>>

là interactive prompt hoặc REPL — vòng lặp đọc lệnh, thực thi, in kết quả rồi quay lại chờ lệnh tiếp theo. REPL có trạng thái, nhưng giao diện còn rất mỏng.

Khi prompt bắt đầu có khung trạng thái, màu có ý nghĩa, danh sách gợi ý, tự hoàn thành, lựa chọn, xác nhận, bảng và thông báo được tổ chức, nó tiến dần về phía TUI.

Có thể hình dung thành một phổ:

Text
CLI một lần
    → REPL / interactive prompt
        → TUI nhẹ theo từng dòng
            → TUI toàn màn hình
                → GUI

Điều quan trọng không phải tranh luận một công cụ “đủ TUI” hay chưa. Câu hỏi hữu ích hơn là: lớp tương tác đó đang giúp người dùng làm được gì mà một lệnh tĩnh chưa làm tốt?

Vì sao công cụ AI như Claude Code và Antigravity CLI chọn TUI?

Một phiên làm việc với AI agent trong hành trình bắt đầu vibe coding có nhiều đặc tính hợp với terminal:

  • cuộc trò chuyện kéo dài qua nhiều lượt;
  • câu trả lời được tạo dần thay vì xuất hiện một lần;
  • agent cần hiển thị file đang đọc, công cụ đang gọi và bước kiểm tra đang chạy;
  • một số thao tác cần người dùng đồng ý;
  • kết quả cần nằm cạnh code, Git và log;
  • người dùng có thể đang làm việc trên máy chủ qua SSH;
  • bàn phím thường nhanh hơn chuột khi liên tục chuyển giữa câu lệnh và nội dung.

Claude Code được tài liệu Anthropic mô tả là mở một interactive REPL khi chạy claude không kèm yêu cầu.3 Trong cách nói hằng ngày, nhiều người vẫn gọi trải nghiệm terminal tương tác đó là TUI vì nó có phiên, trạng thái và các thành phần hiển thị vượt ra ngoài một lệnh CLI đơn lẻ.

Google gọi Antigravity CLI là một biến thể terminal của Google Antigravity; codelab chính thức mô tả bề mặt này là một lightweight TUI.4 Từ “lightweight” rất đáng chú ý: mục tiêu không phải đưa toàn bộ ứng dụng đồ họa vào terminal, mà chỉ giữ những thành phần cần thiết cho vòng làm việc cùng agent.

TUI phù hợp với AI không có nghĩa đây là giao diện tốt nhất cho mọi người. Khi công việc cần so sánh nhiều biểu đồ, kéo thả, xem ảnh lớn hoặc phục vụ người không quen terminal, web và GUI vẫn tự nhiên hơn.

Một giao diện TUI được tạo ra như thế nào? (6 lớp kiến trúc)

Nhìn một giao diện terminal có khung và màu, người mới dễ nghĩ đó là một loại ảnh đặc biệt. Thực tế, terminal vẫn làm việc chủ yếu với ký tự đặt trên một lưới hàng và cột.

Một TUI thường được hình thành qua sáu lớp.

1. Mô hình công việc

Trước khi vẽ khung, người làm phải xác định:

  • người dùng muốn hoàn thành việc gì;
  • thông tin nào cần nhìn thấy liên tục;
  • thao tác nào xảy ra nhiều nhất;
  • hành động nào nguy hiểm và cần xác nhận;
  • kết quả nào cần giữ lại sau khi thoát.

Nếu chưa trả lời được, giao diện rất dễ trở thành một bảng điều khiển đầy phím tắt nhưng không giúp công việc nhanh hơn.

2. Trạng thái ứng dụng

TUI cần biết hiện tại đang ở đâu:

Text
đang chờ nhập
đang tải dữ liệu
đang hiển thị kết quả
đang hỏi xác nhận
đã gặp lỗi

Trạng thái quyết định màn hình nên hiện gì và phím bấm tiếp theo có ý nghĩa ra sao. Với một danh sách, trạng thái còn gồm mục đang chọn, vị trí cuộn, bộ lọc và cửa sổ đang được tập trung.

3. Đầu vào từ bàn phím

CLI truyền thống thường nhận cả dòng sau khi bạn nhấn Enter. TUI toàn màn hình thường cần nhận từng phím ngay lập tức: mũi tên để di chuyển, q để thoát, / để tìm kiếm.

Terminal có hai cách nhận input thường gặp:

  • cooked mode: hệ điều hành hỗ trợ sửa dòng và chỉ giao input sau khi nhấn Enter;
  • raw mode: chương trình nhận từng phím và tự xử lý điều hướng, phím tắt cùng tín hiệu thoát.

Raw mode tạo tương tác linh hoạt hơn nhưng cũng thêm trách nhiệm. Nếu chương trình lỗi mà không khôi phục terminal, bàn phím hoặc con trỏ có thể cư xử bất thường cho tới khi được đặt lại.

4. Bố cục trên lưới ký tự

Web có pixel, CSS và nhiều lớp chồng nhau. Terminal chủ yếu có số hàng, số cột và ký tự rộng một hoặc hai ô.

Khung như dưới đây được tạo từ các ký tự Unicode:

Text
╭─ Trạng thái ─────────────────────╮
│ Máy đã sẵn sàng                  │
│ help  xem lệnh     exit  thoát   │
╰──────────────────────────────────╯

Việc căn đúng không hề đơn giản. Tiếng Việt, ký tự Đông Á, emoji và mã màu có thể chiếm số cột khác với độ dài chuỗi trong code. Một TUI tốt phải tính chiều rộng hiển thị, tự xuống dòng và thích nghi khi người dùng thu nhỏ terminal.

5. Màu và kiểu chữ bằng mã điều khiển

Terminal không nhận CSS. Chương trình gửi các chuỗi điều khiển, thường theo chuẩn ANSI, để yêu cầu đổi màu, in đậm, làm mờ, di chuyển con trỏ hoặc xóa một vùng.

Ví dụ, màu không nên là cách duy nhất để truyền đạt trạng thái. “Lỗi” cần có chữ hoặc ký hiệu, không chỉ đổi từ xanh sang đỏ. Người dùng có thể dùng terminal nền sáng, chế độ tương phản cao hoặc tắt màu hoàn toàn.

6. Vòng lặp nhận sự kiện và vẽ lại

Một TUI toàn màn hình thường chạy vòng lặp:

Text
Đọc phím hoặc sự kiện
        ↓
Cập nhật trạng thái
        ↓
Tạo bố cục từ trạng thái mới
        ↓
Vẽ phần thay đổi lên terminal
        ↓
Quay lại chờ sự kiện
Vòng lặp của một TUI: đọc phím, cập nhật trạng thái, dựng bố cục, vẽ lại phần thay đổi rồi quay lại chờ phímTUI dựng lại giao diện từ trạng thái sau mỗi lần nhận phím

Các framework như prompt_toolkit trong Python tổ chức ứng dụng quanh input/output, layout, style, key binding và event loop.5 Với Rust, Ratatui thường dựng lại giao diện từ trạng thái ứng dụng cho mỗi lần vẽ rồi chỉ cập nhật các ô cần thay đổi.6

Người làm TUI không nhất thiết phải tự viết toàn bộ mã điều khiển terminal. Python có Textual và prompt_toolkit; Rust có Ratatui; JavaScript có Ink; Go có Bubble Tea. Framework giúp xử lý bố cục, phím bấm và render, nhưng quyết định trải nghiệm vẫn thuộc về người thiết kế.

TUI có gì ưu việt?

Ở gần nơi công việc đang diễn ra

Với lập trình viên và vibe coder, terminal đã mở sẵn ở đúng thư mục dự án, đúng môi trường ảo và đúng quyền truy cập. TUI không buộc người dùng chuyển sang trình duyệt rồi tìm lại context.

Dùng tốt qua SSH và máy không có màn hình đồ họa

Một TUI có thể chạy trên VPS, máy chủ hoặc môi trường từ xa chỉ bằng kết nối terminal. Đây là lợi thế lớn cho công cụ vận hành, giám sát và agent chạy gần code.

Tối ưu cho bàn phím

Khi phím tắt được thiết kế hợp lý, người dùng có thể tìm, chọn và thực hiện thao tác mà không rời tay khỏi bàn phím. Lợi ích rõ nhất với công việc lặp lại nhiều lần mỗi ngày.

Khởi động nhanh và ít lớp hơn GUI

TUI không cần một cửa sổ trình duyệt riêng, bộ tài nguyên web và nhiều thành phần đồ họa. Điều này thường giúp công cụ gọn, dễ phân phối cùng chương trình chính và phản hồi nhanh.

Có thể dùng chung lõi với CLI

Nếu TUI chỉ là lớp tương tác phía trên cùng các command handler, sản phẩm có thể phục vụ đồng thời:

  • con người qua giao diện tương tác;
  • script qua CLI;
  • AI agent qua JSON;
  • tài liệu qua cùng một danh mục lệnh.

Đây là ưu điểm kiến trúc quan trọng hơn vẻ ngoài của terminal.

Những giới hạn dễ bị bỏ qua

Không dễ khám phá như GUI

GUI có nút, nhãn và vị trí trực quan. TUI phụ thuộc nhiều vào gợi ý phím, menu trợ giúp và thói quen terminal. Nếu màn hình không nói rõ “nhấn gì tiếp theo”, người mới dễ mắc kẹt.

Khả năng hiển thị có giới hạn

Biểu đồ tài chính dày, ảnh, kéo thả và bố cục phức tạp không phải điểm mạnh tự nhiên của terminal. Có thể dựng biểu đồ bằng ký tự, nhưng không nên ép TUI thay web chỉ vì muốn mọi thứ nằm trong terminal.

Khác biệt giữa hệ điều hành và terminal

Màu, Unicode, clipboard, phím tắt và chiều rộng ký tự có thể khác giữa macOS, Linux, Windows, terminal tích hợp IDE và phiên SSH.

Accessibility cần được thiết kế chủ động

Screen reader thường đọc terminal theo dòng. Khung trang trí, ký hiệu không có nhãn và nội dung vẽ lại liên tục có thể tạo nhiễu. Một TUI tốt cần đầu ra chữ thay thế, thứ tự đọc hợp lý và chế độ không màu.

TUI tương tác không thay cho đầu ra máy đọc

Nếu chỉ cung cấp TUI, người dùng khó lập lịch tác vụ, pipe kết quả hay tích hợp với công cụ khác. Vì vậy, sản phẩm terminal nghiêm túc thường giữ thêm CLI hoặc chế độ JSON.

Trải nghiệm TUI trong vnstock thế hệ 6

Tại thời điểm bài viết ngày 06/11/2026, môi trường thử nghiệm ~/.venv_6x đang cài vnstock 6.0.0rc3. Sau khi kích hoạt môi trường, gõ vnstock không kèm lệnh sẽ mở giao diện tương tác:

Shell
source ~/.venv_6x/bin/activate
vnstock

Màn hình mở đầu có dạng:

Text
╭─ vnstock 6.0.0rc3 ────────────────────────────────╮
│ Trạng thái tài khoản và quyền sử dụng             │
│ Thời hạn của bản đang cài                         │
│                                                   │
│ help  xem lệnh     exit  thoát                    │
╰───────────────────────────────────────────────────╯

vnstock ❯

Thông tin thật phụ thuộc trạng thái trên máy. Ví dụ trên cố ý lược bỏ dữ liệu tài khoản.

Đây là TUI nhẹ theo từng dòng. Nó không chiếm toàn bộ màn hình và không xóa lịch sử cũ. Người dùng nhập lệnh tại dấu nhắc vnstock ❯, đọc kết quả rồi tiếp tục lệnh khác trong cùng phiên.

Từ thế hệ 5 tới thế hệ 6: giữ thói quen, mở rộng khả năng tra cứu

Giao diện tương tác đã xuất hiện từ vnstock thế hệ 5. Thế hệ 6 giữ tên lệnh và cách mở quen thuộc, đồng thời bổ sung khả năng tra cây hàm cùng tài liệu ngay trong terminal.

Thiết kế này nối tiếp định hướng Vnstock được thiết kế cho AI agent như thế nào: người mới cài thư viện thường chưa biết nên gọi lệnh nào, còn AI agent cần một cách xác định hàm, tham số và schema thay vì đoán.

Các nhóm thao tác hiện có gồm:

NhómVí dụViệc người dùng làm được
Tài khoảnstatus, login, logoutXem trạng thái quyền sử dụng trên máy
Dữ liệutools, doc, dataKhám phá cây hàm, cách gọi và xem bảng mẫu
Nguồnkeys, authXem tình trạng khóa, mở hoặc xóa phiên của nguồn
Trợ lý AIonboard, skillsLấy hướng dẫn và Agent Skills phù hợp cho AI agent
Kiểm tradoctor, version, report, policyKiểm môi trường, phiên bản và thông tin hỗ trợ
Cập nhậtupdate, installXem và thực hiện cập nhật hoặc cài thành phần được phép dùng
Cài đặtlanguage, telemetry, envĐiều chỉnh ngôn ngữ, lựa chọn đếm lượt dùng và xem nơi lưu trạng thái
Phiênhelp, exitXem trợ giúp hoặc kết thúc TUI

Gõ tên lệnh có hoặc không có dấu /. Phím Tab hỗ trợ hoàn thành tên lệnh. Nếu gõ gần đúng, giao diện có thể gợi ý lệnh tương tự thay vì chỉ báo “không hợp lệ”.

help: giảm áp lực phải nhớ lệnh

Trong CLI thuần, người dùng thường phải nhớ --help hoặc mở tài liệu bên ngoài. Trong TUI của vnstock, help hiển thị lệnh theo nhóm và kèm ví dụ Python.

Cách nhóm này quan trọng hơn màu sắc. Người mới không cần nhớ một danh sách phẳng gồm hàng chục lệnh; họ có thể bắt đầu từ mục tiêu: tài khoản, dữ liệu, nguồn, AI, kiểm tra hay cài đặt.

tools và doc: biến terminal thành bản đồ của thư viện

Hai lệnh của thế hệ 6 phục vụ việc khám phá API:

Text
vnstock ❯ tools Market.equity
vnstock ❯ doc Market.equity.ohlcv

tools cho biết những hàm nào đang có theo nhóm và nguồn nào hỗ trợ. doc trình bày cách gọi, tham số cùng cấu trúc cột trả về.

Điểm đáng chú ý là terminal và Python dùng chung một nguồn mô tả. Trong code, người dùng có thể gọi show_api() và show_doc() để nhận cùng thông tin. Một danh mục chung giúp tài liệu trong TUI, CLI và thư viện ít bị lệch nhau theo thời gian.

data: xem kết quả rồi lấy lại code

Trong TUI, người dùng có thể xem nhanh năm phiên gần nhất của một mã từ nguồn mình chọn:

Text
vnstock ❯ data price FPT <nguồn>

TUI không tự chọn nguồn thay người dùng. Nếu thiếu tên nguồn, nó yêu cầu bổ sung và chỉ cách kiểm tra nguồn nào đã có khóa trên máy.

Kết quả không chỉ là bảng. Phần cuối còn ghi:

  • nguồn được chọn;
  • thời điểm truy xuất;
  • cảnh báo nếu phiên cuối chưa kết thúc;
  • đoạn code Python tạo ra chính bảng đó.

Đây là một quyết định trải nghiệm có chủ đích: TUI không trở thành nơi người dùng bị khóa lại. Sau khi khám phá bằng giao diện, họ lấy được code để đưa vào notebook, script hoặc gửi cho AI agent chỉnh tiếp.

Kiến trúc đằng sau TUI của vnstock thế hệ 6

Một lõi lệnh cho cả CLI và TUI

Trong vnstock thế hệ 6, các lệnh tương tác gọi lại cùng phần xử lý của CLI thay vì tạo một hệ thống riêng. Vì vậy:

Shell
vnstock doctor

và:

Text
vnstock ❯ doctor

đi qua cùng logic kiểm tra. TUI chỉ giữ phiên mở và trình bày hành động theo cách dễ khám phá hơn.

Thiết kế này tránh một lỗi thường gặp: giao diện đẹp có chức năng khác với script, hoặc tài liệu nói một kiểu nhưng menu thực thi một kiểu khác.

Tự nhận biết con người hay script đang gọi

vnstock chỉ mở TUI khi đầu vào và đầu ra đều là terminal tương tác. Nếu lệnh được pipe, chuyển hướng hoặc chạy trong ngữ cảnh không có terminal, chương trình không cố mở một phiên hỏi đáp.

Ngoài ra, CLI có chế độ JSON:

Shell
vnstock --json status

Điều này tạo ra ba lớp sử dụng trên cùng một công cụ:

  1. TUI cho người muốn khám phá và làm việc liên tiếp.
  2. CLI cho người đã biết lệnh cần chạy.
  3. JSON cho script và AI agent cần đầu ra ổn định hơn văn bản trình bày.
Một lõi lệnh của vnstock thế hệ 6 phục vụ ba cách dùng: TUI cho con người, CLI cho lệnh đã biết, JSON cho script và AI agentTUI, CLI và JSON đi qua cùng một logic xử lý nên kết quả không lệch nhau

Màu sắc có điều kiện, nội dung vẫn đọc được khi không màu

Màu chỉ được bật khi đầu ra thực sự là terminal. Khi người dùng pipe kết quả hoặc đặt biến NO_COLOR, nội dung trở về chữ thường.

Khung, nhãn và thông báo vẫn mang ý nghĩa bằng từ ngữ. Đây là chi tiết nhỏ nhưng phản ánh nguyên tắc quan trọng của TUI: màu hỗ trợ việc đọc, không được giữ vai trò duy nhất để phân biệt đúng, sai hay cảnh báo.

Lỗi một lệnh không đóng cả phiên

Trong vòng tương tác, nếu một lệnh gặp lỗi, TUI hiển thị lỗi và cách sửa nếu có rồi quay lại dấu nhắc. Người dùng không phải khởi động lại ứng dụng chỉ vì nhập thiếu một tham số.

Ctrl+C cũng được xử lý theo ngữ cảnh: có thể dừng thao tác hiện tại mà không nhất thiết làm mất cả phiên. Đây là ví dụ cho thấy TUI không chỉ là phần trang trí; nó cần định nghĩa vòng đời và cách phục hồi sau lỗi.

Vì sao vnstock không làm TUI toàn màn hình?

Một dashboard toàn màn hình có thể trông ấn tượng hơn, nhưng không chắc phù hợp với mục tiêu hiện tại.

TUI theo từng dòng giữ lại một số lợi ích:

  • người dùng cuộn lên xem kết quả và code cũ;
  • dễ sao chép một bảng hoặc thông báo lỗi;
  • hành vi gần CLI nên người mới có thể học dần;
  • không cần quản lý màn hình phụ và khôi phục terminal phức tạp;
  • phù hợp với vai trò tra cứu, kiểm máy và làm cầu nối sang Python.

Nếu sau này cần theo dõi nhiều tiến trình, chuyển tab hoặc liên tục cập nhật nhiều bảng, TUI toàn màn hình có thể hợp lý hơn. Kiến trúc giao diện nên đi theo công việc, không đi theo độ “ngầu” của ảnh chụp.

Khi nào nên chọn TUI, CLI hay GUI cho dự án của bạn?

TUI đáng cân nhắc khi:

  • người dùng đã làm việc thường xuyên trong terminal;
  • công cụ chạy trên máy chủ hoặc qua SSH;
  • bàn phím là cách tương tác chính;
  • cần giữ một phiên và trạng thái liên tục;
  • kết quả chủ yếu là chữ, bảng, log hoặc tiến trình;
  • muốn phân phối công cụ gọn cùng CLI hiện có;
  • cần giữ người dùng gần code và môi trường chạy.

Nên ưu tiên CLI thuần khi:

  • mỗi tác vụ có thể mô tả gọn trong một dòng;
  • automation và khả năng kết hợp với công cụ khác là ưu tiên chính;
  • kết quả cần được pipe, lọc hoặc lưu vào file;
  • người dùng đã biết chính xác họ muốn làm gì.

Nên ưu tiên web hoặc GUI khi:

  • người dùng đại chúng không quen terminal;
  • sản phẩm dựa nhiều vào biểu đồ, ảnh và thao tác trực quan;
  • cần hỗ trợ cảm ứng, kéo thả hoặc bố cục phức tạp;
  • khả năng khám phá bằng nút và menu quan trọng hơn tốc độ bàn phím.

Bài Chọn tech stack cho vibe coding: Tư duy kiến trúc giải pháp trình bày rộng hơn cách chọn giữa terminal, web, mobile và desktop trước khi viết code.

Cách nhờ AI thiết kế TUI mà không lao ngay vào code

Một prompt kiểu “hãy làm TUI đẹp bằng Rust” thường khiến AI chọn framework và vẽ màn hình trước khi hiểu công việc.

Thay vào đó, có thể dùng brief sau:

Text
[1] Người dùng và môi trường
- Ai dùng công cụ?
- Chạy trên máy cá nhân, VPS hay qua SSH?
- Terminal tối thiểu cần hỗ trợ là gì?

[2] Ba công việc quan trọng nhất
1. ...
2. ...
3. ...

[3] Trạng thái cần nhìn thấy
- Đang chờ, đang chạy, thành công, cảnh báo, lỗi.
- Thông tin nào phải luôn hiện?

[4] Hai chế độ
- Con người: TUI hoặc interactive prompt.
- Script/AI: CLI không tương tác và JSON.

[5] An toàn
- Hành động nào cần xác nhận?
- Bí mật nào không được in ra?
- Ctrl+C và lỗi giữa chừng phải khôi phục thế nào?

[6] Khả năng tiếp cận
- Không phụ thuộc riêng vào màu.
- Có chế độ chữ thường và NO_COLOR.
- Hoạt động khi terminal hẹp.

[7] Yêu cầu dành cho AI
1. Đề xuất TUI nhẹ và TUI toàn màn hình.
2. So sánh với CLI thuần.
3. Chỉ ra trạng thái, command model và cách kiểm thử trước khi viết code.

Yêu cầu AI đưa ra cả phương án không dùng TUI rất quan trọng. Nếu một CLI cùng tài liệu tốt đã giải quyết đủ nhu cầu, thêm event loop, key binding và renderer chỉ làm dự án khó duy trì hơn.

Kiểm thử TUI khác kiểm thử ảnh chụp

TUI trông đúng chưa đủ. Nó còn phải phản ứng đúng với input, lỗi và kích thước terminal.

Những phần nên kiểm tra gồm:

  • cùng một lệnh cho kết quả nhất quán giữa CLI và TUI;
  • lệnh sai có gợi ý hợp lý;
  • lỗi không đóng phiên ngoài ý muốn;
  • Ctrl+C và EOF kết thúc sạch;
  • đầu ra không màu vẫn hiểu được;
  • ký tự tiếng Việt không làm lệch khung;
  • terminal hẹp không cắt mất thông tin quan trọng;
  • chế độ pipe không chờ input tương tác;
  • JSON không lẫn màu hay câu chữ trang trí;
  • bí mật không xuất hiện trong log hoặc lịch sử lệnh (kết hợp nguyên tắc lưu API key an toàn khi dùng coding agent).

vnstock thế hệ 6 thiết kế lớp phiên để input/output có thể được truyền vào khi kiểm thử, thay vì bắt buộc mở terminal thật. Đây là cách tách logic tương tác khỏi thiết bị hiển thị và giúp các tình huống được tái lập.

Sau lớp trải nghiệm, những nguyên tắc ở bài Coding convention cho Python và Next.js cùng Git cho vibe coding tiếp tục giúp code TUI có cấu trúc và lịch sử thay đổi dễ review.

Câu hỏi thường gặp về TUI

TUI viết tắt của từ gì?

TUI là viết tắt của Terminal User Interface (hoặc Text User Interface). Đây là giao diện người dùng chạy ngay trong cửa sổ dòng lệnh (terminal), có khung, bảng, màu sắc, phím tắt và giữ trạng thái phiên làm việc thay vì chỉ chạy một câu lệnh đơn lẻ rồi kết thúc.

TUI và CLI có thay thế nhau không?

Không. CLI phù hợp khi người dùng đã biết chính xác câu lệnh cần gọi hoặc khi cần tự động hóa bằng script, cron và AI agent. TUI phù hợp khi con người cần khám phá lựa chọn, quan sát trạng thái và thao tác nhiều bước liên tiếp. Thiết kế tốt thường dùng chung một lõi xử lý cho cả TUI, CLI và chế độ --json.

Làm sao mở giao diện TUI trong vnstock thế hệ 6?

Sau khi kích hoạt môi trường Python đã cài đặt vnstock, bạn chỉ cần gõ vnstock (không kèm tham số) trong terminal tương tác để mở dấu nhắc vnstock ❯. Tại đây bạn có thể gõ help, doctor, tools, doc hoặc data để tra cứu hàm và lấy đoạn code Python tương ứng.

Điều cần nhớ

TUI không phải GUI nghèo hơn và cũng không phải CLI được tô màu. Nó là một cách thiết kế giao diện riêng, tận dụng terminal như lưới ký tự có trạng thái, phím bấm và vòng lặp tương tác.

Điểm mạnh của TUI nằm ở sự gần gũi với code, khả năng làm việc từ xa, tốc độ bàn phím và khả năng dùng chung lõi với CLI. Điểm yếu nằm ở khả năng khám phá, hiển thị đồ họa, khác biệt terminal và trách nhiệm xử lý input, accessibility cùng phục hồi sau lỗi.

Trải nghiệm vnstock thế hệ 6 cho thấy TUI không cần chiếm toàn màn hình mới có ích. Một dấu nhắc nhẹ, biết trạng thái tài khoản, nhóm lệnh theo mục tiêu, gợi ý khi nhập sai, xem được bảng mẫu và trả lại code Python đã đủ tạo ra cây cầu từ “tôi chưa biết gọi hàm nào” sang “tôi có đoạn code để tiếp tục phân tích”.

Nếu đang dùng bản thử nghiệm trong môi trường ~/.venv_6x, bạn có thể kích hoạt môi trường rồi gõ vnstock. Sau đó bắt đầu bằng help, doctor, tools, doc và data. Tài liệu cập nhật nằm tại Dòng lệnh và tra cứu hàm của vnstock thế hệ 6.


Nội dung phục vụ học tập, nghiên cứu và tham khảo. Phiên bản thử nghiệm, tên lệnh và hành vi giao diện có thể thay đổi; hãy đối chiếu tài liệu của phiên bản đang cài trước khi sử dụng.

Footnotes

  1. Stanford CS 45, Command Line Environment notes. ↩

  2. GitHub TUIKit, Foundations for terminal interfaces. ↩

  3. Anthropic, Claude Code CLI reference. ↩

  4. Google Codelabs, Hands-on with Antigravity CLI. ↩

  5. prompt_toolkit, Building full-screen applications. ↩

  6. Ratatui, Rendering concepts. ↩

Bài liên quan