Spec Kit Assess Extension: chấm một ý tưởng go hay kill trước khi viết spec

Demo Spec Kit Assess Extension: năm command intake, research, define, shape, decide chấm một feature là go hay kill rồi trao handoff sang specify.

Đã duyệt độc lập · cập nhật 27/10/2026 · 11 min

1. Có tool nào để derive specification không?

Joe Maddalone mở đầu bằng một câu hỏi mà anh thấy rất hay, do một người đặt ra vài hôm trước video (đăng ngày 26/10/2026): anh có tool nào ưa thích để derive specification, tức để rút ra bản đặc tả, hay không?

Với ai chưa quen, Joe giải thích GitHub Spec Kit là một bộ toolkit: bạn bắt đầu từ một specification được định nghĩa còn lỏng lẻo cho một feature hay một ứng dụng, rồi cho nó chạy qua một chuỗi command. Chuỗi đó bắt đầu bằng một specification đúng nghĩa, đi qua bước xác định task, rồi implementation, và cuối cùng là validation (theo cách Joe mô tả trong video đăng ngày 26/10/2026).

Joe Maddalone nói trước micro, phía dưới là thanh tiến trình Spec Kit năm bước
Slide chèn lên hình Joe trong video đăng ngày 26/10/2026: nhãn "Spec Kit" và năm bước đánh số SPECIFY, CLARIFY, PLAN, IMPLEMENT, VALIDATE.

Câu trả lời ngắn của Joe là không: anh không có tool ưa thích nào để derive specification cho ứng dụng. Tuy vậy, anh có một tool mà anh rất muốn giới thiệu (highly recommend), đó là Spec Kit Assess Extension (theo Joe, video đăng ngày 26/10/2026).

2. Năm command mới: intake, research, define

Theo Joe (video đăng ngày 26/10/2026), cài Assess Extension thì bạn có thêm năm command mới, và anh đi qua chúng thật nhanh.

Intake là command đầu tiên. Bạn đưa cho nó một câu phát biểu rất cơ bản về ứng dụng hay feature mình đang muốn phát triển, và nó khởi động toàn bộ quy trình (theo Joe, video đăng ngày 26/10/2026).

Research là command tiếp theo, và đúng như tên gọi, nó sẽ research rất nhiều. Theo Joe (video đăng ngày 26/10/2026), nó xem những ứng dụng khác, hoặc những feature bên trong ứng dụng khác, tương tự với thứ bạn đang làm, rồi thu thập cả thông tin ủng hộ lẫn thông tin phản bác liên quan tới feature hay ứng dụng đó.

Slide nền đen liệt kê Intake, Research, Define, Shape, bên dưới là chữ speckit.asse đang hiện dần
Slide trong video đăng ngày 26/10/2026 đang dựng dần danh sách command: Intake, Research, Define, Shape; dòng chữ lớn phía dưới mới hiện tới "speckit.asse".

Sau đó là define. Joe nói command này thật ra nên được gọi là command problem statement, vì đó chính xác là việc nó làm: nó nhìn vào những người dùng ứng dụng của bạn và cố tìm ra ứng dụng có thể giải quyết vấn đề gì cho họ, có thể lấp khoảng trống nào, và success criteria trông ra sao để lấp được khoảng trống đó hay giải được vấn đề đó cho những người dùng ấy (theo Joe, video đăng ngày 26/10/2026).

3. Shape và decide: go, needs clarification hoặc kill

Tiếp theo là shape. Theo Joe (video đăng ngày 26/10/2026), command này nhìn vào codebase hiện có của bạn và bắt đầu đánh giá các task sẽ phải làm, architecture và architecture sẽ bị ảnh hưởng ra sao, cùng mức công sức (level of effort) để làm ra feature hay ứng dụng đó.

Trang hướng dẫn Idea Assessment của Spec Kit (đọc ngày 27/10/2026) mô tả bước này theo cách riêng: shape so sánh các option ở mức concept, các constraint, appetite và trade-off trong file concept.md, còn architecture chi tiết, task implementation và thay đổi source code thì trang đó ghi là cố ý nằm ngoài quy trình này.

Cuối cùng là decide, command chốt cả luồng. Theo Joe (video đăng ngày 26/10/2026), bạn nhận về một trong ba kết quả:

Go: mọi thứ đều ổn, cứ chuyển tiếp sang phần còn lại của các quy trình Spec Kit (theo Joe, video đăng ngày 26/10/2026).

