Bài 1 (anatomy của async coding) đã đưa ra khung chung. Bài 2 (Claude Code BG mode và FleetView) đi vào Claude Code. Bài 3 tôi đổi sân sang Cursor, cách tiếp cận hoàn toàn khác. Claude Code chạy nền trên máy của bạn, Cursor đẩy hẳn agent lên cloud VM riêng.
Cursor gọi tính năng đó là Background Agent. Hồi đầu 2025 nó còn beta gated sau paywall, tới giữa 2025 mở cho mọi paid user, và tới 2026 đã trở thành một phần lớn trong roadmap của Cursor. Thậm chí công ty đổi tên thương hiệu nội bộ thành “Cloud Agents” để bao trùm cả Slack integration, Linear integration, GitHub issue trigger.
Trong bài này tôi đi qua: launch flow, kiến trúc sandboxed VM, file config .cursor/environment.json, PR-based workflow, billing model 2026, và khi nào nên (hoặc không nên) dùng nó.
Cursor Background Agent là gì
Định nghĩa ngắn: một cloud VM tách biệt, được Cursor spawn cho mỗi task, clone repo của bạn, chạy agent (Composer hoặc Claude), commit lên branch mới, mở PR. Bạn không cần mở laptop suốt thời gian agent chạy. Bạn không cần máy local có code repo. Bạn không cần local có Node, Python, Docker.
So với Claude Code BG mode (bài 2), điểm khác biệt cốt lõi:
| Đặc điểm | Claude Code BG | Cursor Background Agent |
|---|---|---|
| Vị trí sandbox | Máy local hoặc homelab của bạn | Cloud VM của Cursor |
| Repo clone | Worktree trong repo hiện tại | Ephemeral checkout trên VM |
| Network | Local network của bạn | Internet, có firewall config |
| Persistent state | Có (worktree còn sống) | Không, VM kill sau khi PR mở |
| Trigger | /bg trong session, FleetView | Ctrl+E hoặc Slack/GitHub/Linear/Web |
| Cần internet local | Có (gọi API model) | Không (sau khi dispatch xong) |
| Cost | Trả model token thẳng | Plan tier + metered credit |
| Multi-repo | Không hỗ trợ | Có (cross-repo coordination) |
Trade-off rõ: Cursor tốn tiền hơn, nhưng bạn không cần lo về việc máy bạn có ngủ, mạng có rớt, có process khác chiếm RAM. Claude Code BG rẻ hơn, nhưng phụ thuộc vào uptime máy bạn.
Launch flow
Có bốn cách bắt đầu một Background Agent từ Cursor 1.0+ ecosystem.
Cách 1: Ctrl+E từ desktop editor. Trong editor Cursor, bấm Ctrl+E (hoặc Cmd+E trên Mac). Một panel mở ra, bạn gõ mô tả task, chọn model (Composer 2.5, Claude 4.5, GPT-5…), chọn branch base, bấm Send. Cursor dispatch task lên cloud, panel đóng, bạn quay lại làm việc trong editor.
Cách 2: Cursor Web tại cursor.com/agents. Mở browser, login, tạo agent trực tiếp từ web UI. Hữu ích khi bạn đang ở máy không có Cursor desktop cài, hoặc đang trên iPad.
Cách 3: Slack, GitHub, Linear integration. Mention @Cursor trong Slack channel, gán issue cho Cursor user trong GitHub, hoặc assign Linear issue cho Cursor bot. Mỗi integration cho phép một workflow khác: Slack hợp với “ad-hoc request”, GitHub issue hợp với “tracked work”, Linear hợp với “sprint planned task”.
Cách 4: API hoặc TypeScript SDK. Cursor có TypeScript SDK (release tháng 4 năm 2026) cho phép spawn agent từ code, định nghĩa subagent tree, hook custom. Đây là tầng programmatic, dành cho ai muốn build workflow tự động hoá quanh background agent.
import { CursorAgent } from "@cursor/sdk";
const agent = new CursorAgent({
repo: "myorg/api-server",
branch: "main",
task: "Add rate limiting middleware, write tests",
model: "claude-4.5-sonnet",
spendLimit: 5.00
});
const result = await agent.run();
console.log(result.pullRequestUrl);
Sự khác biệt với Ctrl+E là bạn có thể trigger từ một CI job, một cron, một script. Tôi đã thử setup một cron mỗi đêm spawn agent chạy dependency update PR. Tốn $0.50 mỗi đêm, đỡ tôi 10 phút.
Kiến trúc sandboxed VM
Mỗi background agent gắn với một VM riêng. Cursor không share VM giữa nhiều agent, không reuse VM giữa lần chạy. Mỗi task là một VM fresh, kill sau khi PR mở.
VM mặc định chạy Ubuntu base, có git, ssh key (Cursor tự sinh deploy key cho repo), và một số tool dev phổ biến. Nếu task của bạn cần tool hoặc dependency đặc biệt (Postgres, Redis, Ruby phiên bản cụ thể, build tool nội bộ), bạn phải config qua .cursor/environment.json commit vào repo.
File .cursor/environment.json
File này nằm trong repo, Cursor đọc khi spawn VM. Cấu trúc cơ bản:
{
"build": {
"context": ".",
"dockerfile": ".cursor/Dockerfile"
},
"install": "./scripts/setup.sh",
"start": "npm run dev",
"terminals": [
{
"name": "dev-server",
"command": "npm run dev"
},
{
"name": "test-watch",
"command": "npm run test:watch"
}
]
}
Các field chính:
build: trỏ tới Dockerfile riêng cho VM base. Nếu repo cần Node 22 thay vì Node 20 default, hoặc cần Postgres pre-install, đây là chỗ define.install: script chạy ngay sau khi clone xong. Thường lànpm install,bundle install,pip install -r requirements.txt.start: command chạy daemon/dev server nếu agent cần test app live.terminals: list các terminal long-running, agent có thể đọc output. Ví dụ test runner watch mode, log của dev server.
Quy tắc design: Dockerfile cho system dependency, environment.json cho app dependency. Dockerfile pre-install những thứ chậm để cache (như compiler, system lib), environment.json install application package (cài nhanh, đổi thường xuyên).
Snapshot và caching
Cursor cache snapshot của VM sau khi install command chạy xong. Lần thứ hai task cùng repo, không cần install lại, VM khởi tạo trong ~30 giây thay vì ~3 phút. Snapshot invalidate khi .cursor/environment.json hoặc Dockerfile thay đổi.
Tháng 5 năm 2026 Cursor release “Development Environments” feature, kèm layer caching cho Dockerfile build, claim 70% nhanh hơn. Thực tế tôi thấy build VM mất ~90 giây cho một Node app trung bình, lần thứ hai cùng ngày chỉ ~20 giây.
Sandboxing và network control
VM được sandbox mạnh. Không có quyền truy cập máy local của bạn, không có ssh key cá nhân, không có credential file. Mọi secret phải pass qua “Cursor Secrets” trong dashboard, inject thành env var tại runtime.
Từ giữa 2026 Cursor thêm fine-grained network controls: bạn định nghĩa whitelist domain mà agent được phép gọi khi chạy sandboxed command. Mặc định agent có thể gọi mọi domain (cho npm install, pip install…), nhưng bạn có thể restrict xuống chỉ npm registry, GitHub, package mirror nội bộ. Tránh case agent vô tình gọi production API.
PR-based workflow
Đây là điểm bán hàng cốt lõi của Cursor. Agent không touch local working tree của bạn. Output luôn là một pull request.
Flow chuẩn:
- Dispatch. Bạn gõ task qua
Ctrl+E(hoặc một trong các trigger khác). - VM spawn. Cursor tạo VM mới, clone repo (deploy key), checkout branch base bạn chọn.
- Install. VM chạy install command từ
environment.json. Snapshot cache nếu có. - Agent loop. Composer hoặc Claude chạy trong VM. Đọc file, edit, chạy test, chạy lint. Output từng step có thể xem live trong Cursor Web hoặc Cursor desktop “Agents” panel.
- Commit và push. Agent commit từng logical chunk lên branch mới (thường
cursor/task-<hash>hoặc tên bạn đặt). - PR draft. Khi agent declare done, một PR draft tạo trên GitHub, base branch = branch bạn chọn ban đầu.
- Review. Bạn nhận notification (Slack, GitHub, email, Cursor notification). Mở PR, review diff, có thể comment trên PR, agent sẽ pick up comment và iterate (nếu bạn enable).
- Merge. Bạn merge khi đã hài lòng. Cursor không tự merge, bạn vẫn là người gác cổng.
Một phần hay: remote desktop control. Cursor có feature cho agent stream desktop từ VM về client của bạn, bạn xem nó browse trên Chromium headless để test UI thực tế. Hữu ích khi PR liên quan đến frontend, bạn không cần checkout branch về local chỉ để xem nó render.
Một phần khó chịu: không có persistent state. Nếu agent fail giữa chừng, VM kill, log mất nhiều. Cursor có cải thiện logging trong 2026 (artifacts: screenshot, video, log dump), nhưng không sánh được với Claude Code BG nơi worktree còn nguyên cho bạn vào debug.
Billing model 2026
Cursor billing thay đổi nhiều lần trong năm. Tháng 5 năm 2026 cấu trúc:
| Plan | Giá | Credit pool | Phù hợp |
|---|---|---|---|
| Hobby (Free) | 0 | 50 premium request/tháng | Try out |
| Pro | $20/tháng | $20 credit (~225 Claude Sonnet request) | Solo dev |
| Pro+ | $60/tháng | $60 credit (3x Pro) | Power user |
| Ultra | $200/tháng | $200 credit + ưu tiên capacity | Heavy daily |
| Business | $40/user/tháng | Pooled credit | Team |
| Enterprise | Liên hệ | Pooled credit, SSO, audit | Org |
Background Agent đốt credit theo model token, luôn chạy Max Mode (không có option tắt). Pricing token tham khảo cho Composer 2.5 fast (default cho background agent): $3.00 input + $15.00 output cho mỗi triệu token. Claude 4.5 Sonnet, GPT-5 cũng có mức riêng.
Khi dispatch một task, bạn phải set spend limit (giới hạn chi tiêu cho task đó). Mặc định Cursor đề xuất $5. Task nhỏ (refactor một file, viết test cho một function) thường tốn $0.20 đến $0.80. Task lớn (refactor module, viết nguyên feature) có thể tốn $3 đến $10.
So với Claude Code BG: Claude Code bạn trả model API rate trực tiếp (Sonnet 4.5 ở $3 input, $15 output cho mỗi triệu token), không có markup, không có credit conversion. Cursor markup ~20-30% trên token rate, đổi lại có VM infrastructure. Tính kinh tế thì phụ thuộc bạn đánh giá VM infra đáng bao nhiêu.
Khi nào nên dùng Cursor Background Agent
Bốn use case Background Agent tỏa sáng:
1. Bạn đang ngồi café không có laptop tốt. iPad, Chromebook, máy mượn. Cursor Web cursor.com/agents cho bạn dispatch task mà không cần repo local. Tôi đã làm thử từ iPad qua Termius bị giới hạn, sau chuyển sang Cursor Web đơn giản hơn nhiều.
2. Refactor lớn cần test environment full. Một feature đụng vào Postgres, Redis, Stripe webhook. Setup environment local mất công, agent chạy local có thể không có dependency đầy đủ. Cursor VM có Dockerfile pre-config đủ thứ, agent chạy thật.
3. Bạn không muốn agent có access local machine. Code có credential file, code có production deployment access. Tách agent ra cloud VM không có credential local là tầng bảo vệ thứ hai.
4. Bạn cần coordinated change cross-repo. Cursor BG hỗ trợ multi-repo (frontend, backend, infra), spawn cùng task touch cả ba. Claude Code không có concept tương đương (mỗi BG session anchor một repo).
Khi nào KHÔNG nên dùng
Bốn case tôi tránh:
1. Task cần debug iterative dài. Nếu bạn biết task sẽ cần xem log nhiều, sửa nhiều lần, vào VM check thủ công, Cursor không thân thiện. Worktree Claude Code local cho bạn vào shell, đọc log, gdb, mọi thứ. Cursor VM kill sau PR.
2. Code nhạy cảm không thể leave laptop. Có công ty cấm code ra cloud không kiểm soát. Cursor Enterprise có self-hosted VM option nhưng tốn. Hobby/Pro tier dùng VM của Cursor, có audit trail nhưng vẫn là third party.
3. Mạng local của bạn tốt và máy mạnh. Nếu homelab của bạn có 32GB RAM, idle phần lớn thời gian, vì sao trả tiền cho VM của người khác. Claude Code BG ở homelab free về infra, chỉ trả model token.
4. Task quá ngắn. Một edit 5 phút không đáng spin up VM mất 30-90 giây boot. Sync agent (Composer inline trong Cursor) nhanh hơn nhiều.
Gotchas thực tế
Docker-in-Docker khó. Nếu app của bạn build Docker image như một phần của test, VM của Cursor mặc định không cho Docker daemon. Workaround có (DinD config trong Dockerfile, mount socket), nhưng rất finicky. Cộng đồng có nhiều blog walkthrough riêng cho case này.
Debian InRelease not valid yet. Một bug nổi tiếng: VM Cursor đôi khi spawn với thời gian sai (clock skew), apt-get fail với “InRelease not valid yet”. Fix: thêm --allow-unauthenticated hoặc cấu hình ntp sync trong Dockerfile.
Secret leak qua artifact. Nếu agent có quyền dùng secret (API key inject env var), một bug nhỏ trong agent có thể echo $SECRET vào log, log lưu trong artifact, artifact public cho bạn. Audit log của Cursor giúp, nhưng không thay thế được việc bạn scope secret minimal.
Snapshot stale. Nếu bạn đổi dependency trong package.json mà quên đổi environment.json hash, Cursor có thể dùng snapshot cũ. Symptom: agent fail với “module not found” cho package bạn vừa add. Fix: invalidate snapshot manually qua dashboard.
Spend limit reset behavior. Spend limit set per-task, không per-month. Nếu bạn fire 20 task trong một ngày, mỗi task $5 spend limit, theory $100 max. Thực tế Cursor có hard cap account level nhưng đặt cao. Nên set alert ở dashboard.
Bước tiếp
Bài 4 (Devin vs OpenDevin vs Replit Agent) tôi so sánh ba platform khác: Devin của Cognition, OpenDevin/All-Hands (open source), Replit Agent 3. Mỗi platform có triết lý khác Cursor: Devin chạy task dài hơn, OpenDevin self-host được, Replit gắn chặt với hosting của họ.
Bài 5 (final, BG vs sync agent tradeoff) tổng kết: khi nào BG, khi nào sync, hybrid pattern, decision framework.