# Parallelize your development with GitHub Copilot

Pamela Fox · Microsoft · WeAreDevelopers World Congress NA 2026

> Chạy nhiều coding agent song song theo ba chiều environment, timing, ownership: worktree, port, staging riêng từng branch, background agents và sub-agents.

Topics: Coding Agents, Workflow, Dev Tools

Canonical: https://homus.dev/talks/parallelize-your-development-with-github-copilot

## 1. Mở đầu: từ lập trình viên thành engineering manager của agent

Pamela Fox là Principal Cloud Advocate ở Microsoft và GitHub, trước đó làm ở UC Berkeley, Coursera, Khan Academy và Google. Bố chị làm về parallel programming architecture từ khi chị còn nhỏ, từng dựng cả máy tính hypercube; talk này, theo chị, cũng là parallel programming, chỉ theo một kiểu khác.

![Slide About me của Pamela Fox](https://homus.dev/photos/IMG_3769.JPG)

Slide "About me". Principal Cloud Advocate at Microsoft / GitHub; trước đây UC Berkeley, Coursera, Khan Academy, Google; Twitter [@pamelafox](https://twitter.com/pamelafox), LinkedIn linkedin.com/in/pamela-s-fox, [GitHub](https://github.com/pamelafox), [pamelafox.org](https://pamelafox.org).

### Trước khi có AI coding agent

Chị hỏi: trước khi có AI coding agent thì mình làm việc thế nào? Thường mình chỉ làm vài feature cùng lúc. Mình có thể chuyển giữa các branch: đang chờ feedback ở branch này thì nhảy sang branch kia làm tiếp. Nhưng chị thường chỉ mở cùng lúc khoảng hai branch, vì việc chuyển qua lại tốn nhiều công, và còn tốn sức não để nhớ mọi thứ đang diễn ra trong từng branch. Overhead khi switch rất lớn, nên phần lớn thời gian mỗi người chỉ ôm một tới ba task.

### Sau khi có AI coding agent

Bây giờ thì khác. Rất nhiều lúc mình làm việc giống một engineering manager: giám sát các coding agent đang làm việc bên dưới. Một manager thường có nhiều người làm cho mình ở nhiều task khác nhau, và việc của manager là giám sát tất cả cùng chạy song song. Khi vai trò của mình dịch chuyển và ai cũng thành "manager của agent", mình sẽ phải trông coi nhiều việc song song hơn, và câu hỏi là parallelize thế nào cho tốt.

![Slide After AI coding: We are engineering managers for agents](https://homus.dev/photos/IMG_3770.JPG)

Slide "After AI coding: We are engineering managers for agents". Ba lane Feature A, B, C với các trạng thái Agent working, Scope, Review, Blocked; thanh dưới là vòng Specify → Start → Observe → Unblock → Review. Link đọc thêm: [Five software engineering roles for working with AI](https://humanwhocodes.com/blog/2026/09/five-roles-working-ai/) (Nicholas C. Zakas).

Pamela nói rõ: talk này không bảo bạn phải làm thế. Nếu bạn muốn tiếp tục làm từng việc một, cứ làm.

## 2. Ba chiều của parallel work, và chọn surface theo việc

Chị thừa nhận làm từng việc một có lẽ còn tốt hơn cho sức khoẻ tinh thần, đỡ bị "mỗi nơi một chút". Nhưng thực tế là coding agent đã mở ra khả năng multitask nhiều hơn hẳn. Talk này dành cho ai muốn tận dụng khả năng chạy nhiều agent, nhiều session, làm nhiều feature cùng lúc: làm sao chuẩn bị để thành công, và làm sao theo dõi toàn bộ parallel work đang chạy.

Chị chia talk thành ba chiều (three dimensions) của việc parallelize:

- **Environment**: việc diễn ra ở đâu.

- **Timing**: việc diễn ra song song theo kiểu nào, async, background, v.v.

- **Ownership**: ai làm phần lớn việc. Là bạn, là agent, hay là sub-agent? Mình giao việc cho ai?

Three dimensions of parallelization" (không có ảnh chụp slide này).

### Environment: work nên diễn ra ở đâu?

Nguyên tắc của Pamela: chọn product theo loại việc đang làm. Talk nói về GitHub Copilot, và Copilot có mặt ở rất nhiều surface, nhiều cách tương tác khác nhau. Chị dùng tất cả, tuỳ lúc đó làm gì, muốn tương tác với coding agent nhiều hay ít và theo kiểu nào.

Nếu biết mình sẽ làm việc rất tập trung, một việc một lúc, chị dùng VS Code truyền thống với Copilot Chat, rất IDE-centric, trao đổi qua lại nhiều. Khi đi dần về phía parallel hơn, chị dùng VS Code Agents window và GitHub Copilot app. Khi muốn "super parallel", chị chuyển sang cloud agents. Chị thích có đủ các lựa chọn này vì feature và việc chị làm rất đa dạng, mỗi loại hợp với một surface khác nhau.

Vẽ lại slide "Match the surface to the parallel work".

## 3. VS Code, Copilot CLI và VS Code Agents window

Chị đi nhanh qua từng surface.

### VS Code

Chị hỏi khán giả ai dùng VS Code, rất nhiều tay giơ lên. Chị gọi VS Code là "the OG", rồi tự sửa: OG thật là Notepad++. Chị kể lý do chị vào Microsoft chính là vì quá yêu VS Code. Trong VS Code chị dùng cửa sổ GitHub Copilot Chat khi muốn trao đổi qua lại nhiều, muốn nhảy vào sửa code dễ dàng, muốn nhìn việc theo kiểu code-centric. Vẫn có thể làm parallel trong VS Code vì mở được nhiều cửa sổ VS Code, nhưng hơi khó hơn.

### Copilot CLI

Copilot CLI ([docs](https://docs.github.com/en/copilot/concepts/agents/about-copilot-cli)) dành cho ai rất "hardcore CLI". Chị hỏi ai đang dùng, có một nhóm "diehard CLI people" giơ tay. Chị nói mình không thuộc nhóm đó, dù có dùng Vim "để lấy street cred". Hễ project có nhiều file là chị muốn dùng IDE. Chị dùng CLI cho việc nhỏ và nhanh, ví dụ một lần upgrade, một refactor nhỏ.

### VS Code Agents window

Lựa chọn mới là VS Code Agents window ([docs, đang Preview](https://code.visualstudio.com/docs/copilot/agents/agents-window)). Nếu bạn thích VS Code nhưng muốn cách dễ hơn để theo dõi nhiều agent chạy cùng lúc qua các session VS Code, mà không muốn mở cả đống cửa sổ, thì dùng Agents window. Nó là cách nhìn agent-centric: chị có nhiều repo, trong mỗi repo nhiều session, bấm qua lại từng session để xem chuyện gì đang xảy ra ở tất cả các repo. Với người đã quen VS Code muốn bước sang theo dõi nhiều agent một lúc, cứ mở Agents window là xong.

## 4. GitHub Copilot app, "super app" của Pamela, và cloud agents

Agents window cho cảm giác quen thuộc của VS Code nhưng thêm khả năng theo dõi nhiều thứ cùng lúc, nên đó là bước khởi đầu tốt để làm quen với parallel UI.

### GitHub Copilot app

Tiếp theo là GitHub Copilot app ([GitHub Blog giới thiệu app](https://github.blog/news-insights/product-news/github-copilot-app-the-agent-native-desktop-experience/)), surface chị thích nhất cho việc parallel nhiều. UI rất gọn: chị checkout rất nhiều repo, nhìn được status của tất cả, và đã set up sao cho làm song song nhiều việc dễ dàng. Với chị đây là "super app". Chị đùa: ai cũng đang biến app của mình thành super app làm mọi thứ, còn chị thì làm mọi thứ trong Copilot app, từ lên thực đơn nấu ăn ("recipe cũng là code") tới Photoshop. License Photoshop của chị hết hạn nên giờ chị ghép ảnh trong Copilot app. Trong danh sách chat của chị có "Combine images", "Kid voice effects", những việc "rất quan trọng".

![Slide Copilot App puts parallel sessions in one UI](https://homus.dev/photos/IMG_3771.JPG)

Slide "Copilot App puts parallel sessions in one UI". Ảnh chụp app: cột trái có New, My work, Automations, Factories, Customize, rồi danh sách project (azure-search-openai-demo, python-stack-foundry-models...). Session đang mở: PR #3164 "Upgrade agentic knowledge base to GPT-5.4", agent kể đã chạy Bicep compile, 498 Python tests, Ruff, Black, frontend build, i18n. Hai ô dưới: "See every session: track concurrent work across projects from one interface" và "Steer without hovering: review plans, progress, artifacts, and pull requests when attention is needed".

### Cloud agents

Cuối cùng là cloud agents ([docs Copilot cloud agent](https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-coding-agent)). Lợi thế lớn: gập laptop là agent local tắt, còn agent chạy trên cloud thì cứ chạy tiếp. Sáng nay chị dùng chính cách này trên tàu, vì Wi-Fi trên tàu lúc có lúc mất. Chị khởi động một cloud agent, và với GitHub có thể khởi động cloud agent từ nhiều nơi.

![Slide Cloud agents add remote execution capacity](https://homus.dev/photos/IMG_3772.JPG)

Slide "Cloud agents add remote execution capacity". Dashboard GitHub với danh sách Agent sessions (Completed, Queued, Idle). Hai ô dưới: "Add capacity: each task gets remote execution instead of competing for local processes" và "Work asynchronously: start well-scoped tasks, monitor their state, and review completed results".

Chị mở một repo chủ yếu dùng với cloud agent, vào tab Agents để xem session. Session này chị khởi động từ Microsoft Teams: chị có một Teams channel với một đồng nghiệp đang giúp chị (làm được tương tự trong Slack). Khoảng một tiếng trước, chị nhắn vào channel: "all right, make this really fun".

![Teams channel Convergence giao việc cho GitHub agent](https://homus.dev/photos/IMG_3773.JPG)

Teams channel "Convergence". Các tin nhắn gọi "GitHub" như một thành viên: kiểm firewall, viết script test hai model sentence-transformers trên Hugging Face. Bên phải là thread lúc 11:44 AM: "Make a much more fun visual of the convergence game (keep the current nerdy version too)...", agent trả lời sẽ build animated mode, test, mở PR và đính kèm screenshot; dòng cuối ghi model GPT-5.6 Sol.

## 5. Cloud agent làm xong một PR; vì sao local agent sẽ va nhau

Từ tin nhắn đó là nguyên một session, và agent mở hẳn một PR. Chị đã dặn agent đưa gì vào PR, trong đó có screenshot. Chị dùng cách này khi có một ý tưởng và muốn "đưa ý tưởng cho agent rồi chạy", để agent nhanh chóng làm thử. Mở PR ra thì thấy agent làm ra một thứ khá hay.

Nhưng chị không dùng cloud agent phần lớn thời gian, vì khó trao đổi qua lại, nhất là với UI. PR này chị sẽ checkout trong VS Code sau để chỉnh UI. Cloud agent tuyệt vời để có kết quả nhanh.

Chị nhận xét rằng không chỉ Copilot, hầu như coding agent nào cũng đang thử nghiệm các lựa chọn giống vậy, vì hiện giờ có lúc mình muốn rất hands-on, có lúc muốn đẩy lên cloud. Có đủ lựa chọn thì chọn đúng cái hợp với task.

### Local agents chạy song song cùng một repo

Cloud agent tốt nếu dùng được, nhưng nhiều lúc mình vẫn dùng local agent. Khi chạy nhiều local agent song song trên cùng repo, chị nhận ra repo của mình chưa sẵn sàng để chạy song song, vì trước đây chưa bao giờ phải làm thế. Phần tiếp theo là các mẹo áp cho repo để cô lập (isolate) agent, để chúng cùng chạy trên một máy mà không giẫm chân nhau.

Nếu không làm gì, agent có thể va nhau về port (hai agent cùng khởi động front end app trên cùng một port), dùng hoặc ghi đè environment variables của nhau, đọc ghi database của nhau...

Local agents can collide on shared resources". Speaker notes: cloud agent có isolation từ xa; local agent dùng chung máy trừ khi mình cô lập những gì mỗi task được phép thay đổi.

## 6. Git worktrees: mỗi agent một thư mục, một branch

...và có thể cùng làm trên một branch. Có quá nhiều cách để agent đụng nhau khi tất cả chạy trên máy bạn, cùng một repo. Nên nếu thật sự muốn tận dụng local agent, cần một chiến lược cô lập.

Thứ đầu tiên là **git worktrees** ([git docs](https://git-scm.com/docs/git-worktree)). Nhiều người mới phát hiện ra nó trong năm qua, vì worktree là mặc định của rất nhiều coding agent. Bình thường bạn checkout repo và có main checkout trong một thư mục. Git worktree đơn giản là tạo thêm một thư mục nữa chứa repo với một branch khác, đặt các worktree ở một vị trí nhất định và theo dõi chúng. Với mỗi repo, git biết đâu là main worktree và đâu là các worktree liên quan. Đây là tính năng của chính git, nên có lệnh git để liệt kê: repo này main worktree ở đâu, có những child worktree nào.

Vẽ lại slide "Git worktrees give each agent its own workspace". Đọc thêm (link trên slide): [A gentle introduction to Git worktrees](https://humanwhocodes.com/blog/2026/07/introduction-git-worktrees/), [What are Git worktrees and why should I use them?](https://github.blog/ai-and-ml/github-copilot/what-are-git-worktrees-and-why-should-i-use-them/)

Worktree là cách hay để cô lập agent: mỗi agent làm trong một worktree khác, trên một branch khác. Và nó là mặc định của nhiều coding agent. Trong VS Code Agents window, khi tạo session mới, mặc định là new worktree, đổi được. Copilot app cũng vậy: tạo session mới trong repo này thì mặc định chị luôn dùng new worktree. Chị cấu hình theo từng repo và vẫn chọn được "local". Repo nghiêm túc thì chị dùng worktree; repo đồ chơi thì chị có thể "go local, yolo". Tuỳ việc, nhưng với parallel work, worktree giúp rất nhiều.

![Copilot app chọn New worktree, Local repository hoặc Cloud](https://homus.dev/photos/IMG_3774.JPG)

Màn hình tạo session mới trong Copilot app, repo azure-search-openai-demo, model GPT-5.6 Sol Medium. Menu "Where to run this session": New worktree (creates a separate copy for this session, đang chọn), Local repository (works in the repository already on your machine), Cloud (runs in a cloud sandbox).

Khi có worktree, git tạo một thư mục hoàn toàn mới và checkout mới một branch vào đó. Nhưng như vậy là mất vài thứ. Ví dụ file `.env`, vì dĩ nhiên bạn không check `.env` vào git, làm vậy "rất tệ".

## 7. Mang .env vào worktree, và mỗi agent một port

Nếu repo chính có `.env`, worktree mới sẽ không có nó. `node_modules`, Python environment cũng mất theo, vì chúng không được check in. Vậy làm sao mang những thứ quan trọng đó vào worktree?

File tracked được checkout; state ignored/untracked (.env, dependencies, output sinh ra, local database) phải được khôi phục có chủ đích.

Cách chị làm: một prompt nhỏ nói rằng khi bắt đầu session trong một worktree mới, hãy xem trong main có `.env` không, nếu có thì symlink nó sang. Chị nói thẳng là chắc có cách hay hơn, ai biết thì chỉ, nhưng cách này chạy được. Prompt nằm trong instructions của Copilot app: bắt đầu session mới, phát hiện đây có phải worktree không, rồi nối đúng env. Bản của chị cầu kỳ hơn vì dùng một Azure env đặc biệt, nhưng chị đã tìm được cách copy nó sang. Điểm chính: agent tự phát hiện được mình đang ở trong worktree, nên chỉ cần cho nó cách phát hiện và cách mang đúng thứ cần sang.

### Port collision

Vấn đề tiếp theo: các agent đều khởi động app, mà app là full stack, có front end port và back end port, nên chúng va nhau, cùng giành một port. Chị có một port yêu thích, 50505, và mọi app của chị đều cố chạy trên 50505, nên đâm vào nhau. Chị gửi một PR kiểu "mình phải thôi hard-code port". Thay đổi đó tìm một port trống chưa dùng, dùng port đó, rồi đặt nó vào environment variable. Có thể mọi người đã bỏ hard-code port từ lâu; nếu chưa, hãy tìm port trống, dùng nó, và đặt vào biến môi trường để agent luôn biết mình đang chạy port nào và không va port của agent khác.

## 8. Staging bị va: mỗi branch một staging environment, đóng gói thành skill

Chạy local ổn rồi. Nhưng nhiều app của chị phụ thuộc nặng vào staging, vào cloud resource thật: Azure AI Search, Azure Blob Storage... Chị test chúng với Azure resource thật, và còn muốn test trên staging. Nhiều agent thì có thể cùng deploy feature của mình lên cùng một staging environment, lại va nhau: "khoan, mình đang test feature A và B, sao staging chỉ hiện feature A?". Cần staging environment riêng cho từng feature.

Cách chị làm: đặt tên staging dựa trên tên worktree hoặc tên branch; và phải có cách cô lập biến staging cho từng environment. Với Azure, có thư mục Azure env chứa các biến Azure riêng. Chị có một helper script gỡ hết biến môi trường cũ và đặt đúng biến cho lần deploy này. Agent biết rằng trước mọi lần deploy luôn phải chạy script đó, nên nó không bao giờ dựa vào biến Azure global. Cloud khác thì cách set up khác, nhưng điều quan trọng là: làm được rồi thì **biến nó thành một agent skill**.

Vẽ lại slide "Give each agent its own staging environment".

Skill này ai dùng Azure cũng tải về được. Đồng nghiệp của chị viết ra ban đầu; tuần trước chị nhờ anh ấy open source để chia sẻ với người khác. Vì đó là điểm chính: tìm ra cách rồi thì đóng gói thành skill và chia sẻ với đồng nghiệp, vì những ai cùng dùng một repo cần cùng một chiến lược isolation. Từ đó mọi GitHub Copilot agent của chị, mỗi lần deploy, đều tìm thấy skill này.

![Slide Package the technique as a reusable agent skill](https://homus.dev/photos/IMG_3775.JPG)

Slide "Package the technique as a reusable agent skill". Skill package `.github/skills/az-azd/` gồm `SKILL.md` (discovery metadata và operating instructions) và `az-azd.py` (gán Azure settings riêng cho mỗi agent). Frontmatter: name az-azd, description "Use for Azure CLI (az) or Azure Developer CLI (azd) commands that need isolated configuration and authentication across projects and agent sessions". Link: [github.com/mattgotteiner/skills](https://github.com/mattgotteiner/skills).

## 9. Timing: biết khi nào agent xong, hook tiếng cười của con gái

Kết quả: các agent đều deploy sạch sẽ vào staging environment riêng của mình. Chị có thể test năm feature cùng lúc, không ai giẫm chân ai, với năm staging environment. Đó là phần isolate environment: khi có nhiều agent chạy song song trên máy local, với một app có cả local lẫn staging, bạn phải nghĩ cách cô lập chúng.

### Timing: work diễn ra khi nào?

Có nhiều lựa chọn cho việc khi nào parallel work thật sự chạy. Cách đầu tiên: ngồi ở máy, khởi động việc. Chị mở một thread trong VS Code để xem "trạng thái hiện tại là gì". Những thread này chạy rất lâu vì chúng chạy evaluation trên agent: gửi prompt đi và khoảng 20 phút sau mới xong. Thời gian mỗi request rất khác nhau, có cái 30 giây, có cái 20 phút; gửi đi cả loạt thì làm sao biết khi nào chúng quay về?

![VS Code Insiders với eval_compare.py và bảng kết quả eval](https://homus.dev/photos/IMG_3776.JPG)

VS Code Insiders, repo azure-search-openai-demo, file `evals/eval_compare.py` (bootstrap 5000 iterations, permutation 10000, alpha 0,05, PASSING_SCORE 4). Chat bên phải trả lời "what's the current status?": 100 câu single-hop và 100 câu multi-hop; Groundedness 98% / 97%, Relevance 92% / 83%, Citation matching 97% / 80%, Mean latency 2,60 s / 3,16 s. Đây là ví dụ loại việc chạy ~20 phút mỗi lượt.

Chị muốn có notification. VS Code thường nảy icon khi xong; GitHub Copilot app gửi desktop notification khi xong và cho biết cần input hay đã ổn. Cần một dạng thông báo nào đó để biết việc đã xong.

Rồi chị bật âm thanh demo một custom hook: tiếng con gái bốn tuổi của chị cười khúc khích. Chị set một agent hook để mỗi khi agent dừng, máy phát tiếng con cười. Cách chị dùng: gửi request đi, đi gấp đồ giặt cho con, nghe tiếng con cười là biết request xong, quay lại máy.

## 10. Hook đọc tên session thành tiếng, và agent inbox

Chị thừa nhận âm thanh kiểu này nghe mãi có thể khó chịu, nhưng con chị dễ thương quá nên không khó chịu. Trong hook đó (hook được hỗ trợ trên mọi Copilot surface, kể cả app), chị còn kiểm máy có idle không. Trên Mac, script đọc idle timer: 60 giây qua có hoạt động nào không. Nếu chị đã rời máy, hook đọc title của session hiện tại và dùng lệnh `say` của macOS để đọc to. Nên nếu chị đi giặt đồ lâu, chị nghe tiếng con cười, rồi nghe giọng robot "completed Azure deployment", và quay lại.

Đó chỉ là một ví dụ hook. Ý chính: có thể dựa vào notification mặc định của app, nhưng cũng có thể tuỳ biến theo cách mình muốn. Có người cho agent gửi tin Slack. Cái gì hợp với bạn thì làm; bạn có quyền tuỳ biến trải nghiệm.

### Agent inbox

Cách tiếp theo: mọi service agent-centric đều có một dạng inbox để xem trạng thái hiện tại. Trong Copilot app, ở repo này có một session báo "answers required": mở ra thì agent đang hỏi nên deploy vào region nào. Một session khác cũng đang có câu hỏi. Session khác thì sẵn sàng: dấu xanh lá nghĩa là đã có PR, mọi check đều pass, sẵn sàng merge. Màu tím nghĩa là PR đã được merge, session cũ, coi như xong. Màu đỏ nghĩa là PR đã bị đóng.

![Slide Use the agent inbox to route your attention](https://homus.dev/photos/IMG_3777.JPG)

Slide "Use the agent inbox to route your attention". Bốn trạng thái: (1) Ready for review, mở khi cần phán đoán; (2) Needs input, trả lời rồi để việc chạy tiếp; (3) Merged PR; (4) Closed PR. "Scan the states. Open only what needs you."

![Copilot app session Deploy current main đang hỏi region](https://homus.dev/photos/IMG_3778.JPG)

Session "Deploy current main" trong Copilot app đang ở trạng thái cần input. Agent hỏi nên retry deploy ở primary region nào, đưa bốn lựa chọn: Canada Central với environment name mới (Recommended), Central US, North Europe, hoặc xoá resource dở ở East US rồi dùng lại. Trước đó người dùng đã dặn tránh US East, US West và Sweden Central.

## 11. Background agents: theo lịch hoặc theo trigger; Copilot app automations

Nhìn inbox là chị nắm được trạng thái mọi việc: cái gì cần mình chú ý, nên nhìn gì ngay bây giờ. Cần một cách nào đó để biết cái gì cần mình tiếp theo.

### Background agents

Những ví dụ trên đều là việc chị tự khởi động. Nhưng còn có thể dùng background agents để làm song song nhiều hơn nữa. Agent loại này chạy theo lịch (schedule) hoặc theo trigger. Có việc muốn chạy mỗi ngày, mỗi tuần mà không phải nhớ; có việc muốn chạy khi có sự kiện: mỗi khi có issue mới thì triage issue đó, thử sửa nó. Đây cũng là một dạng parallel: chị đang đưa con đi học thì Copilot app vẫn chạy automations triage issue giúp chị.

![Slide Autonomous agents can start their own work](https://homus.dev/photos/IMG_3779.JPG)

Slide "Autonomous agents can start their own work". On a schedule (MON, TUES, WED 9 AM): daily issue triage, morning review summary, weekly repository health check; predictable, recurring work. On a trigger (EVENT CI FAILS → AGENT STARTS): CI failure analysis, issue label applied, documentation freshness check; reactive repository work.

Chị mở phần automations trong Copilot app. Có thể set chạy local hoặc cloud; hiện tất cả của chị chạy local. Chị có:

- Weekly news roundup cho buổi office hours hằng tuần, chạy mỗi thứ Ba trước giờ office hours.

- Link checker cập nhật bookmarks của chị.

- Issue triager.

- LinkedIn agent: ai add chị trên LinkedIn thì lời mời sẽ được agent này accept.

- Recap tuần trước buổi one-on-one với manager.

![Copilot app Automations](https://homus.dev/photos/IMG_3780.JPG)

Màn hình Automations (tab All / Local / Cloud). "Generate weekly news round up" (Weekly, repo office-hours-writeups), "Daily link update" (Daily, kiểm tweet đã đăng, đã like..., repo bookmarked-links), "RAG chat issue triage" (Weekly, azure-search-openai-demo), "Run LinkedIn agent" (Daily, chạy `python invitations_manager.py`), "recap-my-week" (Weekly, cho buổi họp với manager; lần chạy gần nhất báo lỗi). Recent runs hôm nay: LinkedIn agent 10:48 AM, Daily link update 10:47 AM.

Chị xem được lịch sử chạy của từng cái. Chị thấy chúng rất hữu ích: về bản chất chỉ là "một cron job có agent", làm những việc có ích, và chị cứ thêm dần để đời dễ hơn. Chị dùng chúng cho automation cá nhân.

## 12. Agentic workflows trên GitHub Actions: natural language + YAML guardrails

Automation trong Copilot app là cho workflow cá nhân, rất riêng, không nhất thiết chia sẻ với đồng nghiệp. Còn nếu muốn thứ gì chạy trên GitHub repo cho mọi người, thì dùng **agentic workflows** ([Agentic Workflows documentation](https://github.github.com/gh-aw/)).

Agentic workflow về cơ bản là một GitHub Actions workflow có dùng agent. Chị hỏi đã ai tự viết workflow chưa: rất khó nếu phải dùng cả bộ JavaScript API và đủ thứ. Ý tưởng của agentic workflow là dùng natural language: "khi có issue, đọc issue, quyết định có phải bug không...". Mô tả điều sẽ xảy ra bằng natural language, nhưng lấy **sự an toàn từ YAML**. Chị biết ai cũng thích chê YAML, nhưng YAML hoá ra tốt cho nhiều thứ. Ở đây YAML nói workflow chạy khi nào (chỉ khi issue được mở), có permission gì (đọc issues), và **safe outputs**: workflow triage này chỉ được thêm label và thêm comment.

Phần "thông minh" viết bằng natural language, còn giới hạn quyền nằm trong YAML.

Kết quả là workflow triage rất mạnh, dễ định nghĩa vì viết bằng natural language, không phải bảo trì workflow phức tạp, nhưng mình biết chắc tối đa nó chỉ thêm được label và comment. Lời khuyên của chị: nếu repo của bạn đang có automation nào muốn thêm, hãy nghĩ tới agentic workflows, vì thêm một agent ra quyết định thay mình sẽ dễ hơn nhiều, và an toàn nhờ định nghĩa mọi thứ trong YAML.

### Ownership: ai nên làm việc?

Chuyển sang chiều thứ ba: ai thật sự làm việc.

## 13. Ownership: autonomy đi theo độ mơ hồ; người đứng ở đâu trong vòng

Đây là cuộc tranh luận thường trực khi AI ngày càng mạnh: AI có nên viết thay mình không, nghĩ thay mình không, hay mình bỏ hết ra biển? Cách Pamela nghĩ: có một dải autonomy và một dải uncertainty.

Khi việc có nhiều ambiguity, chị không chắc cách làm đúng, chị mở VS Code và ngồi làm qua lại với agent. Repo đang mở trên máy chị là ví dụ: chị làm nó nhiều tuần rồi vì vẫn chưa quyết được cách tốt nhất, nên hai bên prototype cùng nhau liên tục. Còn việc như upgrade một dependency, ví dụ một Python dependency, lẽ ra rất đơn giản: giao cho cloud agent là xong: agent sẽ chạy toàn bộ test, chạy CI, đảm bảo mọi thứ đều chạy, rồi coi như ổn.

![Slide Match autonomy to uncertainty](https://homus.dev/photos/IMG_3781.JPG)

Slide "Supervision spectrum: Match autonomy to uncertainty". Developer-led: yêu cầu mơ hồ, architecture, UX, rủi ro cao. Light supervision: feature rõ, thỉnh thoảng cần quyết, có preview để xem. Hands-off: task có giới hạn và automated validation tin cậy. Automated: việc lặp lại với output có guardrail, review được. "As ambiguity and blast radius rise, human attention should rise with them."

### Người ở đâu trong vòng lặp?

Mình cũng quyết định người đứng ở chỗ nào trong vòng (human in the loop). Hy vọng phần lớn chúng ta vẫn ở trong vòng ở bước planning, vì đó là phần quan trọng nhất: planning thật tốt.

Chị vừa nghe một buổi phỏng vấn Matt Pocock, người làm skill "grill me". Chị hỏi khán giả ai dùng, có người giơ tay, và chị nói nó đang là skill phổ biến nhất trên GitHub lúc này. Bạn có một plan, skill đó sẽ "tra hỏi" bạn không ngừng về plan để chắc bạn biết rõ mình đang yêu cầu gì. Bỏ nhiều công vào plan và làm rõ mọi thứ trong đó, thì giao cho agent sẽ khá chắc nó làm tốt.

Nguồn: skill [grill-me trong mattpocock/skills](https://github.com/mattpocock/skills/tree/main/skills/productivity/grill-me). Câu "phổ biến nhất trên GitHub" là lời Pamela, chưa tìm được nguồn số liệu. Buổi phỏng vấn Matt Pocock mà chị nhắc: chưa tìm được nguồn.

![Slide Where is the human in the loop](https://homus.dev/photos/IMG_3782.JPG)

Slide "Human involvement: Where is the human in the loop?". PLAN: Edit the plan, set direction and constraints. BUILD: Edit code, implement alongside the agent. REVIEW: Review code, inspect and request changes. DEPLOY: Approve, handle exceptions. "The human involvement needed at each stage shapes your approach."

## 14. Build, review, deploy; main agent hay sub-agent

Nên chắc chắn phải ở trong vòng ở bước plan. Tiếp là bước build, sửa code. Đó là thứ mình làm ngày càng ít. Code rất "pattern matchy", rất procedural, LLM hiểu và viết code rất dễ. Chị thừa nhận, hơi buồn, là chúng có lẽ viết code tốt hơn chị. Có thể chưa giỏi bằng ở mặt architecture, nhưng về syntax thì chúng rất mê.

Bước review code: mỗi khi có PR, bước đầu tiên chị luôn nhờ Copilot review PR đó ([Copilot code review](https://docs.github.com/en/copilot/concepts/agents/code-review)), vì nó bắt được lỗi nhỏ. Chị không muốn nhờ người review khi chưa cho Copilot review trước, vì như thế là bắt người đó làm việc và bắt lỗi mà một bên khác bắt được rồi. Xử lý xong feedback của Copilot (chị có một skill để cùng nhau triage comment trên PR), chị mới nói với người: "tôi đã làm đủ phần mình, đã qua vòng review với bot, giờ tới lượt anh chị". Một số người còn làm workflow mà PR đủ nhỏ thì không cần người review. Đó là quyết định của từng team; nếu làm thế thì ít nhất cần một LLM quyết PR này high risk hay low risk.

Cuối cùng là deploy: ai là người approve deploy. Tóm lại là quyết người đứng ở đâu, và chắc chắn sẽ có agent ở nhiều điểm; mình quyết đặt agent ở đâu.

### Main agent hay sub-agent?

Khi dùng agent, câu hỏi tiếp theo là dùng main agent hay sub-agent. Một primary agent, hay parent agent, có thể tách ra một loạt sub-agent. Điểm hay là sub-agent chạy song song được.

![Slide An agent can delegate work to subagents](https://homus.dev/photos/IMG_3783.JPG)

Slide "An agent can delegate work to subagents". 1 · Parent agent: Delegate, chia một mục tiêu thành các task có giới hạn. 2 · Work in parallel: Subagent 1, 2, 3. 3 · Parent agent: Integrate, kiểm kết quả và gộp thành một outcome. "Subagents return focused results. The parent still owns the final answer."

## 15. /review với ba model song song, và /fleet

Sub-agent còn có context mới, hoặc ít nhất là có thể có context mới. Nhiều khi mình dùng sub-agent một phần vì muốn bắt đầu với context sạch, không phải lo nhồi một lượng context khổng lồ vào sub-agent. Nên đây là một quyết định nữa: một agent làm hết, hay để nó tách ra sub-agent.

Copilot giúp khởi động sub-agent rất dễ, và nhiều lệnh có sẵn đã dùng sub-agent. Ví dụ `/review`: sửa xong, muốn có "cặp mắt thứ hai", thì có luôn cặp thứ ba, thứ tư, thứ năm. Gõ review và nói model nào: "tôi muốn ba model này review code", và cả ba review song song.

Chị mở một session: chị đã yêu cầu chạy review qua nhiều model, và thấy các sub-agent chạy song song. Mở từng thread ra được: main thread, rồi sub-agent thread. Một cái là Opus 5, một cái là GPT-5.6 Sol, một cái là Grok 4.7. Điều buồn cười là cả ba cùng đồng ý rằng chị (hoặc Copilot) đã làm hỏng: thiếu hai thứ lớn. Cả ba model cùng chỉ ra hai thứ đó, nên "ừ, đi sửa thôi". Tức là `/review` đã tự dùng sub-agent cho mình.

Model dùng trong demo là GPT-5.6 Sol.

Một lệnh khác đã dùng sub-agent là **Fleet**. Chị gõ lệnh fleet, và nó nói: sẽ làm ba việc song song, audit ba file khác nhau. Lại khởi động ba sub-agent cùng lúc, rồi cả ba trả về, và mình nhận kết quả cuối: chạy song song, nhận về một bản tổng hợp.

## 16. Sub-agent cho mọi workflow, nested sessions, và lời kết

Fleet và Review đã tự dùng sub-agent. Ngoài ra có thể prompt Copilot dùng sub-agent cho bất kỳ workflow nào: nếu thấy việc nào làm bằng sub-agent sẽ tốt hơn, chỉ cần viết vào prompt, "dùng sub-agent cho cái này, sub-agent cho cái kia", và nó làm. Khả năng chạy việc trong sub-agent là một tool mà agent có sẵn, nên muốn orchestration kiểu gì cũng được.

![Slide Prompt Copilot to use subagents for any workflow](https://homus.dev/photos/IMG_3784.JPG)

Slide "Prompt Copilot to use subagents for any workflow": một prompt fan out research cho ba sub-agent, rồi verify độc lập. Hướng dẫn: [Agents and Subagents guide](https://awesome-copilot.github.com/learning-hub/agents-and-subagents/).

```
Add support for a new model provider to this sample repo.

Before editing, fan out research to three read-only subagents in parallel:
- Integration mapper: trace configuration and authentication.
- Compatibility analyst: find provider-specific risks.
- Test strategist: define the required validation matrix.

Synthesize their findings, then implement the smallest change.

Then ask a QA subagent with fresh context to verify the existing providers still work, the new path is covered, and the docs and manual test matrix agree.

Fix confirmed failures and report the validation evidence.
```

Còn có thể yêu cầu tạo session con. Khoảng 20 phút trước talk, chị bảo agent "tạo ba nested session", rồi chị mở từng session xem kết quả và dùng tiếp. Tóm lại có sub-agent, có session, có thể fan out sang repo khác: rất nhiều cách để tách việc ra chạy song song, tuỳ cách orchestration mình thích.

### Lời kết

Gói lại: muốn làm parallel development thì tìm cách isolate environment, chọn đúng surface, đảm bảo có monitoring tốt, và tận dụng các cách parallelize khác nhau, để tận hưởng developer experience với agent, để agent giúp việc phát triển vui hơn và làm được nhiều hơn. Slide có ở URL trên màn hình, mọi link đều nằm trong slide.

![Slide Thank you, Questions](https://homus.dev/photos/IMG_3785.JPG)

Slide "Thank you, Questions?" với link slide [pamelafox.github.io/parallelize-development-github-copilot](https://pamelafox.github.io/parallelize-development-github-copilot/).

## Nguồn và link

- Slide gốc (có speaker notes): [pamelafox.github.io/parallelize-development-github-copilot](https://pamelafox.github.io/parallelize-development-github-copilot/)

- Nicholas C. Zakas, [Five software engineering roles for working with AI](https://humanwhocodes.com/blog/2026/09/five-roles-working-ai/); [A gentle introduction to Git worktrees](https://humanwhocodes.com/blog/2026/07/introduction-git-worktrees/)

- GitHub Blog, [What are Git worktrees and why should I use them?](https://github.blog/ai-and-ml/github-copilot/what-are-git-worktrees-and-why-should-i-use-them/); [git-worktree docs](https://git-scm.com/docs/git-worktree)

- GitHub Blog, [GitHub Copilot app: the agent-native desktop experience](https://github.blog/news-insights/product-news/github-copilot-app-the-agent-native-desktop-experience/)

- [VS Code Agents window (Preview)](https://code.visualstudio.com/docs/copilot/agents/agents-window) · [About Copilot CLI](https://docs.github.com/en/copilot/concepts/agents/about-copilot-cli) · [About Copilot cloud agent](https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-coding-agent) · [Copilot code review](https://docs.github.com/en/copilot/concepts/agents/code-review)

- Pamela Fox, [worktree setup prompt](https://gist.github.com/pamelafox/96910351375eee81f38e0b1ee1326ad4); [agent completion hook](https://gist.github.com/pamelafox/c9cb3e000fdf127741b121d7c5abbf02)

- [azure-search-openai-demo PR #3117 (configurable local ports)](https://github.com/Azure-Samples/azure-search-openai-demo/pull/3117) · [mattgotteiner/skills (az-azd skill)](https://github.com/mattgotteiner/skills) · [Azure Developer CLI](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/overview)

- Hooks: [Agent hooks in VS Code](https://vscode.club/docs/agent-customization/hooks), [Automating with hooks](https://awesome-copilot.github.com/learning-hub/automating-with-hooks/)

- Agentic workflows: [gh-aw docs](https://github.github.com/gh-aw/), [issue-triage.md](https://github.com/githubnext/agentics/blob/main/workflows/issue-triage.md)

- Sub-agents: [Agents and Subagents guide](https://awesome-copilot.github.com/learning-hub/agents-and-subagents/) · Matt Pocock [grill-me skill](https://github.com/mattpocock/skills/tree/main/skills/productivity/grill-me)

- Chưa tìm được nguồn: buổi phỏng vấn Matt Pocock mà Pamela nhắc; số liệu "skill phổ biến nhất trên GitHub".