Needs clarification: nó sẽ hỏi bạn một loạt câu hỏi, rồi quay lại một bước trước đó và đi tiếp qua quy trình thêm một lần nữa (theo Joe, video đăng ngày 26/10/2026).

Kill: về cơ bản nghĩa là đây là một ý tưởng tồi. Mức công sức bỏ ra không đáng, hoặc nó có thể đi ngược với Spec Kit constitution mà bạn đã đặt ra khi mới bắt đầu ứng dụng (theo Joe, video đăng ngày 26/10/2026).

intakeresearchdefineshapedecide gokillneedsclarification sang phần còn lại của Spec Kit ý tưởng tồi hỏi thêm, quay lại một bước trước
Hình 3.1Luồng năm command của Assess Extension và ba kết quả của decide, theo lời Joe trong video đăng ngày 26/10/2026.

4. Cài Spec Kit và khởi tạo project

Nếu bạn chưa cài Spec Kit, Joe nói có thể cài bằng lệnh uv tool install specify CLI (video đăng ngày 26/10/2026). Máy của anh đã cài sẵn nên anh không bận tâm bước này. README của repo Spec Kit (đọc ngày 27/10/2026) ghi lệnh ở dạng:

uv tool install specify-cli

Nếu bắt đầu một project mới, theo Joe (video đăng ngày 26/10/2026), bạn chỉ cần gõ specify init, theo sau là thư mục ứng dụng nơi project sẽ nằm, chọn agent của mình là xong. Ví dụ trong README của Spec Kit (đọc ngày 27/10/2026) dùng GitHub Copilot:

specify init my-project --integration copilot
Terminal với tiêu đề specify init focus-app hiện danh sách Choose your coding agent integration
Màn hình chọn agent của specify init focus-app trong video đăng ngày 26/10/2026: "Choose your coding agent integration" với danh sách dài như agy (Antigravity), claude (Claude Code), codex (Codex CLI), copilot (GitHub Copilot, mũi tên đang trỏ vào dòng này), cursor-agent (Cursor), gemini (Gemini CLI), grok (Grok Build), kilocode (Kilo Code).

Joe đã có sẵn một project đang chạy, nên anh chuyển sang project đó; trên màn hình, anh cd focus-app trong terminal (video đăng ngày 26/10/2026).

5. Cài extension Assess và nhìn vào codebase

Để cài Spec Kit Assess Extension, Joe chạy lệnh sau, và extension được cài xong (demo trong video đăng ngày 26/10/2026):

specify extension add assess

Vẫn trong ứng dụng đang dùng Spec Kit đó, Joe mở OpenCode và gõ /speckit.assess. Theo anh (demo trong video đăng ngày 26/10/2026), cả năm command đều hiện ra: intake, research, define, shape và decide.

Rồi anh nhìn nhanh vào codebase. Ứng dụng này anh dùng Spec Kit suốt từ đầu, nên có đủ loại specification cùng các tài liệu liên quan tới từng specification đó. Trên màn hình (video đăng ngày 26/10/2026), thư mục specs có các feature từ 001-task-manager tới 006-task-dependencies, và mỗi feature có những file như data-model.md, plan.md, quickstart.md, research.md, spec.md, tasks.md.

Trong thư mục .specify, giờ có một thư mục mới tên extensions. Trong phần commands của assess là năm command, hay năm skill, của Assess Extension (demo trong video đăng ngày 26/10/2026).

Editor mở file speckit.assess.define.md trong thư mục .specify/extensions/assess/commands
Thư mục .specify/extensions/assess/commands trong video đăng ngày 26/10/2026 có năm file: speckit.assess.decide.md, define, intake, research, shape, cạnh extension.yml và README.md. File define đang mở có tiêu đề "Define the Problem" và dòng description "Define the problem: who is affected, what hurts, goals, non-goals, and success…".

6. App mẫu: một task manager rất đơn giản

Joe xem qua chính ứng dụng. Nó rất, rất đơn giản, về cơ bản là một task manager. Anh vào thêm một task mới với title, description, priority, status và due date (demo trong video đăng ngày 26/10/2026).

Hộp thoại New task của Focus App với các trường Title, Description, Priority, Status, Due date, Repeats, Tags
Focus App chạy trên localhost trong video đăng ngày 26/10/2026: hộp thoại "New task" có TITLE, DESCRIPTION, PRIORITY (Medium), STATUS (In Progress), DUE DATE 10/21/2026, REPEATS và TAGS, cùng nút "Add task".

