10 — Agent autonomous loop (Cursor)
Mục tiêu: Coding AI làm liên tục theo hàng đợi STUB→IMP: xong 1 WP → tự chuyển WP kế → đến khi queue rỗng hoặc chạm stop-gate. So khớp màn hình / JPG đã cung cấp; sai thì tự sửa; chạy & test local trước khi đánh dấu Done. Không deploy production trong loop này.
Kích hoạt (user nói một trong các câu):
chạy autonomous·làm đến hết queue·auto loop·làm liên tục đến khi xong- hoặc gắn prompt §8 bên dưới vào Agent / Cloud Agent
Tắt / dừng:
- User:
dừng·stop·pause loop - Agent tự dừng khi gặp stop-gate (§5)
0. Nguồn sự thật (đọc mỗi vòng)
| Thứ tự | File | Dùng để |
|---|---|---|
| 0 | agent-owner-gate.json |
OWNER paused / approvedWp — không có duyệt thì dừng |
| 0b | agent-wp-catalog.json |
Catalog chip Dashboard → Agent (AI) → Lưu duyệt |
| 1 | 09-AGENT-AUDIT-QUEUE.md | WP ưu tiên + AC + design JPG |
| 2 | docs/references/agent-work-queue.json |
nextRecommended máy (BE STUB — empty) |
| 2b | docs/references/figma-fe-work-queue.json |
P9 FE · null = DONE_QUEUE → OWNER |
| 3 | design-index.md | Map JPG → domain |
| 4 | LOCAL-TEST.md | Smoke + gate local |
| 5 | 07-ENVIRONMENT.md | Ports · Docker · health |
| 6 | 01-MATRIX-TRACEABILITY.md | Cập nhật khi Done |
| 7 | Skill image-to-ui |
UI từ ảnh |
npm run infra:up
npm run audit:refresh # audit + gen queue
1. Vòng lặp chính (bắt buộc)
flowchart TD
S[Start / resume loop] --> Q[Đọc agent-work-queue.json]
Q --> E{nextRecommended còn?}
E -->|Không| Z[STOP: queue rỗng · báo cáo tổng]
E -->|Có| W[Chọn đúng 1 WP / cặp BE+FE cùng domain]
W --> D[Read design JPG nếu UI]
D --> I[Implement theo clone hotels/rentals]
I --> V[Verify local §3]
V --> C{Pass?}
C -->|Không| F[Tự sửa · tối đa 3 vòng fix]
F --> V
C -->|Có| U[Cập nhật MATRIX + BACKLOG + audit:refresh]
U --> R[Báo cáo footer WP vừa xong]
R --> Q
F -->|Hết 3 lần fail| X[STOP-GATE: báo lỗi · chờ user]
Một vòng = một Domain. Không gộp pharmacy + medical trong cùng turn implement.
2. Checklist trong một WP
2.1 Trước khi code
- Nêu footer dự kiến:
Domain·WP·Surfaces·Status: STUB→IMP - Clone path từ queue (
clone: hotels / rentals / …) - Nếu có design: Read từng JPG (tool Read) — liệt kê section / CTA / copy VI
- Infra sống:
GET /api/v1/health+health/depsOK
2.2 Khi code
- BE: bỏ
stub()trên tag đang làm · Prisma + seed idempotent ·@ApiTags - Geo mới → cập nhật
nearby-postgis.tsALLOWED - FE:
mobile/src/features/<domain>/· tokens ·services/api.ts· Home navigate - UI: so lại ảnh (hierarchy, spacing, màu gần tokens, tiếng Việt)
- Không commit
.env/ secret · khôngpush --force
2.3 Khi lệch design (tự sửa)
| Sai thường gặp | Hành động |
|---|---|
| Thiếu section / CTA trên mockup | Thêm đúng hierarchy; không invent feature ngoài ảnh |
| Sai màu / font “AI generic” | Chỉ dùng mobile/src/theme/tokens.ts |
| Copy Anh / placeholder | Đổi đúng chữ Việt trên JPG |
| List không có empty/loading | Thêm state tối thiểu như hotels/rentals |
| Nav Home không vào màn | Wire route + icon domain trên Home |
Lặp Read ảnh → diff UI → sửa đến khi khớp đủ AC design (không yêu cầu pixel-perfect 100%, nhưng không thiếu block chính).
3. Verify local (bắt buộc trước Done)
Không đánh IMP nếu chưa chạy được trên máy local.
3.1 Infra + API
npm run infra:up
npm run env:check
# terminal riêng
npm run api:dev
curl -s http://localhost:3000/api/v1/health
curl -s http://localhost:3000/api/v1/health/deps
3.2 Module vừa làm
cd api
npx prisma db push
npx prisma db seed
npm run build
# nếu có test domain: npm test -- <pattern>
Smoke tối thiểu (thay path theo WP):
# ví dụ pharmacy sau IMP
curl -s "http://localhost:3000/api/v1/pharmacy/stores/nearby?lat=10.7769&lng=106.7009"
# Swagger: http://localhost:3000/docs — tag không còn stub description
3.3 FE (khi có WP-FE-*)
npm run mobile:start
# Kiểm tra: mở màn từ Home → list → detail → action chính không crash
3.4 Audit
npm run audit:refresh
# Tag vừa làm: stub ops = 0 (hoặc PARTIAL có ghi rõ trong MATRIX)
Chi tiết smoke toàn hệ: LOCAL-TEST.md.
4. Định nghĩa Done → chuyển task
Chỉ khi tất cả đúng:
- AC trong
09§3 (hoặc backlog) đã tick - Local verify §3 PASS
01-MATRIX+05-PHASE-BACKLOGcập nhật StatusIMPnpm run audit:refresh·nextRecommendedtrỏ WP khác (hoặc rỗng)- Footer báo cáo:
Domain: D-…
WP: WP-… (+ WP-FE-… nếu có)
Surfaces: CON|PAR|…
Status: IMP
Local: PASS (health + smoke + audit)
Next: <nextRecommended hoặc DONE_QUEUE>
Ngay sau đó (nếu user đã bật autonomous): đọc lại queue → bắt đầu WP kế không hỏi lại, trừ khi stop-gate.
5. Stop-gate (bắt buộc dừng, báo user)
| Điều kiện | Hành động |
|---|---|
| User nói dừng / stop / pause | Dừng ngay; giữ WIP; báo WP đang dở |
| Cùng 1 WP fail verify 3 lần liên tiếp | Dừng; log lỗi; không nhảy WP khác che giấu bug |
| Cần secret / key / tài khoản ngoài (SMS prod, payment live) | Dừng; dùng MOCK / .env.example |
| Xung đột git lớn / mất data | Dừng; không reset --hard / force push |
| Task ngoài queue (refactor toàn repo) | Từ chối; chỉ làm theo 09 |
| Dashboard / infra cloud chưa được user bật trong session | Skip WP đó, ghi SKIPPED, lấy WP kế chỉ nếu user đã cho phép skip; mặc định dừng hỏi |
6. Giới hạn an toàn session
| Limit | Mặc định | Ghi chú |
|---|---|---|
| Max WP / session autonomous | 3 | Sau 3 WP Done → tóm tắt + hỏi user tiếp tục |
| Max fix vòng / WP | 3 | Sau đó stop-gate |
| Scope file | Trong path queue be/fe + docs MATRIX/BACKLOG |
Không refactor xuyên domain |
| Commit / PR | Chỉ khi user yêu cầu | Loop không tự commit |
| Push remote | Không bao giờ trong loop |
User có thể nói unlimited loop để bỏ cap 3 WP/session (vẫn giữ stop-gate §5).
7. Báo cáo giữa các WP (ngắn)
Sau mỗi WP Done, trước khi sang WP kế, ghi ≤10 dòng:
- WP vừa xong + Status IMP
- File chính đụng (3–8 path)
- Lệnh local đã PASS
- Lệch design đã sửa (nếu có)
Next: WP-…
Không viết essay; không nhắc lại toàn bộ kế hoạch.
8. Prompt kích hoạt (copy vào Cursor Agent)
Chế độ: AUTONOMOUS LOOP theo docs/10-AGENT-AUTONOMOUS-LOOP.md
1. Đọc docs/09-AGENT-AUDIT-QUEUE.md + docs/references/agent-work-queue.json
2. Làm nextRecommended (một Domain/WP mỗi vòng)
3. UI: Read JPG trong design-index / queue; skill image-to-ui; sai thì tự sửa
4. Clone hotels/rentals; bỏ stub(); seed; nearbyPostgis nếu cần
5. Verify local: infra + health + prisma + build + smoke endpoint + audit:refresh
6. Cập nhật 01-MATRIX + 05-PHASE-BACKLOG khi IMP
7. Báo cáo footer → tự chuyển WP kế (tối đa 3 WP/session trừ khi tôi nói unlimited loop)
8. Gặp stop-gate §5 thì dừng và báo rõ
Bắt đầu ngay từ nextRecommended. Không hỏi lại trừ stop-gate.
Biến thể một WP rồi dừng: thêm dòng Chỉ làm 1 WP rồi pause.
Biến thể chỉ FE polish theo ảnh: Chỉ WP-FE-* · so ảnh · không đổi contract BE trừ bug block.
9. Mapping lệnh user → hành vi agent
| User nói | Agent làm |
|---|---|
tiếp |
1 WP từ queue (đã có rule agent-queue) |
chạy autonomous / làm đến hết |
Loop §1 · cap 3 WP |
unlimited loop |
Loop không cap 3 (vẫn stop-gate) |
dừng |
Pause; không bắt WP mới |
sửa theo ảnh … |
image-to-ui + self-fix; không nhảy vertical khác |
test local |
Chỉ §3 + LOCAL-TEST; không code feature mới |
10. Liên kết
| File | Vai trò |
|---|---|
| 09-AGENT-AUDIT-QUEUE | Queue + AC + prompt từng WP |
| 03-AI-WORKFLOW | Luồng WP đơn |
| LOCAL-TEST | Smoke đầy đủ |
| AGENTS.md | Entry agent |
.cursor/rules/agent-queue.mdc |
Gate «tiếp» |
.cursor/rules/agent-autonomous-loop.mdc |
Gate autonomous |
npm run audit:refresh |
Cập nhật queue máy |