SSD Nodes Learn Hosting plans →
Hướng dẫn Matt ConnorBởi Matt Connor

Claude Code trên web: từ repo GitHub đến pull request

Dùng Claude Code trên trình duyệt với gói Pro: kết nối GitHub, xem diff, mở pull request, và tránh bẫy commit chưa push hay file .env bị tải lên từ Windows.

Claude Code trên web là gì, và ai được dùng?

Claude Code trên web là Claude Code chạy trong một máy ảo (VM, virtual machine) trên đám mây. Bạn mở nó thẳng từ trình duyệt tại claude.ai/code. Bạn chọn một repo GitHub, giao việc cho Claude, rồi xem diff và mở pull request (PR, yêu cầu gộp mã) mà không cần cài gì trên máy. Tài liệu của Anthropic gọi mỗi lần làm việc như vậy là một "cloud session". Bài này gọi nó là phiên đám mây.

Theo tài liệu chính thức của Claude Code (đọc ngày 15/10/2026), phiên đám mây có trong các gói Pro, Max và Team. Người dùng Enterprise cũng dùng được nếu có premium seat hoặc seat Chat + Claude Code. Danh sách này không có gói Free. Bảng so sánh trên trang giá của Claude cũng ghi Claude Code là "No" ở cột Free. Nếu bạn chưa rõ gói Pro gồm những gì, đọc thêm Claude Code có nằm trong gói Claude Pro không.

Tài liệu mà bài này dựa vào không nêu giới hạn theo quốc gia cho phiên đám mây. Bài này cũng không kiểm tra riêng cho Việt Nam. Cách chắc nhất là mở claude.ai/code bằng chính tài khoản của bạn và xem trang có hiện ra không.

Bài viết cho một trường hợp rất phổ biến: bạn trả tiền gói Pro, làm việc chủ yếu trên Windows, và code nằm trên GitHub. Luồng cơ bản khá ngắn. Phần lớn bài nói về những chỗ dễ sai, vì đó là nơi bạn mất thời gian.

Phiên đám mây tính vào hạn mức của gói như thế nào?

Phiên đám mây tính vào hạn mức sử dụng của gói. Hạn mức này dùng chung với chat trên claude.ai và Claude Code ở mọi nơi khác. Anthropic không thu phí riêng cho máy ảo. Chạy nhiều phiên song song thì hạn mức hết nhanh hơn, theo đúng tỷ lệ số phiên.

Bài này không nhắc lại chi tiết về tiền. Câu hỏi về chi phí có ở bài về chi phí và credit của phiên đám mây. Cách chia một việc lớn ra nhiều phiên có ở bài về project, thread và hạn mức của Claude Code. Cách tính hạn mức chung có ở bài giải thích hạn mức sử dụng của Claude.

Kết nối GitHub: chọn Claude GitHub App hay /web-setup?

Phiên đám mây cần quyền vào repo để clone mã và push nhánh. Có hai cách cấp quyền.

  • Claude GitHub App. Bạn cài app này trong bước khởi tạo trên trình duyệt. Phiên clone được mọi repo công khai. Với repo riêng tư, phiên chỉ làm việc được khi app đã được cài lên repo đó. Nếu repo thuộc một organization, chủ organization có thể phải duyệt việc cài đặt.
  • Lệnh /web-setup. Lệnh này chạy bên trong Claude Code CLI trên máy bạn. Nó đọc token mà gh auth token in ra, hỏi bạn xác nhận, rồi gửi token cho Anthropic. Anthropic lưu token ở dạng mã hoá cùng tài khoản claude.ai của bạn. Sau đó phiên vào được mọi repo mà token gh vào được, dù app có được cài hay không.

Nếu bạn không muốn cài gì trên máy, hãy chọn GitHub App. /web-setup cần Claude Code CLI và GitHub CLI (gh) đã đăng nhập. Nó chỉ hiện khi Claude Code đăng nhập bằng tài khoản claude.ai, và bị ẩn khi bạn dùng API key. Nếu bạn đã kết nối GitHub qua trình duyệt, /web-setup sẽ báo trước rằng chạy tiếp sẽ thay thế kết nối cũ. Trên gói Team và Enterprise, /web-setup bị ẩn cho tới khi Owner của tổ chức bật thiết lập Quick setup. Thiết lập này mặc định là tắt.

