Tháng trước tôi mở Cursor lúc 9 giờ sáng, gõ một câu mô tả task: “refactor module auth, tách user-session ra khỏi token-service, viết test cho cả hai.” Bấm enter. Cursor không trả lời ngay trong editor. Nó tạo một remote sandbox, clone repo, chạy agent trên đó. Tôi đóng tab Cursor, mở Figma làm việc khác.

Một giờ sau, notification: pull request đã sẵn sàng review. Hai file mới, một test suite, branch riêng. Tôi review, merge, xong.

Đó là async coding agent. Không phải autocomplete, không phải pair programming. Một entity tự chạy ở chỗ khác, làm xong rồi báo lại.

Năm 2025-2026, đây là cuộc đua nóng nhất trong dev tooling. Cursor, Devin, Replit, Claude Code, OpenHands, mỗi tool đều có “background mode” hoặc “agent mode” riêng. Series này tôi sẽ đi qua từng tool, anatomy của chúng, khi nào nên dùng. Bài đầu tiên: định nghĩa và building blocks.

Background agent là gì

Định nghĩa đơn giản: agent chạy trong môi trường tách biệt với editor, không cần user tương tác liên tục, deliver kết quả qua pull request hoặc commit khi hoàn thành.

Ba từ khoá quan trọng:

  1. Tách biệt. Không chạy trong editor của bạn, mà trong sandbox riêng (cloud VM, container, hoặc worktree local).
  2. Không tương tác liên tục. Bạn giao task, agent tự chạy. Có thể hỏi clarification, nhưng không phải mỗi action đều cần xác nhận.
  3. Deliver qua git. Output là branch + commit + PR, không phải diff trong editor đang mở.

So sánh với sync agent (Copilot autocomplete, Cursor Composer inline, Cody chat):

Tiêu chíSync agentAsync/background agent
Ngữ cảnhĐang mở file, viết codeBạn đang làm việc khác
Tương tácReal-time, từng dòngMột lần giao task, đợi kết quả
OutputInline diff trong editorPull request, commit
Thời gian chạyGiây đến vài phútPhút đến vài giờ
Môi trườngLocal editor của bạnSandbox riêng
Người dùngĐang focused vào codeĐang đa nhiệm

Sync agent là dụng cụ trợ thủ. Background agent là một intern junior tự làm task rồi report.

Vì sao 2025-2026 cuộc đua nóng

Trước 2024, AI coding chủ yếu là autocomplete. Copilot suggest dòng kế tiếp, bạn tab để accept. Năm 2024, Devin của Cognition xuất hiện với claim “AI software engineer đầu tiên.” Demo ban đầu gây tranh cãi (có người dựng lại được, có người không), giá $500 mỗi tháng quá đắt. Nhưng concept thì bám.

Tháng 4 năm 2025, Cognition release Devin 2.0, hạ giá từ $500 xuống $20 mỗi tháng cho gói Core. Đó là tín hiệu thị trường. Async coding agent không còn là luxury research demo, mà sẵn sàng cho cá nhân developer.

Cuối 2025 đầu 2026, mọi tool lớn đều ship background mode:

  • Cursor ra Background Agents trong Cursor 1.0 giữa 2025, tới Cursor 2.4-2.5 (đầu 2026) có async subagents, cloud agents với computer use.
  • Replit Agent 3 (tháng 9 năm 2025) chạy autonomous tới 200 phút, tự test trong browser, tự fix bug.
  • Claude Code Agent View (ra mắt research preview tháng 5 năm 2026) là dashboard quản lý nhiều background session song song, có worktree isolation tự động.
  • OpenHands (rebrand từ OpenDevin) raise Series A $18.8M tháng 11 năm 2025, mở source platform cho cloud coding agent, 60.000 sao GitHub.
  • Google Jules, GitHub Copilot coding agent, Codex automations đều có async mode trong 2025-2026.

