Claude Managed Agents trên hạ tầng Cloudflare
Hợp tác Anthropic × Cloudflare công bố 19.05.2026. Ý tưởng gọn: vòng lặp agent chạy ở Anthropic ("bộ não"), còn nơi thi hành code, chạy lệnh, gọi tool, mở kết nối mạng, chạy trong Cloudflare Sandbox của chính bạn ("bàn tay").
Đây KHÔNG phải chỗ để ngồi code
Nó là hạ tầng thi hành cho sản phẩm. Muốn bỏ máy cá nhân và làm việc trên cloud thì đó là cloud-dev, một thứ hoàn toàn khác. Lẫn hai thứ này là hiểu sai kiến trúc, không phải nhầm tên gọi.
Nó giải quyết gì cho Conan
Hôm nay CourseContentWorkflow gọi model rồi tự xử lý kết quả trong Worker. Nó không có chỗ nào để agent chạy lệnh, cài gói, hay giữ trạng thái giữa các lượt. Managed Agents cho ta đúng chỗ đó, mà vẫn nằm trong tài khoản Cloudflare của mình, nên nhật ký, egress và tool đều do mình định đoạt.
Ba thứ đáng dùng ngay, theo thứ tự giá trị:
- Egress proxy có kiểm soát, mọi lưu lượng agent đi qua proxy tuỳ biến: tiêm khoá một cách an toàn, chặn rò dữ liệu, và có nhật ký. Với một hệ sinh nội dung học, biết agent đã gọi ra đâu là điều kiện để kiểm chất lượng, không phải tính năng phụ.
- Tool riêng, khai trong một file duy nhất (
src/tools/custom-tools.ts), chạy trong Workers runtime với đầy đủ binding: D1, R2, Workers AI. Nghĩa là một tool có thể đọc thẳngcourse_seedhay ghi artefact vào R2 mà không đi vòng qua HTTP. - Browser Rendering, chụp màn hình, lấy nội dung trang, có ghi lại phiên để người duyệt xem lại.
Kiến trúc
Anthropic bắn webhook tới control plane của bạn, một Worker. Control plane cấp cho mỗi phiên một sandbox, và quản vòng đời của nó.
Hai loại sandbox, chọn theo việc:
| MicroVM (Containers) | Isolate (Worker Loader) | |
|---|---|---|
| Là gì | Máy ảo Linux đầy đủ | V8 isolate, khởi động cỡ mili-giây |
| Giữ trạng thái bằng | Ảnh chụp trong R2 | SQLite của Durable Object |
| Hợp với | Chạy lệnh, cài gói, toolchain thật | Tool ngắn, gọi nhiều, cần rẻ |
Điều kiện tiên quyết: kiểm trước khi làm gì khác
- Cloudflare Workers Paid plan (hoặc Enterprise). Containers và Worker Loader binding đều không có ở gói miễn phí. Không có gói trả phí thì toàn bộ hướng này dừng ở đây.
- Quyền vào Claude Platform Console để tạo một self-managed environment.
- R2, chỉ cần nếu dùng MicroVM.
Cách triển khai đúng với repo này
Không vendor template của Cloudflare vào conanplatform. Đặt nó ở một repo riêng, conan-agent-sandbox, fork từ cloudflare/claude-managed-agents.
Lý do không phải là sở thích. Template đó nhận cập nhật ngược dòng qua Workers Builds; kéo nó vào monorepo là tự tay biến việc cập nhật thành việc merge tay. Và wrangler.jsonc của nó chứa ID gắn với tài khoản, thứ không được commit vào repo dùng chung.
Các bước, theo thứ tự:
- Bấm Deploy to Cloudflare ở repo trên. Nó fork sang GitHub của bạn và bật Workers Builds, tức deploy chạy trên CI, đúng luật không deploy từ máy. Trong biểu mẫu, đổi tên cả hai KV namespace để khỏi đụng cái đã có.
- Ghi lại URL Worker vừa deploy.
- Ở Claude Platform Console, tạo self-managed environment, trỏ webhook về URL đó.
- Đặt bốn bí mật:
ENVIRONMENT_ID,ANTHROPIC_ENVIRONMENT_KEY,ANTHROPIC_API_KEY,WEBHOOK_SECRET. - Migration D1 của control plane chạy tự động qua postdeploy hook, đây là repo của nó, không phải
api.conan.school, nên luật "áp tay từng file" của ta không áp vào đây. - Dùng MicroVM thì cấp thêm chứng thư R2 cho ảnh chụp. Chỉ dùng Isolate thì bỏ qua.
- Bật Cloudflare Access trước khi dùng thật. Chính tài liệu của Cloudflare cảnh báo: control plane không được bảo vệ mặc định. Một control plane mở là một chỗ để người lạ chạy code trong tài khoản của bạn.
Bẫy đã biết
- Chạy
npm run prebuildtrước khi gọi thẳngwrangler, nếu không, ID của KV và D1 chưa được điền vào cấu hình. - Đổi tài khoản Cloudflare thì phải reset
wrangler.jsonc; ID cũ ở lại và trỏ vào hư vô. - Input của tool phải giải ra một JSON object, Anthropic yêu cầu thế. Và gọi
.describe()trên mọi trường: đoạn mô tả đó chảy thẳng vào JSON Schema và là thứ model dựa vào để điền đúng.
Nối vào Conan
Khi control plane đã chạy, api.conan.school gọi Managed Agents API như thường; điều duy nhất khác là phiên agent thi hành trong sandbox của ta. Tool đầu tiên đáng viết là một tool đọc course_seed và trả về nguyên văn, vì đó là chỗ máy sinh hay đứng nhất (xem skill course-seed và known-risks).
Nhắc lại cho rõ: dựng cái này không nới luật "nội dung vào repo trước, D1 sau", xem content-ops. Agent chạy trong sandbox của ta vẫn phải đi qua đúng bốn lớp lọc và vẫn phải ghi vết vào course_content_runs. Đổi chỗ thi hành không đổi tiêu chuẩn.