Spec Kit — bộ kit thứ tư, đứng cạnh buildflow
Tám bước, mười lệnh /speckit.*. Cùng một bộ xương với buildflow: artifact trước, code sau — nhưng cổng của nó hỏi thay vì chặn.
GitHub Spec Kit là bộ kit thứ tư trên cùng một trục: từ kỷ luật tới tự trị. Nó đứng cạnh buildflow — cùng một bộ xương, artifact trước rồi mới tới code.
Khác biệt nằm ở cái cổng. Cổng của buildflow chặn. Cổng của Spec Kit hỏi, rồi để bạn quyết định đi tiếp hay không.
Chọn tình huống của bạn ở phần Playbook để xem đúng các bước cần gõ.
Spec Kit
Viết rõ cái gì trước khi
bàn tới làm sao.
Của GitHub. Tên phương pháp là Spec-Driven Development. Ý chính rất gọn: thay vì mô tả một câu rồi để AI đoán tiếp, bạn để lại một chuỗi artifact — luật nền, đặc tả, kế hoạch, danh sách task — và mỗi artifact phải đứng vững trước khi artifact sau được sinh ra. Code là thứ ra cuối cùng, không phải đầu tiên.
Nó là cái gì, gói trong một câu
Không phải một danh sách tính năng. Là một lời từ chối.
Máy không được phép đoán cái bạn chưa nói rõ.
Nó phải hỏi lại — rồi ghi câu trả lời vào đặc tả.
README gọi đây là intent-driven development: đặc tả định nghĩa cái gì trước làm sao. Kèm ba nguyên tắc nữa — đặc tả giàu chi tiết có lan can, tinh chỉnh nhiều bước thay vì sinh code một phát, và dựa nhiều vào năng lực của mô hình để đọc hiểu đặc tả.
Tám lệnh, và chỗ bạn bắt buộc có mặt
Thứ tự chuẩn chạy từ trái sang phải. Ô tím đậm là chỗ bạn phải trả lời;
ô viền mảnh là chỗ máy chạy một mình. Ba lệnh có nhãn optional —
bỏ được, nhưng đó chính là ba cái cổng.
Còn hai lệnh nữa ngoài khung: /speckit.converge (đường cam — chỉ chạy
sau /speckit.implement, và nó chỉ nối thêm task, không sửa
spec.md hay plan.md, không đụng vào code) và
/speckit.taskstoissues (đổ tasks.md thành GitHub issue,
qua GitHub MCP server).
Vì sao phải có luật nền trước cả đặc tả
/speckit.constitution là lệnh chạy một lần, đầu tiên. Nó viết
memory/constitution.md — vài nguyên tắc quản trị của cả dự án,
không phải của một tính năng.
Đặc tả nói về một tính năng. Luật nền nói về mọi tính năng.
Template gợi ý những nguyên tắc kiểu Test-First (NON-NEGOTIABLE),
Library-First, CLI Interface, Observability — mỗi cái là một câu
MUST hoặc SHOULD mà mọi đặc tả sau đó phải sống chung.
Rồi /speckit.analyze đọc lại đúng file này. Trong template của nó có một
dòng rất dứt khoát: luật nền là non-negotiable. Đặc tả nào cãi lại một
nguyên tắc MUST thì tự động là CRITICAL — và cách sửa là sửa đặc tả,
không phải pha loãng nguyên tắc. Muốn đổi nguyên tắc thì phải chạy lại
/speckit.constitution, ở một lượt riêng.
Cuối file có dòng Version · Ratified · Last Amended. Nguyên tắc dự án
được đối xử như một API công khai.
Ba cái cổng, và mỗi cổng từ chối cái gì
README xếp ba lệnh này vào nhóm Optional. Bỏ chúng đi thì pipeline vẫn chạy — và Spec Kit tụt xuống thành một cái máy sinh file. Chúng chính là chỗ phương pháp nằm.
spec.md theo một bảng phân loại cố định — phạm vi, mô hình dữ liệu,
luồng UX, hiệu năng, bảo mật, edge case, thuật ngữ — chấm mỗi mục là
Clear / Partial / Missing. Rồi hỏi tối đa 5 câu, hỏi từng câu một,
mỗi câu phải trả lời được bằng trắc nghiệm hoặc ≤5 chữ. Câu trả lời được
ghi thẳng lại vào đặc tả.
robust, intuitive.
Và nó nhắc: chạy trước /speckit.plan, bỏ qua thì rủi ro làm lại tăng.
spec.md + plan.md + tasks.md cùng lúc, tìm
yêu cầu trùng, yêu cầu chọi nhau, yêu cầu không có task nào phủ, task mồ côi,
thuật ngữ trôi. Xuất một bảng có CRITICAL / HIGH / MEDIUM / LOW, kèm
% coverage. Vi phạm luật nền luôn là CRITICAL.
/speckit.implement mở đầu bằng việc quét thư mục checklists/.
Nếu còn ô chưa tick, nó dừng lại và hỏi thẳng: "vẫn muốn làm tiếp chứ?".
Bạn trả lời no hoặc stop là nó ngừng. Nhưng bạn vẫn được phép nói yes —
khác với flow.sh của buildflow, hook exit 2 ở đó không thương lượng.
Spec Kit hỏi bạn; buildflow chặn bạn. Đó là toàn bộ khoảng cách giữa hai bộ kit.
Nó đứng ở đâu trên trục cũ
Trục vẫn là câu hỏi cũ: bạn để máy quyết bao nhiêu, và phán đoán của bạn nằm ở đâu? Spec Kit không mở ra một trục mới. Nó chỉ chen vào bên trái, sát cạnh buildflow.
Spec Kit nằm bên trái buildflow một chút, không phải bên phải. Nó bắt bạn trả lời
nhiều hơn (≤5 câu hỏi cho cả phiên clarify, cộng phần viết luật nền), nhưng khi bạn đã trả lời xong
thì không còn cái cổng nào cứng — /speckit.implement vẫn cho bạn nói
"yes, cứ chạy". buildflow đứng chắc hơn ở chỗ đó.
10 lệnh /speckit.*. Cài bằng uv, tạo ra thư mục .specify/.
Bạn nói rõ ý định.
3 skill + flow.sh. Cổng chặn bằng hook exit 2.
Bạn duyệt mọi bước.
84 skill + 13 agent. AI gõ, bạn soi.
Bạn đọc diff.
Bạn ký một lần ở đầu, rồi đứng ngoài.
Ngay từ đầu.
/speckit.clarify — quét theo bảng phân loại, hỏi ≤5 câu, ghi câu trả lời vào spec.md.00-idea.md — bạn tự viết, AI không được điền hộ.constitution → spec → plan → tasks. Thiếu file nào, lệnh sau dừng và chỉ tên lệnh cần chạy lại.C-001 là đơn vị công việc./speckit.analyze + /speckit.checklist. Cả hai đều khuyên, không chặn cứng.exit 2. Mục Evidence trống thì không đánh done được./speckit.converge để đối chiếu code với đặc tả.C-001 là characterization: ghim lại cái không được vỡ.tasks.md đã chạy, và /speckit.converge không nối thêm gì nữa.Playbook — copy rồi chạy
Ô tím là lời bạn nói với AI — cứ sửa lại cho hợp dự án của bạn. Ô đen là lệnh gõ nguyên văn: trong terminal, hoặc trong khung chat của agent.
Đi hết chuỗi constitution → specify → clarify → plan → tasks → analyze → checklist → implement. Đây là cách học phương pháp.
Cài CLI. Nó là một Python tool, chạy bằng uv.
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
@vX.Y.Z vào cuối. Nâng cấp sau này bằng specify self upgrade.Khởi tạo ngay trong thư mục hiện tại, chọn agent bạn đang dùng.
specify init --here --integration copilot
.specify/ — bên trong có templates/, scripts/, extensions/, presets/. Thư mục đã có file thì thêm cờ --force.Viết luật nền trước. Chạy một lần cho cả dự án, không phải cho tính năng.
/speckit.constitution
Dự án nhỏ, một mình mình làm. Ba nguyên tắc mình muốn giữ:
1. Test viết trước code — không thương lượng.
2. Mọi thứ chạy được từ dòng lệnh, không phụ thuộc UI.
3. Có gì lạ là phải log ra, không nuốt lỗi im lặng.MUST rõ ràng — vì /speckit.analyze sẽ đọc lại chúng và bắt lỗi theo đúng chữ bạn viết.Mô tả tính năng bằng tiếng người. Nói cái gì và cho ai — chưa nói tech stack.
/speckit.specify
Mình muốn dựng app nhỏ giúp chủ tiệm spa quản lý lịch hẹn.
Chủ tiệm xem lịch trong ngày, thêm khách mới, dời giờ.
Khách nhận tin nhắn nhắc trước 2 tiếng.spec.md trong specs/. Đừng nhắc React hay Postgres ở đây — chỗ đó là của /speckit.plan.Cổng thứ nhất. Nó sẽ hỏi bạn tối đa 5 câu, hỏi từng câu một.
/speckit.clarifyspec.md, nên đây là lúc đặc tả thật sự thành hình. Bỏ qua bước này thì template cảnh báo: rủi ro làm lại tăng.Bây giờ mới tới tech stack. Đây là lúc nói làm sao.
/speckit.plan
Dùng Go cho backend, Postgres, không dùng ORM.
Frontend là HTML server-render, không SPA.
Deploy bằng một binary duy nhất.plan.md. Rồi /speckit.tasks bẻ nó thành tasks.md — danh sách task đã sắp theo thứ tự phụ thuộc.Hai cổng cuối. Chạy tuần tự, đọc kỹ báo cáo.
/speckit.tasks /speckit.analyze /speckit.checklist chất lượng yêu cầu cho luồng đặt lịch
analyze không ghi file nào — nó chỉ in bảng CRITICAL / HIGH / MEDIUM / LOW. Thấy CRITICAL thì quay lại sửa spec.md trước, đừng đi tiếp.Chạy hết mọi task trong tasks.md.
/speckit.implementchecklists/ trước. Còn ô chưa tick, nó dừng và hỏi. Trả lời no là nó ngừng lại — và đó thường là câu trả lời đúng.Luật nền viết một lần rồi dùng lại mãi. Mỗi tính năng mới chỉ lặp lại từ /speckit.specify trở đi.
Repo đã có .specify/ rồi thì bỏ qua bước init. Chưa có thì thêm vào, không đụng code cũ.
specify init --here --integration copilot
--force để ghi đè — commit trước đã, cho chắc.Mô tả đúng một tính năng. Spec Kit tạo một thư mục riêng trong specs/ cho nó.
/speckit.specify
Thêm chức năng xuất báo cáo doanh thu theo tháng, tải về CSV.
Chủ tiệm chọn tháng, bấm tải, ra file mở được bằng Excel.spec.md là chỗ hay vấp — /speckit.analyze sẽ báo conflicting requirements.Vẫn chạy cổng hỏi đáp. Repo cũ càng nhiều ngầm định, càng cần bước này.
/speckit.clarifyKế hoạch phải bám vào tech stack đang có, không tự chọn cái mới.
/speckit.plan
Bám đúng stack hiện tại: Go, Postgres, không thêm thư viện mới.
Tái dùng lớp repository sẵn có, đừng viết query rời./speckit.tasks. Muốn giao việc cho người khác thì /speckit.taskstoissues đổ thẳng thành GitHub issue.Soi rồi build. Rồi đối chiếu lại — bước này chỉ có ở brownfield.
/speckit.analyze /speckit.implement /speckit.converge
converge đọc code hiện tại, so với spec.md + plan.md + tasks.md, rồi nối thêm phần còn thiếu vào cuối tasks.md. Nó không sửa đặc tả, không đụng code, không đánh số lại task cũ. Code đã đủ thì tasks.md giữ nguyên từng byte.Còn task mới được nối thêm thì chạy lại vòng cuối.
/speckit.implementimplement → converge tới khi converge báo sạch. Đó là định nghĩa xong của Spec Kit.Bạn đã có spec.md, plan.md, tasks.md. Giờ muốn biết chúng có chọi nhau không, trước khi tốn một dòng code.
Đặc tả còn chỗ mơ hồ thì vá trước. Đây là lệnh duy nhất ghi ngược vào spec.md.
/speckit.clarifySoi chéo ba file cùng lúc. Nó không ghi file nào — chỉ in ra một bảng.
/speckit.analyzeMUST của luật nền luôn là CRITICAL.Đọc bảng. CRITICAL thì phải sửa, không được bỏ qua. Cách sửa là sửa đặc tả — không phải nới nguyên tắc.
/speckit.constitution, tăng số phiên bản theo MAJOR / MINOR / PATCH.Sinh checklist cho một miền cụ thể. Truyền tên miền vào làm tham số.
/speckit.checklist chất lượng yêu cầu cho phần bảo mật và phân quyềnTick từng ô trong checklists/. Ô nào không tick được, quay lại sửa spec.md.
/speckit.implement thì nó dừng lại và hỏi. Trả lời no là dừng — hãy để nó dừng. Sửa một câu trong đặc tả rẻ hơn sửa một tuần code.Spec Kit không bắt bạn viết nhiều giấy tờ hơn.
Nó chỉ bắt bạn trả lời trước những câu bạn sẽ phải trả lời sau.
Mỗi cổng ở đây đều hỏi cùng một câu: bạn đã nói rõ chưa? "Hiển thị nổi bật" là cỡ chữ bao nhiêu?
Ai được xem báo cáo? Tháng không có đơn thì màn hình hiện gì? Đó cũng là lý do
dừng lại ở /speckit.analyze cũng là một kết quả tốt — bạn vừa thấy chỗ chọi nhau
lúc nó còn nằm trong một file markdown. Rẻ hơn nhiều so với thấy nó nằm trong production.
Và cũng vì vậy mà Spec Kit đứng cạnh buildflow, chứ không đứng cạnh autocode-kit:
cả hai đều tin rằng phán đoán của bạn phải tiêu ở đầu, không phải ở cuối.