Ngày 18/09 tôi đọc ba mươi đối thủ và quyết định thứ duy nhất đáng xây trong Hive là Routine: một việc lặp lại, producer chạy model rẻ, checker chạy model mạnh, chỉ phân xử khi hai bên bất đồng, ngân sách tự dừng. Viết ra thì dễ. Bài kiểm tra thật là tôi có dám cho buổi sáng của chính mình chạy qua nó không.
Ngày 20 tôi làm thật. Không phải tài khoản demo. AWS thật, PR GitHub thật, trên đúng một container LXC (CT137) đang chạy Hive: Python thuần thư viện chuẩn, SQLite, frontend Preact không cần build. Đây là nhật ký buổi sáng đó — bốn việc đã chạy, một thứ hỏng, và cách sửa.
08:30 — bản tin ops
Routine đầu tiên là phòng tôi đặt tên “Reveal · Ops sáng” — Reveal là sản phẩm tôi đang ship. Chạy lúc 08:30, ba ghế.
Producer chạy grok-4.6, rẻ và nhanh, đúng hai tool: aws_status và daily_brief. Nó viết
một file, outputs/OPS.md. Checker không đọc file đó rồi gật đầu. Nó tự gọi lại hai tool
ấy và đối chiếu từng con số với kết quả tool trả về. Lead chỉ lên tiếng khi producer và
checker bất đồng. Đó chính là hình dạng “phân xử có điều kiện” mà các bài nghiên cứu về debate
khuyên: không tranh luận nếu không có tranh chấp.
aws_status chỉ đọc: alarm CloudWatch, danh sách RDS và EC2, chi phí từ đầu tháng theo dịch vụ
— gồm cả các dòng Amazon Bedrock, vì đó là chỗ chi phí AI ẩn trong hoá đơn AWS — và Budgets
API. daily_brief lo phần GitHub trên hai tài khoản của tôi: PR đang chờ tôi review, yêu cầu
review của team, PR tôi đang mở, issue được giao.
Sáng nay bản tin nói gì, và checker xác nhận gì:
- AWS từ đầu tháng: $1,521. RDS $804, EC2 $567, EC2-Other $119. Các dòng Bedrock cộng lại khoảng $0.15. Phán quyết của checker cho cả file là một dòng: “mọi con số và cảnh báo khớp đúng aws_status + daily_brief; file đã kiểm.” Cả run tốn $0.13.
- 8 instance EC2, 1 instance Aurora PostgreSQL.
- 4 cảnh báo CloudWatch. Hai cái là alarm RDS kẹt ở
INSUFFICIENT_DATA, trỏ vào một DB identifier không còn tồn tại. Tôi đã lướt qua chúng trên console nhiều tuần. Snapshot gắn cờrds_target_missing; producer liệt kê, checker xác nhận danh sách cảnh báo khớp. Riêng dòng này đã đủ trả tiền cho ghế checker. - GitHub: 1 PR chờ tôi review (Dependabot nâng
flask). 12 PR tôi đang mở rải trênhivedashboardvàampd-reveal. Mười hai là quá nhiều. Bản tin sẽ nhắc mỗi sáng cho đến khi hết nhiều.
Bản tin cũng báo về chính Hive. Chi AI tháng này khoảng $134 — nhưng $125 trong đó là ước tính xấu nhất cho 25 run cũ chưa có giá theo run. Tôi định giá run chưa có giá ở mức trần chứ không phải bằng không, nên con số cố ý lệch cao. Trần không đổi: $20 mỗi ngày cho workspace, $5 mỗi run.
Phòng kế hoạch
Việc thứ hai không có lịch. “Reveal · Kế hoạch tính năng” là phòng thường trực bốn ghế: Product Lead dẫn, Tech Lead và Cursor Engineer là worker, Claude Opus qua Brain làm checker.
Tôi gõ /plan. Lead lập kế hoạch, worker chạy song song theo từng đợt, checker review, phòng
viết outputs/REPORT.md: mỗi tính năng một dòng, tính năng · giá trị · công · rủi ro · người
phụ trách · tuần. Một bảng, không phải bài luận. Cái được là tôi đọc một bảng lúc uống cà phê
thay vì chạy ba phiên chat rồi tự gộp trong đầu.
Lần chạy sáng nay: Tech Lead đánh giá 8 tính năng (12–18 người-ngày), Cursor Engineer đánh dấu 6/8 việc giao được cho Cursor Cloud agent, Claude phản biện cắt còn 5 tính năng (khoảng 13 người-ngày gồm review), hoãn phần Lambda và multi-model. Cả phòng tốn $0.59.
Cái PR đứng chờ tôi
Việc thứ ba mới có hôm nay: một Automation loại “Origin task” chạy theo lịch. Origin là agent lập trình tự chủ của Hive — clone, sửa, chạy test, mở PR. Đến sáng nay tôi vẫn khởi động nó bằng tay. Giờ nó chạy theo lịch.
Hằng tuần, trên ampd-reveal: kiểm xem pipecat-ai và google-genai có bản mới không, có thì
nâng, chạy test, mở PR. Cấu hình là ba dòng header ở đầu prompt:
repo: https://github.com/luonghongthuan/ampd-reveal
base: main
approval: push
approval: push là toàn bộ ý tưởng. Run làm hết mọi việc đến trước lúc push rồi dừng. Không gì
được đưa lên nếu tôi không bấm. Tôi không xây cổng mới; Origin đã có sẵn duyệt kế hoạch và duyệt
push. Task theo lịch chỉ lấy cổng push làm mặc định. Một PR dependency
mở vào Chủ nhật, đợi cú bấm sáng Thứ hai, đúng là lượng tự chủ tôi thấy thoải mái.
Ngân sách ở bốn tầng
Mảnh ít thấy nhất, và là mảnh tôi sẽ bán trước. Mỗi tầng của buổi sáng đều có trần: Routine có ngân sách tháng, phòng có ngân sách, mỗi agent trần $5, workspace trần $20 một ngày. Chạm trần nào thì thứ đó dừng và không gọi model nữa. Sổ cái giữ chỗ trước khi gọi và tất toán sau, nên lệnh dừng xảy ra trước khi tiêu, không phải sau hoá đơn. Bài học dừng ở 100 % của Paperclip, đặt ở bốn tầng thay vì một.
Cái gì hỏng
Giờ đến phần thật lòng.
Hôm qua các phòng chief-of-staff của tôi bắt đầu lỗi “Model error 502.” Không gì trỏ vào
phòng; phòng trông vẫn ổn. Nguyên nhân gốc là một fallback. Khi một ghế không đặt model, mã lấy
model đầu tiên trong danh sách pool. Nó tình cờ là xp-claude-opus-5, một alias trên
gateway trả trước mà upstream giờ trả về upstream_unsupported. Mọi phòng dựa vào mặc định đều
lặng lẽ đi vào một model không còn tồn tại; 502 là cách gateway nói điều đó.
Ba bước sửa:
- Một hàm
default_model()đọcHIVE_DEFAULT_MODEL, rồi đến danh sách pool. Nó thay mọi fallbackgpt-5.5hardcode trongflows.py,rooms.py,evals.pyvàroutes.py. Nhiều hơn tôi muốn thừa nhận. - Sắp lại pool,
grok-4.6lên đầu. Mặc định phải là model rẻ mà chạy được, không phải model đắt mà có thể chạy. - Xoá alias chết: cả họ
xp-*,gpt-5.5,gemini-2.5-pro(upstream đã bỏ),grok-3-mini-fast(hết credit).
Cuộc rà soát lộ ra nhiều hơn cái 502:
gpt-5.5vàcdx-gpt-5.5qua gateway trả về trang HTML đăng nhập thay vì JSON — route codex cần đăng nhập lại. Hive giờ đi vòng qua thay vì đọc một form đăng nhập như một completion.deepseek-chat: 402, hết tiền.- Token Linear MCP hết hạn; cần kết nối lại trong Apps.
- Google Calendar chưa kết nối. Một cú bấm OAuth. Chưa bấm.
- Gửi bản tin qua Telegram cần chat id của tôi trên profile. Trước đó bản tin chỉ là một file trong phòng — ổn, nhưng không phải thông báo.
Không cái nào là lỗi của agent. Đó là những kiểu hỏng rất chán của tích hợp thật trên tài khoản thật: token hết hạn, số dư hết, nhà cung cấp bỏ model, route cần đăng nhập. Điều làm tôi khó chịu là agent không kêu to ở bất kỳ chỗ nào.
Bài học
Agent chết lặng lẽ khi alias model chết. Phòng không crash. Nó trả 502 rồi đi tiếp, và nếu tôi không đọc phòng thì trông như chẳng có gì xảy ra. Cách sửa không phải thông báo lỗi đẹp hơn. Nó mang tính cấu trúc: danh sách pool là nguồn sự thật duy nhất về model nào tồn tại, và mọi fallback đọc từ đó. Một tên model hardcode ở bất kỳ đâu trong mã là một sự cố tương lai chưa biết ngày.
Đó cũng là lý do checker xứng đáng có ghế. Producer của bản tin ops cũng có thể bị đưa vào một
alias chết. Nếu vậy, checker — trên model khác, tự gọi lại tool — sẽ từ chối ký một OPS.md
trống, và lead sẽ bị gọi dậy. Hai model trên hai đường là bảo hiểm rẻ cho việc một đường tắt
điện.
Tôi đứng ở đâu sau hôm nay
Ngày 18 tôi nói sẽ không xây canvas hay orchestrator thứ tư, và thứ để bán là một việc lặp lại có kiểm duyệt: producer rẻ, checker mạnh, chỉ phân xử khi bất đồng, ngân sách tự dừng. Hai ngày cho buổi sáng của chính mình chạy qua nó không làm tôi đổi ý. Nó làm lời chào hàng đủ cụ thể để nói trong một hơi:
Mỗi sáng 08:30 nó đọc AWS và GitHub của tôi, viết một trang bản tin, để một model thứ hai kiểm từng con số, và báo tôi về hai alarm trỏ vào một database không tồn tại. Mỗi tuần nó nâng dependency và mở một PR đứng chờ tôi bấm. Nó không thể tiêu nhiều hơn mức tôi cho phép.
Đó là công việc. Mọi thứ tôi sửa hôm nay là để mai nó chạy khi tôi không nhìn.