Kỹ Năng Là Tương Lai Của CLI: Cách AI Thay Đổi Quy Trình Phát Triển Phần Mềm

Trong thế giới phát triển phần mềm, các công cụ dòng lệnh (CLI) đã trở thành xương sống không thể thiếu. Từ git commit -m "fix bug" đến npm audit, chúng ta đã quen với việc thực thi các lệnh để đạt được kết quả mong muốn. Tuy nhiên, có một hạn chế cố hữu: các CLI này hoạt động độc lập và không có ngữ cảnh về dự án cụ thể của bạn. Chúng không biết liệu kho lưu trữ của bạn có tuân theo conventional commits hay lỗ hổng nào ảnh hưởng đến đoạn mã bạn vừa thay đổi. Mọi ngữ cảnh đều do bạn, người lập trình, nắm giữ.

Thế nhưng, một khái niệm mới đang nổi lên, hứa hẹn thay đổi hoàn toàn cục diện này: Kỹ Năng AI (AI Skills). Không chỉ là một công cụ mới, Kỹ Năng AI là một triết lý mới, cho phép các tác nhân trí tuệ nhân tạo học hỏi và thực hiện các tác vụ phức tạp một cách thông minh, phù hợp với ngữ cảnh riêng của từng dự án. Đây không phải là sự thay thế hoàn toàn cho CLI, mà là một lớp điều phối mạnh mẽ, nâng cao khả năng của các công cụ hiện có.

Bài viết này sẽ đi sâu vào việc Kỹ Năng AI là gì, tại sao chúng lại vượt trội so với các CLI truyền thống ở một số khía cạnh quan trọng, và cách chúng có thể biến đổi quy trình làm việc của nhà phát triển. Chúng ta sẽ khám phá những ví dụ cụ thể và cách bạn có thể bắt đầu tận dụng sức mạnh của chúng.

Kỹ Năng AI Là Gì? Định Nghĩa và Cấu Trúc Cơ Bản

Tại cốt lõi của nó, một Kỹ Năng AI là một tệp Markdown đơn giản, thường có tên SKILL.md. Điều đặc biệt là tệp này được thiết kế để “dạy” một tác nhân AI (AI agent) *cách* thực hiện một việc gì đó trong ngữ cảnh cụ thể của *dự án của bạn*. Không yêu cầu mã nhị phân, không bước biên dịch, không phụ thuộc vào thời gian chạy. Chỉ là các hướng dẫn thích ứng với những gì chúng tìm thấy.

Cấu Trúc Của Một Tệp SKILL.md

Một tệp SKILL.md bắt đầu bằng một phần đầu (frontmatter) theo định dạng YAML, định nghĩa các thuộc tính cơ bản của kỹ năng:

---
name: commit
description: >
  Tạo các commit git theo phong cách của kho lưu trữ.
  Sử dụng khi người dùng yêu cầu "commit các thay đổi", "/commit".
  Không sử dụng để đẩy mã hoặc tạo PR.
---
  • name: Tên của kỹ năng (ví dụ: commit).
  • description: Đây là toàn bộ API của kỹ năng. Tác nhân AI sẽ đọc mô tả này để quyết định khi nào nên kích hoạt kỹ năng. Các cụm từ như “Use when” (Sử dụng khi) định nghĩa các yếu tố kích hoạt, trong khi “Don’t use when” (Không sử dụng khi) giúp ngăn chặn các kích hoạt sai. Đây chính là “hợp đồng” giữa bạn và tác nhân AI.

Phần thân của tệp Markdown chứa các hướng dẫn chi tiết mà tác nhân AI sẽ tuân theo. Đây không phải là kiến thức chung mà AI đã có, mà là các quy ước cụ thể của dự án của bạn, những điểm cần lưu ý (gotchas) và các công cụ được ưu tiên.

Một tính năng mạnh mẽ khác là tiền tố !. Khi được đặt trước một lệnh shell trong phần hướng dẫn, nó sẽ tự động thực thi lệnh đó để tải trước ngữ cảnh cần thiết trước khi các hướng dẫn tiếp cận tác nhân AI. Điều này giúp cung cấp thông tin liên quan ngay lập tức cho tác nhân.

Kỹ Năng AI tuân theo một tiêu chuẩn mở, đảm bảo tính tương thích và di động. Chúng hoạt động trên nhiều công cụ AI khác nhau như Claude CodeCursor. Không cần phân phối mã nhị phân, bạn chỉ cần sao chép tệp, và kỹ năng sẽ hoạt động.

