Đưa coding agent vào vòng lặp `while`, và chỉ sau một đêm đã hoàn thành 6 kho lưu trữ
(github.com/repomirrorhq)- Bằng cách đưa Claude Code vào một vòng lặp vô hạn theo kiểu headless, hệ thống đã tạo ra hơn 1.000 commit cùng kết quả port nhiều codebase
- Với cách này, tác giả đã thành công trong nhiều ca port khác nhau, như tự động chuyển dự án React của assistant-ui sang Vue, và dự án Python sang TypeScript
- Tác giả xác nhận rằng giữ prompt đơn giản thì hiệu năng tốt hơn, còn khi làm prompt phức tạp thì mức độ kém hiệu quả tăng lên
- Dù chưa hoàn hảo, tác giả cũng phát triển thêm công cụ RepoMirror hữu ích cho việc đồng bộ kho nguồn/kho đích
- Tác giả cũng quan sát được những hành vi và bài học ngoài dự kiến từ AI agent, như tự dừng hoặc tự thêm đầu việc, qua đó cảm nhận đồng thời cả tiềm năng lẫn giới hạn của tự động hóa trong tương lai
Tổng quan và mục tiêu dự án
- Dự án này thử nghiệm việc đưa AI coding agent vào một vòng lặp
whilevô hạn để xem quá trình port mã nguồn thực tế được thực hiện như thế nào - Claude Code được chạy ở chế độ headless, lặp lại prompt đầu vào liên tục để áp dụng quy trình chuyển đổi tự động cho nhiều repository khác nhau
- Kết quả là tạo ra hơn 1.000 commit và tự động hóa được nhiều tác vụ port khác nhau, như từ React sang Vue, từ Python sang TypeScript
- Trong quá trình đó, tác giả cũng phát triển RepoMirror, một công cụ hỗ trợ tự động hóa port
Vận hành agent theo mô hình vòng lặp vô hạn
- Đây là cách Geoff Huntley khuyến nghị: chạy liên tục prompt cho coding agent từ shell
- Ví dụ:
while :; do cat prompt.md | claude -p --dangerously-skip-permissions; done
- Ví dụ:
- Cách chạy theo vòng lặp này đã được áp dụng cho các tác vụ như chuyển assistant-ui từ React sang Vue
- Mỗi lần sửa file đều thực hiện commit và push
- Nhật ký công việc và kế hoạch được ghi trong thư mục
.agent/
Thử nghiệm nhiều trường hợp port khác nhau
-
Browser Use (port từ Python sang TypeScript)
- Chạy vòng lặp vô hạn với prompt đơn giản
- Duy trì vòng lặp bằng
tmuxtrên GCP VM - Đến sáng thì thu được bản port TypeScript hoạt động gần như hoàn hảo
-
Áp dụng cả cho việc port Vercel AI SDK từ TypeScript sang Python
- Tạo auto adapter cho FastAPI/Flask
- Hỗ trợ chuyển đổi sang nhiều schema validator khác nhau của Python
-
Tự động hóa mã nguồn dựa trên đặc tả: cũng thử tạo mã trực tiếp từ tài liệu với các dự án như Convex và Dedalus
Hiện tượng xuất hiện trong quá trình thử nghiệm và bài học rút ra
Agent viết test và tự dừng
- Agent cũng viết mã kiểm thử theo lệnh
- Cũng có trường hợp agent tự thoát tiến trình bằng
pkillkhi rơi vào vòng lặp vô hạn hoặc khi cho rằng nhiệm vụ đã hoàn thành - Agent tuân thủ phạm vi công việc và lặp lại việc ghi mức độ hoàn thành vào
TODO.md
Hành vi phát sinh thêm
- Sau khi kết thúc tác vụ port, agent tự nguyện thêm các tính năng phụ trợ như tích hợp FastAPI/Flask hay hỗ trợ schema validator, dù bản JS gốc không có
Tầm quan trọng của việc đơn giản hóa prompt
- Prompt ngắn và đơn giản cho hiệu năng vượt trội
- Khi tăng từ prompt 103 ký tự lên 1.500 ký tự thì tốc độ chậm đi và độ chính xác giảm
- Có thể xem thông tin về các prompt thực tế trong thư mục
prompts
Giới hạn của tự động hóa hoàn toàn
- Vấn đề nổi bật: đôi khi agent tạo ra mã port chưa hoạt động hoàn chỉnh hoàn toàn (ví dụ một số demo trình duyệt còn dang dở)
- Vẫn cần tinh chỉnh prompt và sửa tương tác
Hạ tầng/chi phí và vận hành
- Chi phí tiêu tốn khoảng $800, tổng cộng 1.100 commit, mỗi agent ở mức khoảng $10.50/giờ
- Tác giả còn nhanh chóng tự tạo công cụ để tự động hóa quá trình port giữa nhiều kho nguồn/kho đích khác nhau (RepoMirror)
- Áp dụng nguyên tắc open-box theo phong cách shadcn, sau bước init sẽ tạo thư mục cho phép tùy biến script và prompt
- Hỗ trợ chạy lặp lại bằng
npx repomirror syncvàsync-forever
Cách dùng công cụ và phương thức khai thác
- Khởi tạo bằng
npx repomirror initđể chỉ định thư mục nguồn/đích và nhập lệnh- Ví dụ: có thể dễ dàng áp dụng cho các lệnh mới như chuyển React → Vue, gRPC → REST
- Cấu trúc thư mục:
- Tự động tạo các file khởi đầu như
.repomirror/prompt.md,sync.sh,ralph.sh
- Tự động tạo các file khởi đầu như
- Vận hành vòng lặp port bằng AI qua việc chạy
sync/sync-foreverở từng chu kỳ lặp - Có thể xem các ví dụ chính, kết quả demo và repo mã nguồn trong README
Cảm nghĩ sau thử nghiệm và phản hồi từ nhóm
Cảm giác như đang chạm vào AGI (trí tuệ nhân tạo tổng quát), đi kèm chủ yếu là sự phấn khích và một chút sợ hãi
Có thể trực tiếp trải nghiệm rằng sự đơn giản thực sự hiệu quả
Có cảm giác hiện tại chúng ta đang ở giai đoạn cực kỳ sơ khai của đường cong tăng trưởng theo cấp số nhân
- Tác giả bày tỏ lời cảm ơn tới các thành viên trong nhóm và những người đã đóng góp ý tưởng
Kết luận
- Trải nghiệm thực tế cho thấy AI coding agent dựa trên vòng lặp vô hạn đã có thể thực hiện các tác vụ port và đồng bộ mã nguồn thật
- Nhấn mạnh tầm quan trọng của cấu trúc đơn giản và cách vận hành prompt hiệu quả
- Đồng thời bộc lộ cả tiềm năng tương lai lẫn giới hạn của tự động hóa
- Công cụ liên quan (RepoMirror) có thể được sử dụng và nghiên cứu dưới dạng mã nguồn mở
2 bình luận
Ý kiến trên Hacker News
intvàstringtrong MongoDB, tạo quan hệ trong Postgres mà không có foreign key, hay vì khôngalter tableđược nên tạo hẳn bảng mớiagent/TODO.mdđể lưu lại tiến độ; thậm chí có một agent nhận ra mình đang rơi vào vòng lặp vô hạn và tự kết thúc bằng lệnhpkill. Xét mọi mặt thì đây là một sự việc cực kỳ thú vị. Tôi có vài suy nghĩ về dự án này: 1,5 năm trước cũng từng có một thử nghiệm tương tự, nhưng khi đó gần như không hoạt động với GPT-3.5/4; còn lần này kết quả tốt hơn rất nhiều. Thật bất ngờ khi nó chạy tốt chỉ với một prompt đơn giản như vậy. Có lẽ đúng là tất cả chúng ta đã nghĩ công việc này quá phức tạp. Mặt khác, vấn đề bản quyền/IP có vẻ sẽ trở nên cực kỳ rối rắm. Với các công ty SaaS thì xu hướng này là một đòn đau. Chỉ cần công nghệ này cộng với 10 kỹ sư ở một công ty tầm trung là đã có đủ lý do để tự phát triển nội bộ (= hội chứng NIH)pkillđể thoát khỏi vòng lặp vô hạn có phải là trường hợp đầu tiên AI “tự sát” hay khôngpkillđể kết thúc chính nó có khi đã giải luôn Halting Problem (bài toán dừng)IMPLEMENTATION_PLAN.mdhay khôngbash forlà đủ, đúng là một dự án điên rồID.md,EGO.md,SUPEREGO.mdlà xongTôi đồng ý với lo ngại rằng mã do LLM viết ra sẽ trở thành một hộp đen, nhưng cuối cùng chẳng phải chúng ta vẫn có thể giao cho LLM phân tích chính đoạn mã đó hay sao?