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ên hivedashboard và 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:

  1. Một hàm default_model() đọc HIVE_DEFAULT_MODEL, rồi đến danh sách pool. Nó thay mọi fallback gpt-5.5 hardcode trong flows.py, rooms.py, evals.py và routes.py. Nhiều hơn tôi muốn thừa nhận.
  2. Sắp lại pool, grok-4.6 lê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.
  3. 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.5 và cdx-gpt-5.5 qua 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.

Xuất nội dung

Bình luận