Cuộc đua bùng nổ vì hai lý do kỹ thuật. Một, model đủ mạnh để chạy nhiều bước mà không lạc context (Claude Sonnet 4.5, GPT-4.5, Gemini 2). Hai, sandbox infra rẻ và nhanh hơn (Docker spawn nhanh, cloud VM theo phút). Cộng với áp lực thị trường: ai chậm ship background mode thì developer chuyển sang tool khác.

Một con số đáng chú ý từ Cognition: Devin 2.0 hoàn thành nhiều task junior dev hơn 83% so với Devin 1.x trên cùng đơn vị compute (ACU). Hiệu năng tăng đột biến, giá giảm 25 lần, hai yếu tố cộng dồn tạo ra điểm uốn của thị trường. Năm 2024 background agent là khái niệm xa xỉ. Năm 2026 nó là một item trong toolbox của mọi serious developer.

Một dấu hiệu khác về độ chín của thị trường: Goldman Sachs công bố pilot Devin cùng 12.000 dev của họ, target “hybrid workforce” tăng 20% hiệu suất. Khi ngân hàng lớn thử background agent với scale như vậy, bạn biết technology đã qua giai đoạn early adopter.

Bốn building blocks của background agent

Mọi background agent đều có bốn thành phần. Hiểu bốn cái này giúp bạn so sánh tool và debug khi có vấn đề.

1. Sandbox isolation

Agent không được chạy trên máy bạn trực tiếp. Nó cần một sandbox: container, VM, hoặc git worktree.

Vì sao quan trọng? Agent có thể gọi rm -rf, npm install, modify file. Nếu chạy trên working copy chính của bạn, một lỗi nhỏ là mất công việc nửa ngày. Sandbox cô lập rủi ro.

Các flavor khác nhau:

  • Remote cloud sandbox: Cursor Background, Devin, Replit Agent chạy trên VM cloud. Bạn không thấy file, agent push code lên repo khi xong. Pros: không tốn tài nguyên local, isolation chặt. Cons: tốn tiền cloud, latency network.
  • Local container: OpenHands chạy trong Docker container trên máy bạn. Pros: free, không phụ thuộc cloud. Cons: tốn RAM, cần Docker hoạt động.
  • Git worktree local: Claude Code background session tạo git worktree trong .claude/worktrees/<slug>/. Pros: nhanh, không cần container, dễ debug. Cons: vẫn cùng máy bạn, isolation yếu hơn container.

Khái niệm git worktree là cốt lõi cho Claude Code. Bài 2 của series sẽ đi sâu phần này.

2. PR-based delivery

Output của background agent không phải diff trong editor. Nó là branch git + commit + (thường) pull request.

Workflow chuẩn:

1. User mô tả task
2. Agent tạo branch mới (worktree/<slug> hoặc agent-<id>)
3. Agent commit changes vào branch đó
4. Agent push branch lên remote
5. Agent open PR base on main
6. User review PR, merge khi đồng ý

Vì sao PR-based? Ba lý do:

  • Audit trail. Mỗi PR có diff, commit history, có thể review tách biệt với code khác.
  • Rollback dễ. Nếu agent làm sai, không merge PR là xong. Không có gì lọt vào main.
  • Workflow team. PR fit vào quy trình CI/CD có sẵn: chạy test, review, approve, merge.

Một số tool có auto-merge option (agent tự merge khi CI pass). Tôi không dùng. Review PR vẫn là cơ hội cuối để catch lỗi mà test không phát hiện được.

3. Long-running execution

Sync agent chạy vài giây cho mỗi turn. Background agent chạy phút đến giờ.

Lý do: task background thường có nhiều bước. Refactor 5 file. Chạy test. Đọc log lỗi. Fix. Chạy lại test. Mỗi bước có thể tốn nhiều giây để LLM suy nghĩ, gọi tool, đọc kết quả. Cộng lại thành nửa giờ hoặc hơn.

Replit Agent 3 chạy tới 200 phút (hơn 3 tiếng). Devin có thể chạy ngày nhiều giờ cho task lớn. Claude Code background không có giới hạn cứng, chạy đến khi xong hoặc bạn cancel.