Năm Lợi Thế Vượt Trội Của Kỹ Năng AI So Với CLI Truyền Thống

Trong khi các công cụ CLI làm rất tốt việc thực hiện các tác vụ lặp đi lặp lại và mang tính quyết định, Kỹ Năng AI mang lại khả năng thích ứng, điều phối và hiểu biết ngữ cảnh mà các CLI đơn lẻ không thể có được. Dưới đây là năm lĩnh vực mà Kỹ Năng AI thực sự tỏa sáng:

1. Thích Ứng Với Các Quy Ước Của Dự Án Cụ Thể

Một CLI truyền thống thường cần một tệp cấu hình phức tạp, một bộ phân tích (parser) và một bộ phân loại (classifier) để hiểu được các quy tắc riêng của từng dự án. Kỹ Năng AI đơn giản hơn rất nhiều. Chẳng hạn, một kỹ năng commit có thể tải trước ngữ cảnh ngay khi nó được kích hoạt:

## Ngữ cảnh được tải trước

- Trạng thái: !`git status`
- Thay đổi: !`git diff HEAD`
- Lịch sử: !`git log --oneline -10`

## Kiểu tin nhắn

Phù hợp với các mẫu commit hiện có của kho lưu trữ từ lịch sử.

Khi kỹ năng này bắt đầu hoạt động, nó đã biết lịch sử commit gần đây của bạn, khu vực staging và các thay đổi. Nó đọc git log, xác định xem bạn đang sử dụng conventional commits, semantic commits hay một kiểu tùy chỉnh nào đó, và sau đó khớp với kiểu đó. Kỹ năng chỉ cần “đọc và suy luận” thay vì dựa vào các cấu hình cứng nhắc.

2. Điều Phối Nhiều Công Cụ và Tương Quan Kết Quả

Việc kết hợp nhiều công cụ CLI để đạt được một kết quả cụ thể thường đòi hỏi các lệnh phức tạp, pipe (|) và các tập lệnh shell tùy chỉnh để phân tích đầu ra. Kỹ Năng AI xử lý việc điều phối này một cách tự nhiên.

Ví dụ, một kỹ năng coverage không chỉ chạy các bài kiểm tra. Nó tương quan phạm vi kiểm thử (test coverage) với những thay đổi thực tế của bạn:

1. Chạy `git diff -U0 --no-color` để lấy các dòng đã thay đổi
2. Chạy bộ kiểm thử với coverage
3. Phân tích lcov.info:
   SF:src/utils/helper.ts
   DA:10,1    # dòng 10, được kiểm thử
   DA:11,0    # dòng 11, KHÔNG được kiểm thử
4. Ghép các dòng đã thay đổi với dữ liệu coverage
5. Báo cáo chỉ những dòng chưa được kiểm thử mà bạn thực sự đã thay đổi

Kết quả đầu ra cực kỳ chính xác: src/utils/helper.ts:11. Dòng này bạn đã thay đổi nhưng không có kiểm thử. Đây không phải là một báo cáo coverage chung chung hay một tỷ lệ phần trăm, mà là những dòng chính xác cần được chú ý. Một CLI truyền thống có thể chạy kiểm thử và tạo coverage, nhưng việc tương quan các phạm vi dòng của git diff với dữ liệu lcov, lọc chỉ những thay đổi của bạn và báo cáo giao điểm là một nhiệm vụ phức tạp mà Kỹ Năng AI thực hiện một cách liền mạch.

3. Phát Hiện Ngăn Xếp Công Nghệ và Điều Chỉnh Hành Vi

Các CLI thường là “một kích cỡ cho tất cả”, chạy các kiểm tra tương tự ở mọi nơi. Kỹ Năng AI có thể “đọc” dự án của bạn và điều chỉnh hành vi của chúng cho phù hợp.

Kỹ năng setup-pre-commit có thể thích ứng với bất kỳ dự án nào nó tìm thấy:

1. Phát hiện trình quản lý gói từ tệp khóa:
   package-lock.json (npm), pnpm-lock.yaml (pnpm),
   yarn.lock (yarn), bun.lockb (bun)
2. Cài đặt devDependencies bằng trình quản lý gói được phát hiện
3. Tạo .husky/pre-commit với trình quản lý gói được phát hiện
4. Nếu repo không có script typecheck trong package.json,
   bỏ qua dòng đó và thông báo cho người dùng