GitHub App còn mở thêm một tính năng: Auto-fix. Khi bạn bật Auto-fix cho một PR, Claude theo dõi PR đó. Claude tự push bản sửa khi CI (continuous integration, hệ thống chạy test tự động) báo lỗi, hoặc khi reviewer để lại comment. Auto-fix cần app được cài trên repo. Nó không tự xử lý merge conflict, vì GitHub không gửi webhook khi nhánh gốc đi tiếp và tạo ra conflict. Khi gặp conflict, bạn mở phiên và bảo Claude rebase.

Về credential: trong môi trường do Anthropic vận hành, credential GitHub được mã hoá trên máy chủ của Anthropic. Nó không bao giờ đi vào máy ảo của phiên. Mọi thao tác GitHub từ máy ảo đi qua một proxy, và proxy gắn credential ở phía máy chủ.

Muốn thu hồi quyền, ngắt kết nối GitHub tại claude.ai/customize/connectors. Thao tác này xoá credential GitHub mà phiên đám mây dùng, dù nó đến từ trình duyệt hay từ /web-setup. Token gh trên máy bạn vẫn còn hiệu lực ở phía GitHub cho tới khi bạn tự thu hồi nó trên GitHub.

Môi trường Default và mạng Trusted chặn những gì?

Mỗi phiên chạy trong một environment (môi trường đám mây). Đây là cấu hình đã lưu. Nó quyết định phiên được vào mạng nào, có biến môi trường gì, và chạy setup script gì lúc khởi động. Với gói Pro và Max, bước khởi tạo trên web tự tạo một môi trường tên Default nếu bạn chưa có. /web-setup cũng tạo nó.

Default không có cấu hình riêng. Nó không định nghĩa biến môi trường hay setup script, và chỉ có các công cụ cài sẵn. Mức truy cập mạng của nó là Trusted. Có bốn mức: None, Trusted, Full và Custom. Trusted chỉ cho phép các tên miền trong danh sách cho phép (allowlist). Danh sách này gồm package registry như npm, PyPI, RubyGems và crates.io, cùng GitHub và các cloud SDK. Lưu lượng tới GitHub, tới các MCP connector đã bật, và tới host của network secret không phải đi qua allowlist.

Hệ quả thực tế: npm install hay pip install chạy được trong môi trường Default. Nhưng một bài test gọi tới API nội bộ của công ty bạn sẽ không kết nối được, vì tên miền đó không có trong allowlist. Khi đó lỗi nằm ở cấu hình mạng, không nằm ở mã. Muốn mở thêm tên miền, bạn sửa environment, không sửa repo. Ngược lại, mức None chặn cả việc cài package.

Đừng dán API key thật vào biến môi trường chỉ để test chạy cho nhanh. Phiên có thể đọc mọi thứ bạn đưa vào nó. Giữ secret ngoài tầm với của AI agent giải thích cách tách secret ra khỏi những gì agent nhìn thấy.

Luồng làm việc trên trình duyệt: từ repo tới pull request

  1. Mở claude.ai/code và đăng nhập bằng tài khoản Pro.
  2. Kết nối GitHub và chọn repo cần làm.
  3. Chọn chế độ quyền. Phiên đám mây có ba chế độ: Auto, Accept edits và Plan. Không có Manual và Bypass permissions. Auto chỉ hiện khi tổ chức cho phép và model hỗ trợ.
  4. Viết yêu cầu cụ thể, ví dụ: "Sửa lỗi đăng nhập trong src/auth/login.ts và thêm test cho trường hợp mật khẩu rỗng".
  5. Chờ Claude làm việc. Khi Claude tới một điểm dừng, nó push nhánh của phiên lên GitHub.
  6. Xem diff, để lại comment nếu cần, rồi tạo PR.

Nếu bạn muốn hiểu các chế độ quyền khác nhau ở đâu, đọc chế độ Auto và các chế độ quyền của Claude Code.

Đóng tab trình duyệt không dừng phiên. Phiên vẫn chạy cho tới khi Claude xong việc hiện tại, rồi chuyển sang chờ. Bạn có thể theo dõi tiến độ từ tab Code trong app Claude trên điện thoại. Cách làm có trong bài dùng Claude Code từ điện thoại.

Xem diff và mở PR

Mỗi phiên có một chỉ báo diff, dạng +42 -18, tức số dòng thêm và số dòng bớt. Mở chỉ báo này để vào màn hình diff. Tại đây bạn để lại comment trên từng dòng. Các comment được gửi kèm tin nhắn tiếp theo của bạn cho Claude.

