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 +41 -0
- package/package.json +17 -0
- package/skills/agent-blog/SKILL.md +169 -0
- package/skills/agent-course-outline/SKILL.md +115 -0
- package/skills/agent-fbpost/SKILL.md +122 -0
- package/skills/agent-image/SKILL.md +106 -0
- package/skills/agent-landingpage/SKILL.md +159 -0
- package/skills/agent-landingpage/refs/cta.md +155 -0
- package/skills/agent-landingpage/refs/sections.md +196 -0
- package/skills/agent-landingpage/refs/vepa-cle.md +138 -0
- package/skills/agent-launch-campaign/SKILL.md +131 -0
- package/skills/agent-onboarding/SKILL.md +144 -0
- package/skills/agent-platform/SKILL.md +232 -0
- package/skills/agent-seo/SKILL.md +145 -0
- package/skills/agent-title/SKILL.md +150 -0
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
|
+
```
|