Tháng trước, 9 giờ sáng, tôi mở Cursor và gõ một câu: “refactor module auth, tách user-session ra khỏi token-service, viết test cho cả hai.” Bấm enter, đóng tab, mở Figma làm việc khác. Một giờ sau notification nhảy lên: PR đã sẵn sàng review. Hai file mới, một test suite, branch riêng. Tôi review trong 10 phút, merge, xong.
Đó là async coding agent. Không phải autocomplete, không phải pair programming, không phải chat sidebar. 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, và cá nhân tôi nghĩ nó đáng nóng. Sau một năm dùng cả Cursor BG, Claude Code BG, Devin, Replit Agent, tôi không muốn quay lại workflow “ngồi nhìn agent type từng dòng” cho task mechanical nữa.
Background agent là gì
Định nghĩa gói gọ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 xong.
Ba thành phần đáng nhớ. Tách biệt nghĩa là sandbox riêng, có thể là cloud VM, container, hoặc git worktree local. Không tương tác liên tục nghĩa là bạn giao task một lần rồi đi làm việc khác, agent có thể hỏi clarification nhưng không phải mỗi action đều cần xác nhận. Deliver qua git nghĩa là output luôn là branch plus commit plus PR, không phải diff trong editor đang mở.
So với sync agent, vốn là Copilot autocomplete, Cursor Composer inline, Cody chat:
| Tiêu chí | Sync agent | Background agent |
|---|---|---|
| Ngữ cảnh | Đang mở file, viết code | Bạn đang làm việc khác |
| Tương tác | Real-time, từng dòng | Một lần giao task, đợi kết quả |
| Output | Inline diff trong editor | Pull request, commit |
| Thời gian chạy | Giây đến vài phút | Phút đến vài giờ |
| Môi trường | Local editor của bạn | Sandbox riêng |
| Người dùng | Đang focus vào code | Đang đa nhiệm |
Cách tôi hay diễn đạt với đồng nghiệp: sync agent là dụng cụ trợ thủ, background agent là một intern junior tự làm task rồi report. Hai vai trò khác nhau, hai cách giao việc khác nhau.
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 bấm tab. Năm 2024 Cognition release Devin với claim “AI software engineer đầu tiên”. Demo ban đầu gây tranh cãi, và thật ra tôi không tin một nửa demo đó hồi mới ra mắt. Nhưng concept thì bám.
Tháng 4 năm 2025 Cognition hạ giá Devin từ $500 xuống $20 mỗi tháng cho gói Core. Đó là tín hiệu thị trường. Khi một sản phẩm pivot giá 25 lần, hoặc họ tin volume sẽ kéo lại doanh thu, hoặc họ chấp nhận rằng giá cao không justify được giá trị thực tế. Tôi đoán cả hai.
Sau đó mọi tool lớn đều ship background mode trong khoảng một năm. Cursor ra Background Agents trong 1.0 giữa 2025, tới 2.4-2.5 đầu 2026 có async subagents và 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 research preview tháng 5 năm 2026 với dashboard quản lý nhiều background session song song. OpenHands rebrand từ OpenDevin, raise Series A $18.8M tháng 11 năm 2025, license MIT, hơn 60.000 sao GitHub. Google Jules, GitHub Copilot coding agent, Codex automations đều có async mode trong 2025-2026.
Lý do kỹ thuật cho làn sóng này có hai. Model đủ mạnh để chạy nhiều bước mà không lạc context, Claude Sonnet 4.5+, GPT-4.5+, Gemini 2+ đều có cải tiến rõ về long-horizon reasoning. Và sandbox infra rẻ hơn nhiều, Docker spawn nhanh, cloud VM tính theo phút. Cộng với áp lực thị trường: tool nào chậm ship background mode thì developer chuyển sang tool khác trong vòng 3-6 tháng.
Một con số cho thấy độ chín thị trường: Goldman Sachs công bố pilot Devin cùng 12.000 dev của họ, mục tiêu “hybrid workforce” tăng 20% hiệu suất. Khi ngân hàng đầu tư lớn thử background agent với scale đó, công nghệ đã qua giai đoạn early adopter rồi.
Anatomy: bốn thành phần ai cũng phải build
Mọi background agent đều có bốn thứ chung. Hiểu cả bốn giúp bạn so sánh tool và biết debug ở đâu khi có vấn đề.
Thành phần đầu là sandbox isolation. Agent không được chạy trên working tree chính của bạn vì nó có thể gọi rm -rf, chạy npm install đè dependency, modify file ngoài ý định. Một lỗi nhỏ là mất công việc nửa ngày. Có ba flavor sandbox phổ biến: remote cloud sandbox như Cursor BG hay Devin chạy VM cloud, local container như OpenHands chạy Docker trên máy bạn, và git worktree local như Claude Code BG tạo git worktree trong .claude/worktrees/<slug>/. Cloud isolation chặt nhất nhưng tốn tiền cloud. Worktree nhanh nhất nhưng vẫn cùng máy bạn, isolation yếu hơn. Tôi sẽ đi sâu khái niệm git worktree ở bài 2 vì đó là cốt lõi cho Claude Code.
Thành phần thứ hai là PR-based delivery. Output luôn là branch git plus commit plus pull request, không phải diff trong editor đang mở. Workflow chuẩn: user mô tả task, agent tạo branch mới như worktree/<slug> hoặc agent-<id>, agent commit changes, agent push, agent open PR base on main, user review và merge khi đồng ý. PR-based vì ba lý do tổng quan: audit trail rõ ràng (mỗi PR có diff plus commit history plus có thể review riêng), rollback dễ (không merge là xong, không gì lọt vào main), và workflow team fit ngay vào CI/CD có sẵn. Một số tool có auto-merge option khi CI pass. Tôi không bật, vì review PR vẫn là cơ hội cuối để catch lỗi mà test không bắt được.
Thành phần thứ ba là long-running execution. Sync agent chạy vài giây mỗi turn, background agent chạy phút đến giờ. Replit Agent 3 chạy tới 200 phút trong một task, Devin chạy nhiều giờ cho task lớn, Claude Code background không có giới hạn cứng. Điều này dẫn tới ba vấn đề kỹ thuật mà mọi tool phải giải: token budget (chạy 200 phút có thể tốn $5-50, tool phải report cost và limit), context drift (sau nhiều turn conversation history phình, tool phải compact hoặc summarize, Claude Code có /compact), và stuck detection (agent có thể loop vô tận, đợi user reply 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 “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.
Tôi có một ví dụ cụ thể về failure mode này. Có lần để 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 “fire and forget” hoàn toàn được, ít nhất là chưa.
Thành phần cuối là branch isolation và parallel safety. Khi bạn chạy 3-5 agent song song, mỗi agent cần branch riêng và sandbox riêng. Nếu hai agent cùng modify package.json, conflict không tránh khỏi. Branch isolation đảm bảo mỗi agent có branch riêng (worktree/agent-xyz hoặc tương tự), base trên cùng một HEAD (thường là main), không thấy được nhau, output qua PR riêng và conflict resolve ở chỗ merge. Trong Claude Code, file ~/.claude/settings.json của tôi có "worktree": { "baseRef": "head" } để worktree branch luôn base trên HEAD hiện tại của session cha. Trước khi tôi sửa hook, đã có incident: agent base trên origin/main cũ, merge lại overwrite code mới của tôi. Một bài học cay đắng đủ để tôi viết hook ngay đêm đó.
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/. Merge ngược từng PR một, conflict gần như zero. Nếu hai agent cùng đụng lockfile, lúc merge bạn phải resolve thủ công, tốn thời gian hơn chạy tuần tự.
Sync hay background, ranh giới tôi vẽ
Tôi dùng cả sync và background hằng ngày. Ranh giới tương đối rõ theo loại task.
Sync agent thắng khi tôi đang đọc code và muốn LLM giải thích đoạn này, khi tôi viết hàm utility ngắn có spec rõ trong đầu, khi refactor 1-2 dòng đổi tên biến, hoặc khi pair programming exploratory kiểu “thử cách này xem”. Mọi tình huống có chung tính chất: tôi cần feedback nhanh, cần can thiệp được, cần thấy diff ngay lập tức.
Background agent thắng khi brief rõ và kết quả đo được (test pass, lint clean), khi tôi đang debug task khác và không muốn ngắt focus, khi task lặp lại 20-50 lần (update dependency, fix typo, format file), hoặc khi tôi sẵn sàng đi 30 phút đến vài giờ và không muốn ngồi đợi. Quy luật cô đọng: brief tốt plus task tương đối isolated, dùng background; cần khám phá context, 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 viết brief tốt. Một câu mơ hồ “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õ, definition of “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à “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 intern qua Slack và không có cơ hội clarify trong 2 giờ tới. Mọi thứ phải gói gọn trong message đầu.
Có nên dùng không, ai cần và ai không
Không phải ai cũng cần. Background agent fit tốt với solo developer làm side project (không có team, không có intern, cần ship nhanh, giao task vặt cho agent để focus phần khó), tech lead quản lý nhiều stream (debug prod stream A trong khi cần ai đó update test stream B), open source maintainer có 200 issue mở với nhiều cái nhỏ (typo, version bump, lint fix có thể xử nguyên batch trong khi bạn review feature PR), và người đang học làm thí nghiệm nhiều (muốn thử ba cách giải khác cùng lúc, compare kết quả).
Không fit với người mới bắt đầu code (cần học code, không phải xem agent code thay; sync agent đủ), team quá nhỏ với codebase trivial (không có gì để parallel), hoặc codebase không có test (background agent dễ phá thứ bạn không biết; không test không safety net). Cá nhân tôi thấy điều kiện “có test” là điều kiện cần tuyệt đối. Đừng giao background agent vào codebase legacy chưa có test, kết quả không khác gì giao chìa khoá nhà cho người lạ.
Trước khi đọc tiếp
Series 4 bài tiếp theo của tôi đi qua Claude Code BG mode (bài 2, hands-on từ máy tôi với FleetView dashboard), Cursor Background Agent (bài 3, kiến trúc cloud sandbox khác hẳn local daemon), so sánh Devin/OpenDevin/Replit (bài 4, ba góc nhìn về autonomous coding), và quyết định cuối cùng background vs sync vs hybrid (bài 5, framework chọn agent type).
Nếu bạn chưa thử background agent bao giờ và đang đọc đoạn này, lời khuyên thực tế nhất: mở Cursor, bật Background Agents trong Settings, giao một task nhỏ kiểu “viết 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 5 phút sau xem PR. Hoặc nếu chưa có Cursor, vào Claude Code 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, concept giống nhau. Một lần thử là đủ để bạn có cảm nhận khi nào dùng background, khi nào dùng sync, không cần ai nói.
Cuối cùng, một thứ cần nhớ. Background agent không thay thế bạn. Nó tăng số task bạn có thể xử 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, và đó là phần tôi muốn người ta hiểu trước khi đọc tiếp series.