Nó đọc package.json, kiểm tra các script hiện có và tùy chỉnh tệp hook. Không cần cờ --package-manager npm hay tệp cấu hình. Nó đơn giản là nhìn vào những gì có sẵn và thích nghi.

Tương tự, kỹ năng a11y-audit có thể phát hiện React, Vue hoặc Svelte từ các dependencies, sau đó báo cáo các vi phạm cụ thể của framework, ví dụ về cách sử dụng htmlFor thay vì for trong React.

4. Đưa Ra Quyết Định Một Cách Tương Tác

Các CLI wizard có thể hỏi câu hỏi, nhưng chúng không thể suy luận liệu có nên bỏ qua chúng hay không. Kỹ Năng AI, với khả năng suy luận, có thể làm điều đó. Ví dụ, kỹ năng tk:prd của TracerKit chạy một quy trình phỏng vấn đầy đủ để thu thập yêu cầu:

Từng câu hỏi một. Bắt đầu với câu trả lời đề xuất của bạn
(đánh dấu là "Đề xuất" và liệt kê đầu tiên). Khám phá mã thay vì
hỏi khi có thể.

| Nhánh              | Câu hỏi chính                 | Bỏ qua khi            |
| Scope & Surface    | Ở đâu? Trang mới? Vai trò?     | CLI/thư viện         |
| Data & Concepts    | Định nghĩa, dữ liệu hiện có    | Không bao giờ bỏ qua  |
| Behavior           | Tương tác, lọc               | Không có hành vi hướng người dùng |
| Boundaries         | Ngoài phạm vi, trì hoãn        | Không bao giờ bỏ qua  |

Nó phỏng vấn bạn từng câu hỏi một, khám phá cơ sở mã để trả lời các câu hỏi trước khi hỏi, và bỏ qua toàn bộ các nhánh khi chúng không áp dụng. Điều này mang lại trải nghiệm tương tác thông minh và hiệu quả hơn rất nhiều so với một trình hướng dẫn CLI truyền thống.

5. Xác Minh và Diễn Giải Kết Quả

Các CLI và script mang tính quyết định: cùng một đầu vào, cùng một đầu ra, mọi lúc. Kỹ Năng AI mang tính phi quyết định: chúng suy luận, thích ứng và đưa ra phán đoán. Các quy trình làm việc tốt nhất kết hợp cả hai.

Kỹ năng tk:check của TracerKit xác minh việc triển khai của bạn dựa trên kế hoạch:

Sử dụng một subagent đa năng (chỉ đọc, không ghi tệp):

1. Đọc mọi phần của kế hoạch
2. Đối với mỗi hộp kiểm, kiểm tra với cơ sở mã
3. Chạy bộ kiểm thử của dự án
4. So sánh các câu chuyện người dùng từ PRD với hành vi thực tế

Phân loại các phát hiện:
- BLOCKERS — ngăn chặn chuyển sang trạng thái hoàn thành
- SUGGESTIONS — cải tiến, không chặn

Nó tạo ra một subagent chỉ đọc để đọc kế hoạch, đọc mã, chạy kiểm thử và phân loại các phát hiện, giúp bạn biết điều gì ngăn chặn việc triển khai so với những gì là cải tiến đáng có. Tương tự, kỹ năng safe-repo kết hợp một script bash để quét các bí mật (AWS keys, API tokens) với khả năng suy luận cấp độ kỹ năng để lọc các dương tính giả, kiểm tra lịch sử và tạo báo cáo theo ngữ cảnh.

Kỹ năng coverage cũng hoạt động theo cách tương tự: một script Python phân tích dữ liệu lcov một cách máy móc, trong khi kỹ năng quyết định những gì cần báo cáo và tại sao nó lại quan trọng.

Kỹ Năng AI Trong Thực Tế: Quy Trình Làm Việc Thông Minh

Kỹ Năng AI không chỉ được kích hoạt bằng các lệnh /name. Trường description của chúng đóng vai trò như một yếu tố kích hoạt ngôn ngữ tự nhiên. Tác nhân AI đọc mô tả của mọi kỹ năng, so sánh với những gì bạn đã nói và kích hoạt kỹ năng phù hợp.

Một lời nhắc duy nhất có thể xâu chuỗi nhiều kỹ năng mà không cần một lệnh slash nào:

