showme-studio 0.1.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.
package/bin/install.js ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ // Cai bo agent Showme Studio vao ~/.claude/skills/
3
+ // Chua co xac thuc/check goi — ai co package nay cung cai duoc. Se them sau.
4
+ import { cpSync, existsSync, mkdirSync, readdirSync } from "node:fs";
5
+ import { homedir } from "node:os";
6
+ import { join, dirname } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+
9
+ const here = dirname(fileURLToPath(import.meta.url));
10
+ const skillsSource = join(here, "..", "skills");
11
+ // --target <path> de test cai lech ra ngoai ~/.claude/skills that
12
+ const targetFlagIndex = process.argv.indexOf("--target");
13
+ const skillsTarget =
14
+ targetFlagIndex !== -1 && process.argv[targetFlagIndex + 1]
15
+ ? join(process.argv[targetFlagIndex + 1], ".claude", "skills")
16
+ : join(homedir(), ".claude", "skills");
17
+
18
+ if (!existsSync(skillsSource)) {
19
+ console.error("Khong tim thay bo agent di kem trong package. Lien he Showme de duoc ho tro.");
20
+ process.exit(1);
21
+ }
22
+
23
+ mkdirSync(skillsTarget, { recursive: true });
24
+
25
+ const agentFolders = readdirSync(skillsSource, { withFileTypes: true })
26
+ .filter((entry) => entry.isDirectory())
27
+ .map((entry) => entry.name);
28
+
29
+ console.log(`Cai bo agent Showme Studio vao ${skillsTarget}\n`);
30
+
31
+ for (const name of agentFolders) {
32
+ cpSync(join(skillsSource, name), join(skillsTarget, name), {
33
+ recursive: true,
34
+ filter: (src) => !src.endsWith("desktop.ini"),
35
+ });
36
+ console.log(` + ${name}`);
37
+ }
38
+
39
+ console.log(`\nXong — da cai ${agentFolders.length} agent.`);
40
+ console.log("Buoc tiep theo: mo terminal, go 'claude', roi go '/' de chon agent.");
41
+ console.log("Neu day la lan dau, chay 'agent-onboarding' truoc de dung CLAUDE.md ca nhan.");
package/package.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "showme-studio",
3
+ "version": "0.1.0",
4
+ "description": "Cai bo agent Showme Studio vao ~/.claude/skills/",
5
+ "type": "module",
6
+ "bin": {
7
+ "showme-studio": "bin/install.js"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "skills"
12
+ ],
13
+ "scripts": {
14
+ "sync": "node scripts/sync-skills.js"
15
+ },
16
+ "license": "UNLICENSED"
17
+ }
@@ -0,0 +1,169 @@
1
+ ---
2
+ name: agent-blog
3
+ description: "Viết bài blog chuyên môn giữ đúng giọng văn cá nhân, từ chất liệu thật đến bản nháp hoàn chỉnh. Dùng framework SUCCESS (Made to Stick), Big 5 (They Ask You Answer) và nguyên tắc rõ ràng của Everybody Writes."
4
+ argument-hint: "[chủ đề/trải nghiệm muốn viết, hoặc subcommand: topic | outline | edit]"
5
+ version: "1.0.0"
6
+ ---
7
+
8
+ # /agent-blog — Viết Blog Chuyên Môn Giữ Chất Riêng
9
+
10
+ Agent viết bài blog cho người làm chuyên môn, dựa trên quy trình 5 bước của Showme Studio, kết hợp 3 nền tảng đã được kiểm chứng:
11
+
12
+ - **SUCCESS (Made to Stick — Chip & Dan Heath):** một ý tưởng dính (nhớ được, thay đổi được góc nhìn người đọc) cần Simple, Unexpected, Concrete, Credible, Emotional, Story
13
+ - **Big 5 (They Ask You Answer — Marcus Sheridan):** 5 nhóm chủ đề luôn kéo được người đọc thật — giá/chi phí, so sánh, vấn đề thường gặp, đánh giá, "tốt nhất trong nhóm"
14
+ - **Everybody Writes (Ann Handley):** ưu tiên rõ ràng hơn hay ho, viết như đang nói với một người cụ thể, không viết cho đám đông vô hình
15
+
16
+ Quan điểm xuyên suốt: AI không viết thay. AI hỏi sâu, soi điểm mù, gợi ý cấu trúc, phản biện và biên tập. Người viết vẫn là người cung cấp trải nghiệm thật và chịu trách nhiệm với quan điểm cuối cùng.
17
+
18
+ ## Routing
19
+
20
+ | Input | Hành động |
21
+ |---|---|
22
+ | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
23
+ | trải nghiệm/chủ đề cụ thể | Chạy **Full Flow**: 5 bước từ chất liệu đến bản nháp |
24
+ | `topic` | Không có chủ đề sẵn — dùng Big 5 để gợi ý chủ đề từ câu hỏi khách hàng thật |
25
+ | `outline [thông điệp]` | Chỉ chạy bước lập dàn ý |
26
+ | `edit [bản nháp]` | Chỉ chạy bước biên tập trên bản nháp có sẵn |
27
+
28
+ ---
29
+
30
+ ## Full Flow
31
+
32
+ ### Bước 1 — Đưa chất liệu thật vào
33
+
34
+ Không bắt đầu bằng "hãy viết cho tôi một bài". Bắt đầu từ kinh nghiệm, tình huống, quan sát, câu hỏi khách hàng hoặc bài học đã trải qua.
35
+
36
+ ```text
37
+ Tôi muốn viết một bài chuyên môn dựa trên trải nghiệm sau:
38
+
39
+ [Dán trải nghiệm/câu chuyện/ghi chú thô]
40
+
41
+ Hãy hỏi tôi 10 câu hỏi để khai thác sâu hơn: bối cảnh, vấn đề, quyết định,
42
+ bài học, sai lầm, góc nhìn khác biệt và điều người đọc có thể áp dụng.
43
+ ```
44
+
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
+
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/`.
48
+
49
+ ### Bước 2 — Làm rõ người đọc
50
+
51
+ ```text
52
+ Dựa trên chất liệu trên, hãy giúp tôi xác định:
53
+
54
+ 1. Người đọc phù hợp nhất là ai?
55
+ 2. Họ đang gặp vấn đề gì?
56
+ 3. Họ thường hiểu sai điều gì?
57
+ 4. Sau bài viết này, họ nên nhìn vấn đề khác đi như thế nào?
58
+
59
+ Không viết bài vội. Chỉ phân tích người đọc và vấn đề.
60
+ ```
61
+
62
+ Áp dụng Everybody Writes: hình dung đang viết cho một người đọc cụ thể, không phải "độc giả nói chung".
63
+
64
+ ### Bước 3 — Tạo thông điệp trung tâm (chấm điểm SUCCESS)
65
+
66
+ ```text
67
+ Từ chất liệu và người đọc đã xác định, hãy đề xuất 5 thông điệp trung tâm
68
+ có thể làm trục cho bài viết.
69
+
70
+ Sau đó chấm từng thông điệp theo khung SUCCESS:
71
+ - Simple — nói được trong 1 câu không?
72
+ - Unexpected — có phá vỡ điều người đọc mặc định không?
73
+ - Concrete — có ví dụ/con số/hình ảnh cụ thể không?
74
+ - Credible — có bằng chứng hoặc trải nghiệm thật đứng sau không?
75
+ - Emotional — người đọc có lý do để quan tâm không?
76
+ - Story — có gắn được với một tình huống kể lại được không?
77
+
78
+ Chỉ ra thông điệp nào đạt điểm cao nhất và vì sao.
79
+ ```
80
+
81
+ ### Bước 4 — Lập dàn ý
82
+
83
+ Nếu chưa có tiêu đề, chạy `agent-title` trước (dùng flow chính, không cần subcommand) để sinh và chấm điểm vài phương án theo khung 4U.
84
+
85
+ Khi bắt đầu ghi dàn ý 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 ở đó). Nếu file chưa có phần ghi chú đăng bài, thêm vào cuối file:
86
+
87
+ ```markdown
88
+ ## Ghi chú đăng bài
89
+ - **Category:**
90
+ - **Tags:**
91
+ ```
92
+
93
+ ```text
94
+ Hãy tạo dàn ý cho một bài viết chuyên môn dựa trên thông điệp sau:
95
+
96
+ [Thông điệp trung tâm]
97
+
98
+ Yêu cầu:
99
+ - Mở bài đi thẳng vào vấn đề
100
+ - Có 3-5 luận điểm chính
101
+ - Mỗi luận điểm cần gắn với ví dụ hoặc trải nghiệm thật
102
+ - Giọng văn rõ ràng, gần gũi, không sáo rỗng
103
+ - Không dùng ngôn ngữ quảng cáo
104
+ ```
105
+
106
+ ### Bước 5 — Biên tập bản nháp
107
+
108
+ ```text
109
+ Đây là bản nháp bài viết của tôi:
110
+
111
+ [Dán bản nháp]
112
+
113
+ Hãy biên tập theo 4 vòng:
114
+
115
+ 1. Chỉ ra đoạn nào còn chung chung hoặc giống AI.
116
+ 2. Chỉ ra đoạn nào cần thêm ví dụ thật (Concrete, theo SUCCESS).
117
+ 3. Gợi ý cách làm bài viết mạch lạc hơn.
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
+ ```
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".
122
+
123
+ ---
124
+
125
+ ## Subcommand: `topic` — Tìm chủ đề bằng Big 5
126
+
127
+ Khi chưa có chất liệu sẵn, dùng 5 nhóm câu hỏi khách hàng thật luôn kéo được người đọc (Marcus Sheridan — They Ask You Answer):
128
+
129
+ ```text
130
+ Hãy giúp tôi liệt kê chủ đề bài blog theo 5 nhóm sau, dựa trên
131
+ chuyên môn/sản phẩm của tôi: [mô tả ngắn]
132
+
133
+ 1. Giá/chi phí — khách hay thắc mắc gì về giá, vì sao mắc/rẻ hơn chỗ khác
134
+ 2. So sánh — khách hay so sánh tôi với lựa chọn nào khác
135
+ 3. Vấn đề thường gặp — rủi ro, nhược điểm, tình huống khách hay gặp
136
+ 4. Đánh giá — khách hay hỏi review về sản phẩm/dịch vụ/công cụ nào
137
+ 5. Tốt nhất trong nhóm — khách hay hỏi "cái nào tốt nhất cho..."
138
+
139
+ Với mỗi nhóm, gợi ý 2-3 chủ đề bài viết cụ thể.
140
+ ```
141
+
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
+
144
+ ---
145
+
146
+ ## Nguyên tắc giữ chất riêng
147
+
148
+ - Luôn đưa trải nghiệm thật vào trước khi nhờ AI viết
149
+ - Không dùng nguyên văn bản AI nếu thấy không giống mình
150
+ - Ưu tiên câu ngắn, ý rõ, ví dụ cụ thể
151
+ - Xóa các câu quá bóng bẩy nhưng không có thông tin
152
+ - 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í
155
+
156
+ ## Dấu hiệu bài viết bị AI hóa
157
+
158
+ - Nhiều câu đúng nhưng ai cũng có thể nói
159
+ - Dùng quá nhiều cụm như "trong thời đại hiện nay", "điều quan trọng là", "không chỉ... mà còn..."
160
+ - Không có tình huống cụ thể
161
+ - Không có quan điểm hoặc lựa chọn rõ
162
+ - Đọc xong không thấy người viết đã thật sự trải qua điều đó
163
+
164
+ ## Files
165
+
166
+ ```
167
+ agent-blog/
168
+ └── SKILL.md — router + full flow (file này)
169
+ ```
@@ -0,0 +1,115 @@
1
+ ---
2
+ name: agent-course-outline
3
+ description: "Viết outline khoá học theo Backward Design (Wiggins & McTighe) và Bloom's Taxonomy — bắt đầu từ kết quả học viên cần đạt, không bắt đầu từ danh sách nội dung muốn dạy."
4
+ argument-hint: "[chủ đề khoá học, hoặc subcommand: objectives | activities]"
5
+ version: "1.0.0"
6
+ ---
7
+
8
+ # /agent-course-outline — Viết Outline Khoá Học Từ Kết Quả Ngược Lại
9
+
10
+ Sai lầm phổ biến khi tự soạn khoá học: liệt kê hết những gì mình biết, rồi nhồi vào từng buổi. Backward Design (Understanding by Design — Grant Wiggins & Jay McTighe) đi ngược lại: xác định học viên cần đạt được gì trước, rồi mới thiết kế nội dung và hoạt động để đưa họ tới đó.
11
+
12
+ 3 giai đoạn:
13
+
14
+ 1. **Xác định kết quả mong muốn** — học viên sẽ hiểu/làm được gì sau khoá học
15
+ 2. **Xác định bằng chứng đánh giá** — làm sao biết họ đã thật sự đạt được (không phải "đã nghe qua")
16
+ 3. **Lập kế hoạch hoạt động học tập** — buổi học, bài tập, thực hành để đưa họ tới kết quả đó
17
+
18
+ ## Routing
19
+
20
+ | Input | Hành động |
21
+ |---|---|
22
+ | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
23
+ | chủ đề khoá học cụ thể | Chạy **Full Flow**: 3 giai đoạn Backward Design |
24
+ | `objectives [chủ đề]` | Chỉ chạy bước viết learning objectives theo Bloom's Taxonomy |
25
+ | `activities [objectives]` | Chỉ chạy bước thiết kế hoạt động học tập từ objectives có sẵn |
26
+
27
+ ---
28
+
29
+ ## Full Flow
30
+
31
+ ### Giai đoạn 1 — Xác định kết quả mong muốn
32
+
33
+ ```text
34
+ Tôi muốn làm khoá học về: [chủ đề]
35
+
36
+ Đối tượng học viên: [mô tả — họ đang ở trình độ nào, vướng gì]
37
+
38
+ Hãy giúp tôi xác định:
39
+
40
+ 1. Sau khoá học, học viên sẽ HIỂU được điều gì (viết dạng
41
+ "Học viên sẽ hiểu rằng...")
42
+ 2. 3-5 câu hỏi cốt lõi (essential questions) mà cả khoá học xoay quanh
43
+ để trả lời — câu hỏi mở, không có đáp án 1 dòng
44
+ 3. Sau khoá học, học viên sẽ LÀM ĐƯỢC gì trong thực tế (không phải
45
+ "biết về" mà là hành động cụ thể có thể quan sát được)
46
+
47
+ Ưu tiên ít mục tiêu nhưng rõ ràng, hơn là liệt kê nhiều nội dung
48
+ muốn dạy.
49
+ ```
50
+
51
+ ### Giai đoạn 2 — Viết Learning Objectives theo Bloom's Taxonomy
52
+
53
+ ```text
54
+ Từ kết quả mong muốn ở trên, hãy viết learning objectives cụ thể
55
+ cho từng buổi/module, phân theo mức độ tư duy (Bloom's Taxonomy),
56
+ từ thấp đến cao:
57
+
58
+ - Nhớ (Remember) — nhắc lại được khái niệm/thuật ngữ
59
+ - Hiểu (Understand) — giải thích được bằng lời của mình
60
+ - Áp dụng (Apply) — làm được trong tình huống mới
61
+ - Phân tích (Analyze) — so sánh, chỉ ra điểm khác biệt/nguyên nhân
62
+ - Đánh giá (Evaluate) — nhận xét, chọn lựa có lý do
63
+ - Sáng tạo (Create) — tự làm ra sản phẩm/giải pháp riêng
64
+
65
+ Với khoá học ngắn (dưới 5 buổi), tập trung học viên đạt tới mức
66
+ Áp dụng hoặc Phân tích là hợp lý — đừng kỳ vọng tới Sáng tạo nếu
67
+ thời lượng không đủ.
68
+
69
+ Mỗi objective viết dạng: "Sau buổi này, học viên có thể [động từ hành
70
+ động cụ thể theo mức Bloom] + [nội dung]."
71
+ ```
72
+
73
+ ### Giai đoạn 3 — Xác định bằng chứng đánh giá
74
+
75
+ ```text
76
+ Với các objective ở giai đoạn 2, hãy đề xuất cách để biết học viên
77
+ đã thật sự đạt được — không phải "đã ngồi nghe hết buổi":
78
+
79
+ - Bài tập/sản phẩm nào học viên tạo ra để chứng minh đã Áp dụng được?
80
+ - Câu hỏi/tình huống nào kiểm tra được mức Phân tích/Đánh giá
81
+ (không phải câu hỏi đúng/sai đơn giản)?
82
+ - Có cần điểm checkpoint giữa khoá để biết ai đang bị tụt lại không?
83
+ ```
84
+
85
+ ### Giai đoạn 4 — Lập kế hoạch hoạt động học tập
86
+
87
+ ```text
88
+ Từ objective và cách đánh giá ở trên, hãy thiết kế outline từng buổi:
89
+
90
+ - Buổi [số]: [tên buổi]
91
+ - Mục tiêu buổi này (lấy từ Giai đoạn 2)
92
+ - Hoạt động chính (không chỉ giảng — có thực hành, thảo luận, ví dụ thật)
93
+ - Bài tập/sản phẩm đầu ra của buổi
94
+ - Thời lượng ước tính
95
+
96
+ Ưu tiên hoạt động có học viên tự làm (retrieval practice — tự nhớ lại
97
+ và áp dụng) hơn là chỉ nghe giảng, vì đây là cách kiến thức được giữ
98
+ lại lâu hơn.
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Nguyên tắc
104
+
105
+ - Bắt đầu từ kết quả học viên cần đạt, không bắt đầu từ danh sách nội dung mình muốn nói
106
+ - Mỗi buổi nên có 1 bài tập/sản phẩm đầu ra cụ thể, không chỉ "nghe hiểu"
107
+ - Không đặt mục tiêu ở mức Bloom cao hơn thời lượng khoá học cho phép
108
+ - Câu hỏi cốt lõi (essential questions) nên xuyên suốt nhiều buổi, không phải mỗi buổi 1 câu hỏi rời rạc
109
+
110
+ ## Files
111
+
112
+ ```
113
+ agent-course-outline/
114
+ └── SKILL.md — router + 4 giai đoạn Backward Design (file này)
115
+ ```
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: agent-fbpost
3
+ description: "Viết bài Facebook thông báo tính năng/dịch vụ hoặc bài launch, giọng thật không marketing sáo rỗng. Dựa trên PAS/AIDA đã điều chỉnh cho creator solo và bộ rule viết thật (không hook giả, không CTA gượng ép, minh bạch chi phí)."
4
+ argument-hint: "[nội dung/tính năng muốn thông báo, hoặc subcommand: buildinpublic | launch | check]"
5
+ version: "1.0.0"
6
+ ---
7
+
8
+ # /agent-fbpost — Viết Bài Facebook Giọng Thật
9
+
10
+ Bài Facebook viết bán hàng sai cách thường nghe như quảng cáo: mở hook giật, CTA ép mua ở cuối. Agent này dùng khung PAS/AIDA cổ điển nhưng đã lọc bỏ phần "giả", theo đúng cách hệ thống hoá nội dung của creator solo hiện đại (Content OS — Justin Welsh: viết có hệ thống, lặp lại được, không phải mỗi lần ngồi vào là nghĩ lại từ đầu).
11
+
12
+ ## Routing
13
+
14
+ | Input | Hành động |
15
+ |---|---|
16
+ | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
17
+ | mô tả tính năng/thông báo ngắn | Chạy **buildinpublic** — bài thông báo/khoe tính năng, bán mềm |
18
+ | `launch [sản phẩm/khoá học]` | Chạy **launch** — bài ra mắt sản phẩm/chương trình lớn |
19
+ | `check [bản nháp]` | Chỉ chạy checklist rà theo 9 rule |
20
+
21
+ ---
22
+
23
+ ## Flow: `buildinpublic` (thông báo/khoe tính năng, bán mềm)
24
+
25
+ Dùng khi thông báo tính năng mới, cập nhật sản phẩm, hoặc kể chuyện vừa làm được gì — không phải bài ra mắt lớn. Nếu chưa chắc câu mở đầu, chạy `agent-title` subcommand `fbpost` trước để có vài phương án đã lọc hook giả.
26
+
27
+ ```text
28
+ Tôi vừa [chuyện vừa xảy ra / tính năng vừa làm xong]: [mô tả]
29
+
30
+ Hãy viết bài Facebook theo cấu trúc sau:
31
+
32
+ 1. Mở bằng một chuyện vừa xảy ra hoặc tín hiệu thị trường (không hook
33
+ quảng cáo kiểu "Đây là điều thị trường cần từ lâu")
34
+ 2. Giải thích tính năng/sản phẩm bằng một câu đơn giản kiểu
35
+ "Nói đơn giản, [tính năng] giúp..."
36
+ 3. Mô tả luồng hoạt động bằng mũi tên hoặc từng bước rất đời thường
37
+ 4. Dùng "Tức là..." để chuyển từ tính năng sang ý nghĩa thật với người đọc
38
+ 5. Nói vì sao điều này khớp với hướng đi lớn hơn (không phải tính năng
39
+ rời rạc)
40
+ 6. Thêm 1 câu trong ngoặc đơn để nói rõ ai phù hợp hoặc giảm cảm giác
41
+ phức tạp
42
+ 7. Nếu có chi phí/công cụ bên thứ ba liên quan, ghi rõ số cụ thể và
43
+ nguồn để người đọc tự kiểm tra
44
+ 8. Cảm ơn người liên quan theo tên thật nếu có ai đó đã giúp/tài trợ/hỗ trợ
45
+ 9. Kết bằng đoạn "big picture" — định hướng lớn hơn, không phải CTA
46
+ ép mua
47
+
48
+ Không viết CTA kiểu "Liên hệ ngay để được tư vấn" ở cuối.
49
+ ```
50
+
51
+ ## Flow: `launch` (ra mắt sản phẩm/chương trình)
52
+
53
+ Dùng khi ra mắt sản phẩm, khoá học, hoặc chương trình mới hoàn toàn.
54
+
55
+ ```text
56
+ Tôi muốn ra mắt: [sản phẩm/chương trình]
57
+
58
+ Hãy viết bài Facebook theo nhịp cảm xúc sau:
59
+
60
+ 1. Mong muốn âm ỉ — mở bằng điều nhiều người đã mong muốn từ lâu,
61
+ không mở bằng "chúng tôi ra mắt..."
62
+ 2. Điểm kẹt — nỗi khó thật khiến mong muốn đó chưa thành hiện thực
63
+ 3. Bối cảnh mới — điều gì (công nghệ, cách làm mới) khiến giờ khả thi hơn
64
+ 4. Niềm tin cốt lõi — vì sao cách làm này khác, không đại trà, có bản sắc
65
+ 5. Lời mời làm cùng — mô tả chương trình, đầu ra cụ thể
66
+ 6. Thông tin bán hàng — lịch, điều kiện, học phí, ưu đãi (ghi số cụ thể,
67
+ không nói chung chung)
68
+ 7. Quà tặng nếu có
69
+ 8. Kết bằng triết lý: ai cũng có một điều đặc biệt, nếu chỉ nằm trong
70
+ đầu thì chỉ có mình biết
71
+ 9. CTA inbox — đây là ngoại lệ duy nhất được phép có CTA rõ, vì bài
72
+ launch cần hành động cụ thể
73
+ ```
74
+
75
+ ---
76
+
77
+ ## Subcommand: `check` — Rà theo 9 rule trước khi đăng
78
+
79
+ ```text
80
+ Đây là bản nháp bài Facebook của tôi:
81
+
82
+ [Dán bản nháp]
83
+
84
+ Hãy kiểm tra từng rule sau và chỉ rõ câu nào vi phạm:
85
+
86
+ 1. Có mở đầu bằng hook marketing không? (phải bỏ — dùng `agent-title`
87
+ subcommand `fbpost` nếu cần sinh và lọc nhiều phương án câu mở trước)
88
+ 2. Chi phí/giá có nói chung chung không, hay đã ghi rõ số + nguồn?
89
+ 3. Có CTA kiểu "liên hệ để tư vấn" ở cuối không? (chỉ bài launch mới
90
+ được có CTA)
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
+ 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 mà đang thiếu?
96
+ 7. Thông tin phụ thuộc bên thứ ba có disclaimer "có 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.
101
+ ```
102
+
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".
104
+
105
+ ---
106
+
107
+ ## Nguyên tắc
108
+
109
+ - 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
111
+ - Không xuống dòng ngẫu nhiên, chỉ xuống dòng khi chuyển ý thật sự
112
+ - Không hook marketing ở đầu bài
113
+ - Không CTA ở cuối bài, trừ bài launch (thông tin đầy đủ, cần hành động cụ thể)
114
+ - Minh bạch chi phí — nếu đề cập công cụ/dịch vụ, ghi rõ giá
115
+ - 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
+
117
+ ## Files
118
+
119
+ ```
120
+ agent-fbpost/
121
+ └── SKILL.md — router + 2 flow + checklist (file này)
122
+ ```
@@ -0,0 +1,106 @@
1
+ ---
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"
6
+ ---
7
+
8
+ # /agent-image — Tạo Ảnh AI Giữ Đúng Phong Cách Thương Hiệu
9
+
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
+
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
+
14
+ ## Routing
15
+
16
+ | Input | Hành động |
17
+ |---|---|
18
+ | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
19
+ | `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 [mô tả cảnh]` | Tạo ảnh minh hoạ trong bài |
23
+
24
+ ---
25
+
26
+ ## Bước 0 — `setup-style`: Xây Style Token (chỉ làm 1 lần)
27
+
28
+ ```text
29
+ Hãy giúp tôi chốt một Style Token cố định cho thương hiệu cá nhân,
30
+ dùng lại y hệt trong mọi ảnh sau này. Tôi mô tả sơ bộ:
31
+
32
+ - Ngành/chuyên môn: [điền]
33
+ - Cảm giác muốn truyền tải: [ví dụ: gần gũi, chuyên nghiệp, ấm áp]
34
+ - Màu chủ đạo (nếu có): [điền hoặc để AI đề xuất theo ngành]
35
+ - Có dùng ảnh có mặt người/nhân vật cố định không: [có/không]
36
+
37
+ Hãy chốt lại thành 1 đoạn Style Token khoảng 3-4 câu, mô tả cụ thể:
38
+ phong cách hình ảnh (flat illustration / photo thật / 3D...), bảng màu
39
+ chính xác, kiểu ánh sáng, bố cục thường dùng. Đoạn này tôi sẽ dán lại
40
+ y nguyên vào mọi prompt sau này.
41
+ ```
42
+
43
+ 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
+
45
+ ## Flow: `quote` — Ảnh trích dẫn
46
+
47
+ ```text
48
+ Tạo ảnh quote card với nội dung: "[câu quote]"
49
+
50
+ Style Token: [dán Style Token đã chốt ở bước 0]
51
+
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
+ ```
55
+
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):
57
+
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
+ ```
64
+
65
+ ## Flow: `banner` — Ảnh đại diện (featured image) cho bài viết
66
+
67
+ ```text
68
+ Tạo ảnh đại diện cho bài viết chủ đề: [chủ đề]
69
+
70
+ Style Token: [dán Style Token đã chốt]
71
+
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.
75
+ ```
76
+
77
+ Lưu thành `images/featured.png` trong thư mục bài viết hiện tại. Đâ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**.
78
+
79
+ ## Flow: `minh-hoa` — Ảnh minh hoạ trong bài
80
+
81
+ ```text
82
+ Tạo ảnh minh hoạ cho đoạn: [mô tả cảnh/ý cần minh hoạ]
83
+
84
+ Style Token: [dán Style Token đã chốt]
85
+
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.
88
+ ```
89
+
90
+ ---
91
+
92
+ ## Nguyên tắc giữ nhất quán
93
+
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
+ - 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
+ - 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)
97
+ - 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
+ - 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
+ - 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
100
+
101
+ ## Files
102
+
103
+ ```
104
+ agent-image/
105
+ └── SKILL.md — router + setup Style Token + 3 flow tạo ảnh (file này)
106
+ ```