Điều này dẫn tới ba vấn đề kỹ thuật mà mọi tool phải giải quyết:

  • Token budget. Mỗi turn LLM tốn token. Chạy 200 phút có thể tốn $5-50. Tool phải có cách báo cost và limit.
  • Context drift. Sau nhiều turn, conversation history phình. Tool phải compact (Claude Code có /compact), summarize, hoặc reset context giữa chừng.
  • Stuck detection. Agent có thể bị kẹt: loop infinite, đợi user reply, hỏi clarification mà không ai trả lời. Tool phải detect và alert.

GitHub issue 59518 của Claude Code chính là về vấn đề này: FleetView nhiều khi báo agent “working” trong khi agent thực ra đang đợi trong plan mode. Cuộc đua tool 2026 phần lớn là cuộc đua làm long-running execution đáng tin cậy.

Cá nhân tôi đã từng để một Claude Code background agent chạy 4 tiếng cho task refactor lớn. Sau 2 tiếng nó hoàn thành 80% công việc, sau đó loop vô tận vì test fail mà nó không hiểu nguyên nhân. Cuối cùng tôi cancel, đọc log, nhận ra test fail do thiếu env var. Bài học: dù background, vẫn cần check progress định kỳ. Không phải “fire and forget” hoàn toàn.

4. Branch isolation và parallel safety

Khi bạn chạy 3-5 background agent song song, mỗi agent cần một sandbox riêng và một branch riêng. Nếu hai agent cùng modify file package.json, conflict.

Branch isolation đảm bảo:

  • Mỗi agent có branch riêng (worktree/agent-xyz hoặc tương tự)
  • Branch base trên cùng một HEAD (thường là main)
  • Agent không thấy được nhau, không tương tác trực tiếp
  • Output qua PR, conflict resolve ở chỗ merge

Trong Claude Code, file ~/.claude/settings.json có config "worktree": { "baseRef": "head" } để worktree branch luôn base trên HEAD hiện tại của session cha. Hook WorktreeCreate enforce cái này. Tôi đã có incident trước 2026-04 khi agent base trên origin/main cũ, merge lại overwrite code mới của tôi. Sau khi sửa hook, parallel agent an toàn.

Replit Agent 3 cho phép spawn nhiều agent song song trong cùng project, mỗi agent một workflow riêng. Devin 2.0 multi-agent cho phép parallel task. OpenHands SDK có thể scale tới hàng ngàn agent cloud, mỗi agent cô lập.

Một tip thực tế: nếu chạy 3 agent song song trên cùng repo, cẩn thận với file mà mọi agent có thể đụng tới (package.json, pnpm-lock.yaml, go.sum, Cargo.lock). Slice task theo phạm vi thư mục: agent A làm src/api/, agent B làm src/ui/, agent C làm docs/. Khi merge ngược về main, từng PR một, conflict gần như zero. Nếu hai agent cùng đụng vào lockfile, lúc merge bạn phải resolve thủ công, tốn thời gian hơn là chạy tuần tự.

Khác sync agent ở đâu, một góc nhìn thực tế

Tôi dùng cả sync và async hằng ngày. Ranh giới rõ ràng theo loại task.

Tôi giao sync agent (Cursor inline, Copilot) khi:

  • Đang đọc code, muốn LLM giải thích đoạn này
  • Cần viết hàm utility ngắn, có spec trong đầu
  • Refactor 1-2 dòng, đổi tên biến
  • Pair programming exploratory: “thử cách này xem”

Tôi giao background agent khi:

  • Task có brief rõ ràng, kết quả đo được (test pass, lint clean)
  • Tôi đang debug task khác, không muốn ngắt focus
  • Task lặp lại: update dependency 20 package, fix 10 typo, format 50 file
  • Cần PR review trail, không phải edit trực tiếp
  • Có thể đi 30 phút đến vài tiếng, tôi không muốn ngồi đợi

