Blog kỹ thuật

Quy trình của studio một người: làm phần mềm cùng Claude Code

Cách mình dùng Claude Code và một bộ skill/agent kit để xây GOHA Flow Studio, AVS, AUTO CAPCUT, license server và website: quy trình, luật cá nhân và bài học.

Nguyễn Hiếu··3 phút đọc
Quy trình của studio một người: làm phần mềm cùng Claude Code

Mình là một người làm phần mềm, chạy một studio một người. Các sản phẩm của mình gồm GOHA Flow Studio (app desktop), GOHA AVS, AUTO CAPCUT, license server và website store viết bằng Next.js. Cả năm thứ này mình xây với Claude Code làm đối tác kỹ thuật chính, cộng thêm một bộ skill và agent kit (mình gọi là AgentKit) để có quy trình lặp lại được.

Bài này không phải lời hứa về năng suất. Mình sẽ không đưa con số "nhanh gấp N lần", vì mình không đo theo cách đủ nghiêm túc để dám nói vậy. Mình chỉ kể cách làm việc và những gì mình rút ra.

Quy trình: sáu bước, mỗi bước có đầu ra

Quy trình làm việc với Claude Code: chốt kết quả, scout, plan, implement, test, review độc lập, checkpoint người, ship
Quy trình làm việc với Claude Code: chốt kết quả, scout, plan, implement, test, review độc lập, checkpoint người, ship

AgentKit cấu trúc công việc như sau:

  1. Brainstorm: chốt outcome, ràng buộc, non-goal và tiêu chí nghiệm thu trước khi đụng vào code.
  2. Scout: đọc codebase, tìm đúng chỗ liên quan thay vì đoán theo tên file.
  3. Plan: viết kế hoạch có phase, lưu thành file trong thư mục plans/.
  4. Implement: làm theo plan.
  5. Test: chạy test hẹp nhất có ý nghĩa trước, rồi mở rộng.
  6. Review và ship: reviewer agent độc lập (code review, security review) đọc thay đổi trước khi commit.

Điểm mình thấy giá trị nhất là bước 1 và 3. Khi tiêu chí nghiệm thu đã nằm trên giấy, "xong" có nghĩa cụ thể, và agent có thứ để đối chiếu.

Song song, nhưng có kỷ luật

Có hai kiểu chạy song song, với luật khác nhau:

  • Điều tra: nhiều subagent explorer chỉ-đọc cùng khảo sát các phần khác nhau của codebase. Chúng không sửa gì nên không thể đạp nhau.
  • Triển khai: các subagent chuyên biệt làm song song, nhưng mỗi agent sở hữu một tập file riêng, không giao nhau. Hai agent cùng sửa một file là công thức cho merge conflict và lỗi khó truy.

Luật cá nhân

Những luật mình giữ vì từng thấy chúng hữu ích:

  • Plan và report là file, không chỉ nằm trong chat. Phiên làm việc có thể mất; file thì còn.
  • Không để secret trong repo. .env được gitignore, key nằm ở các repo private riêng.
  • Hành vi thật, không mock để qua check. Test pass nhờ mock che lỗi thì còn tệ hơn test fail.
  • Conventional commits.
  • Verify trước khi tuyên bố xong: chạy lệnh, đọc output, rồi mới nói.

MCP là lớp tích hợp

Các tool của mình tự expose MCP server: AVS, AUTO CAPCUT, Flow Studio. Nhờ đó Claude Code vận hành chúng trực tiếp, qua những lệnh có tên và có tham số rõ ràng, thay vì mò vào file nội bộ. Ví dụ trong AVS, agent gọi diff_since và apply_ops thay vì sửa JSON bằng tay.

Cách này giữ cho ranh giới giữa agent và hệ thống rõ ràng: agent chỉ làm được những gì tool cho phép.

Những thứ mình học được

Cho agent một hợp đồng

Đưa cho agent một vocabulary đóng hoặc một schema để làm việc, thay vì quyền truy cập tự do. Hợp đồng càng rõ, lỗi càng dễ phát hiện và undo càng dễ.

Giữ checkpoint của con người ở bước không đảo ngược

Những việc như release, đẩy lên production, xóa dữ liệu, gửi thứ gì đó ra ngoài: mình luôn để con người bấm nút cuối. Agent chuẩn bị, người quyết định.

File nhỏ, tập trung

Agent làm việc tốt hơn với file ngắn, có một trách nhiệm. Ngữ cảnh gọn nghĩa là ít hiểu lầm hơn, và review cũng nhanh hơn.

Giới hạn

Quy trình này không biến chuyện khó thành dễ. Agent vẫn hiểu sai yêu cầu, vẫn viết code thừa, vẫn cần reviewer bắt lỗi. Phần việc của mình dịch chuyển từ gõ code sang định nghĩa bài toán, đặt ranh giới và đọc kỹ kết quả. Với studio một người, đó là sự đánh đổi hợp lý, miễn là bạn không bỏ bước kiểm chứng.

Tóm lại

  • Quy trình có đầu ra (plan, report là file) tốt hơn trò chuyện tự do.
  • Song song chỉ an toàn khi quyền sở hữu file rõ ràng.
  • MCP cùng hợp đồng đóng cho agent một sân chơi có biên.
  • Người giữ quyết định ở mọi bước không đảo ngược được.