"Tôi đã hoàn thành tính năng này. Chạy các bài kiểm thử, gửi các thay đổi của tôi và mở một PR."

Câu nói này có thể kích hoạt ba kỹ năng: validate-code (chạy lint và kiểm thử), ship (nhóm các thay đổi thành các commit nguyên tử và đẩy), create-pull-request (phát hiện nhánh cơ sở và mở PR với tóm tắt từ diff).

Không cờ, không pipe, không điều phối thủ công. Bạn mô tả ý định của mình; các kỹ năng xử lý phần còn lại.

Dưới đây là cách một số kỹ năng này hoạt động:

  • Kỹ năng ship: Đảm bảo chất lượng trước khi đẩy mã

    Kỹ năng ship đảm bảo chất lượng trước khi chạm vào git:

    1. Chạy `npm run lint` — dừng nếu thất bại
    2. Chạy `npm test` — dừng nếu thất bại
    3. Nhóm các thay đổi thành các commit nguyên tử (gọi `atomic-commits`)
    4. Đẩy bằng `git push`

    Khi bạn nói “ship it” hoặc “commit và đẩy,” kỹ năng này chạy linter, kiểm thử của bạn, nhóm các thay đổi theo mối quan tâm, commit từng nhóm riêng biệt và đẩy. Bốn CLI, một cụm từ.

  • Kỹ năng atomic-commits: Nhóm các thay đổi một cách thông minh

    Kỹ năng atomic-commitsship dựa vào đọc toàn bộ diff và suy luận về những tệp nào thuộc về nhau:

    1. Đọc `git diff HEAD` và `git status`
    2. Xác định các nhóm logic:
       - Mã tính năng (tệp src triển khai một thứ)
       - Kiểm thử cho tính năng đó
       - Thay đổi cấu hình (package.json, tsconfig)
       - Thay đổi chỉ định dạng
    3. Đối với mỗi nhóm: stage theo tên, commit, xác minh

    Khi bạn nói “nhóm các commit của tôi” hoặc “tách các thay đổi thành các commit liên quan”, kỹ năng này suy luận dựa trên nội dung diff thực tế, không phải đường dẫn tệp. Một commit cho mỗi lý do thay đổi.

  • Kỹ năng create-pull-request: Tạo PR tự động và thông minh

    Kỹ năng create-pull-request xâu chuỗi gitgh một cách tuần tự:

    1. Phát hiện nhánh cơ sở: `git fetch origin && git remote show origin`
    2. Phân tích tất cả các commit kể từ nhánh cơ sở: `git diff [base]...HEAD`
    3. Đẩy: `git push -u origin HEAD`
    4. Tạo PR: `gh pr create` với tiêu đề và nội dung từ phân tích diff

    “Mở một PR,” “tạo một PR,” “gửi một PR” đều kích hoạt nó. Kỹ năng này phát hiện nhánh cơ sở của bạn, đọc toàn bộ diff của bạn, viết tiêu đề và tóm tắt từ các thay đổi, đẩy và mở PR.

  • Kỹ năng architecture-audit: Phân tích và cải thiện kiến trúc

    Kỹ năng architecture-audit còn đi xa hơn. Nó khám phá cơ sở mã, xác định các module được ghép nối chặt chẽ, sau đó tạo ra 3+ subagent song song để thiết kế các giao diện cạnh tranh:

    1. Khám phá cơ sở mã — ghi chú các điểm khó khăn:
       - Hiểu một khái niệm đòi hỏi phải chuyển đổi giữa nhiều tệp
       - Giao diện của một module gần như phức tạp như việc triển khai của nó
       - Các module được ghép nối chặt chẽ tạo ra rủi ro tích hợp ở các mối nối
    2. Trình bày các ứng cử viên với phân tích khớp nối
    3. Người dùng chọn một ứng cử viên
    4. Tạo 3+ sub-agent song song, mỗi agent có các ràng buộc khác nhau:
       - "Tối thiểu — nhắm mục tiêu tối đa 1–3 điểm vào"
       - "Tối đa tính linh hoạt — hỗ trợ nhiều trường hợp sử dụng"
       - "Tối ưu hóa cho người gọi phổ biến nhất"
    5. So sánh các thiết kế, đề xuất một giải pháp kết hợp

    Khi bạn nói “tìm cơ hội tái cấu trúc” hoặc “cải thiện kiến trúc,” kỹ năng này đọc mã, xác định các điểm khó khăn, trình bày các tùy chọn và thiết kế giải pháp. Không có CLI nào làm được điều đó.

