Quy trình làm việc với agent: cổng người đứng, việc agent làm
Khi agent làm phần lớn việc sản xuất, thứ khan hiếm là người hiểu “đúng là gì” và người phán xét bằng chứng. Ghi chú này đặt người vào đúng bốn cổng, còn lại giao cho agent, và mô tả quy trình một việc, một dự án, cách chia người trong đội.
00Câu hỏi
- Người nên tham gia ở bước nào, agent tự chạy ở bước nào?
- Ngoài tool, các đối tượng (env, vai, flow, step, fixture, report…) tổ chức thế nào, có cần schema không?
- Quy trình một tính năng và quy trình cả dự án chia pha ra sao?
- Loại task khác nhau có cần quy trình khác nhau không?
- Có nên sửa tool ngay trong lúc test sản phẩm?
- Chia người theo chức danh cũ, theo loại task, hay cách khác?
Trả lời ngắn: người đứng ở chỗ đặt tiêu chí và chỗ phán xét; agent ở chỗ thực thi và thu thập. Một khung quy trình, nhiều hồ sơ bật tắt cổng theo loại task. Chia người theo cổng họ chịu trách nhiệm và module họ lái, không theo chức danh.
01Người đứng ở đâu: bốn cổng
Người viết goal và chọn tiêu chí nghiệm thu. Không có cổng này agent test cái dễ đo thay vì cái quan trọng.
Người đọc report tóm tắt và quyết fail thuộc loại nào: lỗi sản phẩm, lỗi tool, flaky. Chỉ người được kết luận.
Người cấp env và secret, duyệt flow chạy trên dữ liệu có người thật, bảo vệ tài khoản.
Người review theo đợt mọi thay đổi schema, quy ước, tool dùng chung.
| Bước | Người | Agent |
|---|---|---|
| Quy ước, schema kit | quyết định, review | đề xuất kèm ví dụ từ gap |
| Env, vai, secret | định nghĩa, cấp | chỉ dùng |
| Mục tiêu một việc | viết goal một hai câu | dịch thành step, expect, fixture |
| Viết step, flow, fixture | xem lần đầu khi là tiêu chí nghiệm thu | viết, chạy thử, sửa |
| Chạy, thu bằng chứng | không | chạy, sinh report |
| Phân loại fail | phán xét | đề xuất kèm bằng chứng |
| Sửa tool tầng repo | không | sửa tối thiểu, ghi gap |
| Gom gap lên kit | đọc, chọn, bỏ | gom, nhóm, nháp |
| Deploy, release | confirm | chuẩn bị, chạy sau confirm |
- Người xem ở mức tóm tắt. Phải mở từng ảnh hay đọc log thô là tool chưa đạt.
- Sự tham gia giảm dần theo độ chín: flow mới xem kỹ lần đầu xanh, sau chỉ xem khi fail.
02Bắt đầu từ “xong là gì”
Agent làm tốt phần “làm thế nào” và kém phần “đúng là gì”. Bắt đầu bằng mô tả cách làm là làm thay agent việc nó giỏi và bỏ trống việc chỉ người làm được. Bắt đầu trong chat thì ý định mất khi phiên kết thúc.
| Tầm | Người viết | Agent nhận |
|---|---|---|
| Dự án | luật chơi một trang: bằng chứng nào được chấp nhận, ai kết luận pass / fail, dữ liệu nào không đụng, thay đổi nào cần duyệt | đọc mỗi phiên |
| Một việc | request năm dòng: title, goal (ai làm gì thì thấy gì), roles, không được, nghiệm thu (bằng chứng nào chứng minh) | viết flow, spec, code; dừng khi bằng chứng đạt |
| Một ngày | đọc bằng chứng hôm qua, phán xét, rồi mới giao việc mới | chạy tiếp, phân loại fail để người phán xét |
Chưa trả lời được câu “bằng chứng nào chứng minh” thì việc chưa sẵn sàng giao. Thấy mình đang viết bước thao tác hay chọn tool là đã đi xuống tầng của agent: việc cần làm là sửa tiêu chí hay sửa tool, không phải tự nhảy vào làm.
03Các đối tượng ngoài tool
Tool là động từ, các đối tượng là danh từ, và danh từ quyết định tái sử dụng được hay không. Xếp theo hai trục: thuộc về ai, và đổi nhanh hay chậm. Càng chung và càng chậm đổi thì càng lên cao (kit, hub, repo); càng riêng và càng nhanh đổi thì càng ra ngoài repo (local, bàn làm việc).
| Đối tượng | Nghĩa | Thuộc về | Đổi | Nằm ở | Git |
|---|---|---|---|---|---|
| Quy ước | testid, exit code, stdout / stderr, tên vai, tiền tố dữ liệu test | mọi dự án | rất chậm | kit doc/convention/ | có |
| Config lệnh | tham số không bí mật của tool, có _doc | repo | chậm | config/<lệnh>.json | có |
| Override máy | ghi đè riêng máy | máy | tuỳ | *.local.json | không |
| Env | môi trường chạy (mock, test, thật): URL, tên biến | sản phẩm | chậm | hub testenv/env/ | có |
| Secret | mật khẩu, token theo môi trường | sản phẩm | hiếm | vault; env chỉ giữ ref | không |
| Vai | một bảng vai cho toàn hệ thống | sản phẩm | chậm | hub testenv/role.json | có |
| Profile | trình duyệt, emulator, máy thật | máy | trung bình | hub profile/ + local | một phần |
| Fixture | dữ liệu mẫu bất biến | sản phẩm | chậm | hub fixture/ | có |
| Step | thao tác UI đặt tên; nơi duy nhất biết testid | nền tảng | trung bình | hub step/<nền-tảng>/ | có |
| Flow | kịch bản nghiệp vụ theo vai, cắt ngang nền tảng | phân hệ | nhanh | hub flow/ | có |
| Bộ data | tham số một đợt chạy | tác vụ | mỗi đợt | work/run/<ngày>/<tác-vụ>/ | không |
| Bằng chứng | ảnh, log, report.json | lần chạy | mỗi lần | trong bộ data, .runs/<id>/ | không |
| Tri thức agent | skill, help, README thư mục | repo | chậm | .claude/skills, help/ | có |
| Hợp đồng API | OpenAPI | repo backend | trung bình | openapi/ | có |
flow ──needs──▶ vai ──resolve qua──▶ env ──đọc──▶ secret (ref) ├──use──▶ step ──dùng──▶ testid ├──with──▶ fixture ├──chạy trên──▶ profile └──nhận──▶ bộ data ──sinh ra──▶ bằng chứng
- Flow không chứa URL, tài khoản, đường dẫn máy; chỉ tên vai và tên fixture. Đổi env là đổi “mock” hay “thật”, không nhân đôi flow.
- Đặt tên flow theo phân hệ và hành vi, không theo thiết bị. Tag (smoke, regression, quyền) thay cho hậu tố tên file. Chuỗi bước là flow con, không đánh số trong tên.
- Fixture bất biến; thứ flow tạo ra mang tiền tố test và id lần chạy, có bước dọn.
- Mỗi lần chạy ra một
report.jsoncùng schema dù bước chạy bằng engine nào.
04Định nghĩa ở đâu, có schema không
Schema tập trung trong kit, nội dung phân tán theo chủ sở hữu. Có schema cho mọi thứ máy đọc, không cần cho thứ chỉ người và agent đọc.
| Đối tượng | Mức chặt | Lý do |
|---|---|---|
| Env, vai | chặt | mọi CLI cùng đọc |
| Report | chặt, có version | điểm nối giữa mọi engine và người đọc |
| Flow, step | chặt ở khung, mở ở bước | bước UI khác theo engine |
| Request, gap | chặt | hook chặn khi thiếu trường |
| Config lệnh, profile | vừa | trộn local nên cần biết trường hợp lệ |
| Fixture | chỉ manifest | nội dung tuỳ nghiệp vụ; manifest ghi giấy phép ảnh, font |
| Tri thức agent, quy ước | văn bản | ép schema chỉ gây phiền; mỗi quy ước có một check trong lệnh kiểm |
- Schema có version và lệnh migrate, nếu không kit đóng băng.
- Mở rộng có kiểm soát: khung đóng, bước cho phép trường riêng theo engine.
- Kit là repo riêng, không phải thư mục trong hub, vì hub chứa dữ liệu của một sản phẩm.
05Quy trình một việc
| # | Bước | Người | Agent | Đầu ra |
|---|---|---|---|---|
| 1 | Ý định | goal, vai, cái không được xảy ra, tiêu chí | hỏi lại chỗ mơ hồ, nháp danh sách flow nghiệm thu | request |
| 2 | Nghiên cứu | đọc research trước khi duyệt hợp đồng | đọc code, truy vết luồng dữ liệu | research.md |
| 3 | Hợp đồng | duyệt spec | OpenAPI, type, mock | spec |
| 4 | Flow trước code | xem flow lần đầu | viết flow từ goal, phải đỏ đúng chỗ | flow, fixture, bộ data |
| 5 | Làm | không, trừ khi block | code theo spec, chạy test và flow, commit tách tool / sản phẩm, push | commit có ref request |
| 6 | Nghiệm thu | đọc report, phán xét fail, duyệt dữ liệu thật | chạy flow theo tag, sinh report, đề xuất phân loại | report, ảnh |
| 7 | Phát hành | confirm | deploy, smoke sau deploy, release, thông báo | tag, report smoke |
| 8 | Gom (theo đợt) | đọc gap, chọn | gom gap, nháp kit, dọn flow trùng | kit version mới |
- Ba điểm ép: không có goal và nghiệm thu thì không vào bước 5; report là đầu vào duy nhất cho deploy; flow đã dùng nghiệm thu tự thành hồi quy.
- Bước 4 trước bước 5 là thay đổi lớn nhất: tiêu chí nghiệm thu được máy hoá trước khi code. Bước 3 cho phép song song backend và client trên spec và mock.
- Người chỉ xuất hiện ở 1, 2, 3, 4 (lần đầu), 6, 7, 8. Việc nhỏ và rõ thì bỏ bớt bước (mục 7).
06Quy trình cả dự án: năm pha
“Nháp, hồi quy, fix, lặp đến khi khách ổn” về cơ bản đúng, với agent càng đúng vì code nháp rẻ. Ba chỗ hay vỡ: “khách thấy ổn” không phải điều kiện dừng; nháp bị khoá thành kiến trúc; hồi quy phình không kiểm soát. Giữ vòng lặp nhưng đặt vào năm pha có điều kiện ra.
Nền
kit, testenv, quy ước, testid, pipeline report. Làm thật vì mọi pha sau dựa vào.
Ra khi lệnh kiểm xanh, một flow mẫu chạy được trên mọi nền tảng.
Nháp rộng
Khách thấy toàn bộ hình hài càng sớm càng tốt: mock data, UI trước, backend giả. Không gọi API thật, không migration, không flow hồi quy.
Ra khi khách chốt phạm vi và luồng chính; đầu ra là danh sách flow nghiệm thu theo phân hệ.
Làm thật theo phân hệ
Mỗi phân hệ đi qua hợp đồng, flow đỏ, code, report xanh. Nháp của phân hệ được thay, không fix dần.
Ra khi flow nghiệm thu của phân hệ xanh và khách duyệt phân hệ đó.
Ổn định
Hồi quy, fix, hồi quy trên dữ liệu gần thật, hai ba vòng. Chỉ sửa, không thêm; yêu cầu mới vào backlog vòng sau.
Ra khi bộ hồi quy xanh N lần liên tiếp và khách ký nghiệm thu theo danh sách flow. Quá ba vòng thì nguyên nhân thường ở pha 1 chốt chưa đủ.
Vận hành
Release, smoke sau deploy, gap theo đợt. Hồi quy có ngân sách: smoke vài phút mỗi deploy, hồi quy đầy đủ cuối ngày hoặc trước release, flow flaky cách ly và vào gap.
liên tục
Khách tham gia hai lần với hai câu hỏi khác nhau: pha 1 “đây có phải thứ anh muốn không”, pha 3 “đây có chạy đúng như đã chốt không”. Trộn hai câu là lý do vòng lặp không kết thúc.
07Hồ sơ theo loại task
Loại task khác nhau nên khác ở cổng và bằng chứng, không khác ở khung. Khung chung giữ bốn thứ: hợp đồng viết ra trước khi làm, bằng chứng do máy sinh, người giữ cổng đúng chỗ, bài học gom về rules. Phân loại theo hai trục: độ mơ hồ của “đúng là gì” và phạm vi ảnh hưởng.
| Hồ sơ | Hợp đồng | Bằng chứng | Cổng người | Bỏ qua |
|---|---|---|---|---|
| feature | research, spec, plan, task | flow đỏ thành xanh, report | duyệt spec, plan, nghiệm thu | không bỏ gì |
| bugfix | một test hoặc flow tái hiện lỗi, đỏ trước | test xanh, hồi quy xanh | xác nhận repro đúng với báo cáo | spec, plan |
| no-behavior-change | cam kết hành vi không đổi, phạm vi file (refactor, hiệu năng, nâng dependency, migration) | hồi quy xanh, số đo trước sau | chốt phạm vi trước, review diff sau; migration thêm cổng dữ liệu thật | spec, flow mới |
| visual-tweak | ảnh trước, cảm nhận muốn đạt, danh sách không được phá | ảnh sau, flow hồi quy | phán xét bằng mắt sau mỗi vòng ngắn | spec chữ, task |
| research | câu hỏi cần trả lời, thời gian giới hạn (spike, tiếp nhận codebase) | research.md có đề xuất | đọc và quyết | code merge |
| ops-rollback | tác động, phạm vi tối thiểu, kế hoạch rollback (hotfix, đổi config, CI) | smoke xanh, log sau deploy | duyệt phạm vi, duyệt deploy | plan dài; bắt buộc task nợ để sửa tử tế sau |
- Sáu hồ sơ gốc là đủ; loại khác là biến thể thêm một hai điểm ép. Đừng làm 25 file rules.
- bugfix cấm bắt đầu khi chưa có repro đỏ; agent rất hay sửa triệu chứng nếu không bị buộc tái hiện trước.
- visual-tweak là loại duy nhất hợp đồng chữ không đủ: vòng lặp ngắn agent sửa, chụp, người nhìn, nói một câu.
- Một task có thể đổi hồ sơ giữa chừng. Bug nhỏ truy ra lỗi thiết kế thì dừng, chuyển sang feature hoặc research; agent phải nói rõ “việc này vượt hồ sơ”.
- Mỗi hồ sơ một file ngắn trong kit
doc/rule/; agent đọc đúng file theo nhãn task.
08Sửa tool trong lúc test
Nên, nhưng phân tầng. Nhu cầu thật về tool chỉ lộ ra khi đang test. Hai rủi ro cần chặn: nhiễm kết quả (pass vì sản phẩm đúng hay vì tool vừa đổi cách đo) và trôi thiết kế (mỗi lần kẹt thêm một ngoại lệ).
| Tầng | Sửa trong lúc test? | Điều kiện |
|---|---|---|
| Step, flow, fixture | có, tự do | commit riêng, tách khỏi commit sửa sản phẩm |
| Lệnh, flag mới của CLI dự án | có, tối thiểu | ghi gap, có help, chạy lại flow từ sạch |
| Kit: schema, quy ước, lõi | không sửa tại chỗ | ghi gap kèm ví dụ, gom theo đợt, nâng version |
- Tách commit và tách run; report ghi version tool.
- Sửa tool chỉ được chặt hơn hoặc rộng hơn, không lỏng hơn. Nới ngưỡng, bỏ assert, thêm sleep là che lỗi: ghi gap thay vì sửa.
- Mỗi lệnh sửa có một check đi kèm trong lệnh kiểm hoặc test của CLI.
09Chia người trong đội
Chia theo cổng họ chịu trách nhiệm (trục ngang) và module họ lái (trục dọc), không theo chức danh cũ, không theo loại task. Chức danh cũ chia theo năng lực sản xuất, thứ agent đã làm phần lớn; loại task là thuộc tính của việc, không phải của người.
| Vai | Giữ cổng | Thay cho | Năng lực cốt lõi |
|---|---|---|---|
| Chủ ý định | spec, phạm vi, ưu tiên, nghiệm thu nghiệp vụ | PM, BA | nói chuyện với khách, viết “xong là gì” |
| Chủ bằng chứng | chuẩn report, flow, testenv, ngân sách flaky | QA | thiết kế bằng chứng thay vì chạy test |
| Chủ kit | quy ước, schema, rules, tool cho agent | tech lead | hiểu agent vấp ở đâu, sửa tool thay vì sửa prompt |
| Chủ vận hành | dữ liệu thật, secret, deploy, rollback | devops | nói không đúng lúc |
| Người lái agent | phiên hằng ngày, viết request, đọc bằng chứng hôm qua | dev | hiểu sâu module mình lái |
- Bốn vai đầu giữ cổng, ít người. Người lái là vai sản xuất mới, đông nhất, mỗi người sở hữu vài module và làm mọi loại task trên đó; hồ sơ cho biết phải gõ cửa cổng nào.
- Đội nhỏ gộp vai nhưng nói rõ đang đội mũ nào khi đứng ở cổng. Được gộp chủ ý định với chủ bằng chứng; không gộp cổng kit và cổng vận hành vào dự án.
- Tách người viết request và người phán xét kết quả với task phạm vi rộng.
- Agent cũng tách vai theo phiên: nghiên cứu, thực thi, review là ba phiên riêng để review không thiên kiến bởi code nó viết.
- Phòng ban: chủ ý định, chủ bằng chứng, người lái ngồi trong dự án (hàng đợi giữa phòng giết tốc độ của agent). Chủ kit và chủ vận hành ở đơn vị dùng chung, vì kit và secret phải sống lâu hơn dự án. Chưa có hai dự án dùng chung thì chưa lập đơn vị kit.
- Vòng vận hành: dự án pin kit theo version → người lái làm task theo hồ sơ → bằng chứng → phán xét → report xanh sang cổng vận hành → chỗ kit cản thì ghi gap → đơn vị kit gom theo đợt, ra version mới.
10Phiên làm việc: mở ở đâu, bắt đầu thế nào
- Phiên đặt tiêu chí và phán xét mở ở thư mục cha của máy, đứng ngoài mọi repo: việc cắt ngang nhiều repo, bằng chứng ở bàn làm việc, memory của agent tích luỹ ở một chỗ.
- Phiên làm theo request mở trong repo nền tảng hoặc hub khi việc nằm trọn trong đó và cần ngữ cảnh riêng. Hai loại phiên tách nhau.
- Không mở phiên trong thư mục bản chạy và thư mục secret.
- Mỗi phiên bắt đầu bằng đọc tóm tắt phiên trước (
work/run/<ngày>/README.md) và hộp request; kết thúc bằng ghi tóm tắt: đã làm gì, bằng chứng ở đâu, còn gì. - Mỗi task một phiên sạch; tiến độ ghi ra file, phiên mới đọc lại từ file. Thứ bắt buộc phải xảy ra mỗi lần thì làm thành hook, không làm thành lời dặn trong CLAUDE.md.
Cây thư mục và cách luật nạp vào phiên: ghi chú 2, mục thư mục cha.
11Đối chiếu với cộng đồng
Hướng đi trên gần với đồng thuận 2025–2026 ở ba điểm: spec nằm trong repo chứ không trong chat (spec-driven); người review plan chứ không chỉ review code; CLI cho agent với mỗi lệnh một việc, xuất JSON, exit code rõ. Những thứ mượn thêm:
| Từ đâu | Mượn gì |
|---|---|
| Research → Plan → Implement | pha nghiên cứu tách riêng, đầu ra là file; giữ context agent dưới ngưỡng, ghi tiến độ ra file rồi mở phiên mới |
| Spec-driven (Spec Kit, OpenSpec) | cấu trúc thư mục mỗi tính năng: research, spec, plan, task; không ôm nguyên framework nặng |
| Vòng lặp tự động (Ralph loop) | pha ổn định chạy loop với ngân sách lượt; bộ nhớ ở git và file tiến độ; bài học vào rules |
| Context engineering | CLAUDE.md ngắn, quy tắc tách theo hồ sơ, thứ bắt buộc thành hook |
| Writing tools for agents | đo tool bằng eval: cho agent chạy bộ việc mẫu, đọc transcript, sửa thông báo lỗi để chỉ bước tiếp theo |
Engine test (Playwright, Maestro) có format ổn định mà agent biết sẵn; DSL riêng nên mỏng, giữ lớp nghiệp vụ, uỷ lớp tương tác. Chi tiết ở ghi chú 2.
12Ví dụ MiniGate
Sáu CLI (mgctl, cpctl, wsctl, deskctl, minigate, rt) và bốn engine flow khác nhau cùng một ý tưởng (flow JSON gồm steps, expect, shot, dùng testenv) nhưng mỗi cái tự viết schema và runner; code dùng chung chép tay giữa ba repo. Runner web rò rỉ ra JS thô và chờ cứng; runner mobile không có lớp step nên input dính thẳng testid. Lớp đáng giữ nhất là mgctl flow: chỉ điều phối vai, flow con, gọi CLI khác, lưu kết quả.
Phần làm tốt và giữ: config có _doc cộng .local.json, testenv theo vai, lệnh api đăng nhập như app, bộ data và report mỗi lần chạy, doctor, quy ước testid dùng chung desktop và mobile.
Request đi qua rt req với mẫu năm dòng và hook chặn khi thiếu goal hoặc nghiệm thu. Sáu hồ sơ ở kit doc/rule/. Luật sản phẩm một trang ở hub docs/rule.md, nạp vào mọi phiên qua file cấp user. Chủ dự án hiện kiêm chủ ý định, chủ kit, chủ vận hành; ghi rõ để khi đội lớn tách mũ không phải vẽ lại quy trình.
13Việc còn mở
- Engine chuẩn cho cả công ty: Playwright cho web và Electron, Maestro cho mobile là đề xuất; thử trên một sản phẩm mỗi loại trước khi chốt.
- Flow JSON thuần hay cho phép JS? Đề xuất JSON thuần, logic ở driver.
- Schema report đủ để người đọc vài phút một đợt chưa; runner nào xuất đúng schema.
- Ngân sách token cho eval và loop: ai duyệt, trần bao nhiêu mỗi đội.
- Chạy đủ khung này trên một tính năng thật, ghi lại chỗ bị cản rồi chỉnh.
Người bắt đầu ở chỗ đặt tiêu chí và chỉ quay lại ở chỗ phán xét theo tiêu chí đó. Khoảng giữa là của agent.