Mặc định, diff so sánh thay đổi của phiên với nhánh gốc (base branch) của phiên. Bạn có thể chọn một nhánh khác trong repo để so. Diff được tính từ nội dung blob git thô, nên diff driver và bộ lọc textconv cấu hình trong repo không có tác dụng ở đây. Nếu repo của bạn dùng chúng cho file nhị phân, diff trên web sẽ trông khác diff trên máy.

Khi diff đã ổn, tạo PR ngay từ màn hình diff. Bạn có thể mở PR đầy đủ hoặc PR nháp (draft). Bạn cũng có thể chuyển sang trang soạn PR của GitHub, với tiêu đề và mô tả đã được tạo sẵn. Phiên vẫn mở sau khi PR được tạo, nên bạn nhắn tiếp để Claude sửa thêm trên cùng nhánh.

Chuyển việc từ terminal lên đám mây với claude --cloud

Phần này cần Claude Code CLI trên máy, đăng nhập bằng cùng tài khoản claude.ai. Nếu bạn chỉ dùng trình duyệt, có thể bỏ qua tới phần về các lệnh không chạy trong phiên đám mây.

claude --cloud "Sửa test bị lỗi trong auth.spec.ts"

Lệnh này tạo một phiên đám mây mới cho repo hiện tại. Mỗi lệnh --cloud làm việc với đúng một repo. Cách viết cũ --remote vẫn chạy, nhưng giờ chỉ là alias đã bị đánh dấu deprecated của --cloud.

--cloud cần tài khoản Anthropic. Nó không chạy khi Claude Code được cấu hình cho Amazon Bedrock, Agent Platform của Google Cloud, hay nhà cung cấp bên thứ ba khác. Nó cũng không chạy khi bạn xác thực bằng API key. Trong trường hợp đó bạn sẽ thấy một trong các dòng sau:

Unable to get organization UUID
Cloud sessions need a claude.ai sign-in. Run `claude auth login` (or /login in a local session), then try again.

Cách sửa là chạy claude auth login và đăng nhập bằng tài khoản claude.ai. Khác biệt giữa hai kiểu đăng nhập có trong bài đăng nhập Claude Code bằng gói đăng ký hay API key.

Từ CLI, việc chuyển phiên chỉ đi một chiều. Bạn kéo được phiên đám mây về terminal. Bạn không đẩy được một phiên terminal đang chạy lên đám mây. --cloud luôn tạo phiên mới. Ứng dụng Desktop thì gửi được phiên local lên đám mây từ menu mở phiên của nó.

Vì sao phiên đám mây không thấy commit mới nhất của tôi?

Đây là lỗi hay gặp nhất. Máy ảo clone GitHub remote của thư mục hiện tại, tại nhánh hiện tại. Nó không lấy bản checkout trên ổ đĩa của bạn. Vì vậy commit chưa push không tồn tại với phiên. Claude sẽ làm việc trên mã cũ, và bạn sẽ thấy nó "quên" phần sửa vừa làm.

Kiểm tra trước khi gửi việc:

git status -sb

Nếu dòng đầu có dạng ## main...origin/main [ahead 2], nhánh của bạn có 2 commit chưa lên GitHub. Push trước, rồi mới tạo phiên:

git push
claude --cloud "Sửa test bị lỗi trong auth.spec.ts"

Quy tắc này cũng đúng khi bạn làm trên trình duyệt. Phiên trên claude.ai/code lấy mã từ GitHub, không lấy từ máy bạn. Thứ gì chưa push thì phiên không thấy.

Khi nào Claude Code tải cả repo từ máy bạn lên?

Có hai trường hợp claude --cloud không clone từ GitHub. Thay vào đó, nó đóng gói (bundle) repo trên máy rồi tải thẳng lên phiên:

  • Repo không có git remote nào.
  • Repo nằm trên github.com nhưng Claude GitHub App chưa được cài lên repo đó.

Trường hợp thứ hai áp dụng cả khi bạn đã kết nối GitHub bằng /web-setup. Đây là bẫy cho người dùng /web-setup mà không cài app. Bạn tưởng phiên clone từ GitHub, nhưng thực ra nó nhận bản bundle từ máy bạn.

Với một bản clone đầy đủ, bundle chứa lịch sử repo trên mọi nhánh. Nó cũng chứa thay đổi chưa commit của các file đã được git theo dõi (tracked). File chưa được theo dõi (untracked) không được đưa lên. Muốn phiên thấy một file mới, chạy git add cho file đó.

Windows và file .env

