showme-studio 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "showme-studio",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Cai bo agent Showme Studio vao ~/.claude/skills/",
5
5
  "type": "module",
6
6
  "bin": {
@@ -11,7 +11,8 @@
11
11
  "skills"
12
12
  ],
13
13
  "scripts": {
14
- "sync": "node scripts/sync-skills.js"
14
+ "sync": "node scripts/sync-skills.js",
15
+ "prepublishOnly": "node scripts/sync-skills.js"
15
16
  },
16
17
  "license": "UNLICENSED"
17
18
  }
@@ -44,7 +44,7 @@ bài học, sai lầm, góc nhìn khác biệt và điều người đọc có t
44
44
 
45
45
  Nếu chưa có chất liệu sẵn, chạy subcommand `topic` — dùng Big 5 để tìm chủ đề đang có sức kéo thật (xem mục riêng bên dưới).
46
46
 
47
- Nếu bài này đã có sẵn thư mục trong `noi-dung/1-ideas/{slug}/` (xem quy ước ở `agents/README.md` mục "Cấu trúc thư mục nội dung quản lý kiểu Kanban"), dùng lại đúng thư mục đó. Nếu chưa có, tạo mới trong `1-ideas/`.
47
+ Nếu bài này đã có sẵn thư mục trong `noi-dung/1-ideas/{slug}/` (xem quy ước ở mục "Quy ước thư mục Kanban" trong file này), dùng lại đúng thư mục đó. Nếu chưa có, tạo mới trong `1-ideas/`.
48
48
 
49
49
  ### Bước 2 — Làm rõ người đọc
50
50
 
@@ -118,7 +118,7 @@ Hãy biên tập theo 4 vòng:
118
118
  4. Đề xuất phiên bản chỉnh sửa nhưng vẫn giữ giọng gần gũi, rõ ràng, không quảng cáo.
