Quy trình làm việc với agent: tool, flow, đối tượng và chỗ người phải đứng
Tổng hợp buổi trao đổi về cách tối ưu công cụ test / debug qua CLI từ hiện trạng MiniGate để tái dùng cho dự án sau, và cách tổ chức quy trình để chủ dự án bớt phải quản lý trực tiếp. Mục 12–16 mở rộng sang câu hỏi lớn hơn: quy trình thực hiện dự án, hồ sơ theo loại task, vai trò người và cách tổ chức phòng ban khi dùng agent.
00Câu hỏi gốc
Đang có nhiều CLI cho agent (mgctl, cpctl, wsctl, deskctl, minigate, rt) và nhiều flow test khai báo. Muốn tối ưu lại để tái dùng cho dự án sau. Chuỗi câu hỏi đã đi qua:
- Cách đưa tool cho AI qua CLI và định nghĩa flow có phải hướng đi hợp lý so với cộng đồng không?
- Ngoài tool, các đối tượng khác (env, role, flow, step, fixture, report…) tổ chức thế nào?
- Các đối tượng đó định nghĩa ở đâu, có cần structure không?
- Có nên sửa tool ngay trong lúc test / debug sản phẩm không?
- Người nên tham gia ở bước nào?
- Quy trình của cả dự án nên chia pha ra sao: nháp trước rồi lặp hồi quy đến khi khách ổn?
- Khi làm việc với agent, tôi bắt đầu ở đâu: theo nguyên lý, và theo thư mục nào của dự án?
01Hiện trạng tóm tắt
Có 6 CLI và 4 “engine flow” khác nhau cùng một ý tưởng (flow JSON gồm steps, params, expect, shot, dùng testenv) nhưng mỗi cái tự viết schema và runner riêng. Code dùng chung bị chép tay giữa repo: find-common.js giống hệt ở 3 repo, schema.js giống ở desktop và mobile, util.js mỗi repo một bản, testenv.js và mgctl.js lệch dần.
| deskctl flow | minigate flow | wsctl e2e | mgctl flow | |
|---|---|---|---|---|
| Đối tượng | Electron (CDP) | Android / iOS (adb, xcrun) | Web (Chrome) | API + gọi CLI khác |
| Bước phổ biến | expect 704 · shot 331 · wait 299 · use 180 · type 146 | run 583 (chuỗi lệnh con) · expect 534 | eval 473 (JS thô) · shot 367 · click 362 · sleep 325 | args 75 · as 66 · expect 63 · save 16 |
| Chỉ phần tử | #chat.row.c3 hoặc css=… | chat-thread.pinned-bar (có *) | CSS trong eval / click | không (API) |
| Bước tái dùng | use + steps/*.json | không | use + steps/*.json | flow con + cli |
| Vai trò | testEnv | roles A/B + {{testEnv.user}} | role (1 lần) | as + needs theo testenv |
| Điều kiện / lặp | không | không | không | when |
| Chờ | timeoutMs 281 · sleep 27 | timeoutMs 459 | sleep 325 · wait 228 | không cần |
- wsctl e2e đã rò rỉ ra JS. 473 bước
evalvà 325sleepnghĩa là DSL không đủ diễn đạt, người viết nhảy xuống code và chờ cứng. - minigate flow thực chất là shell script dạng JSON. Tốt cho agent (mỗi bước chạy tay được) nhưng không có lớp step nên 281 lần
input tapdính thẳng vào testid. - mgctl flow là lớp khác hẳn. Không chạm UI, chỉ điều phối vai trò, params, flow con, gọi CLI khác, lưu kết quả. Đây là lớp đáng giữ nhất.
Phần làm tốt và nên giữ: config + .local.json, testenv theo vai trò, mgctl api đăng nhập như app, bộ data + .runs báo cáo, doctor, quy ước testid module.screen.element dùng chung desktop và mobile.
02Hướng đi có hợp lý so với cộng đồng?
Có. “CLI cho AI + flow khai báo + testenv theo vai trò + bằng chứng mỗi lần chạy” là dòng chính 2025–2026.
- CLI thay vì tool-call / MCP. Anthropic (bài “code execution with MCP”) và OpenAI Codex đều chỉ ra: agent gọi lệnh rồi tự đọc output tiết kiệm token và dễ ghép hơn nạp hàng chục tool definition. Vercel ra
agent-browserdạng CLI vì lý do này. - Test như dữ liệu. Maestro (mobile) dùng YAML flow: tapOn, assertVisible, runFlow con. Cấu trúc flow JSON của MiniGate gần như song song.
- Progressive disclosure cho agent. help ngắn,
_doctrong config, skill, doctor: đã có. - Evidence và reproducibility. Bộ data +
.runskhớp xu hướng.
Chỗ cộng đồng làm khác
- Tránh DSL tự chế khi đã có sẵn. Maestro, Playwright, WebdriverIO có format ổn định, agent biết sẵn cú pháp. DSL riêng nên mỏng: giữ lớp nghiệp vụ, uỷ lớp tương tác cho engine chuẩn. Bốn runner tự viết là đi hơi xa.
- Một lệnh một việc, in JSON.
--json, stdout là kết quả, stderr là log, exit code có nghĩa, không hỏi khi không có TTY. mgctl đã theo, rt (menu + xác nhận) thì chưa. - Test chính tool. Ai test runner? Mobile có 2 file test, còn lại không.
- Flaky là bài toán chính. Auto-wait, retry, trace là nơi Maestro / Playwright đầu tư nhiều nhất và DSL riêng phải tự gánh.
03Flow riêng so với Maestro và Playwright
| Nhu cầu | Hiện tại (3 runner UI) | Maestro (mobile, YAML) | Playwright (web / Electron) | Nhận xét |
|---|---|---|---|---|
| Tìm phần tử | testid, mỗi runner một cú pháp | id, text, regex, index | getByTestId / Role / Text | engine ngoài có 4–5 cách, ta chỉ có testid |
| Auto-wait | không, dùng timeoutMs / sleep | có | có | chỗ ta tốn công nhất, họ cho sẵn |
| Assert | expect + text / contains / visible / gone / attr / count | assertVisible, assertNotVisible, assertTrue | 20+ matcher | đủ dùng nhưng tự bảo trì |
| Flow con | use + steps | runFlow + env | hàm / fixture | ngang nhau |
| Vai trò, testenv | mạnh | chỉ env | storageState theo tài khoản | ta mạnh hơn, đây là lớp nghiệp vụ |
| Điều kiện, lặp | không | runFlow when, repeat | JS đầy đủ | thiếu, nên có 4 flow na ná (chat-hai-nguoi-0/1/2/3) |
| Ảnh, trace, report | shot + .runs + Telegram | screenshot, record, JUnit / HTML | trace viewer, HTML report, video | trace viewer là thứ ta không có |
| Hai máy / hai vai | mobile có roles A/B | không | nhiều context trong 1 test | Playwright hơn, Maestro kém ta |
| Agent biết sẵn cú pháp? | không, đọc help mỗi phiên | có | có | chi phí ẩn của DSL riêng |
| Electron | CDP tự viết (page.js 363 dòng) | không | hỗ trợ chính thức | thay hẳn được lớp CDP |
| Android / iOS | adb / xcrun tự viết | hỗ trợ chính thức | không | thay được lớp input / expect |
| Giấy phép | của ta | Apache-2.0 | Apache-2.0 | dùng thương mại được |
Giữ gì, uỷ gì
Giữ (lớp nghiệp vụ, không ai có): testenv theo vai trò, as / needs, tài khoản bảo vệ, tiền tố [E2E] và dọn dữ liệu; mgctl flow làm bộ điều phối; lệnh đơn cho agent (api, shot, inspect, doctor); quy ước testid.
Uỷ cho engine ngoài (lớp tương tác): web và Electron → Playwright, bước UI dịch 1:1 hoặc bước playwright: <spec> để mgctl flow gọi rồi thu report. Mobile → Maestro cho input / expect, giữ app, shot, net, biometric, notif, log của minigate; hai máy thì mgctl flow điều phối 2 Maestro.
Cái giá: thêm 2 dependency lớn (Playwright kéo browser, Maestro cần Java), agent học 2 cú pháp, dịch lại flow hiện có (desktop ~40, mobile 28, ws vài chục). Đổi lại bỏ được 3 runner tự viết, có auto-wait và trace viewer, dự án sau chỉ mang theo lớp nghiệp vụ mỏng.
Phương án giữa: giữ DSL nhưng chuẩn hoá một schema step chung cho 3 runner UI, thêm auto-wait vào expect để bỏ sleep, đưa when / repeat xuống. Rẻ hơn nhưng vẫn tự nuôi engine.
Khuyến nghị: chọn uỷ, bắt đầu từ wsctl e2e vì rò rỉ nặng nhất và Playwright thay được trọn vẹn.
04Cá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 (mọi dự án, một dự án, một repo, một máy, một lần chạy) và đổi nhanh hay chậm.
| Đối tượng | Nghĩa | Thuộc về | Đổi | Nằm ở | Commit |
|---|---|---|---|---|---|
| Quy ước | testid, exit code, stdout/stderr, tên vai trò, [E2E] | mọi dự án | rất chậm | kit, 1 trang | có |
| Config lệnh | tham số không bí mật của tool | repo | chậm | config/<lệnh>.json + _doc | có |
| Override máy | ghi đè riêng máy | máy | tuỳ | *.local.json | không |
| Môi trường | server + workspace + URL + vai trò dùng biến nào | dự án | chậm | common config/test-env.json | có |
| Bí mật | mật khẩu, token theo môi trường | dự án | hiếm | secrets/test-env/<env>.env | repo private |
| Vai trò | admin, chat1, works-staff2, mobile… | dự án | chậm | một bảng duy nhất, cùng file env | có |
| Hồ sơ | Chrome profile, emulator, máy thật | máy | trung bình | config/profiles + local | một phần |
| Fixture | dữ liệu mẫu bất biến | repo | chậm | fixtures/ cạnh flow | có |
| Bước | thao tác UI đặt tên: chat.send, auth.login | repo | trung bình | steps/<module>.json | có |
| Flow | kịch bản nghiệp vụ | repo (UI) / common (liên repo) | nhanh | flows/<module>/<tên>.json | có |
| Bộ data | tham số một đợt chạy | tác vụ | mỗi đợt | work/<ngày>/<tác vụ>/ | không |
| Bằng chứng | ảnh, log, report.json | lần chạy | mỗi lần | <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ó |
Nguyên tắc đặt chỗ: càng chung và càng chậm đổi thì càng lên cao (kit → common → repo); càng riêng và càng nhanh đổi thì càng ra ngoài repo (local → work → .runs).
Quan hệ giữa các đối tượng
flow ──needs──▶ role ──resolve qua──▶ env ──đọc──▶ secret │ │ ├──use──▶ step ──dùng──▶ testid (quy ước) ├──with──▶ fixture ├──chạy trên──▶ profile (máy) └──nhận──▶ dataset ──sinh ra──▶ run / evidence
- Flow không chứa URL, tài khoản, đường dẫn máy. Chỉ tên vai trò và tên fixture.
- Step là nơi duy nhất biết testid. UI đổi testid thì sửa một chỗ.
- Dataset tách khỏi flow để một flow chạy nhiều đợt, mỗi đợt có .runs riêng.
Quyết định tổ chức cụ thể
- Một bảng vai trò cho toàn hệ thống; mobile cần 2 máy thì ánh xạ A → chat1, B → chat2.
- Đặt tên flow theo
module/hành-vi, không theo thiết bị. 4 flow chat-hai-nguoi-0..3 nên là 1 flow mgctl gọi 4 bước trên 2 vai. - Tag (smoke, that, quyen, hoi-quy) thay cho hậu tố tên file.
- Fixture bất biến; thứ flow tạo ra mang
[E2E] {run.id}và có bước dọn. - Mỗi run ra một
report.jsoncùng schema dù bước chạy bằng engine nào. - Mỗi thư mục flows / steps / fixtures có README ngắn; skill chỉ trỏ tới, không chép.
05Đị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ó structure cho mọi thứ máy đọc, không cần cho thứ chỉ người và agent đọc.
| Tầng | Chứa gì | Ở đâu | Ai sửa |
|---|---|---|---|
| Kit | schema từng đối tượng, quy ước, runner lõi, template thư mục | repo riêng (mg-cli-kit), có version | hiếm, có review |
| Dự án | instance env, role, profile, flow liên repo, contract, secrets | repo common của dự án | người vận hành |
| Repo | step, flow UI, fixture, config lệnh, tri thức agent | <repo>/cli/ | dev của app |
| Ngoài repo | local override, dataset, run | *.local.json, work/, .runs/ | máy, lần chạy |
Hiện đã có tầng 2, 3, 4. Thiếu tầng 1: schema đang nằm trong repo app nên mỗi repo một bản. Đưa schema lên kit là thay đổi cấu trúc duy nhất cần làm. Mỗi file instance khai "$schema", runner validate lúc load.
| Đối tượng | Structure | Mức chặt | Lý do |
|---|---|---|---|
| Env, Role | JSON Schema | chặt | 6 CLI cùng đọc |
| Report | JSON Schema, có version | chặt | điểm nối giữa mọi engine và consumer |
| Flow, Step | JSON Schema | chặt ở khung, mở ở bước (oneOf theo driver, x-*) | bước UI khác theo driver |
| Config lệnh | schema cạnh config | vừa | như rt đang làm |
| Profile | JSON Schema | vừa | trộn local nên cần biết field hợp lệ |
| Fixture | chỉ manifest | lỏng | nội dung tuỳ nghiệp vụ; manifest ghi giấy phép ảnh / font |
| Dataset | sinh từ params của flow | tự động | không viết tay |
| Tri thức agent | không | tự do | ép schema chỉ gây phiền |
| Quy ước | văn bản | tự do | nhưng mỗi quy ước có một check trong doctor |
- Schema phải có version và lệnh migrate, nếu không kit đóng băng.
- Mở rộng có kiểm soát:
additionalProperties:falseở khung, cho phépx-<repo>-*hoặcwithtự do trong bước. - Kit là repo riêng, không phải thư mục trong common, vì common chứa secrets và dữ liệu MiniGate.
mg-cli-kit/ # tầng kit schemas/ env · role · flow · step · report · profile · config conventions.md template/ # mgctl init-cli sinh từ đây common_minigate/ # tầng dự án config/test-env.json config/profiles/ flows/<module>/ secrets/test-env/ <repo>/cli/ # tầng repo steps/<module>.json flows/<module>/*.json fixtures/ + fixtures.json config/<lệnh>.json work/<ngày>/<tác vụ>/ # ngoài repo env.json params.json .runs/<id>/report.json
06Sửa tool trong lúc test / debug sản phẩm
Nên, nhưng phân tầng. Nhu cầu thật về tool chỉ lộ ra khi đang test; cấm sửa là tự bịt nguồn phát hiện. 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; agent có xu hướng nới expect, tăng timeout, thêm sleep) 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 CLI repo | Có, tối thiểu | ghi gap, có help, chạy lại flow từ sạch |
| Runner lõi, schema, quy ước | Không sửa tại chỗ | ghi gap kèm ví dụ, gom sửa theo đợt, nâng version kit |
Ba kỷ luật
- Tách commit và tách run. Sửa tool xong chạy lại từ sạch; report có field
toolVersion. - 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. Đưa vào skill / CLAUDE.md cho agent.
- Mỗi lệnh sửa có một check đi kèm trong doctor hoặc test của CLI.
Nhịp: trong sprint sửa tầng 1 thoải mái, tầng 2 khi kẹt, tầng 3 chỉ ghi gap. Cuối đợt đọc gaps, gom cái lặp từ 2 repo trở lên lên kit. Test / debug là nơi phát hiện nhu cầu tool, không phải nơi thiết kế tool.
07Người đứng ở đâu
Người ở chỗ đặt ý định và chỗ phán xét; agent ở chỗ thực thi và thu thập. Bốn cổng người bắt buộc đứng, mọi chỗ khác agent tự chạy:
Người viết goal cho flow và chọn tag nào là 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 / secret, duyệt flow chạy trên workspace có người thật, bảo vệ tài khoản.
Người review theo đợt mọi thay đổi schema, runner lõi, quy ước.
| Bước | Người | Agent |
|---|---|---|
| Quy ước, schema kit | quyết định, review | đề xuất kèm ví dụ từ gaps |
| Env, role, secrets | định nghĩa, cấp | chỉ dùng |
| Mục tiêu flow | viết 1–2 câu goal | dịch thành steps, 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 gaps lên kit | đọc, chọn, bỏ | gom, nhóm, nháp |
| Flow dữ liệu thật | duyệt trước, xem ảnh sau | chạy, dọn [E2E] |
| 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 hoặc đọc log thô là tool chưa đạt. Mục tiêu: vài phút cho một đợt vài chục flow.
- Sự tham gia giảm dần theo độ chín. Flow mới xem kỹ lần đầu xanh, sau chỉ xem khi fail. Tool mới review lúc lên kit, sau tin doctor.
08Quy trình một tính năng (hoặc một request)
| # | Bước | Người | Agent | Đầu ra | Tool |
|---|---|---|---|---|---|
| 1 | Ý định | goal, vai trò, 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 có goal + danh sách flow | rt req new |
| 2 | Hợp đồng | duyệt spec | OpenAPI, sinh type, mock | spec + type | mgctl contract |
| 3 | Flow trước code | xem flow lần đầu | viết flow từ goal, phải đỏ đúng chỗ | flow + fixture + dataset | flow init, testenv |
| 4 | Làm | không, trừ khi block | code theo spec, chạy test + flow, commit tách tool / sản phẩm | commit Refs, push | process-requests |
| 5 | 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.json + ảnh, Telegram | mgctl flow run |
| 6 | Phát hành | confirm | deploy, smoke sau deploy, release, thông báo | tag, versions.json, report smoke | mgctl deploy / release |
| 7 | Gom (theo đợt) | đọc gaps, chọn | gom gaps, nháp kit, dọn flow trùng | kit version mới, bộ hồi quy | gaps, doctor |
- Bước 3 trước bước 4 là thay đổi lớn nhất: tiêu chí nghiệm thu được máy hoá trước khi code.
- Bước 2 cho phép song song backend và client trên spec + mock.
- Người chỉ xuất hiện ở 1, 3 (lần đầu), 5, 6, 7.
- Ba điểm ép: không có goal và danh sách flow thì không vào bước 4; report là đầu vào duy nhất cho deploy; flow đã dùng nghiệm thu tự thành hồi quy.
- Sửa lỗi nhỏ: 1 (mô tả + cách tái hiện) → 3 (một flow tái hiện, phải đỏ) → 4 → 5.
09Quy trình cả dự án
“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 (rủi ro lớn nhất khi dùng agent); hồi quy phình không kiểm soát. Giữ vòng lặp nhưng đặt vào 5 pha có điều kiện ra.
Nền (1–2 tuần)
kit, testenv, quy ước, testid, pipeline report. Làm thật vì mọi pha sau dựa vào.
Ra khi doctor xanh, một flow mẫu chạy được trên cả 3 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. Nháp có chủ đích: mock data, UI trước, backend giả (như mock/* của mobile). Nháp không gọi API thật, không migration, không flow hoi-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 module.
Làm thật theo module
Mỗi module đi qua contract → flow đỏ → code → report xanh. Nháp của module được thay, không fix dần.
Ra khi flow nghiệm thu của module xanh và khách duyệt module đó.
Ổn định (2–3 vòng, mỗi vòng ~1 tuần)
Hồi quy → fix → hồi quy trên dữ liệu gần thật. 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á 3 vòng thì nguyên nhân thường ở pha 1 chốt chưa đủ.
Vận hành
Release, smoke sau deploy, gaps theo đợt. Hồi quy có ngân sách: smoke vài phút mỗi deploy, hoi-quy đầy đủ cuối ngày hoặc trước release, flow flaky gắn cach-ly và vào gaps.
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.
- Pha 0 và 1 khoảng 20% thời gian, pha 2 là phần lớn.
10Nơi bắt đầu khi làm việc với agent
Theo nguyên lý
Bắt đầu bằng định nghĩa “xong là gì”, viết xuống ở một chỗ tồn tại lâu hơn cuộc trò chuyện. 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, phiên sau agent lại đoán.
| Tầm | Điểm xuất phát của người | Agent nhận từ đó |
|---|---|---|
| Dự án | luật chơi: 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 (bốn cổng), viết thành một trang | đọc mỗi phiên |
| Một việc | ba câu: ai làm gì thì thấy gì; cái gì không được xảy ra; bằng chứng nào chứng minh. Chưa trả lời được câu ba thì việc chưa sẵn sàng giao | viết flow, spec, code; dừng khi bằng chứng đạt |
| Một ngày | bằng chứng của hôm qua: đọc, 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 |
Một việc nên là một request lưu lại, khoảng 5 dòng: title, goal, roles, không được, nghiệm thu (tên flow + tag). Steps, expect, fixture, spec, code là việc của agent. 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.
Một câu: 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. Thấy mình ở khoảng giữa là tín hiệu tiêu chí chưa rõ hoặc tool chưa đủ tin; việc cần làm là sửa tiêu chí hay tool, không phải tự nhảy vào làm.
Theo thư mục
Mở phiên ở thư mục trung tâm của dự án, đứng ngoài mọi repo (với MiniGate là ~/work), không mở trong một repo.
- Tiêu chí và phán xét cắt ngang nhiều repo; bắt đầu trong repo là tự giới hạn tầm nhìn theo ranh giới code.
- Bộ data và bằng chứng (
work/<ngày>/<tác vụ>/,.runs) nằm ở đây, không trong repo. - Memory của agent gắn với thư mục khởi động; một chỗ cố định thì tích luỹ, đổi thư mục là đổi bộ nhớ.
- Bản đồ repo đã nạp sẵn, agent tự vào repo khi làm; chiều ngược lại không có.
Chỉ mở trong repo khi việc nằm trọn trong repo đó và cần ngữ cảnh riêng (CLAUDE.md, skill, quy tắc store). Đó là phiên “làm” của agent theo request, không phải phiên người đặt tiêu chí. Hai loại phiên tách nhau.
Thư mục trung tâm cần ba thứ: nơi viết ý định (todo / request), nơi chứa bộ data và kết quả chạy, nơi đọc lại (notes, review). Nên có một CLAUDE.md tại đó nói rõ “đây là bàn làm việc, bắt đầu bằng đọc bằng chứng hôm qua rồi mới nhận việc mới”. Dự án sau giữ nguyên nguyên tắc: một thư mục bàn làm việc ngoài mọi repo, chứa bản đồ repo, bộ data, bằng chứng, ghi chú.
11Việc còn mở để nghĩ tiếp
Mục tiêu đã nêu: tối ưu quy trình làm việc nhóm để chủ dự án không phải tham gia quản lý nhiều. Những quyết định còn chờ:
- DSL flow dừng ở lớp nào? Uỷ hẳn lớp tương tác cho Playwright / Maestro, hay phương án giữa (chuẩn hoá schema step, thêm auto-wait)? Bắt đầu từ wsctl e2e.
- Flow JSON thuần hay cho phép JS? Đề xuất JSON thuần, logic ở driver.
- Kit là repo riêng? Đề xuất có, common là consumer đầu tiên.
- Schema report.json là gì, đủ để người đọc vài phút một đợt? Đây là điểm nối cho mọi thứ còn lại, nên làm sớm.
- Ai giữ cổng nào khi nhóm lớn hơn một người: cổng ý định và phán xét có thể giao cho PO / QA, cổng dữ liệu thật và kit nên giữ ở người vận hành. → Trả lời ở mục 14 và 15.
- Thứ tự chuyển: deskctl → minigate → wsctl e2e (theo độ gần với mgctl flow), hay wsctl e2e trước (theo mức rò rỉ)?
- Template request hiện chỉ có title; thêm goal / roles / không được / nghiệm thu và chặn vào bước làm khi thiếu goal hoặc nghiệm thu.
- CLAUDE.md tại thư mục trung tâm mô tả vòng ngày (đọc bằng chứng → phán xét → giao việc).
- Kiểm kê bước 1: bảng lệnh nào thuộc lõi hay dự án, trùng ở đâu, để quyết phạm vi kit trước khi thiết kế API.
Điều rút ra lớn nhất: phần mang sang dự án mới là quy ước, schema của env / role / flow / step / report, cấu trúc thư mục và bốn cổng người đứng. Phần ở lại là nội dung của các file đó. Ranh giới tái sử dụng đi theo loại đối tượng, không theo repo.
12Đối chiếu với các phương pháp cộng đồng đánh giá cao
Mục tiêu thật của ghi chú này không phải tối ưu hiện trạng mà là tìm một quy trình thực hiện dự án tận dụng tối đa agent. Chưa có quy trình thống nhất, đang tự đúc rút. Đối chiếu với các nguồn được trích dẫn nhiều nhất 2025–2026 cho thấy hướng đi ở các mục trên đã rất gần đồng thuận, ở ba điểm:
- “Xong là gì” viết ra chỗ bền hơn cuộc trò chuyện chính là tinh thần của spec-driven development: spec phải nằm trong repo, không thì mục nát.
- Bốn cổng người gần với cách HumanLayer khuyên đội nhóm: review plan, không chỉ review code.
- CLI cho AI, mỗi lệnh một việc, xuất JSON, exit code rõ khớp với bài “Writing tools for agents” của Anthropic. Đội của họ tốn thời gian tối ưu tool nhiều hơn tối ưu prompt.
| Phương pháp | Cốt lõi | Mượn gì cho MiniGate |
|---|---|---|
| Research → Plan → Implement HumanLayer | Mỗi pha ra một file markdown. Giữ context agent ở 40–60%, ghi tiến độ ra file rồi mở phiên mới khi đầy. Một dòng nghiên cứu sai sinh ra hàng nghìn dòng code sai, một dòng plan sai sinh ra hàng trăm. | Thêm pha nghiên cứu trước hợp đồng, đầu ra là research.md. Người đọc research trước khi duyệt hợp đồng. |
| Explore → Plan → Code → Commit Anthropic | Plan mode cho việc chạm nhiều file hoặc code lạ. Việc nhỏ rõ ràng thì làm thẳng. Đầu tư vào verification vì đó là thứ agent tự kiểm được. | Phân tầng việc theo kích cỡ, không ép mọi việc qua bảy bước. |
| Spec-driven Spec Kit · OpenSpec · BMAD | Chuỗi constitution → specify → clarify → plan → tasks → implement. Spec 1–3 trang, bắt buộc có mục ngoài phạm vi và tiêu chí nghiệm thu kiểm thử được. BMAD mô phỏng cả đội agile, nặng và tốn token (một benchmark: 5,5 giờ so với 12 phút của OpenSpec). | Mượn cổng và cấu trúc thư mục mỗi tính năng, không ôm nguyên framework. |
| spec / prompt_plan / todo Harper Reed | Hone ý tưởng bằng hỏi đáp từng câu một, sinh plan dạng chuỗi prompt, để agent tự tick todo.md. Tick todo là cách giữ trạng thái qua nhiều phiên. | tasks.md tick được, phiên mới đọc lại từ file. |
| Ralph loop Geoffrey Huntley | Vòng lặp bash chạy agent với context sạch mỗi lượt. Bộ nhớ nằm ở git, progress.txt và prd.json. Sau mỗi lượt agent ghi bài học vào AGENTS.md. | Pha ổn định chạy loop tự động với ngân sách lượt chạy. Gaps thành rules. |
| Context engineering cấp đội | CLAUDE.md ngắn, dưới 200 dòng, tách quy tắc theo chủ đề vào thư mục rules. CLAUDE.md chỉ là lời khuyên; thứ bắt buộc phải xảy ra mỗi lần thì làm thành hook. | Tách CLAUDE.md thành ba lớp: quy ước, rules, hook. |
| Writing tools for agents Anthropic | Tool là hợp đồng giữa hệ xác định và agent bất định. Viết tool, cho agent chạy thử trên bộ việc mẫu, đọc transcript xem agent vấp ở đâu, sửa thông báo lỗi để agent biết bước tiếp theo. | Eval cho kit. Trả lời trực tiếp câu “có nên sửa tool khi đang test”. |
Khoảng trống lớn nhất của ghi chú này so với cộng đồng: mục 8 đi thẳng từ ý định sang hợp đồng, chưa có pha nghiên cứu tách riêng, và chưa nói gì về quản lý context của agent.
Gợi ý cụ thể
- Thêm pha nghiên cứu trước hợp đồng. Agent đọc code, truy vết luồng dữ liệu, ghi research.md. Đây là bước có đòn bẩy cao nhất đang bị bỏ qua.
- Phân tầng việc theo kích cỡ. Bug có repro rõ thì làm thẳng. Việc chạm nhiều file thì plan mode cộng test. Tính năng mới thì đủ bộ research, spec, plan, tasks. Chi tiết ở mục 13.
- Chuẩn hoá thư mục mỗi tính năng trong repo:
research.md,spec.md,plan.md,tasks.md. Request 5 dòng ở mục 10 thành phần đầu của spec. - Tách CLAUDE.md thành ba lớp. Quy ước ngắn trong CLAUDE.md, quy tắc chi tiết trong rules, thứ bắt buộc làm hook. “Report là đầu vào duy nhất cho deploy” nên là hook chặn, không nên là câu dặn.
- Mỗi task một phiên sạch. Xong một task thì ghi tiến độ vào tasks.md, commit, phiên mới đọc lại từ file. Giải bài “một ngày đọc bằng chứng hôm qua trước”.
- Vòng lặp kiểu Ralph cho pha ổn định. Pha 3 chỉ sửa không thêm, tiêu chí là flow xanh: bài toán lý tưởng để chạy loop qua đêm với ngân sách lượt chạy.
- Gaps thành bộ nhớ của agent. Đầu ra của bước gom gaps là cập nhật rules hoặc AGENTS.md, không chỉ là danh sách chờ sửa tool.
- Đo tool bằng eval. Bộ việc mẫu cho kit, đọc transcript, sửa thông báo lỗi.
Khung thống nhất tối thiểu
| Lớp | Nội dung | Người giữ cổng |
|---|---|---|
| Nền | CLAUDE.md ngắn, rules, hooks, kit schema | thay đổi kit |
| Tính năng | research, spec, plan, tasks trong repo | duyệt spec và plan |
| Thực thi | phiên sạch mỗi task, flow đỏ rồi xanh, report | phán xét report |
| Tự động | loop cho hồi quy và việc cơ khí | ngân sách lượt chạy |
| Học | gaps thành rules và AGENTS.md theo đợt | duyệt đợt |
Bước tiếp theo hợp lý: chọn một tính năng thật, chạy đủ khung này một lần, ghi lại chỗ bị cản rồi chỉnh.
13Hồ sơ theo loại task
Câu hỏi: các loại task khác nhau (tạo tính năng, fix bug, tối ưu UI/UX…) có nên là các quy trình khác nhau không? Nên khác, nhưng khác ở cổng và bằng chứng, không khác ở khung. Mỗi loại task một quy trình riêng thì đội không nhớ nổi và agent không có một file quy tắc chung để đọc. Cách hợp lý là một bộ khung với các cổng bật tắt được; mỗi loại task là một hồ sơ chọn cổng nào bật.
Khung chung giữ nguyên bốn thứ: hợp đồng viết ra trước khi làm, bằng chứng do máy sinh ra, người giữ cổng ở đúng chỗ, bài học gom về rules. Thứ thay đổi theo loại task là ba câu hỏi: hợp đồng là gì, bằng chứng là gì, người đứng ở cổng nào.
Phân loại theo hai trục chứ không theo tên task: độ mơ hồ của “đúng là gì” và phạm vi ảnh hưởng. Fix bug có repro rõ: mơ hồ thấp, phạm vi hẹp. Tính năng mới: mơ hồ cao, phạm vi rộng. Tối ưu UI/UX: mơ hồ cao nhưng phạm vi hẹp, nên cần hồ sơ riêng. Tên task chỉ là nhãn tiện gọi.
Bảy loại gặp nhiều nhất
| Loại task | Hợp đồng | Bằng chứng | Cổng người | Bỏ qua |
|---|---|---|---|---|
| Tính năng mới | research, spec, plan, tasks | flow đỏ thành xanh, report | duyệt spec, duyệt plan, nghiệm thu | không bỏ gì |
| Fix bug | 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 |
| Tối ưu UI/UX | ảnh trước, mô tả cảm nhận muốn đạt, danh sách không được phá | ảnh sau, visual diff, flow hồi quy | phán xét bằng mắt sau mỗi vòng | spec chữ, tasks |
| Refactor | cam kết hành vi không đổi, phạm vi file | hồi quy xanh, diff không có thay đổi hành vi | chốt phạm vi trước, review diff sau | spec, flow mới |
| Hiệu năng | số đo baseline và mục tiêu | benchmark trước sau cùng điều kiện | duyệt mục tiêu, duyệt kết quả đo | spec chữ |
| Nâng cấp dependency | changelog breaking, danh sách điểm chạm | build xanh, hồi quy xanh | duyệt danh sách breaking | plan dài |
| Nghiên cứu, spike | câu hỏi cần trả lời, thời gian giới hạn | research.md có đề xuất | đọc và quyết | code merge |
- UI/UX là loại duy nhất mà hợp đồng chữ không đủ. Tiêu chí kiểm thử được gần như không viết nổi cho “nhìn thoáng hơn”. Vòng lặp phải ngắn: agent sửa, chụp ảnh, người nhìn, nói một câu, lặp. Thứ cần chặt là danh sách không được phá và flow hồi quy giữ chức năng nguyên vẹn.
- Fix bug cấm bắt đầu khi chưa có repro đỏ. Điểm ép tương đương “không có goal thì không code” của tính năng. Agent rất hay sửa triệu chứng nếu không bị buộc tái hiện trước.
- Refactor và hiệu năng chung một nguyên tắc: hành vi không đổi, bằng chứng là bộ hồi quy hiện có. Hồi quy chưa đủ phủ thì việc đầu tiên là bổ sung flow, chưa được chạm code.
- 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 hồ sơ tính năng hoặc spike. Cần quy ước cho agent nói rõ “việc này vượt hồ sơ” thay vì cố làm tiếp.
Sự cố và vận hành
| Loại task | Hợp đồng | Bằng chứng | Cổng người | Lưu ý |
|---|---|---|---|---|
| Hotfix production | mô tả tác động, phạm vi tối thiểu, kế hoạch rollback | smoke xanh trên staging, log sau deploy | duyệt phạm vi, duyệt deploy | bỏ plan dài, nhưng bắt buộc tạo task nợ để làm fix tử tế sau |
| Xử lý flaky test | log 10 lần chạy, giả thuyết nguyên nhân | chạy lặp 20 lần xanh liên tiếp | duyệt giả thuyết trước khi sửa | cấm sửa bằng sleep hoặc retry mù |
| Thêm log, monitoring | câu hỏi vận hành cần trả lời, sự kiện cần thấy | dashboard hoặc log mẫu có dữ liệu thật | duyệt danh sách sự kiện | không đổi hành vi nghiệp vụ |
| Đổi cấu hình, feature flag | giá trị trước sau, môi trường áp dụng | doctor xanh, smoke xanh | duyệt giá trị trên production | mơ hồ thấp nhưng phạm vi có thể rất rộng |
| CI/CD, pipeline | bước nào thêm bớt, thời gian chạy mục tiêu | pipeline xanh trên nhánh thử | duyệt thay đổi liên quan secret | thử trên nhánh riêng trước |
Dữ liệu và hợp đồng giao tiếp
| Loại task | Hợp đồng | Bằng chứng | Cổng người | Lưu ý |
|---|---|---|---|---|
| Migration schema, dữ liệu | script lên và xuống, số bản ghi ảnh hưởng | chạy trên bản sao dữ liệu thật, đếm trước sau khớp | duyệt script, duyệt chạy thật | người giữ cổng dữ liệu thật, agent không chạm |
| Đổi API, contract | diff OpenAPI hoặc schema, danh sách client bị ảnh hưởng | contract test xanh ở cả hai phía | duyệt breaking change | non-breaking thì theo hồ sơ tính năng |
| Tích hợp bên thứ ba | tài liệu API, tài khoản sandbox, trường hợp lỗi cần xử lý | flow chạy với sandbox, mock cho hồi quy | cấp tài khoản, duyệt xử lý lỗi | tách lớp adapter để mock được |
Chất lượng và dọn dẹp
| Loại task | Hợp đồng | Bằng chứng | Cổng người | Lưu ý |
|---|---|---|---|---|
| Bổ sung test cho code cũ | danh sách hành vi cần phủ, thứ tự ưu tiên | coverage tăng, test đỏ khi cố tình phá | duyệt danh sách hành vi | agent dễ viết test khớp code sai, cần mutation check |
| Xoá tính năng, code chết | danh sách điểm xoá, ai còn dùng | build xanh, hồi quy xanh, grep không còn tham chiếu | xác nhận không ai dùng | làm theo đợt, commit riêng từng khối |
| Bảo mật, vá lỗ hổng | mô tả lỗ hổng, cách khai thác, phạm vi | test chứng minh không khai thác được nữa | duyệt cách vá, xoay secret nếu cần | không ghi chi tiết khai thác vào repo công khai |
| Review PR | tiêu chí review, mức rủi ro | danh sách phát hiện có dòng và cách tái hiện | người quyết merge | agent review tách khỏi agent viết code |
Sản phẩm và nội dung
| Loại task | Hợp đồng | Bằng chứng | Cổng người | Lưu ý |
|---|---|---|---|---|
| Prototype, mock cho khách | phạm vi màn hình, dữ liệu giả, thời gian giới hạn | ảnh hoặc bản chạy được | khách và chủ dự án xem | ghi rõ là nháp, không được khoá thành kiến trúc (pha 1 mục 9) |
| Nội dung, i18n, copy text | bảng chuỗi cần đổi, ngôn ngữ, giọng văn | ảnh màn hình từng ngôn ngữ, không còn khoá thiếu | duyệt câu chữ | không đụng logic |
| Tài liệu, hướng dẫn | đối tượng đọc, câu hỏi tài liệu phải trả lời | người mới làm theo được không cần hỏi | đọc thử | agent viết từ code, người kiểm đúng ý |
Nền và meta
| Loại task | Hợp đồng | Bằng chứng | Cổng người | Lưu ý |
|---|---|---|---|---|
| Khởi tạo dự án, module mới | kit, quy ước, cấu trúc thư mục, pipeline report | doctor xanh, flow mẫu chạy được | duyệt cấu trúc | tương ứng pha 0 mục 9 |
| Sửa kit, tool cho agent | gap đã ghi, lệnh nào đổi, schema đổi gì | test của chính tool xanh, eval agent chạy thử | duyệt thay đổi kit | gom theo đợt, đúng tinh thần mục 6 |
| Tiếp nhận codebase lạ | câu hỏi cần hiểu, module ưu tiên | research.md có sơ đồ luồng và điểm rủi ro | đọc và bổ sung | không sửa code trong lúc này |
| Nâng cấp framework lớn | danh sách breaking, thứ tự chuyển đổi theo module | build xanh từng module, hồi quy xanh | duyệt thứ tự, duyệt từng mốc | chia thành nhiều task nhỏ, mỗi task một hồ sơ |
Đừng làm 25 file rules. Hầu hết các dòng trên quy về sáu hồ sơ gốc: tính năng, sửa lỗi, không đổi hành vi, chỉnh bằng mắt, nghiên cứu, vận hành có rollback. Các loại còn lại là biến thể thêm một hai điểm ép: migration là “không đổi hành vi” cộng cổng dữ liệu thật, hotfix là “sửa lỗi” cộng rollback và task nợ.
Ba loại sát MiniGate nhất là sửa kit, flaky test và prototype cho khách, vì cả ba đang là vấn đề mở. Viết hồ sơ cho ba loại này trước, chạy vài tuần rồi mới mở rộng.
Triển khai: mỗi hồ sơ là một file ngắn trong thư mục rules (rules/bugfix.md, rules/ui-tweak.md…). Agent đọc đúng file theo nhãn task. CLAUDE.md giữ gọn, chỉnh từng hồ sơ độc lập khi đúc rút thêm.
14Chia người theo cổng, không theo chức danh hay loại task
Câu hỏi: nên chia người theo vai cũ (PM, dev, QA…), theo ai thực hiện loại task nào, hay cách khác? Chia theo cổng mà họ chịu trách nhiệm.
- Chia theo vai cũ là chia theo năng lực sản xuất. Khi agent làm phần lớn việc sản xuất, cái khan hiếm là người hiểu đúng là gì, người phán xét bằng chứng, người chịu trách nhiệm khi sai. Giữ vai cũ thì dev thành người ngồi nhìn agent, QA thành người chạy lại thứ agent đã chạy.
- Chia theo loại task còn tệ hơn, vì loại task là thuộc tính của việc, không phải của người. Người “chuyên fix bug” không có context module nào, trong khi context module mới quyết định chất lượng khi điều khiển agent.
Cách hợp lý hơn là hai trục: trục ngang là cổng, trục dọc là module.
Trục cổng: năm vai
| Vai | Giữ cổng nào | Thay cho vai cũ | 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, một phần designer | 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, tester | thiết kế bằng chứng thay vì chạy test |
| Chủ kit | quy ước, schema, rules, tool cho agent, kiến trúc | tech lead, một phần dev | 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, SRE | nói không đúng lúc |
| Người lái agent | chạy phiên hằng ngày, viết request, giám sát loop, đọc bằng chứng hôm qua | dev | hiểu sâu module mình lái |
Bốn vai đầu là vai giữ cổng, số người ít, không phụ thuộc loại task. Vai thứ năm là vai sản xuất mới, đông nhất, phân theo trục dọc.
Trục module
Mỗi người lái agent sở hữu một hoặc vài module và làm đủ mọi loại task trên module đó. Loại task chỉ quyết định hồ sơ nào bật, tức phải ghé cổng nào. Fix bug ở module thanh toán thì người lái thanh toán làm, qua cổng chủ bằng chứng. Tính năng mới cùng module vẫn người đó, qua thêm cổng chủ ý định, và cổng chủ kit nếu động vào schema.
Kết quả là một bảng phân công gọn: hàng là loại task, cột là cổng, ô là ai phải ký. Người lái nhìn hồ sơ là biết gõ cửa ai, không cần họp.
| Loại task | Chủ ý định | Chủ bằng chứng | Chủ kit | Chủ vận hành |
|---|---|---|---|---|
| Tính năng mới | spec, nghiệm thu | flow nghiệm thu | nếu chạm schema | khi release |
| Fix bug | — | repro đỏ, hồi quy | — | — |
| Tối ưu UI/UX | phán xét bằng mắt | flow hồi quy | — | — |
| Refactor | — | hồi quy đủ phủ | phạm vi, review diff | — |
| Migration dữ liệu | — | đếm trước sau | schema | script, chạy thật |
| Hotfix | tác động | smoke | — | deploy, rollback |
| Sửa kit | — | eval | duyệt đợt | — |
- Đội nhỏ thì một người đội nhiều mũ, nhưng phải nói rõ đang đội mũ nào khi đứng ở cổng. Hiện chủ dự án là chủ ý định kiêm chủ kit kiêm chủ vận hành. Ghi ra để khi đội lớn lên tách mũ mà không phải vẽ lại quy trình. Đây là câu trả lời cho câu hỏi mở số 5 ở mục 11.
- 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. Người viết spec rất dễ nhìn thấy cái mình muốn thấy.
- QA không biến mất mà đổi chất. Chủ bằng chứng là vai tăng giá trị nhất, vì toàn bộ niềm tin vào agent đứng trên chất lượng của flow và report. Tham gia từ lúc viết spec để tiêu chí nghiệm thu kiểm thử được.
- Agent cũng có vai, nhưng theo context chứ không theo chức danh. Agent nghiên cứu, agent thực thi, agent review là ba phiên tách biệt để agent review không thiên kiến bởi code nó viết. Không cần mô phỏng cả đội agile kiểu BMAD, vì phần phán xét vẫn là người.
- Chuyển người từ vai cũ theo thế mạnh sẵn có. Dev giỏi hệ thống sang chủ kit. Dev giỏi nghiệp vụ lái module lớn. QA giỏi thiết kế case sang chủ bằng chứng. Người thích vận hành giữ cổng vận hành.
15Phòng ban theo vai hay theo dự án
Theo dự án cho phần giao hàng, theo vai chỉ cho những thứ phải sống lâu hơn dự án. Mô hình lai, nhưng ranh giới đặt theo câu hỏi “thứ này có cần tồn tại sau khi dự án kết thúc không”, không theo chức danh.
Thời agent làm lệch cán cân so với trước ở ba chỗ:
- Chi phí bàn giao giữa người thành chi phí lớn nhất. Agent viết code trong vài phút thì một ngày chờ phòng QA hay phòng design xếp lịch là vô lý. Phòng ban theo vai sinh hàng đợi, hàng đợi giết tốc độ của agent. Chủ ý định, chủ bằng chứng, người lái phải ngồi trong dự án.
- Đòn bẩy lớn nhất nằm ở kit và quy ước. Một cải tiến tool cho agent, schema flow hay rules có lợi cho mọi dự án cùng lúc. Để kit trong từng dự án thì bị chép tay giữa repo, đúng tình trạng ở mục 1. Cần một chủ sở hữu sống lâu hơn bất kỳ dự án nào.
- Dữ liệu thật và secret cần ít tay chạm. Mỗi dự án tự giữ secret là mỗi dự án một lỗ hổng.
| Thứ gì | Đặt ở đâu | Vì sao |
|---|---|---|
| Chủ ý định, chủ bằng chứng, người lái agent | trong dự án | cần context dự án hằng ngày, quyết trong giờ chứ không trong ngày |
| Chủ kit, rules, schema, tool cho agent, eval | đơn vị nền tảng dùng chung | tài sản tái dùng, cần version và kỷ luật thay đổi theo đợt |
| Chủ vận hành, secret, deploy, bảo mật | đơn vị dùng chung | giảm số người chạm production, chuẩn hoá rollback |
| Cộng đồng theo vai (nhóm chủ bằng chứng các dự án…) | không phải phòng ban, chỉ lịch gặp định kỳ | chia sẻ mẫu flow, chuẩn report; không có quyền điều phối người |
Gần với kiểu squad cộng chapter, nhưng đơn vị nền tảng ở đây có sản phẩm thật là kit, khách hàng thật là các dự án, thước đo thật là số gap đóng được mỗi đợt.
Đơn vị kit rất dễ thành tháp ngà. Chống bằng ba quy ước: kit có version để dự án pin; dự án đề xuất thay đổi qua gap; chủ kit dành một phần thời gian ngồi trong dự án tự lái agent. Người không lái agent thì không được quyết tool cho agent.
Chưa đủ hai dự án dùng chung thì chưa lập đơn vị kit. Kit nằm trong dự án đầu tiên nhưng ở repo riêng (mục 5). Lập đơn vị khi dự án thứ hai bắt đầu kéo kit về, không sớm hơn.
Dự án kết thúc thì người đi đâu. Hồ sơ năng lực mỗi người ghi theo vai cổng và module đã lái, sang dự án mới nhận vai tương đương ngay. Cộng đồng theo vai giúp việc này vì người ta đã quen nhau trước khi chuyển.
Dự án nhỏ gộp vai, nhưng không gộp cổng kit và cổng vận hành vào dự án. Được gộp chủ ý định với chủ bằng chứng, hoặc người lái kiêm chủ ý định. Vẫn lấy kit từ đơn vị chung và deploy qua cổng vận hành chung.
Tỷ lệ nhân sự tham khảo: một dự án vừa cần khoảng một chủ ý định, một chủ bằng chứng, hai đến năm người lái. Đơn vị kit một đến ba người phục vụ nhiều dự án, vì việc của họ là sửa tool theo đợt, không trả lời yêu cầu hằng ngày.
16Sơ đồ tổ chức và luồng gap
Hai đơn vị dùng chung ở trên, các dự án ở dưới. Kit đi xuống theo version, gap đi lên theo đợt, report đi sang cổng vận hành để deploy. Đường đứt nét ngang là cộng đồng theo vai, không có quyền điều phối.
Đọc sơ đồ theo một vòng: dự án lấy kit theo version → người lái làm task theo hồ sơ → bằng chứng sinh ra → chủ bằng chứng và chủ ý định phán xét → report xanh đi sang cổng vận hành để deploy → chỗ nào kit cản thì ghi gap → đơn vị kit gom gap theo đợt, ra version mới → dự án pin version mới khi sẵn sàng.