Cách xử lý file nhạy cảm khác nhau theo hệ điều hành:

  • macOS, Linux và WSL: Claude Code bỏ ra ngoài thay đổi chưa commit của các file có tên giống credential hay khoá, như .env, *.tfvars, id_rsa và *.pem. Nó cũng bỏ ra thay đổi chưa commit của file do git filter quản lý, ví dụ Git LFS. Một thông báo Left on this machine: liệt kê các file bị bỏ ra. Phiên dùng bản đã commit của các file đó.
  • Windows chạy trực tiếp (không qua WSL): thay đổi chưa commit của file tracked được tải lên nguyên trạng, bất kể tên file là gì.

Nghĩa là trên Windows, nếu .env là file tracked và bạn vừa sửa nó để dán key thật vào, bản sửa đó sẽ lên phiên đám mây. Kiểm tra hai việc trước khi chạy --cloud:

git ls-files .env
git status --short

git ls-files .env in ra .env nếu file được theo dõi, và không in gì nếu không. git status --short liệt kê các thay đổi. Dòng có chữ M ở một trong hai cột đầu là file tracked đã sửa, và các bản sửa này sẽ lên phiên. Dòng bắt đầu bằng ?? là file untracked, không được đưa lên.

Nếu có bản sửa bạn không muốn gửi đi, cất nó tạm bằng git stash trước khi tạo phiên. Sau đó lấy lại bằng git stash pop. Lưu ý thêm: một .env đã từng được commit thì nằm trong lịch sử repo. Nó đi theo bundle trên mọi hệ điều hành, và đã nằm sẵn trên GitHub nếu bạn đã push.

Giới hạn của bundle

  • Thư mục phải là repo git có ít nhất một commit.
  • Bundle phải nhỏ hơn 100 MB. Với repo lớn hơn, Claude Code thử lại chỉ với nhánh hiện tại, rồi với một snapshot gộp của thư mục làm việc. Nếu snapshot vẫn quá lớn, việc tải lên thất bại.
  • Phiên tạo từ bundle chỉ push ngược lên GitHub được khi kết nối GitHub của bạn có quyền push vào repo đó.

Nếu repo nằm trên GitHub và bạn muốn tránh hẳn việc tải lên: push nhánh, cài Claude GitHub App lên repo, rồi tạo phiên lại. Khi đó phiên clone từ GitHub.

Repo trên GitLab hoặc Bitbucket thì sao?

Việc clone repo và tạo PR đều cần GitHub. GitHub Enterprise Server tự host chỉ được hỗ trợ trên gói Team và Enterprise. Tài liệu cho phép gửi repo GitLab, Bitbucket hay host khác lên phiên dưới dạng bundle, bằng biến môi trường CCR_FORCE_BUNDLE=1. Nhưng phiên đó không push kết quả về remote gốc được, nên bạn phải tự lấy thay đổi về.

Kéo phiên đám mây về máy bằng claude --teleport

claude --teleport
claude --teleport <session-id>

Lệnh đầu mở danh sách phiên để bạn chọn. Lệnh thứ hai mở thẳng một phiên theo ID. Bên trong một phiên CLI đang chạy, /teleport hoặc /tp mở cùng danh sách đó. Bạn cũng có thể chạy /tasks rồi nhấn t. Trên claude.ai/code, menu của phiên có mục mở trong terminal. Mục này chép sẵn lệnh để bạn dán.

Teleport kiểm tra bốn điều kiện trước khi chạy:

  • Thư mục làm việc sạch, không có thay đổi chưa commit. Nếu có, teleport đề nghị bạn stash.
  • Bạn đứng trong bản checkout của đúng repo đó, không phải một fork.
  • Nhánh của phiên đã được push lên remote. Teleport tự fetch và checkout nhánh này.
  • Bạn đăng nhập cùng tài khoản claude.ai đã dùng cho phiên. Đăng nhập bằng API key sẽ không chạy.

Sau khi teleport, terminal nhận một bản sao riêng của phiên. Việc bạn làm tiếp trên máy chỉ nằm trên máy. Nó không hiện lại trong phiên trên claude.ai hay app điện thoại. Cũng đừng nhầm --teleport với --resume. --resume mở lại hội thoại từ lịch sử local của máy này và không liệt kê phiên đám mây. Cách lịch sử phiên được lưu trên máy có trong bài về resume và lịch sử phiên của Claude Code.

Những lệnh nào không chạy trong phiên đám mây?