Anh lưu task đó, và nó xuất hiện trong danh sách. Có nút edit để vào sửa vài thứ. Có cả calendar view: anh đặt task cho ngày 21 tháng 10, và nó nằm đúng ở đó; từ calendar anh cũng mở ra sửa được. "Super simple", Joe nói (demo trong video đăng ngày 26/10/2026).

7. Chạy intake: thêm sort cho danh sách task

Bắt đầu quy trình assess, Joe nhảy vào OpenCode và chạy speckit.assess.intake. Hơi khác thường lệ, anh chạy command này trơn, không kèm gì. Theo Joe (video đăng ngày 26/10/2026), với hầu hết agent bạn có thể truyền câu phát biểu và slug ngay sau command, nhưng OpenCode hơi "kỳ" ở điểm này. Nên anh chạy trơn, và nó hỏi lại anh hai input đó.

Trên màn hình (demo trong video đăng ngày 26/10/2026), agent trả lời rằng template intake được gọi mà không có ý tưởng nào nên chưa có gì để ghi lại, rồi hỏi "What idea would you like to assess?". Nó liệt kê ba kiểu input: đoạn text dán vào (một câu, một đoạn, ghi chú họp, nội dung ticket), một URL tới issue hay tài liệu, hoặc một con trỏ vào codebase; slug là tuỳ chọn, ví dụ slug=offline-mode, nếu không nó sẽ tự gợi ý.

Joe dán vào câu phát biểu của mình, về cơ bản là: thêm sort, bên cạnh những filter mà ứng dụng đã có. Rồi anh đặt slug là list-order. Slug chỉ là thứ để tham chiếu về sau. Nhìn vào ứng dụng, phía trên có filter, nhưng anh không có cách nào để sắp xếp các task, và đó là thứ anh đang yêu cầu (demo trong video đăng ngày 26/10/2026). Nội dung anh nhập, chép từ màn hình:

"Right now ordering is hardcoded to newest-first. Add a sort control: newest-first (default), due date, priority, title."

slug=list-order
OpenCode bên trái với câu hỏi What idea would you like to assess và input của Joe, Focus App bên phải đang mở menu filter
Bên trái là OpenCode với câu hỏi của agent và input Joe vừa gõ; bên phải là Focus App, menu FILTER BY STATUS đang mở với All, Todo, In Progress, Completed, nhưng không có ô sort nào (demo trong video đăng ngày 26/10/2026).

Anh cho chạy. Theo Joe (video đăng ngày 26/10/2026), đây là pha mà quy trình ghi lại ý tưởng ban đầu và dựng các tài liệu đầu tiên. Trên màn hình, agent báo "Intake captured": ý tưởng thuộc loại improvement, thay thứ tự newest-first đang hardcode bằng một sort control cho người dùng chọn, và nó để ngỏ những câu hỏi sâu hơn thay vì tự giả định, chẳng hạn các trường due date và priority đã tồn tại trên item hay chưa. File được ghi ở .specify/assessments/list-order/intake.md (demo trong video đăng ngày 26/10/2026).

8. Research và define chạy nối nhau

Intake xong, Joe chạy research: speckit.assess.research, truyền slug vào, slug=list-order, rồi để nó chạy (demo trong video đăng ngày 26/10/2026).

Khi research xong, trên màn hình agent báo "Research complete": codebase đã có sẵn các trường cần thiết (createdAt, dueDate, priority, title), còn thứ tự hiện tại thì hardcode trong listTasks theo newest-first bằng createdAt; "Evidence confidence (overall): high" (demo trong video đăng ngày 26/10/2026).

Tiếp đó anh lấy task define, truyền slug và chạy. Command anh gõ, chép từ màn hình (demo trong video đăng ngày 26/10/2026):

/speckit.assess.define slug=list-order

Trong lúc define chạy, Joe xem thư mục assessment mới. Có tài liệu intake, liệt kê một loạt điểm cần làm rõ (clarification) và ý tưởng tổng thể đằng sau feature. Rồi có tài liệu research: lướt qua, anh thấy prior art, market và context, dữ liệu và constraint, đủ loại research mà nó đã làm thay mình để phục vụ task này (demo trong video đăng ngày 26/10/2026).