Mỗi kỹ năng này đều gọi các CLI mà bạn sẽ chạy thủ công. Sự khác biệt là bạn không cần phải pipe đầu ra, phân tích kết quả hoặc quyết định bước tiếp theo. Kỹ năng sẽ xử lý điều đó.

Kỹ Năng AI Kết Hợp Thành Các Quy Trình Làm Việc Phức Hợp

Một trong những sức mạnh lớn nhất của Kỹ Năng AI là khả năng kết hợp chúng thành các quy trình làm việc phức tạp. Các kỹ năng có thể tham chiếu lẫn nhau thông qua các phần “Xem thêm” (See Also), tạo thành các đường ống mà không cần ghép nối chặt chẽ.

tk:prd → tk:plan → implement with tdd → tk:check
validate-code → atomic-commits → ship

Mỗi kỹ năng là độc lập nhưng được thiết kế để chuyển giao cho kỹ năng tiếp theo. ship gọi atomic-commits, cái này lại gọi commit. Chỉ một cụm từ có thể kích hoạt một chuỗi hành động phức tạp, tự động hóa toàn bộ một phần của quy trình phát triển.

Bắt Đầu Với Kỹ Năng AI

Để bắt đầu tạo Kỹ Năng AI của riêng bạn là khá đơn giản. Một kỹ năng tối thiểu chỉ khoảng 20 dòng Markdown:

  1. Tạo tệp SKILL.md với phần đầu (frontmatter) bao gồm tên (name) và mô tả (description) với các yếu tố kích hoạt rõ ràng.
  2. Viết các hướng dẫn. Tập trung vào những gì tác nhân AI sẽ không biết nếu không có bạn: các quy ước của dự án, các điểm khó khăn (gotchas) và các công cụ được ưu tiên của bạn.
  3. Tải trước ngữ cảnh bằng các lệnh có tiền tố ! cho dữ liệu mà kỹ năng luôn cần.
  4. Thêm các script vào thư mục scripts/ chỉ khi bạn cần tính toán mang tính quyết định (deterministic computation).

Hãy nhớ rằng, mô tả của kỹ năng là API của nó. Hãy làm cho nó thật cụ thể. “Sử dụng khi người dùng yêu cầu commit” là rõ ràng. “Giúp với các tác vụ git” thì không. Mục tiêu là dạy *cách tiếp cận* tác vụ, không phải những gì cần tạo ra cho một trường hợp cụ thể. Một kỹ năng có thể tổng quát hóa qua nhiều tình huống sẽ tốt hơn một kỹ năng được mã hóa cứng cho một vấn đề chính xác của ngày hôm nay.

Bạn có thể duyệt và cài đặt các kỹ năng cộng đồng từ skills.sh, hoặc xem các kỹ năng mẫu của tác giả bao gồm toàn bộ chu trình phát triển, từ TDD đến tạo PR và kiểm tra khả năng truy cập.

Tổng Kết

Các công cụ dòng lệnh (CLI) sẽ không đi đâu cả. git, gh, npm và các script tùy chỉnh của bạn vẫn làm tốt nhất công việc của chúng: các tác vụ mang tính quyết định, có thể lặp lại.

Kỹ Năng AI không cạnh tranh với điều đó. Chúng nằm ở lớp trên, gọi đúng công cụ vào đúng thời điểm và suy luận về ý nghĩa của kết quả. Sự thay đổi lớn nằm ở nơi ngữ cảnh được lưu trữ. Với CLI, bạn mang theo ngữ cảnh. Với Kỹ Năng AI, tệp Markdown mang theo ngữ cảnh đó. Các quy ước, các điểm khó khăn, các công cụ ưu tiên của bạn, tất cả được mã hóa một lần và áp dụng mọi lúc.

Kỹ Năng AI tuân theo một tiêu chuẩn mở, hoạt động trên nhiều công cụ AI và không tốn chi phí phân phối. Chỉ một tệp Markdown. Không cần bước biên dịch. Không cần thời gian chạy. Đối với các quy trình làm việc của nhà phát triển đòi hỏi kiến thức dự án, hành vi thích ứng và suy luận đa bước, đó là quá đủ để tạo nên một cuộc cách mạng.

Tài Nguyên Tham Khảo

Chỉ mục