/clear không chạy trong phiên đám mây. Muốn bắt đầu lại với ngữ cảnh trống, tạo một phiên mới từ thanh bên. /compact và /context vẫn chạy. Auto-compaction (tự tóm tắt hội thoại khi cửa sổ ngữ cảnh gần đầy) cũng chạy tự động. Các lệnh chỉ dành cho giao diện terminal, như /plugin hay /resume, không có trong phiên đám mây. Cách quản lý ngữ cảnh nói chung có trong bài quản lý ngữ cảnh trong Claude Code.

Phiên để lâu không dùng sẽ ra sao?

Phiên đám mây dừng sau một khoảng thời gian không hoạt động, và máy ảo của phiên bị thu hồi. Tài liệu không nêu con số chính xác cho khoảng thời gian này. Một phiên có thể đang chờ bạn duyệt lệnh gọi tool của MCP connector, hoặc chờ bạn đăng nhập vào một MCP server. Phiên đó vẫn bị tính là không hoạt động, nên nó có thể hết hạn trong lúc chờ.

Khi bạn mở lại phiên từ claude.ai/code, hệ thống cấp một máy ảo mới. Lịch sử hội thoại được khôi phục. Những việc đang chạy nền lúc máy ảo bị thu hồi thì không, ví dụ subagent và lệnh shell. Lần đánh thức đang chờ của một /loop tự canh nhịp cũng mất, và bạn phải chạy /loop lại. Vì vậy, đừng để một phiên chờ duyệt suốt đêm rồi mong nó chạy tiếp như cũ.

Chia sẻ phiên từ tài khoản Pro: Public nghĩa là gì?

Với tài khoản Pro và Max, một phiên có hai mức hiển thị: Private và Public. Public cho phép bất kỳ ai đang đăng nhập claude.ai xem phiên, không chỉ người bạn gửi link. Việc kiểm tra người xem có quyền vào repo hay không mặc định là tắt. Tài liệu ghi rõ phiên có thể chứa mã và credential từ repo GitHub riêng tư.

Trước khi bật Public cho một phiên làm trên repo riêng tư, đọc lại toàn bộ hội thoại và diff. Trong phần cài đặt chia sẻ của Claude Code, bạn có thể bắt người xem phải có quyền vào repo. Bạn cũng có thể ẩn tên của mình khỏi phiên được chia sẻ. Người xem thấy trạng thái mới nhất lúc họ mở link, và trang của họ không tự cập nhật.

Gói Team và Enterprise khác ở hai điểm. Mức hiển thị là Private và Team, tức chỉ thành viên tổ chức xem được. Việc kiểm tra quyền vào repo mặc định là bật.

FAQ: câu hỏi thường gặp

Gói Claude Free có dùng được Claude Code trên web không?

Không. Tài liệu Claude Code liệt kê phiên đám mây cho các gói Pro, Max và Team, cùng người dùng Enterprise có premium seat hoặc seat Chat + Claude Code. Gói Free không có trong danh sách. Trang giá của Claude cũng ghi Claude Code không có trong gói Free.

Vì sao phiên đám mây không thấy commit mới nhất của tôi?

Phiên đám mây clone repo từ GitHub, tại nhánh hiện tại. Nó không lấy bản checkout trên máy bạn, nên commit chưa push thì phiên không thấy. Chạy git status -sb. Nếu dòng đầu có [ahead N], hãy git push rồi tạo phiên lại.

Trên Windows, file .env có bị tải lên phiên đám mây không?

Chỉ trong một số trường hợp. Claude Code tải repo từ máy lên khi claude --cloud chạy trong repo không có remote, hoặc trong repo GitHub chưa cài Claude GitHub App. Trên Windows chạy trực tiếp, thay đổi chưa commit của mọi file tracked được tải lên nguyên trạng, kể cả .env. File .env untracked thì không được đưa lên. Chạy git ls-files .env để biết file có được theo dõi không. Dùng git stash để cất bản sửa trước khi tạo phiên.

Phiên đám mây có tính tiền riêng không?

Không có phí riêng cho máy ảo. Phiên đám mây tính vào hạn mức sử dụng của gói, chung với chat và Claude Code ở mọi nơi khác. Chạy nhiều phiên song song thì hạn mức hết nhanh hơn theo tỷ lệ.

Tôi có cần cài gì trên máy để dùng claude.ai/code không?

Không, nếu bạn chỉ làm việc trên trình duyệt và kết nối GitHub bằng Claude GitHub App. Bạn chỉ cần Claude Code CLI khi muốn dùng /web-setup, tạo phiên bằng claude --cloud, hoặc kéo phiên về máy bằng claude --teleport.

#claude-code#claude-code-on-the-web#cloud-sessions#github#claude-pro