File research.md với tiêu đề Idea Research: Sort Control for List Ordering, các mục Users and Demand, Prior Art, Market and Context
research.md trong .specify/assessments/list-order/, demo trong video đăng ngày 26/10/2026: "Idea Research: Sort Control for List Ordering", Created 2026-10-20, Evidence confidence high, rồi các mục Users & Demand, Prior Art, Market & Context. Mỗi gạch đầu dòng dẫn nguồn tới file và dòng code cụ thể, kèm mức confidence.

9. Problem doc: user, goal, non-goal, success metric

Define xong thì sẽ có một problem doc. Trên màn hình, agent báo "Problem defined": vấn đề cốt lõi là thứ tự bị hardcode thành newest-first, người dùng không điều khiển được, nên khó tập trung theo due date, priority hay title; mặc định phải giữ nguyên, còn ngữ nghĩa sort, phạm vi, persistence và vị trí trên UI cần làm rõ. Màn hình ghi "Open questions: 10", và bước tiếp theo được gợi ý là /speckit.assess.shape slug=list-order (demo trong video đăng ngày 26/10/2026).

Joe mở ra xem, và problem doc đây rồi. Nó xét những người dùng và stakeholder bị ảnh hưởng, goal là gì, non-goal là gì, và một lần nữa là success criteria hay metric (demo trong video đăng ngày 26/10/2026).

File problem.md với các mục Success Metrics, Cost of Inaction, Open Questions và danh sách NEEDS CLARIFICATION
problem.md trong demo của video đăng ngày 26/10/2026: Success Metrics (adoption, findability, không regression, consistency), Cost of Inaction, và Open Questions là một danh sách [NEEDS CLARIFICATION: …], ví dụ priority đi từ high xuống low hay ngược lại, task không có due date xếp ở đâu, sort theo title có phân biệt hoa thường không, khi giá trị bằng nhau thì tie-breaker là gì.

10. Shape: concept.md với ba option

Joe chuyển sang shape. Theo anh (video đăng ngày 26/10/2026), bước này tạo ra concept tổng quát, gắn với architecture, codebase và mức công sức đằng sau feature.

Shape xong, anh xem lại tài liệu, và quả nhiên có concept.md. Lướt qua, nó xét mọi khía cạnh của codebase sẽ phải đụng tới. Nó cũng đưa ra vài option: option A là minimal sort, option B là sort có lưu lại lựa chọn (persisted preference), option C là không làm gì, rồi tới phần recommendation (demo trong video đăng ngày 26/10/2026).

File concept.md với Option B Sort with persisted preference, Option C Do nothing và mục Recommendation
concept.md trong demo của video đăng ngày 26/10/2026: Option B "Sort with persisted preference (local storage)" và Option C "Do nothing", mỗi option có Sketch, Appetite, Trade-offs, Rabbit holes; mục Recommendation chọn Option A, "Minimal sort (domain-level + UI)".

Ở ca này, nó recommend option A, minimal sort. Nó cũng liệt kê những phần nằm ngoài phạm vi (out of scope) và vài giả định nó vẫn cần kiểm chứng. Trên màn hình, tóm tắt cuối của agent ghi "Concept shaped. Three options considered; recommend Option A (minimal domain+UI sort) as smallest thing that works", giữ newest-first làm mặc định (demo trong video đăng ngày 26/10/2026).

11. Decide: kết quả là go

Tới luồng decide: go hay kill? Joe gọi speckit.assess.decide, truyền slug thêm một lần nữa, và chờ xem agent nói gì (demo trong video đăng ngày 26/10/2026).

Kết quả trả về là quyết định go: "The idea is worth specifying". Nó recommend option A đã xem ở trên, và nhắc rằng nó đã tạo một tài liệu decision (demo trong video đăng ngày 26/10/2026).

OpenCode hiện Decision: go, đường dẫn decision.md và Next step là /speckit.specify
Kết quả decide trong demo của video đăng ngày 26/10/2026: "Decision: go. The idea is worth specifying. Option A (minimal domain+UI sort) is small, preserves default behavior, and fits the existing codebase." File ở .specify/assessments/list-order/decision.md; Next step là /speckit.specify dùng phần handoff trong decision (problem, cách tiếp cận đã chọn, in/out of scope, success metrics, các câu hỏi mang sang).

Joe mở nhanh tài liệu đó: về cơ bản là toàn bộ những gì agent vừa nói, kèm mọi thông tin hậu thuẫn, trong một file markdown. Trên màn hình, decision.md có Slug, Decided 2026-10-20, Verdict go, danh sách artifact đã review (intake, research, problem, concept), rồi một Scorecard: Problem validity, Evidence strength, Value vs. inaction, Strategic fit và Risk posture được chấm "adequate", còn Feasibility / appetite được chấm "strong" (demo trong video đăng ngày 26/10/2026).

