Skip to content

Làm việc trên cloud ​

Từ 2026-09-01, môi trường phát triển chuẩn của Nemo12 là Claude Code on web (claude.ai/code): phiên Claude chạy trên máy cloud của Anthropic, tự clone dac2205/nemo12.com, làm việc rồi mở PR. Máy local vẫn dùng được, nhưng không còn là nơi duy nhất giữ trạng thái.

Managed Agents không chạy trên Cloudflare. Vòng lặp agent và sandbox của Managed Agents đều nằm trên hạ tầng Anthropic. Cloudflare trong dự án này là nơi sản phẩm chạy (Workers, D1, R2, Queues) — không phải nơi agent chạy. Muốn phần thực thi thật sự nằm trên Cloudflare thì phải dựng self-hosted sandbox (worker polling ngoài) — chưa làm, và chưa cần.

Ba chế độ phiên, đừng chọn nhầm ​

Nút chọn môi trường ở claude.ai/code có ba mục, và chỉ MỘT trong ba thật sự chạy trên cloud:

Chế độClaude Code chạy ở đâuMáy anh tắt thì sao
Cloud ☁máy cloud của Anthropic, tự clone repo từ GitHubphiên vẫn sống, tự khởi động lại khi rảnh quá lâu
Remote Control 🖥máy Mac của anh — claude.ai chỉ là màn hình điều khiểnphiên chết: Remote Control disconnected
Localapp desktopkhông liên quan tới claude.ai

Nhìn icon cạnh tên phiên là biết ngay: hình đám mây là Cloud, hình màn hình là Remote Control. Phiên Cloud còn ghi kèm tên môi trường (Default · nemo12.com); Remote Control thì không.

Đây là chỗ dễ nhầm nhất, vì cả ba đều mở từ cùng một trang web và nhìn giống hệt nhau lúc đang chạy. Chỉ khi máy Mac ngủ hoặc đóng thì mới lộ ra phiên đó thật ra vẫn phụ thuộc vào máy — và lúc đó công việc đang dở đã đứng rồi. Một phiên đã tạo không đổi chế độ được; muốn chuyển thì mở phiên mới ở chế độ Cloud.

Ba thứ trước đây chỉ có ở máy local, nay đã vào repo ​

ThứTrướcNay
Trí nhớ phiên~/.claude/projects/…/memory/ trên một máy.claude/memory/ trong git
.env dev của từng appgõ tay, gitignorenpm install tự dựng lại từ .env.production
Skills + dev serverđã ở .claude/ trong gitkhông đổi

Khởi động một phiên cloud ​

bash
npm install

Chỉ vậy. Vòng đời prepare của npm chạy hai việc: bật .githooks, và dựng các file .env dev từ .env.production đã có trong git (giá trị duy nhất là Google OAuth client ID — công khai). Không có bước bootstrap nào phải nhớ; một bước phải nhớ là một bước sẽ có ngày bị quên, và cái hỏng khi quên thì im lặng — npm run dev vẫn chạy, chỉ là đăng nhập Google gãy.

npm run setup:env vẫn còn để chạy lại riêng phần .env. Trên CI thì script tự đứng ngoài: build ở đó đọc thẳng .env.production, thêm một file .env nữa chỉ làm mờ nguồn giá trị.

Đọc .claude/memory/MEMORY.md trước khi bắt tay: đó là bối cảnh mà một phiên mới không tự suy ra được từ code.

Cái gì KHÔNG đi lên cloud ​

Secret thật vẫn ở đúng chỗ cũ và không bao giờ vào repo:

  • CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID — GitHub repo Secrets, CI đọc lúc deploy.
  • Secret của worker — wrangler secret, không có bản sao ở đâu khác.
  • ID đo lường (VITE_GTM_ID) — GitHub repo Variables.

Phiên cloud không có các thứ này, và đó là đúng: deploy đi qua CI (luật đầy đủ ở .claude/memory/nemo12-deploy-qua-github.md — nằm ngoài site docs nên không đặt link được), không phải qua tay phiên.

Nhiều phiên vẫn phải theo luật cũ ​

Phiên cloud mỗi cái một bản clone riêng nên không còn cảnh hai phiên ghi đè nhau trên cùng một cây làm việc. Nhưng luật sổ chung (docs/intake.md + docs/intake/, docs/traceability.md, bảng REQ) vẫn nguyên: chỉ CHÈN, không ghi đè, và cấp số SRC bằng node scripts/src-new.mjs. Hai phiên cloud song song vẫn cấp trùng số nếu đọc con trỏ rồi tự +1.