119
119
  ```
120
120
 
121
- Sau khi chốt bản cuối, lưu vào `blog.md` — cùng thư mục với bài Facebook đi kèm (`agent-fbpost`) và ảnh (`agent-image`) nếu bài này có, rồi di chuyển cả thư mục bài viết từ `2-drafting/` sang `noi-dung/3-review/{slug}/`. Xem quy ước ở `agents/README.md` mục "Cấu trúc thư mục nội dung quản lý kiểu Kanban".
121
+ Sau khi chốt bản cuối, lưu vào `blog.md` — cùng thư mục với bài Facebook đi kèm (`agent-fbpost`) và ảnh (`agent-image`) nếu bài này có, rồi di chuyển cả thư mục bài viết từ `2-drafting/` sang `noi-dung/3-review/{slug}/`. Xem quy ước ở mục "Quy ước thư mục Kanban" trong file này.
122
122
 
123
123
  ---
124
124
 
@@ -141,8 +141,16 @@ Với mỗi nhóm, gợi ý 2-3 chủ đề bài viết cụ thể.
141
141
 
142
142
  Nguyên tắc: đây là những câu hỏi khách hàng thật đang né tránh trả lời công khai — trả lời thẳng, minh bạch sẽ kéo đúng người đọc có nhu cầu thật.
143
143
 
144
+ Nếu đã có `_context/performance-log.md` (do `agent-feedback` ghi), đọc trước để ưu tiên chủ đề/dạng bài đang chạy tốt thật, thay vì chỉ đoán theo Big 5.
145
+
144
146
  ---
145
147
 
148
+ ## Lỗi AI cần tránh (đọc CLAUDE.md trước khi viết)
149
+
150
+ Trước khi viết và ở vòng biên tập (Bước 5), đọc mục **"Lỗi AI cần tránh"** trong `CLAUDE.md` cá nhân và rà bản nháp theo đúng danh sách đó. Mặc định danh sách gồm: không dùng dấu phẩy trước "và" (", và"), không chen gạch ngang "-" giữa câu, không dùng gạch ngang dài (—), không dùng khuôn "không phải X, mà là Y", không viết hoa sau dấu hai chấm.
151
+
152
+ **Học lỗi mới:** nếu ở Bước 5 user tự sửa một khuôn AI mà danh sách chưa có (hoặc phản hồi "câu này nghe vẫn giống AI"), hỏi user có muốn thêm lỗi đó vào mục "Lỗi AI cần tránh" trong `CLAUDE.md` không. Nếu đồng ý, thêm 1 dòng mô tả ngắn gọn lỗi đó — để bài sau không mắc lại. Không tự ghi khi chưa hỏi.
153
+
146
154
  ## Nguyên tắc giữ chất riêng
147
155
 
148
156
  - Luôn đưa trải nghiệm thật vào trước khi nhờ AI viết
@@ -150,8 +158,7 @@ Nguyên tắc: đây là những câu hỏi khách hàng thật đang né tránh
150
158
  - Ưu tiên câu ngắn, ý rõ, ví dụ cụ thể
151
159
  - Xóa các câu quá bóng bẩy nhưng không có thông tin
152
160
  - Giữ lại những quan sát riêng, kể cả khi chưa hoàn hảo
153
- - Không viết hoa sau dấu hai chấm, không dùng gạch ngang dài (—)
154
- - Nếu đề cập công cụ/dịch vụ, ghi rõ giá — minh bạch chi phí
161
+ - Nếu đề cập công cụ/dịch vụ, ghi giá, minh bạch chi phí
155
162
 
156
163
  ## Dấu hiệu bài viết bị AI hóa
157
164
 
@@ -161,6 +168,26 @@ Nguyên tắc: đây là những câu hỏi khách hàng thật đang né tránh
161
168
  - Không có quan điểm hoặc lựa chọn rõ
162
169
  - Đọc xong không thấy người viết đã thật sự trải qua điều đó
163
170
 
171
+ ## Ví dụ before/after
172
+
173
+ Mở bài, chủ đề "vì sao chuyên gia nên có website riêng".
174
+
175
+ **Trước (giọng AI):**
176
+ > Trong thời đại số hiện nay, xây dựng thương hiệu cá nhân không chỉ quan trọng mà còn là yếu tố sống còn. Một website chuyên nghiệp sẽ giúp bạn khẳng định vị thế, và tạo dựng niềm tin với khách hàng.
177
+
178
+ **Sau (giọng thật):**
179
+ > Tôi từng nghĩ có Facebook là đủ. Đến khi một khách hỏi "anh có web không để em xem kỹ hơn", tôi mới thấy mình thiếu một chỗ để người ta đọc nghiêm túc về mình.
180
+ >
181
+ > Website không làm bạn nổi tiếng hơn. Nó cho người đang cân nhắc một lý do để tin.
182
+
183
+ Đã sửa gì: bỏ "trong thời đại số hiện nay", bỏ khuôn "không chỉ... mà còn...", bỏ dấu phẩy trước "và", thay câu chung chung bằng một tình huống thật và một quan điểm rõ.
184
+
185
+ ## Quy ước thư mục Kanban
186
+
187
+ Mỗi bài viết (blog + fbpost + `images/`) là 1 thư mục `{slug}/` nằm trong 1 trong 5 stage của `noi-dung/`: `1-ideas → 2-drafting → 3-review → 4-approved → 5-published`. Chuyển stage = di chuyển cả thư mục sang stage kế, không cần thêm field trạng thái. `{slug}` viết thường, không dấu, nối bằng `-` (ví dụ `cach-dat-tieu-de-thu-hut`). Bài đơn giản chỉ 1 file để thẳng `.md` trong thư mục stage, không bắt buộc gói thư mục.
188
+
189
+ Hai file context dùng chung, đặt ngoài các stage: `_context/published-index.md` (mục lục bài đã đăng — `agent-platform` ghi, `agent-seo` đọc để internal link) và `_platforms/{nền tảng}.json` (cấu hình nền tảng, không chứa token thật).
190
+
164
191
  ## Files
165
192
 
166
193
  ```
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: agent-check
3
+ description: "Kiểm tra sức khoẻ hệ thống content và context dự án trong thư mục làm việc: cấu trúc thư mục noi-dung/ đúng quy ước chưa, context dự án (CLAUDE.md + file mô tả sản phẩm/giá/ICP) có đầy đủ, nhất quán, còn cập nhật không, các file liên kết chặt chưa, bài có kẹt/thiếu file không, agent phối hợp có đứt mạch không. Chạy khi muốn soát lại trước khi bàn giao hoặc khi thấy mọi thứ đang ngổn ngang. Không rà chất lượng từng bài (việc đó ở agent-blog/fbpost/seo)."
4
+ argument-hint: "[(empty) chạy full check, hoặc subcommand: structure | context | flow | fix]"
5
+ version: "1.1.0"
6
+ ---
7
+
8
+ # /agent-check — Soát Sức Khoẻ Hệ Thống + Context Dự Án
9
+
10
+ Bộ agent Showme Studio chỉ chạy mượt khi các mảnh khớp nhau: thư mục `noi-dung/` đúng quy ước Kanban, `CLAUDE.md` đủ mục và có nội dung thật để các agent đọc, `published-index.md` phản ánh đúng bài đã đăng, `_platforms/` có cấu hình nền tảng. Khi làm nhiều bài, part-time, dễ có bài kẹt sai chỗ hoặc context lệch/lỗi thời mà không ai để ý. Agent này rà một lượt và báo cáo, **chỉ đọc, không tự sửa** (trừ subcommand `fix` khi user yêu cầu rõ).
11
+
12
+ Agent này không viết nội dung, không đăng bài, và không rà chất lượng từng bài (việc đó nằm ở agent-blog bước biên tập, agent-fbpost `check`, agent-seo `onpage`). Nó lo 3 việc: cấu trúc thư mục, context dự án, và mạch phối hợp giữa các agent.
13
+
14
+ ## Routing
15
+
16
+ | Input | Hành động |
17
+ |---|---|
18
+ | _(empty)_ hoặc `help` | Chạy **Full Check** — cả 3 nhóm bên dưới rồi in báo cáo |
19
+ | `structure` | Chỉ kiểm tra cấu trúc thư mục `noi-dung/` |
20
+ | `context` | Chỉ kiểm tra context dự án — nội dung + liên kết file |
21
+ | `flow` | Chỉ kiểm tra mạch phối hợp giữa các agent theo từng bài |
22
+ | `fix [vấn đề]` | Đề xuất cách sửa 1 vấn đề đã tìm ra, làm sau khi user chọn |
23
+
24
+ ---
25
+
26
+ ## Full Check — chạy tuần tự 3 nhóm
27
+
28
+ Đầu tiên, quét thư mục làm việc: liệt kê cây thư mục `noi-dung/` (5 stage + `_platforms/` + `_context/`), đọc `CLAUDE.md`, mọi file mô tả context dự án nếu có (ví dụ `CONTEXT/*.md`, file sản phẩm/giá/ICP/giọng văn), `_context/published-index.md`, các file `_platforms/*.json`. Sau đó chấm theo 3 nhóm dưới, mỗi phát hiện gắn mức độ: 🔴 chặn (phải sửa), 🟡 nên sửa, 🟢 ổn.
29
+
30
+ Quy ước thư mục Kanban dùng để đối chiếu: mỗi bài là 1 thư mục `{slug}/` (blog + fbpost + `images/`) nằm trong 1 trong 5 stage `1-ideas → 2-drafting → 3-review → 4-approved → 5-published`; chuyển stage = di chuyển cả thư mục; `{slug}` viết thường không dấu nối bằng `-`; bài đơn giản để 1 file `.md` lẻ được. Hai file dùng chung: `_context/published-index.md` và `_platforms/{nền tảng}.json` (không chứa token thật).
31
+
32
+ ### Nhóm 1 — Cấu trúc thư mục (`structure`)
33
+
34
+ Đối chiếu với quy ước Kanban nêu ở trên:
35
+
36
+ 1. Có đủ 5 thư mục stage (`1-ideas`, `2-drafting`, `3-review`, `4-approved`, `5-published`) không? Thiếu thư mục nào báo 🟡
37
+ 2. Mỗi bài có phải là 1 thư mục `{slug}/` không, hay có file `.md` lẻ nằm thẳng trong stage? (bài đơn giản để lẻ được, nhưng bài có ảnh/fbpost mà không gói thư mục thì báo 🟡)
38
+ 3. `{slug}` có đúng định dạng chữ thường, không dấu, nối bằng `-` không? Slug có dấu/có khoảng trắng báo 🟡
39
+ 4. Bài ở `5-published/` có `featured.png` trong `images/` không, có dòng URL bài đã đăng trong `blog.md` không? Thiếu báo 🟡 (dấu hiệu đăng thủ công mà quên cập nhật)
40
+ 5. Có thư mục `{slug}/` rỗng hoặc chỉ có `images/` mà không có `blog.md`/`fbpost.md` không? Báo 🔴 (bài mồ côi)
41
+
42
+ ### Nhóm 2 — Context dự án (`context`)
43
+
44
+ Chia 2 phần: nội dung context có tốt không, và các file có khớp nhau không.
45
+
46
+ **2A — Nội dung context (đọc sâu, không chỉ đếm file):**
47
+
48
+ 1. `CLAUDE.md` có tồn tại không? Nếu thiếu hẳn, báo 🔴 (mọi agent viết sẽ dùng giọng mặc định, không phải giọng người dùng).
49
+ 2. Có đủ các mục agent cần đọc không: "Cách tôi thường nói", "Tone theo loại bài", "Điều tôi không muốn", "Lỗi AI cần tránh", "Style Token ảnh"? Thiếu mục nào báo 🟡 kèm agent bị ảnh hưởng.
50
+ 3. Mỗi mục có nội dung thật hay còn để trống/placeholder (`[điền]`, `[Cần cập nhật]`, `[...]`, `[từ Bước ...]`)? Còn placeholder báo 🟡 — context chưa hoàn thiện, agent sẽ đoán bừa.
51
+ 4. "Style Token ảnh" có mô tả cụ thể (phong cách, bảng màu, ánh sáng) hay còn chung chung? Chung chung báo 🟡 (ảnh sẽ mỗi lần một kiểu).
52
+ 5. Mâu thuẫn nội bộ: "Điều tôi không muốn" có chọi với "Cách tôi thường nói" không; Tone khai báo có ngược với ví dụ giọng không? Có mâu thuẫn báo 🟡, chỉ rõ 2 chỗ chọi nhau.
53
+ 6. Nếu có file mô tả sản phẩm/giá/ICP (CONTEXT/*.md hoặc tương tự): đối chiếu giá/tên sản phẩm nêu trong đó với giá/tên xuất hiện ở bài đã đăng trong `5-published/`. Lệch nhau báo 🟡 (dấu hiệu context cũ hoặc bài sai giá). Nếu file context có ghi ngày cập nhật và đã quá cũ so với hoạt động gần đây, nhắc 🟡 soát lại.
54
+
55
+ **2B — Liên kết file:**
56
+
57
+ 7. `_context/published-index.md` có tồn tại không? Đối chiếu từng dòng với thư mục `5-published/`:
58
+ - Có bài trong `5-published/` mà thiếu dòng trong index không? Báo 🔴 (agent-seo sẽ không tìm được để internal link).
59
+ - Có dòng trong index mà không còn thư mục tương ứng không? Báo 🟡 (link gãy).
60
+ 8. Mỗi nền tảng đang dùng có file `_platforms/{nền tảng}.json` không? File có lỡ chứa token/password thật không (chỉ được chứa cấu hình)? Có token thật báo 🔴 ngay.
61
+
62
+ ### Nhóm 3 — Mạch phối hợp agent (`flow`)
63
+
64
+ Rà từng bài xem có đứt mạch bàn giao giữa các agent không:
65
+
66
+ 1. Bài ở `2-drafting/` hoặc `3-review/` mà `blog.md` chỉ có dàn ý, đứng yên lâu → gợi ý chạy tiếp `agent-blog`/`agent-seo` bước biên tập
67
+ 2. Bài ở `4-approved/` đã lâu chưa đăng → gợi ý chạy `agent-platform`
68
+ 3. Bài có `blog.md` tham chiếu ảnh `![...](images/...)` mà file ảnh không tồn tại trong `images/` → báo 🔴 (đăng lên sẽ vỡ ảnh), gợi ý `agent-image`
69
+ 4. Bài SEO có nhắc Pillar/Cluster nhưng `published-index.md` chưa có bài liên quan để internal link → gợi ý bài cần viết trước
70
+ 5. Bài ở `5-published/` nhưng `CLAUDE.md` chưa được cập nhật từ bài đó → gợi ý chạy `agent-onboarding update [slug]` để học văn phong
71
+ 6. Bài đã đăng lâu nhưng chưa có dòng trong `_context/performance-log.md` → gợi ý chạy `agent-feedback log [slug]` để ghi kết quả thật
72
+
73
+ ### Báo cáo cuối
74
+
75
+ In gọn theo format:
76
+
77
+ ```text
78
+ KIỂM TRA HỆ THỐNG CONTENT — [ngày]
79
+
80
+ 🔴 Cần sửa ngay (n):
81
+ - [vấn đề] → [agent/cách xử lý gợi ý]
82
+
83
+ 🟡 Nên sửa (n):
84
+ - [vấn đề] → [gợi ý]
85
+
86
+ 🟢 Ổn:
87
+ - [các mục đã đạt]
88
+
89
+ Gợi ý bước tiếp theo: [1-2 việc ưu tiên nhất]
90
+ ```
91
+
92
+ Không tự sửa gì ở bước này. Nếu user muốn xử lý 1 vấn đề, chạy `fix`.
93
+
94
+ ---
95
+
96
+ ## Subcommand: `fix [vấn đề]` — Đề xuất và thực hiện sửa
97
+
98
+ Chỉ chạy sau khi user chọn vấn đề cụ thể từ báo cáo. Với mỗi vấn đề:
99
+
100
+ 1. Nói rõ sẽ làm gì (di chuyển thư mục, thêm dòng vào index, tạo mục thiếu trong CLAUDE.md...) và hệ quả
101
+ 2. Chờ user xác nhận
102
+ 3. Thực hiện, rồi báo lại kết quả
103
+
104
+ Không tự đăng bài, không tự publish, không tự ghi token. Việc chuyển stage `3-review → 4-approved` luôn để user tự quyết (đó là bước người đọc lại và duyệt), agent-check không tự duyệt thay.
105
+
106
+ ---
107
+
108
+ ## Nguyên tắc
109
+
110
+ - Mặc định chỉ đọc và báo cáo — không sửa khi chưa được yêu cầu rõ
111
+ - Báo cáo phải chỉ đúng file/thư mục cụ thể, không nói chung chung ("có vài bài chưa ổn" là vô dụng)
112
+ - Ưu tiên phát hiện làm gãy luồng thật (ảnh thiếu, index lệch, token lộ) hơn là bắt lỗi hình thức nhỏ
113
+ - Gợi ý bước tiếp theo luôn gắn với đúng agent phụ trách, để user biết gõ gì tiếp
114
+ - Tôn trọng ngoại lệ trong `CLAUDE.md` của dự án: nếu dự án có quy ước riêng (ví dụ đặt file lẻ thay vì gói thư mục), đọc quy ước đó trước khi báo lỗi
115
+
116
+ ## Files
117
+
118
+ ```
119
+ agent-check/
120
+ └── SKILL.md — router + full check (3 nhóm) + fix (file này)
121
+ ```
@@ -90,30 +90,59 @@ Hãy kiểm tra từng rule sau và chỉ rõ câu nào vi phạm:
90
90
  được có CTA)
91
91
  4. Tên nền tảng/công cụ có viết đủ nghĩa không (ví dụ "website dùng Wix"
92
92
  thay vì chỉ "Wix")?
93
- 5. Danh sách có dùng gạch ngang dài (—) không? Nếu có, đổi thành dấu
94
- hai chấm hoặc xuống dòng
95
- 6. Có ai cần được cảm ơn/tag theo tên thật không đang thiếu?
96
- 7. Thông tin phụ thuộc bên thứ ba disclaimer " thể thay đổi" chưa?
97
- 8. Có header thừa cho phần chỉ 1-2 bullet không? (bỏ nếu thừa)
98
- 9. Bài kết bằng CTA ép hay bằng "big picture" đúng loại bài?
99
-
100
- Chỉ sửa những câu vi phạm, giữ nguyên phần đã ổn.
93
+ 5. Danh sách có dùng gạch ngang dài (—) hoặc chen gạch ngang "-"
94
+ giữa câu không? Nếu có, đổi thành dấu phẩy, dấu hai chấm hoặc xuống dòng
95
+ 6. Có dùng dấu phẩy trước "và" (", và") không? Bỏ dấu phẩy hoặc tách câu
96
+ 7. dùng khuôn "không phải X, Y" không? Viết lại cho tự nhiên
97
+ 8. Có ai cần được cảm ơn/tag theo tên thật không đang thiếu?
98
+ 9. Thông tin phụ thuộc bên thứ ba disclaimer " thể thay đổi" chưa?
99
+ 10. Có header thừa cho phần chỉ 1-2 bullet không? (bỏ nếu thừa)
100
+ 11. Bài kết bằng CTA ép hay bằng "big picture" đúng loại bài?
101
+
102
+ Đối chiếu thêm với mục "Lỗi AI cần tránh" trong CLAUDE.md — nếu có lỗi
103
+ nào đã ghi ở đó mà bản nháp còn mắc, sửa luôn. Chỉ sửa những câu vi
104
+ phạm, giữ nguyên phần đã ổn.
101
105
  ```
102
106
 
103
- Sau khi chốt bản cuối, lưu vào `fbpost.md` trong thư mục bài viết hiện tại. Nếu bài Facebook này đi kèm 1 bài blog, dùng chung thư mục `{slug}/` với `blog.md` thư mục này đang nằm stage nào trong `noi-dung/1-ideas 2-drafting → 3-review → 4-approved → 5-published` thì `fbpost.md` cũng di chuyển theo cùng lúc với cả thư mục (do `agent-blog`/`agent-seo` xử lý). Xem quy ước ở `agents/README.md` mục "Cấu trúc thư mục nội dung — quản lý kiểu Kanban".
107
+ Nếu user tự sửa một khuôn AI checklist `CLAUDE.md` chưa có, hỏi muốn thêm vào mục "Lỗi AI cần tránh" trong `CLAUDE.md` không đồng ý thì thêm 1 dòng, không tự ghi khi chưa hỏi.
108
+
109
+ Sau khi chốt bản cuối, lưu vào `fbpost.md` trong thư mục bài viết hiện tại. Nếu bài Facebook này đi kèm 1 bài blog, dùng chung thư mục `{slug}/` với `blog.md` — thư mục này đang nằm ở stage nào trong `noi-dung/1-ideas → 2-drafting → 3-review → 4-approved → 5-published` thì `fbpost.md` cũng di chuyển theo cùng lúc với cả thư mục (do `agent-blog`/`agent-seo` xử lý). Xem quy ước ở mục "Quy ước thư mục Kanban" trong file này.
104
110
 
105
111
  ---
106
112
 
107
113
  ## Nguyên tắc
108
114
 
109
115
  - Không viết hoa sau dấu hai chấm
110
- - Không dùng gạch ngang dài (—), thay bằng dấu phẩy, xuống dòng, hoặc viết lại câu
116
+ - Không dùng gạch ngang dài (—) hoặc chen gạch ngang "-" giữa câu, thay bằng dấu phẩy, xuống dòng, hoặc viết lại câu
117
+ - Không dùng dấu phẩy trước "và" (", và"), không dùng khuôn "không phải X, mà là Y"
111
118
  - Không xuống dòng ngẫu nhiên, chỉ xuống dòng khi chuyển ý thật sự
112
119
  - Không hook marketing ở đầu bài
113
120
  - Không CTA ở cuối bài, trừ bài launch (thông tin đầy đủ, cần hành động cụ thể)
114
121
  - Minh bạch chi phí — nếu đề cập công cụ/dịch vụ, ghi rõ giá
115
122
  - Giữ nhịp câu ngắn, có thể để một dòng hơi gãy nếu đó là cách nói tự nhiên — không biên tập quá sạch đến mất chất cá nhân
116
123
 
124
+ ## Ví dụ before/after
125
+
126
+ Bài buildinpublic, khoe vừa giúp một khách sửa website.
127
+
128
+ **Trước (hook giả + CTA ép):**
129
+ > 🔥 BẠN CÓ BIẾT? 90% chuyên gia đang bỏ lỡ cơ hội vàng vì chưa có website riêng! Đừng để mình tụt lại phía sau. Inbox ngay để được tư vấn miễn phí!
130
+
131
+ **Sau (giọng thật):**
132
+ > Tuần trước một chị coach nhắn: "website của chị lỗi rồi, khách vào không đọc được".
133
+ >
134
+ > Chị loay hoay 3 ngày không sửa nổi. Mình gỡ trong 20 phút, phần lớn thời gian là ngồi chỉ chị cách tự đổi sau này để lần sau không phải hỏi ai.
135
+ >
136
+ > Làm web không khó. Không có ai chỉ đường mới khó.
137
+
138
+ Đã sửa gì: bỏ emoji giật, bỏ số liệu bịa "90%", bỏ CTA "inbox ngay", mở bằng một chuyện thật, kết bằng một câu quan điểm thay vì lời mời mua.
139
+
140
+ ## Quy ước thư mục Kanban
141
+
142
+ Mỗi bài viết (blog + fbpost + `images/`) là 1 thư mục `{slug}/` nằm trong 1 trong 5 stage của `noi-dung/`: `1-ideas → 2-drafting → 3-review → 4-approved → 5-published`. Chuyển stage = di chuyển cả thư mục sang stage kế, không cần thêm field trạng thái. `{slug}` viết thường, không dấu, nối bằng `-` (ví dụ `cach-dat-tieu-de-thu-hut`). Bài đơn giản chỉ 1 file để thẳng `.md` trong thư mục stage, không bắt buộc gói thư mục.
143
+
144
+ Hai file context dùng chung, đặt ngoài các stage: `_context/published-index.md` (mục lục bài đã đăng — `agent-platform` ghi, `agent-seo` đọc để internal link) và `_platforms/{nền tảng}.json` (cấu hình nền tảng, không chứa token thật).
145
+
117
146
  ## Files
118
147
 
119
148
  ```
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: agent-feedback
3
+ description: "Ghi lại kết quả thật của bài đã đăng (reach, tương tác, inbox, đơn) rồi phân tích bài nào chạy tốt để gợi ý hướng viết tiếp. Nhập số liệu bằng tay nên chạy được cả trên Claude Code lẫn Codex, không cần kết nối API nền tảng."
4
+ argument-hint: "[log [slug] để ghi số liệu, review để phân tích, hoặc (empty) xem hướng dẫn]"
5
+ version: "1.0.0"
6
+ ---
7
+
8
+ # /agent-feedback — Học Từ Kết Quả Thật
9
+
10
+ Bộ agent sản xuất nội dung, nhưng nếu không nhìn lại bài nào thật sự chạy, bạn viết mãi mà không biết đang đi đúng hướng không. Agent này đóng vòng lặp: bạn nhập số liệu thật của bài đã đăng, nó lưu lại và chỉ ra mẫu số chung của bài hiệu quả, để agent viết sau ưu tiên đúng hướng.
11
+
12
+ Nhập số liệu bằng tay (bạn tự đọc trên Facebook/web rồi gõ vào) — không kết nối API nền tảng, nên chạy y hệt trên Claude Code hay Codex.
13
+
14
+ ## Routing
15
+
16
+ | Input | Hành động |
17
+ |---|---|
18
+ | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
19
+ | `log [slug]` | Ghi số liệu 1 bài đã đăng vào `_context/performance-log.md` |
20
+ | `review` | Phân tích toàn bộ log, chỉ ra bài/chủ đề/dạng nào chạy tốt |
21
+
22
+ ---
23
+
24
+ ## `log [slug]` — Ghi số liệu một bài
25
+
26
+ Hỏi các số bạn có (bỏ trống được, không ép đủ hết):
27
+
28
+ ```text
29
+ Bài: [slug]
30
+ Kênh: web / Facebook / cả hai
31
+ - Reach/lượt xem:
32
+ - Like/reaction:
33
+ - Comment:
34
+ - Share:
35
+ - Inbox/tin nhắn về bài này:
36
+ - Đơn/đăng ký đến từ bài này (nếu lần được):
37
+ - Ghi chú: (đăng giờ nào, có chạy ads không, điều gì bất thường)
38
+ ```
39
+
40
+ Ghi 1 dòng vào `_context/performance-log.md` (tạo file với header bảng nếu chưa có):
41
+
42
+ ```markdown
43
+ | Ngày | Slug | Kênh | Reach | Like | Comment | Share | Inbox | Đơn | Ghi chú |
44
+ |---|---|---|---|---|---|---|---|---|---|
45
+ ```
46
+
47
+ Đối chiếu slug với `_context/published-index.md` để lấy đúng chủ đề/category/tags của bài — không bắt nhập lại.
48
+
49
+ ## `review` — Phân tích để biết viết gì tiếp
50
+
51
+ Đọc `performance-log.md` ghép với `published-index.md`, rồi trả lời gọn:
52
+
53
+ ```text
54
+ 1. 3 bài chạy tốt nhất (theo inbox/đơn trước, reach sau) — điểm chung gì?
55
+ (chủ đề, dạng bài, kiểu tiêu đề, giờ đăng)
56
+ 2. 3 bài yếu nhất — điểm chung gì?
57
+ 3. Chủ đề/dạng bài nên viết thêm, chủ đề nên dừng.
58
+ 4. 1-2 giả thuyết đáng thử ở bài sau (ví dụ: tiêu đề dạng câu hỏi kéo
59
+ inbox tốt hơn dạng how-to).
60
+ ```
61
+
62
+ Nguyên tắc phân tích: ưu tiên chỉ số gần tiền nhất (inbox, đơn) hơn chỉ số phù phiếm (reach, like). Chỉ kết luận khi có ít nhất 3-4 bài để so — dưới đó chỉ là quan sát, nói rõ là chưa đủ dữ liệu.
63
+
64
+ Kết quả `review` là chất liệu cho `agent-blog topic` và `agent-seo` chọn chủ đề: khi được hỏi viết gì tiếp, đọc `performance-log.md` để ưu tiên hướng đang hiệu quả thật thay vì đoán.
65
+
66
+ ---
67
+
68
+ ## Nguyên tắc
69
+
70
+ - Chỉ nhập số thật, không bịa cho đủ bảng — bỏ trống ô nào không có
71
+ - Đo cái gần tiền nhất trước (inbox/đơn), reach/like chỉ để tham khảo
72
+ - Không kết luận vội khi mẫu còn ít, nói rõ khi dữ liệu chưa đủ
73
+ - Log là để quyết định viết gì tiếp, không phải để chấm điểm bản thân — giữ nhẹ nhàng
74
+
75
+ ## Files
76
+
77
+ ```
78
+ agent-feedback/
79
+ └── SKILL.md — router + log + review (file này)
80
+ ```
@@ -1,25 +1,34 @@
1
1
  ---
2
2
  name: agent-image
3
- description: "Tạo ảnh minh hoạ, ảnh quote, ảnh banner bằng AI, giữ phong cách nhất quán qua mọi bài viết bằng Style Token cố định. Dùng OpenAI Images API (gpt-image-1/dall-e-3)."
4
- argument-hint: "[loại ảnh cần tạo: quote | banner | minh-hoa, hoặc subcommand: setup-style]"
5
- version: "1.0.0"
3
+ description: "Tạo prompt ảnh AI nhất quán theo Style Token cho mọi dạng ảnh nội dung: ảnh đơn Facebook, album 3-4 ảnh, carousel, thumbnail website, ảnh quote, minh hoạ trong bài. Kèm tìm lại ảnh đã tạo để tái dùng và gợi ý ảnh stock. Agent sinh prompt hoàn chỉnh để dán vào tool tạo ảnh bất kỳ (ChatGPT, Gemini, Canva AI...), không cần API key."
4
+ argument-hint: "[dạng ảnh: fb1 | album | carousel | thumb | quote | minh-hoa, hoặc subcommand: setup-style | tim | stock]"
5
+ version: "2.0.0"
6
6
  ---
7
7
 
8
- # /agent-image — Tạo Ảnh AI Giữ Đúng Phong Cách Thương Hiệu
8
+ # /agent-image — Ảnh Nhất Quán Cho Mọi Dạng Nội Dung
9
9
 
10
10
  Vấn đề phổ biến khi tự tạo ảnh bằng AI: mỗi ảnh một phong cách, không ai nhận ra đây là cùng một thương hiệu. Agent này giải quyết bằng **Style Token** — một đoạn mô tả phong cách cố định, dùng lặp lại y hệt trong mọi prompt, thay vì mô tả lại từ đầu mỗi lần (kỹ thuật đang là chuẩn phổ biến để giữ nhất quán ảnh AI theo thương hiệu/nhân vật).
11
11
 
12
12
  Nguyên tắc quan trọng nhất: **dùng đúng từ ngữ, không đổi từ đồng nghĩa.** Nếu Style Token ghi "áo blazer be", lần sau vẫn phải ghi "áo blazer be", không đổi thành "áo khoác be" hay "áo vest be" — AI coi các từ đồng nghĩa là khái niệm khác nhau, đổi từ là mất nhất quán.
13
13
 
14
+ **Cách agent hoạt động:** agent không tự gọi API tạo ảnh. Agent sinh ra **prompt hoàn chỉnh** (Style Token + mô tả nội dung + tỷ lệ khung + vùng chữ an toàn) — bạn dán prompt đó vào tool tạo ảnh đang dùng (ChatGPT, Gemini, Canva AI, Midjourney...), rồi lưu ảnh về đúng thư mục theo quy ước đặt tên bên dưới. Không cần API key, không phụ thuộc 1 tool cụ thể.
15
+
14
16
  ## Routing
15
17
 
16
18
  | Input | Hành động |
17
19
  |---|---|
18
20
  | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
19
21
  | `setup-style` | Chạy trước tiên — xây Style Token cố định cho thương hiệu |
20
- | `quote [nội dung câu quote]` | Tạo ảnh quote card |
21
- | `banner [chủ đề bài viết]` | Tạo ảnh đại diện (featured image) cho blog/bài viết |
22
- | `minh-hoa [ tả cảnh]` | Tạo ảnh minh hoạ trong bài |
22
+ | `fb1 [nội dung post]` | 1 ảnh đơn cho post Facebook |
23
+ | `album [nội dung post + số ảnh]` | Bộ 3-4 ảnh cho post Facebook nhiều ảnh |
24
+ | `carousel [nội dung]` | Bộ ảnh carousel lật trang (5-10 trang) |
25
+ | `thumb [chủ đề bài viết]` | Thumbnail/ảnh đại diện cho bài website |
26
+ | `quote [câu quote]` | Ảnh quote card |
27
+ | `minh-hoa [mô tả cảnh]` | Ảnh minh hoạ chèn trong bài |
28
+ | `tim [mô tả ảnh cần]` | Tìm lại ảnh đã tạo trong các bài cũ để tái dùng |
29
+ | `stock [chủ đề]` | Gợi ý từ khoá tìm ảnh stock khi không cần ảnh AI |
30
+
31
+ Trước khi chạy bất kỳ flow tạo ảnh nào: đọc Style Token trong `CLAUDE.md` cá nhân (mục "Style Token ảnh"). Nếu chưa có, chạy `setup-style` trước. Trước khi tạo mới, cân nhắc chạy `tim` — ảnh phù hợp có thể đã tồn tại trong bài cũ.
23
32
 
24
33
  ---
25
34
 
@@ -42,65 +51,155 @@ y nguyên vào mọi prompt sau này.
42
51
 
43
52
  Lưu Style Token này vào `CLAUDE.md` cá nhân (mục riêng "Style Token ảnh") để agent tự nhớ, không cần dán lại thủ công mỗi lần.
44
53
 
45
- ## Flow: `quote` Ảnh trích dẫn
54
+ ## Cấu trúc prompt chuẩn (áp cho mọi flow bên dưới)
55
+
56
+ Mỗi prompt agent sinh ra luôn gồm 4 phần, theo đúng thứ tự:
46
57
 
47
58
  ```text
48
- Tạo ảnh quote card với nội dung: "[câu quote]"
59
+ [1. Style Token dán nguyên văn, không diễn giải lại]
60
+ [2. Nội dung ảnh — 1 ý chính, mô tả cụ thể cảnh/đối tượng]
61
+ [3. Tỷ lệ khung — ghi rõ theo dạng ảnh, ví dụ "tỷ lệ 1:1, 1080x1080"]
62
+ [4. Vùng chữ — nếu ảnh có chữ hoặc sẽ đè chữ lên sau: chừa khoảng trống ở đâu]
63
+ ```
49
64
 
50
- Style Token: [dán Style Token đã chốt bước 0]
65
+ Với bộ nhiều ảnh (album, carousel): sinh **tất cả prompt cùng một lần**, Style Token lặp lại y hệt trong từng prompt, và thêm 1-2 yếu tố lặp cố định xuyên suốt bộ (cùng màu nền, cùng vị trí đặt tiêu đề, cùng nhân vật/đối tượng chính) để người xem nhận ra đây là cùng 1 bộ ảnh.
51
66
 
52
- Yêu cầu: chữ đọc rõ, bố cục để trống khoảng an toàn cho chữ, không
53
- để chi tiết hình ảnh đè lên vùng chữ.
54
- ```
67
+ ---
55
68
 
56
- Gọi API (ví dụ dùng OpenAI Images, model gpt-image-1 hoặc dall-e-3, key đã cấu hình sẵn trong môi trường làm việc):
69
+ ## Flow: `fb1` Ảnh đơn cho post Facebook
57
70
 
58
- ```bash
59
- curl -s https://api.openai.com/v1/images/generations \
60
- -H "Authorization: Bearer $OPENAI_API_KEY" \
61
- -H "Content-Type: application/json" \
62
- -d '{"model":"dall-e-3","prompt":"[prompt đầy đủ gồm Style Token + nội dung quote]","n":1,"size":"1024x1024"}'
63
- ```
71
+ Hỏi nhanh nếu chưa rõ: post này nói về điều gì, có cần chữ trên ảnh không. Sau đó sinh 1 prompt:
72
+
73
+ - Tỷ lệ: 1:1 (1080x1080) mặc định, hoặc 4:5 (1080x1350) nếu muốn chiếm nhiều màn hình hơn trên feed
74
+ - Đúng 1 ý chính của post — không cố tóm tắt cả bài vào 1 ảnh
75
+ - Nếu ảnh chữ: chữ ngắn dưới 10 từ, chừa vùng trống rõ ràng cho chữ
76
+
77
+ Lưu thành `images/fb-1.png` trong thư mục bài viết.
78
+
79
+ ## Flow: `album` — Bộ 3-4 ảnh cho post Facebook nhiều ảnh
80
+
81
+ Hỏi nhanh: post có mấy ý chính, muốn mấy ảnh (3 hay 4). Mỗi ảnh 1 ý, sinh đủ bộ prompt cùng lúc:
64
82
 
65
- ## Flow: `banner`Ảnh đại diện (featured image) cho bài viết
83
+ - Tỷ lệ: cùng 1 tỷ lệ cho cả bộ 1:1 cho bộ 4 ảnh (Facebook xếp lưới 2x2 đẹp), 4:5 hoặc 1:1 cho bộ 3 ảnh
84
+ - Ảnh 1 là ảnh "mở" — nêu ý lớn nhất, vì đây là ảnh hiện to nhất trên feed
85
+ - Các ảnh sau mỗi ảnh 1 ý phụ, cùng bố cục với ảnh 1
86
+ - Ghi rõ yếu tố lặp cố định của bộ (màu nền, vị trí tiêu đề...) trong từng prompt
87
+
88
+ Lưu thành `images/album-1.png`, `album-2.png`... theo đúng thứ tự đăng.
89
+
90
+ ## Flow: `carousel` — Bộ ảnh lật trang
91
+
92
+ Dùng cho nội dung dạng danh sách/các bước/so sánh, đăng Facebook hoặc làm carousel tái dùng đa kênh. Hỏi nhanh: nội dung chia được thành mấy phần (khuyến nghị 5-10 trang). Sinh đủ bộ prompt cùng lúc:
93
+
94
+ - Tỷ lệ: 1:1 (1080x1080) cho toàn bộ
95
+ - Trang 1 — hook: nêu đúng vấn đề/lời hứa của cả bộ, chữ to, ít chi tiết (áp nguyên tắc câu mở của `agent-title` subcommand `fbpost`: chuyện thật, không giật tít)
96
+ - Trang giữa — mỗi trang đúng 1 ý, đánh số thứ tự rõ trên ảnh (1/7, 2/7...)
97
+ - Trang cuối — chốt lại + bước tiếp theo nhẹ nhàng, không CTA ép mua (theo đúng rule `agent-fbpost`)
98
+ - Cả bộ dùng chung 1 template bố cục: vị trí số trang, vị trí tiêu đề, màu nền lặp lại y hệt
99
+
100
+ Lưu thành `images/carousel-1.png` → `carousel-n.png` theo thứ tự trang.
101
+
102
+ ## Flow: `thumb` — Thumbnail/ảnh đại diện bài website
66
103
 
67
104
  ```text
68
- Tạo ảnh đại diện cho bài viết chủ đề: [chủ đề]
105
+ Sinh prompt ảnh đại diện cho bài viết chủ đề: [chủ đề]
69
106
 
70
- Style Token: [dán Style Token đã chốt]
107
+ Yêu cầu trong prompt:
108
+ - Tỷ lệ 1200x628 (chuẩn featured image/og:image của hầu hết nền tảng blog)
109
+ - Không nhồi quá nhiều chi tiết, giữ 1 điểm nhấn chính liên quan chủ đề
110
+ - Nếu định đè tiêu đề bài lên ảnh: chừa vùng trống bên trái hoặc giữa
111
+ ```
112
+
113
+ Lưu thành `images/featured.png` trong thư mục bài viết. Đây là ảnh đại diện riêng — `agent-platform` sẽ gán ảnh này vào field ảnh đại diện của nền tảng (featured_media/featured_image/coverImage...) khi đăng, **không chèn ảnh này vào đầu nội dung body**.
71
114
 
72
- Yêu cầu: tỷ lệ 1200x628 (chuẩn featured image/og:image của hầu hết
73
- nền tảng blog), không nhồi quá nhiều chi tiết, giữ 1 điểm nhấn chính
74
- liên quan tới chủ đề bài viết.
115
+ ## Flow: `quote` Ảnh trích dẫn
116
+
117
+ ```text
118
+ Sinh prompt ảnh quote card với nội dung: "[câu quote]"
119
+
120
+ Yêu cầu trong prompt: chữ đọc rõ, bố cục để trống khoảng an toàn cho
121
+ chữ, không để chi tiết hình ảnh đè lên vùng chữ. Tỷ lệ 1:1.
75
122
  ```
76
123
 
77
- Lưu thành `images/featured.png` trong thư mục bài viết hiện tại. Đây ảnh đại diện riêng `agent-platform` sẽ gán ảnh này vào field ảnh đại diện của nền tảng (featured_media/featured_image/coverImage...) khi đăng, **không chèn ảnh này vào đầu nội dung body**.
124
+ Lưu ý: nhiều tool AI vẽ chữ tiếng Việt bị lỗi dấu. Nếu tool đang dùng vẽ chữ xấu, sinh prompt ảnh nền không chữ (chừa vùng trống), rồi tự đè chữ bằng Canva prompt ghi "để trống vùng giữa cho chữ".
125
+
126
+ Lưu thành `images/quote-1.png` (đánh số tiếp nếu bài có nhiều quote).
78
127
 
79
128
  ## Flow: `minh-hoa` — Ảnh minh hoạ trong bài
80
129
 
81
130
  ```text
82
- Tạo ảnh minh hoạ cho đoạn: [mô tả cảnh/ý cần minh hoạ]
131
+ Sinh prompt ảnh minh hoạ cho đoạn: [mô tả cảnh/ý cần minh hoạ]
132
+
133
+ Yêu cầu trong prompt: đúng 1 ý chính, không cố nhồi nhiều chi tiết
134
+ cùng lúc, giữ đúng bảng màu và phong cách trong Style Token.
135
+ Tỷ lệ 16:9 hoặc 3:2 (nằm ngang, vừa khung nội dung bài viết).
136
+ ```
137
+
138
+ Lưu vào `images/` với tên mô tả rõ vị trí dùng (ví dụ `minh-hoa-buoc-2.png`).
139
+
140
+ ---
141
+
142
+ ## Subcommand: `tim` — Tìm lại ảnh đã tạo
143
+
144
+ Trước khi tạo ảnh mới, tìm trong kho ảnh của các bài cũ — ảnh phù hợp có thể đã có sẵn, tái dùng vừa nhanh vừa tăng nhất quán:
145
+
146
+ 1. Liệt kê ảnh trong `noi-dung/*/{slug}/images/` của tất cả stage (ưu tiên `5-published/` — ảnh đã dùng thật)
147
+ 2. Đối chiếu tên file (đặt theo quy ước mô tả nội dung nên đọc tên là biết ảnh gì) với mô tả ảnh đang cần
148
+ 3. Trả về danh sách ảnh khớp kèm đường dẫn + bài đang dùng ảnh đó, để user mở xem và quyết định
149
+ 4. Nếu tái dùng: copy ảnh sang `images/` của bài mới, giữ nguyên tên hoặc đổi theo vị trí dùng mới — không tham chiếu chéo sang thư mục bài khác, vì thư mục bài sẽ di chuyển qua các stage
150
+
151
+ Nếu không có ảnh nào khớp, chuyển sang flow tạo mới phù hợp (hoặc `stock`).
152
+
153
+ ## Subcommand: `stock` — Gợi ý ảnh stock
154
+
155
+ Dùng khi cần ảnh đời thực (văn phòng, bàn tay gõ phím, quán cà phê...) mà ảnh AI dễ bị giả — ảnh stock thật sẽ tự nhiên hơn:
156
+
157
+ ```text
158
+ Chủ đề/đoạn bài cần ảnh: [mô tả]
83
159
 
84
- Style Token: [dán Style Token đã chốt]
160
+ Hãy gợi ý 3-5 từ khoá tìm kiếm bằng tiếng Anh (stock site tìm tiếng Anh
161
+ tốt hơn hẳn tiếng Việt), kèm link tìm thẳng:
162
+ - Unsplash: https://unsplash.com/s/photos/[tu-khoa]
163
+ - Pexels: https://www.pexels.com/search/[tu khoa]/
85
164
 
86
- Yêu cầu: đúng 1 ý chính, không cố nhồi nhiều chi tiết cùng lúc,
87
- giữ đúng bảng màu và phong cách trong Style Token.
165
+ Ưu tiên từ khoá cụ thể ("laptop coffee shop morning") hơn từ khoá
166
+ chung chung ("business").
88
167
  ```
89
168
 
169
+ Lưu ý khi dùng stock: Unsplash/Pexels dùng miễn phí kể cả mục đích thương mại, nhưng vẫn kiểm tra license từng ảnh trước khi dùng. Chọn ảnh có tông màu gần với bảng màu trong Style Token để không lệch khỏi nhận diện chung. Ảnh tải về cũng lưu vào `images/` của bài viết theo đúng quy ước đặt tên.
170
+
90
171
  ---
91
172
 
173
+ ## Quy ước đặt tên file ảnh
174
+
175
+ Mọi ảnh (AI tạo, stock, tự chụp) đều lưu vào `images/` trong thư mục bài viết hiện tại (`noi-dung/{stage}/{slug}/images/`) — xem quy ước ở mục "Quy ước thư mục Kanban" trong file này:
176
+
177
+ | Dạng ảnh | Tên file |
178
+ |---|---|
179
+ | Ảnh đại diện bài website | `featured.png` (bắt buộc đúng tên — `agent-platform` nhận theo tên này) |
180
+ | Ảnh đơn Facebook | `fb-1.png` |
181
+ | Album Facebook | `album-1.png`, `album-2.png`... (theo thứ tự đăng) |
182
+ | Carousel | `carousel-1.png` → `carousel-n.png` (theo thứ tự trang) |
183
+ | Quote card | `quote-1.png`, `quote-2.png`... |
184
+ | Minh hoạ trong bài | tên mô tả vị trí, ví dụ `minh-hoa-buoc-2.png` |
185
+
92
186
  ## Nguyên tắc giữ nhất quán
93
187
 
94
- - Lưu mọi ảnh tạo ra vào `images/` trong thư mục bài viết hiện tại (`noi-dung/{stage}/{slug}/images/`) — ảnh đại diện luôn đặt tên `featured.png` (để `agent-platform` nhận đúng và gán vào field ảnh đại diện thay vì chèn vào body), các ảnh khác đặt tên mô tả rõ vị trí dùng (ví dụ `quote-1.png`). Xem quy ước ở `agents/README.md` mục "Cấu trúc thư mục nội dung — quản lý kiểu Kanban"
95
188
  - Luôn dán nguyên văn Style Token vào mọi prompt, không diễn giải lại bằng từ khác mỗi lần
96
189
  - Không đổi từ đồng nghĩa khi mô tả cùng một chi tiết (màu, chất liệu, phong cách)
190
+ - Bộ nhiều ảnh (album, carousel) phải sinh toàn bộ prompt trong 1 lần, dùng chung template bố cục — không tạo lắt nhắt từng ảnh vào thời điểm khác nhau
97
191
  - Nếu có nhân vật/mascot cố định, giữ 1 ảnh tham chiếu gốc và dùng lại cho mọi ảnh sau — không mô tả lại nhân vật bằng lời mỗi lần
98
192
  - Kiểm tra ảnh ra có đúng bảng màu và cảm giác đã chốt ở Style Token không trước khi dùng
99
193
  - Nếu 1 prompt không ra đúng phong cách, sửa lại đúng câu chữ trong Style Token thay vì viết prompt hoàn toàn mới
194
+ - Tìm trước, tạo sau — chạy `tim` trước khi tạo ảnh mới cùng chủ đề
195
+
196
+ ## Quy ước thư mục Kanban
197
+
198
+ Mỗi bài viết (blog + fbpost + `images/`) là 1 thư mục `{slug}/` nằm trong 1 trong 5 stage của `noi-dung/`: `1-ideas → 2-drafting → 3-review → 4-approved → 5-published`. Chuyển stage = di chuyển cả thư mục sang stage kế, không cần thêm field trạng thái. `{slug}` viết thường, không dấu, nối bằng `-`. Bài đơn giản chỉ 1 file để thẳng `.md` trong thư mục stage, không bắt buộc gói thư mục. Ảnh của bài luôn nằm trong `images/` của chính thư mục bài đó.
100
199
 
101
200
  ## Files
102
201
 
103
202
  ```
104
203
  agent-image/
105
- └── SKILL.md — router + setup Style Token + 3 flow tạo ảnh (file này)
204
+ └── SKILL.md — router + setup Style Token + 6 flow theo dạng ảnh + tim/stock (file này)
106
205
  ```
@@ -1,8 +1,8 @@
1
1
  ---
2
2
  name: agent-onboarding
3
- description: "Khai thác context dự án và giọng văn cá nhân qua hội thoại hoặc phân tích bài viết mẫu, rồi tự tổng hợp thành CLAUDE.md hoàn chỉnh. Chạy đầu tiên, trước mọi agent khác trong bộ Showme Studio."
4
- argument-hint: "[(empty) để bắt đầu hội thoại, hoặc subcommand: samples | interview | summary]"
5
- version: "1.0.0"
3
+ description: "Khai thác context dự án và giọng văn cá nhân qua hội thoại hoặc phân tích bài viết mẫu, rồi tự tổng hợp thành CLAUDE.md hoàn chỉnh. Chạy đầu tiên, trước mọi agent khác trong bộ Showme Studio. Subcommand update: học lại từ bài đã đăng để văn phong ngày càng giống bạn hơn."
4
+ argument-hint: "[(empty) để bắt đầu hội thoại, hoặc subcommand: samples | interview | summary | update]"
5
+ version: "1.1.0"
6
6
  ---
7
7
 
8
8
  # /agent-onboarding — Dựng CLAUDE.md Từ Context Thật
@@ -19,6 +19,7 @@ Nền tảng: phân biệt **Voice** và **Tone** (Mailchimp Content Style Guide
19
19
  | `samples` | Chỉ chạy bước phân tích bài viết mẫu để rút Voice Profile |
20
20
  | `interview` | Chỉ chạy bước phỏng vấn khi chưa có bài viết mẫu nào |
21
21
  | `summary` | Tổng hợp câu trả lời đã có (từ các bước trước) thành CLAUDE.md hoàn chỉnh |
22
+ | `update [slug]` | Học lại từ bài đã đăng — cập nhật Voice Profile và "Lỗi AI cần tránh" trong CLAUDE.md |
22
23
 
23
24
  ---
24
25
 
@@ -121,6 +122,17 @@ CLAUDE.md hoàn chỉnh theo đúng format:
121
122
  ## Điều tôi không muốn
122
123
  [từ Bước 2]
123
124
 
125
+ ## Lỗi AI cần tránh
126
+ [Danh sách lỗi AI viết hay mắc — cập nhật dần mỗi khi bạn sửa bài.
127
+ Khởi điểm mặc định:]
128
+ - không dùng dấu phẩy trước "và" (viết ", và" là khuôn tiếng Anh,
129
+ tiếng Việt bỏ dấu phẩy hoặc tách câu)
130
+ - không chen gạch ngang "-" giữa câu trong nội dung, thay bằng dấu
131
+ phẩy, dấu hai chấm, hoặc viết lại câu
132
+ - không dùng gạch ngang dài (—)
133
+ - không dùng khuôn "không phải X, mà là Y"
134
+ - không viết hoa sau dấu hai chấm
135
+
124
136
  ## Bối cảnh đang làm
125
137
  [từ Bước 1]
126
138
  ```
@@ -129,6 +141,31 @@ Lưu file này vào thư mục làm việc, tên `CLAUDE.md`. Từ phiên sau, m
129
141
 
130
142
  ---
131
143
 
144
+ ## Subcommand: `update` — Học lại từ bài đã đăng
145
+
146
+ CLAUDE.md không phải file viết 1 lần rồi để đó — mỗi bài đã chốt và đăng thật là chất liệu mới để văn phong chính xác hơn. `agent-platform` gợi ý chạy bước này ngay sau mỗi lần đăng thành công, hoặc tự chạy bất cứ lúc nào:
147
+
148
+ ```text
149
+ Đọc bài đã chốt tại noi-dung/5-published/[slug]/blog.md (bản đã qua
150
+ tay tôi biên tập thật, không phải bản nháp AI).
151
+
152
+ So sánh với CLAUDE.md hiện tại và trả lời:
153
+
154
+ 1. Cách viết trong bài này có điểm gì chưa được ghi trong Voice
155
+ Profile — cách mở bài, nhịp câu, từ hay dùng, cách đưa ví dụ,
156
+ cách kết bài?
157
+ 2. Nhìn lịch sử biên tập (những gì tôi đã sửa so với khuôn AI thường
158
+ viết): có lỗi/khuôn nào lặp lại cần thêm vào mục "Lỗi AI cần tránh"?
159
+ 3. Đề xuất bản cập nhật cho 2 mục "Cách tôi thường nói" và "Lỗi AI
160
+ cần tránh".
161
+
162
+ Chỉ đề xuất điểm đã lặp lại ở ít nhất 2 bài (1 lần xuất hiện có thể
163
+ là ngẫu nhiên, chưa phải giọng). Chỉ ghi vào CLAUDE.md sau khi tôi
164
+ xác nhận từng dòng — không tự ghi đè.
165
+ ```
166
+
167
+ Càng đăng nhiều bài, CLAUDE.md càng sát giọng thật — các agent viết sau tự động dùng bản mới nhất, không cần chỉnh gì thêm.
168
+
132
169
  ## Nguyên tắc
133
170
 
134
171
  - Ưu tiên phân tích bài viết mẫu thật hơn để khách tự mô tả trừu tượng — con người thường không tự nhận ra giọng của chính mình
@@ -7,7 +7,7 @@ version: "1.3.0"
7
7
 
8
8
  # /agent-platform — Đăng Bài Lên Nền Tảng
9
9
 
10
- Agent lo bước cuối cùng: lấy nội dung đã duyệt trong `noi-dung/4-approved/{slug}/` (xem quy ước tại `agents/README.md` mục "Cấu trúc thư mục nội dung quản lý kiểu Kanban") và đăng lên nền tảng blog thật — WordPress, Emdash, hoặc Wix — thông qua MCP hoặc REST API đã kết nối trên máy. Agent này không viết nội dung, không tạo ảnh — chỉ đưa nội dung đã có (`blog.md` + `images/`) lên nền tảng, rồi chuyển cả thư mục bài viết sang `noi-dung/5-published/{slug}/` và ghi thêm 1 dòng vào `noi-dung/_context/published-index.md` sau khi đăng thật thành công. Bài Facebook (`fbpost.md`) đăng thủ công, ngoài phạm vi agent này.
10
+ Agent lo bước cuối cùng: lấy nội dung đã duyệt trong `noi-dung/4-approved/{slug}/` (xem quy ước tại mục "Quy ước thư mục Kanban" trong file này) và đăng lên nền tảng blog thật — WordPress, Emdash, hoặc Wix — thông qua MCP hoặc REST API đã kết nối trên máy. Agent này không viết nội dung, không tạo ảnh — chỉ đưa nội dung đã có (`blog.md` + `images/`) lên nền tảng, rồi chuyển cả thư mục bài viết sang `noi-dung/5-published/{slug}/` và ghi thêm 1 dòng vào `noi-dung/_context/published-index.md` sau khi đăng thật thành công. Bài Facebook (`fbpost.md`) đăng thủ công, ngoài phạm vi agent này.
11
11
 
12
12
  Mỗi nền tảng có 1 file cấu hình riêng trong `_platforms/{nền tảng}.json` (site URL, cách xác thực, quy tắc format) — `connect` tạo file này 1 lần, các subcommand đăng bài sau đọc lại từ đó thay vì hỏi lại mỗi lần.
13
13
 
@@ -223,6 +223,13 @@ hình đọc từ _platforms/wordpress.json.
223
223
  - Ảnh trong `blog.md` tham chiếu theo tên file cục bộ (ví dụ `images/quote-1.png`) — agent tự thay bằng URL thật sau khi upload, không cần user chèn lại thủ công trên nền tảng
224
224
  - Ảnh đại diện (`images/featured.png`, do `agent-image` tạo riêng, khác các ảnh chèn trong bài) luôn gán vào đúng field ảnh đại diện của nền tảng (featured_media/featured_image/coverImage...), không chèn vào đầu nội dung body
225
225
  - Chỉ di chuyển thư mục bài viết sang `5-published/` khi đã publish thật ra công chúng — nếu chỉ tạo draft, giữ nguyên thư mục ở `4-approved/`
226
+ - Ngay sau khi đăng thật thành công và chuyển thư mục sang `5-published/`, gợi ý user chạy `agent-onboarding update [slug]` để học văn phong từ bản đã chốt — mỗi bài đã đăng là chất liệu giúp CLAUDE.md sát giọng thật hơn (không tự chạy, chỉ gợi ý)
227
+
228
+ ## Quy ước thư mục Kanban
229
+
230
+ Mỗi bài viết (blog + fbpost + `images/`) là 1 thư mục `{slug}/` nằm trong 1 trong 5 stage của `noi-dung/`: `1-ideas → 2-drafting → 3-review → 4-approved → 5-published`. Chuyển stage = di chuyển cả thư mục sang stage kế, không cần thêm field trạng thái. `{slug}` viết thường, không dấu, nối bằng `-`. Bài đơn giản chỉ 1 file để thẳng `.md` trong thư mục stage, không bắt buộc gói thư mục.
231
+
232
+ Hai file context dùng chung, đặt ngoài các stage: `_context/published-index.md` (mục lục bài đã đăng — agent này ghi thêm dòng sau mỗi lần đăng, `agent-seo` đọc để internal link) và `_platforms/{nền tảng}.json` (cấu hình nền tảng, không chứa token thật).
226
233
 
227
234
  ## Files
228
235
 
@@ -96,7 +96,7 @@ Không nhồi từ khoá lặp lại máy móc — ưu tiên đọc tự nhiên
96
96
  đúng cấu trúc sau.
97
97
  ```
98
98
 
99
- Khi bắt đầu ghi vào `blog.md`, di chuyển cả thư mục bài viết từ `noi-dung/1-ideas/{slug}/` sang `noi-dung/2-drafting/{slug}/` (nếu chưa ở đó) — xem quy ước tại `agents/README.md` mục "Cấu trúc thư mục nội dung quản lý kiểu Kanban".
99
+ Khi bắt đầu ghi vào `blog.md`, di chuyển cả thư mục bài viết từ `noi-dung/1-ideas/{slug}/` sang `noi-dung/2-drafting/{slug}/` (nếu chưa ở đó) — xem quy ước tại mục "Quy ước thư mục Kanban" trong file này.
100
100
 
101
101
  ### Bước 4 — Checklist On-page + E-E-A-T
102
102
 
@@ -126,17 +126,27 @@ E-E-A-T:
126
126
  không làm được) thay vì chỉ khen không?
127
127
  ```
128
128
 
129
- Sau khi chốt bản cuối, lưu vào `blog.md` (cùng vị trí bài blog thường), rồi di chuyển cả thư mục bài viết sang `noi-dung/3-review/{slug}/` — xem quy ước ở `agents/README.md` mục "Cấu trúc thư mục nội dung quản lý kiểu Kanban".
129
+ Sau khi chốt bản cuối, lưu vào `blog.md` (cùng vị trí bài blog thường), rồi di chuyển cả thư mục bài viết sang `noi-dung/3-review/{slug}/` — xem quy ước ở mục "Quy ước thư mục Kanban" trong file này.
130
130
 
131
131
  ---
132
132
 
133
+ ## Lỗi AI cần tránh (đọc CLAUDE.md trước khi viết)
134
+
135
+ Trước khi viết (Bước 3) và ở checklist on-page (Bước 4), đọc mục **"Lỗi AI cần tránh"** trong `CLAUDE.md` cá nhân và rà bản nháp theo danh sách đó. Mặc định gồm: không dùng dấu phẩy trước "và" (", và"), không chen gạch ngang "-" giữa câu, không dùng gạch ngang dài (—), không dùng khuôn "không phải X, mà là Y", không viết hoa sau dấu hai chấm. Nếu user tự sửa một khuôn AI chưa có trong danh sách, hỏi có muốn thêm vào `CLAUDE.md` không — đồng ý thì thêm 1 dòng, không tự ghi khi chưa hỏi.
136
+
133
137
  ## Nguyên tắc
134
138
 
135
139
  - Chủ đề chọn viết phải là chủ đề có trải nghiệm thật để trả lời — SEO không thay được chuyên môn thật
136
140
  - Cấu trúc phục vụ người đọc trước, công cụ tìm kiếm sau — không hy sinh sự rõ ràng để nhồi từ khoá
137
- - Áp cùng nguyên tắc giọng văn với agent-blog: không viết hoa sau dấu hai chấm, không dùng gạch ngang dài (—), minh bạch giá nếu nhắc tới sản phẩm/dịch vụ
141
+ - Áp cùng nguyên tắc giọng văn với agent-blog, xem mục "Lỗi AI cần tránh" trên, minh bạch giá nếu nhắc tới sản phẩm/dịch vụ
138
142
  - Mỗi bài Cluster nên link về đúng 1 Pillar, tránh viết rời rạc không liên kết
139
143
 
144
+ ## Quy ước thư mục Kanban
145
+
146
+ Mỗi bài viết (blog + fbpost + `images/`) là 1 thư mục `{slug}/` nằm trong 1 trong 5 stage của `noi-dung/`: `1-ideas → 2-drafting → 3-review → 4-approved → 5-published`. Chuyển stage = di chuyển cả thư mục sang stage kế, không cần thêm field trạng thái. `{slug}` viết thường, không dấu, nối bằng `-` (ví dụ `cach-dat-tieu-de-thu-hut`). Bài đơn giản chỉ 1 file để thẳng `.md` trong thư mục stage, không bắt buộc gói thư mục.
147
+
148
+ Hai file context dùng chung, đặt ngoài các stage: `_context/published-index.md` (mục lục bài đã đăng — `agent-platform` ghi, `agent-seo` đọc để internal link) và `_platforms/{nền tảng}.json` (cấu hình nền tảng, không chứa token thật).
149
+
140
150
  ## Files
141
151
 
142
152
  ```
@@ -0,0 +1,71 @@
1
+ ---
2
+ name: agent-write
3
+ description: "Nhạc trưởng của bộ Showme Studio — hỏi bạn muốn làm gì rồi tự dẫn qua đúng chuỗi agent (chất liệu → tiêu đề → viết → ảnh → đăng), không cần nhớ gõ từng agent theo thứ tự. Dùng khi muốn ra một bài hoàn chỉnh từ đầu đến cuối trong một mạch."
4
+ argument-hint: "[mô tả nhanh muốn làm gì, hoặc subcommand: blog | seo | facebook | combo]"
5
+ version: "1.0.0"
6
+ ---
7
+
8
+ # /agent-write — Làm Một Bài Trọn Vẹn Trong Một Mạch
9
+
10
+ Bộ Showme Studio có nhiều agent, mỗi agent lo một khâu. Agent này là nhạc trưởng: bạn nói muốn làm gì, nó chọn đúng chuỗi và dẫn bạn đi từng bước, tự chuyển khâu, tự chuyển stage thư mục. Bạn không cần nhớ thứ tự gõ agent.
11
+
12
+ Nguyên tắc: agent-write **không thay các agent con** — nó chạy đúng quy trình của từng agent con theo thứ tự, dừng ở mỗi khâu để bạn xác nhận/sửa trước khi qua khâu sau. Người viết vẫn cầm lái, chỉ đỡ phải điều phối thủ công.
13
+
14
+ ## Routing
15
+
16
+ | Input | Chuỗi chạy |
17
+ |---|---|
18
+ | _(empty)_ hoặc `help` | Hỏi bạn muốn làm loại gì, rồi chọn 1 trong 4 chuỗi dưới |
19
+ | `blog` hoặc mô tả bài chuyên môn | Chuỗi Blog |
20
+ | `seo` hoặc từ khoá muốn lên top | Chuỗi SEO |
21
+ | `facebook` hoặc nội dung post FB | Chuỗi Facebook |
22
+ | `combo` | Chuỗi đầy đủ: blog + Facebook + ảnh, đăng web |
23
+
24
+ Đầu mỗi chuỗi, kiểm tra có `CLAUDE.md` chưa — nếu chưa, dừng và bảo chạy `agent-onboarding` trước (không có nó, mọi bài sẽ sai giọng).
25
+
26
+ ---
27
+
28
+ ## Chuỗi Blog
29
+
30
+ 1. **Chất liệu + người đọc** — chạy `agent-blog` bước 1-2 (khai thác trải nghiệm thật, làm rõ người đọc). Tạo thư mục bài trong `1-ideas/`.
31
+ 2. **Thông điệp** — `agent-blog` bước 3 (chấm SUCCESS, chốt thông điệp trung tâm).
32
+ 3. **Tiêu đề** — `agent-title` flow chính (sinh + chấm 4U). Chốt 1 tiêu đề.
33
+ 4. **Dàn ý + viết + biên tập** — `agent-blog` bước 4-5. Chuyển thư mục `1-ideas → 2-drafting → 3-review`.
34
+ 5. **Ảnh đại diện** — hỏi có cần ảnh không; nếu có, chạy `agent-image thumb`.
35
+ 6. **Dừng ở review** — báo bạn đọc lại; khi ổn bạn tự chuyển sang `4-approved/`.
36
+ 7. **Đăng** — khi bạn duyệt, chạy `agent-platform` đăng bài.
37
+ 8. **Học lại giọng** — sau khi đăng thật, gợi ý `agent-onboarding update`.
38
+
39
+ ## Chuỗi SEO
40
+
41
+ Như chuỗi Blog nhưng thay bước viết bằng `agent-seo` (Pillar/Cluster → nghiên cứu → viết theo E-E-A-T → checklist on-page), và dùng `agent-title seo` ở bước tiêu đề. Trước khi bắt đầu, đọc `_context/published-index.md` để không viết trùng chủ đề đã có và để gắn internal link.
42
+
43
+ ## Chuỗi Facebook
44
+
45
+ 1. **Xác định loại bài** — thông báo/bán mềm (`buildinpublic`) hay ra mắt (`launch`)?
46
+ 2. **Câu mở** — `agent-title fbpost` (lọc hook giả).
47
+ 3. **Viết** — `agent-fbpost` đúng flow đã chọn.
48
+ 4. **Ảnh** — hỏi dạng ảnh: 1 ảnh (`agent-image fb1`), album (`album`), hay carousel (`carousel`).
49
+ 5. **Rà cuối** — `agent-fbpost check` trước khi đăng.
50
+ 6. Bài Facebook đăng thủ công (ngoài phạm vi `agent-platform`).
51
+
52
+ ## Chuỗi Combo
53
+
54
+ Chạy chuỗi Blog đầy đủ, và ở bước 5 chèn thêm nhánh Facebook (câu mở + `agent-fbpost buildinpublic` + ảnh) để có 1 bài blog + 1 bài Facebook giới thiệu dùng chung thư mục `{slug}/`. Đăng blog qua `agent-platform`, Facebook đăng tay.
55
+
56
+ ---
57
+
58
+ ## Nguyên tắc
59
+
60
+ - Dừng ở mỗi khâu để người viết xác nhận, không chạy tuốt một mạch rồi mới cho xem
61
+ - Mỗi khâu dùng đúng quy trình agent con, không tự chế bước mới
62
+ - Luôn đọc `CLAUDE.md` để giữ giọng; luôn di chuyển cả thư mục khi chuyển stage
63
+ - Không tự chuyển `3-review → 4-approved` (đó là bước bạn tự duyệt) và không tự publish khi chưa được xác nhận
64
+ - Cuối chuỗi, có thể chạy `agent-check` để soát bài mới có thiếu file/lệch gì không
65
+
66
+ ## Files
67
+
68
+ ```
69
+ agent-write/
70
+ └── SKILL.md — router + 4 chuỗi điều phối (file này)
71
+ ```