12. Từ decision sang specify bằng handoff summary

Về phần specification, Joe chỉ ra rằng mọi thứ sau dòng "if go" trong decision chính là specification của mình; trên màn hình đó là mục có tiêu đề bắt đầu bằng "If go" và "Handoff to /speckit…". Bạn có thể copy phần đó, rồi gọi speckit.specify và dán vào làm specification (demo trong video đăng ngày 26/10/2026).

Nhưng thay vì vậy, Joe xoá đi và mở một session OpenCode mới. Ở đó anh gọi speckit.specify, nói "use the handoff summary in", chọn tài liệu decision đó, rồi nói tiếp "to specify the approved concept". Theo Joe (demo trong video đăng ngày 26/10/2026), cách này khởi động toàn bộ quy trình specify mà anh không phải copy, dán hay thậm chí đụng tay vào nội dung đó. Trang hướng dẫn Idea Assessment của Spec Kit (đọc ngày 27/10/2026) đưa ví dụ cùng ý này, với cú pháp skill của GitHub Copilot:

/speckit-specify Use the handoff summary in .specify/assessments/offline-mode/decision.md to specify the approved offline-mode concept.
decision.mdphần "if go" specifysession mới plantasksimplementconverge không copy, không dán: trỏ specify vào handoff summary
Hình 12.1Chuỗi Joe chạy sau khi có quyết định go, theo demo trong video đăng ngày 26/10/2026: handoff trong decision.md đi thẳng vào specify, rồi plan, tasks, implement và converge.

13. Plan, tasks, implement, converge và tính năng sort

Trên màn hình, session mới có tiêu đề "Specifying approved concept" và tạo ra feature specs/007-list-order. File spec.md có mục "Clarifications", phiên 2026-10-21, ghi rằng concept đã duyệt mang theo mười câu hỏi mở và chúng được giải quyết ngay tại đây để specification không đẩy quyết định sang lúc implement. Chẳng hạn: "newest first" dựa trên thời điểm tạo; priority sort theo thứ tự High → medium → low; due date thì gần nhất trước, task không có due date nằm sau mọi task có ngày; title sort A-Z, bỏ qua hoa thường (demo trong video đăng ngày 26/10/2026).

Specify xong, Joe chạy spec kit plan. Plan xong, anh chạy spec kit tasks để tạo danh sách task cần hoàn thành. Xong bước đó, anh chạy speckit.implement (demo trong video đăng ngày 26/10/2026).

Khi implement chạy xong, "cho chắc ăn" (for good measure), anh chạy thêm spec kit converge để thử thách lại phần implementation đó. Converge xong và không còn điểm nào bị thử thách, anh vào ứng dụng, refresh, và quả nhiên giờ đã có sort theo priority, theo title, theo due date, đúng như những gì đã định nghĩa (demo trong video đăng ngày 26/10/2026).

Focus App có thêm ô SORT BY với giá trị Newest first cạnh các filter, bên phải là tasks.md của specs/007-list-order
Kết quả cuối trong demo của video đăng ngày 26/10/2026: Focus App có thêm ô "SORT BY" (đang ở "Newest first") nằm cạnh FILTER BY STATUS, PRIORITY và TAG; bên phải là tasks.md trong specs/007-list-order, cạnh spec.md, plan.md, data-model.md và research.md.

Video khép lại ở đó, khi Joe Maddalone tự giới thiệu tên mình.

Nguồn và liên kết 6 nguồn

  1. Tên gốc: Spec-Driven AI Development: Spec Kit Assess Extension
  2. Sự kiện: YouTube
  3. Video gốc: https://www.youtube.com/watch?v=XDzQlrKdNW8 youtube.com
  4. Kênh YouTube Joe Maddalone (Joe Maddalone): youtube.com/channel/UCutKx7_WN6r2iduofUe7mlw youtube.com
  5. Repo GitHub Spec Kit; README có lệnh cài specify-cli, specify init và mục Idea assessment với specify extension add assess (đọc ngày 27/10/2026): github.com/github/spec-kit github.com
  6. Trang hướng dẫn Idea Assessment Quickstart của Spec Kit, mô tả năm bước intake, research, define, shape, decide và ba verdict go, needs-clarification, kill (đọc ngày 27/10/2026): github.github.io/spec-kit/guides/assessment.html github.github.io