Quy luật nhanh: nếu brief tốt và task tương đối isolated, dùng background. Nếu cần khám phá ngữ cảnh, dùng sync.

Một benchmark độc lập cho thấy hệ async đạt speedup 2.77x so với sync trong scenario phù hợp. Nhưng async đòi hỏi bạn phải viết brief tốt. Một câu mơ hồ như “fix bug” cho background agent là cách nhanh nhất tốn $20 không có kết quả.

Brief tốt nghĩa là: target file rõ ràng, định nghĩa “done” đo được (test pass, lint clean, output match expected), constraint rõ (không sửa file X, dùng pattern Y). Brief tệ: “làm cho phần auth tốt hơn.” Khi viết brief cho background agent, hãy tưởng tượng bạn đang giao việc cho một intern qua Slack message và sẽ không có cơ hội clarify trong 2 giờ tới. Mọi thứ phải gói gọn trong message đầu.

Ai cần dùng background agent

Không phải ai cũng cần. Bốn nhóm tôi thấy hợp:

  1. Solo developer làm side project. Bạn không có team, không có intern, nhưng cần ship nhanh. Giao task vặt cho background agent để focus vào phần khó.

  2. Tech lead quản lý nhiều stream. Bạn debug prod ở stream A, đồng thời cần ai đó update test ở stream B. Background agent là “junior intern” thứ hai.

  3. Open source maintainer. Bạn có 200 issue mở, nhiều cái nhỏ (typo, version bump, lint fix). Background agent xử nguyên batch trong khi bạn review feature PR.

  4. Người đang học, làm thí nghiệm nhiều. Bạn muốn thử ba cách giải khác nhau cùng lúc, mỗi agent một branch. Compare kết quả, chọn cái tốt nhất.

Không hợp:

  • Người mới bắt đầu code. Bạn cần học code, không phải xem agent code thay. Sync agent (autocomplete) đủ.
  • Team quá nhỏ và codebase trivial. Không có gì để parallel. Sync đủ.
  • Codebase không có test. Background agent dễ phá thứ bạn không biết. Không có test, không có safety net.

Bước tiếp

Bài 2 của series sẽ đi sâu vào Claude Code background mode: /bg command, EnterWorktree requirement, FleetView dashboard, hands-on demo từ máy của tôi.

Bài 3 sẽ là deep dive Cursor Background Agents: sandbox cloud, async subagents, computer use trên Cursor 2.5.

Bài 4 so sánh Devin, OpenHands, Replit Agent: ba góc nhìn khác nhau về autonomous coding.

Bài 5 sẽ là tradeoff cuối: khi nào background đắt giá hơn sync, khi nào ngược lại, bảng quyết định cuối series.

Trước khi đọc bài 2, bạn có thể thử nghiệm nhanh. Mở Cursor, vào Settings, bật Background Agents. Giao một task nhỏ: “viết file README cho project này, giải thích cấu trúc thư mục.” Đóng tab Cursor, đi pha cà phê. Quay lại sau 5 phút xem PR. Đó là toàn bộ ý nghĩa của async coding.

Còn nếu bạn chưa có Cursor, có thể thử trên Claude Code: trong session bình thường gõ /bg, mô tả task ngắn, agent sẽ tạo worktree, chạy isolation, push branch. Cách làm khác nhau, nhưng concept giống nhau. Sau khi quen, bạn sẽ có cảm nhận rõ ràng về việc khi nào dùng background, khi nào dùng sync, không cần nghe ai nói.

Cuối cùng, một lưu ý nhỏ về văn hoá làm việc. Background agent không thay thế bạn. Nó tăng số task bạn có thể xử lý song song. Nếu trước đây bạn ship 5 PR mỗi tuần, với background agent có thể là 8-10. Nhưng review, design, kiến trúc, debate với team vẫn là việc của bạn. Đừng giao thứ bạn không hiểu cho agent, vì khi nó sai bạn sẽ không biết sai ở đâu. Async coding là multiplier, không phải replacement.