Một người 20 tuổi với 45 ứng dụng, một cái kiếm 30.000 đô/tháng. Một sinh viên đại học kiếm sáu con số trong 70 ngày. Feed của bạn đầy những câu chuyện này — feed của tôi cũng vậy.
Đây là thứ không bài đăng nào trong số đó đưa cho bạn: cái hệ thống nhàm chán đưa ứng dụng từ "ý tưởng" đến "có mặt trên App Store", lặp đi lặp lại, mà không cần bạn kè kè từng bước.
Tôi đã xây dựng hệ thống đó trong năm nay. Các AI agent vận hành nó — Claude Code và Codex, làm việc theo ca. 10 ứng dụng iOS và hàng tá công cụ mã nguồn mở đã đi qua nó: gửi bài, bị từ chối, gửi lại, triển khai ra production, chạy quảng cáo, và đám tang của những đứa không xứng đáng tồn tại.
Hôm nay nó trở thành mã nguồn mở. Miễn phí, giấy phép MIT, không khóa học, không bản tin, không "nhắn tin riêng cho tôi để lấy bí kíp":
→ github.com/davidmosiah/agents-that-ship
Phần code chưa bao giờ là khó
AI đã viết code rồi. Phần đó đã được giải quyết. Thứ vẫn giết chết ứng dụng vào năm 2026:
- bắt đầu năm thứ và chẳng hoàn thành cái nào
- một agent mò mẫm cùng một bản sửa lỗi chết tiệt mười hai lần lúc 2 giờ sáng
- "xong!" trên một UI chưa ai từng mở chế độ tối trên iPad
- một tuần làm việc nằm đó chưa được đẩy lên laptop
- "đã ship!" trong khi sự thật là "đang nằm trong một nhánh local"
- công việc định kỳ (cron job) của một dự án chết vẫn đang đăng bài (và tiêu tiền) nhiều ngày sau đám tang
- không cái nào trong số đó là vấn đề code. Đó là vấn đề vận hành. Và chưa có file CLAUDE.md hay AGENTS.md nào tôi từng thấy giải quyết được nó — tất cả đều mô tả codebase và dừng lại đúng lúc công việc kiếm tiền bắt đầu.
Vậy nên tôi đã viết nửa còn lại.
Tôi đã kiểm toán 7.500 prompt của chính mình để xây dựng thứ này
Đến một lúc nào đó, tôi xem lại mọi prompt tôi từng gửi cho hai agent của mình. Khoảng 7.500 cái. Phát hiện khó chịu: hầu hết là tôi đang dạy lại cùng năm bài học. Đẩy tác phẩm của bạn lên. Đừng thử lại cái fix đó. Đừng đưa tôi năm lựa chọn. Kiểm tra iPad. Bạn có thực sự chạy nó không?
Vậy nên tôi biến mọi lần sửa lỗi lặp lại thành một luật viết. Sau đó, prompt phổ biến nhất của tôi trở thành "vâng, làm đi."
Đó là toàn bộ mánh khóe. Các agent không cần nhiều quyền tự chủ hơn. Chúng cần những quyết định được đưa ra trước đến mức việc của bạn chỉ còn là nói "vâng."
9 cuốn sách hướng dẫn (playbook)
Mỗi cái được VIẾT CHO agent — ở ngôi thứ hai, với những cái cổng (gate) mà nó không thể nói vòng quanh:
- 01 khởi động → đọc trạng thái, đề xuất MỘT việc. Không menu.
- 02 đặc tả → các giai đoạn với cổng có thể thực thi. "Trau chuốt" không phải là một cổng.
- 03 xây dựng → diff tối thiểu, chạy thực tế, đẩy lên trước khi ăn mừng.
- 04 gỡ rối → hai lần sửa thất bại = ngừng chỉnh sửa, thay đổi chiến lược.
- 05 trau chuốt → đi qua mọi màn hình. Sáng + tối, điện thoại + máy tính bảng, mọi ngôn ngữ. Chụp ảnh màn hình hoặc coi như chưa xảy ra.
- 06 góc nhìn mới → một mô hình khác suy luận lại mọi tuyên bố từ repo. Tự đánh giá là đọc lại chứng cứ ngoại phạm của chính mình.
- 07 ship → đã commit ≠ đã đẩy lên ≠ đã gửi ≠ đã được duyệt ≠ đã lên sóng. Hãy gọi tên trạng thái thực sự.
- 08 số liệu → mọi con số kèm mức chênh lệch, mọi thí nghiệm sinh ra phải có ngày khai tử.
- 09 khai tử → chôn cất dự án chết đúng cách: quét MỌI scheduler, ngừng chi tiêu, viết bản án.
Những luật in ra thời gian
Hai lần mắc lỗi. Cùng một thất bại hai lần có nghĩa là mô hình của agent về vấn đề đó sai. Ngừng chỉnh sửa. Tái tạo từ đầu, viết các giả thuyết thực sự khác biệt, đo lường, rồi mới sửa. Đổi tên biến và thử lại là lần mắc lỗi thứ hai, không phải ý tưởng thứ hai. Một luật này tiết kiệm nhiều token hơn bất kỳ thủ thuật prompt nào tôi biết.
Tác giả không phải người xác thực. Trước khi "xong" bất cứ thứ gì rủi ro, một agent thứ hai — mô hình khác, ngữ cảnh sạch — suy luận lại các tuyên bố từ repo thực tế. Hai mô hình khác nhau đánh giá chéo sẽ bắt được những thứ mà tự đánh giá về mặt cấu trúc không thể.
Công việc chưa đẩy lên là không tồn tại. "Bạn đã đẩy lên chưa?" từng là câu hỏi tôi lặp lại nhiều nhất. Giờ thì commit + đẩy lên đóng mọi block, không cần hỏi. Một câu nói đã giết chết cả một nhóm nỗi lo âu.
Chôn cất đúng cách. Tôi đã từng giết một dự án và bóng ma của nó tiếp tục đăng bản tóm tắt hàng ngày thêm hai ngày nữa — một cái timer bị quên đã sống sót sau đám tang. Cuốn playbook khai tử quét mọi scheduler trên mọi máy, kèm bằng chứng đầu ra.
Hai agent, một máy
Hệ số nhân: các agent của tôi thay phiên nhau. Ai có hạn ngạch thì triển khai; người kia xác thực. Bàn giao là các đặc tả với cổng, không phải cảm xúc. Và một script khóa ~150 dòng ngăn chúng va chạm trên cùng một repo — mã thoát 3 có nghĩa là "agent kia đang ở đây, chọn front khác."
Chạy hai mô hình khác nhau như một pipeline là bản nâng cấp chất lượng rẻ nhất trong AI hiện nay. Repo có toàn bộ hợp đồng.
Tại sao lại miễn phí?
Bởi vì nó là Markdown. Chín file. Không SDK, không framework, không thứ gì sẽ thối rữa khi mô hình tiếp theo ra mắt. Nó hoạt động như Claude Code skills, phần AGENTS.md, hoặc Cursor rules — có kèm adapter.
Và một luật nữa trong đó, luật tôi sẽ bảo vệ hơn tất cả: KHÔNG CÓ GÌ đi ra công chúng dưới tên bạn nếu không có một cái đồng ý mới. Không repo, không bài đăng, không gói. Sự nhiệt tình của một agent không bao giờ có thể tiêu xài danh tiếng của bạn.
(Bài viết này được phác thảo bởi một agent. Một con người đã ký duyệt. Đó là hệ thống đang hoạt động.)
Lấy nó đi:
→ github.com/davidmosiah/agents-that-ship
Fork nó, mổ xẻ nó, không đồng ý với một nửa trong đó. Luật duy nhất tôi giữ lại bằng mọi giá: hợp đồng tồn tại BẰNG VĂN BẢN. Mọi luật chỉ sống trong đầu bạn là luật mà agent của bạn sẽ phá vỡ lại vào ngày mai.





