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.
@@ -0,0 +1,131 @@
1
+ ---
2
+ name: agent-launch-campaign
3
+ description: "Lên kế hoạch chiến dịch ra mắt sản phẩm/khoá học, dựa trên Product Launch Formula (Jeff Walker) và Soap Opera Sequence (Russell Brunson) — cảm xúc/câu chuyện thật trước, thuyết phục/offer sau. Kết hợp cấu trúc bài launch giọng thật của SHOWME."
4
+ argument-hint: "[sản phẩm/khoá học muốn ra mắt, hoặc subcommand: prelaunch | launchday]"
5
+ version: "1.1.0"
6
+ ---
7
+
8
+ # /agent-launch-campaign — Lên Kế Hoạch Ra Mắt Sản Phẩm
9
+
10
+ Sai lầm phổ biến: ra mắt bằng đúng 1 bài đăng "hôm nay mở bán". Product Launch Formula (Jeff Walker) chỉ ra ra mắt hiệu quả là một chuỗi, không phải 1 bài — người xem cần được cho giá trị và xây kỳ vọng trước khi thấy lời chào mua.
11
+
12
+ 2 nguyên tắc gốc xuyên suốt:
13
+
14
+ - **Value Before Reveal** — cho giá trị thật trước, chưa vội nói "mua đi"
15
+ - **Desire Before Availability** — xây mong muốn trước khi sản phẩm mở bán, không phải mở bán rồi mới thuyết phục
16
+
17
+ Toàn bộ chuỗi chia làm 2 pha rõ rệt — **cảm xúc trước, thuyết phục sau**:
18
+
19
+ - **Pha Cảm xúc** (Pre-Prelaunch + 3 nội dung Prelaunch): dùng **Soap Opera Sequence** (Russell Brunson) — kể một câu chuyện thật theo 4 nhịp cảm xúc, chưa chào bán: bối cảnh quen thuộc → kịch tính/nỗi đau → khoảnh khắc giác ngộ → lợi ích bất ngờ. Người đọc cần thấy mình trong câu chuyện trước khi sẵn sàng nghe lời chào mua
20
+ - **Pha Thuyết phục** (Launch Day): nhịp thứ 5 của Soap Opera Sequence — thúc giục hành động, đây là nơi duy nhất được đẩy CTA rõ ràng
21
+
22
+ Không đảo ngược thứ tự: chưa kể xong câu chuyện cảm xúc thì chưa mở bán, và Launch Day không lặp lại nội dung giáo dục đã cho ở Pha Cảm xúc — chỉ tập trung thuyết phục + CTA.
23
+
24
+ ## Routing
25
+
26
+ | Input | Hành động |
27
+ |---|---|
28
+ | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
29
+ | sản phẩm/khoá học cụ thể | Chạy **Full Flow**: Pre-Prelaunch → Prelaunch (3 nội dung) → Launch Day |
30
+ | `prelaunch [sản phẩm]` | Chỉ chạy 3 nội dung Prelaunch |
31
+ | `launchday [sản phẩm]` | Chỉ chạy bài Launch Day (dùng chung cấu trúc với `/agent-fbpost launch`) |
32
+
33
+ ---
34
+
35
+ ## Full Flow
36
+
37
+ ### Giai đoạn 1 — Pre-Prelaunch (xây kỳ vọng, 3-7 ngày trước)
38
+
39
+ **Soap Opera Sequence — Nhịp 1: Bối cảnh quen thuộc.** Chưa có kịch tính, chỉ cho người đọc thấy mình trong đó.
40
+
41
+ ```text
42
+ Tôi sắp ra mắt: [sản phẩm/khoá học]
43
+
44
+ Hãy giúp tôi viết 1-2 bài "hé lộ nhẹ" đăng trước ngày mở bán, theo tinh
45
+ thần: không nói rõ đó là gì, chỉ tạo cảm giác "có gì đó đang được chuẩn bị".
46
+
47
+ Mở bằng một bối cảnh/tình huống đời thường mà đúng người đọc mục tiêu
48
+ sẽ thấy mình trong đó (không phải kịch tính, chỉ là "à, đúng là mình
49
+ hay gặp cảnh này") — kể một quan sát/trải nghiệm gần đây đang dẫn tới
50
+ quyết định làm sản phẩm này, chưa nhắc tên sản phẩm hay giá.
51
+ ```
52
+
53
+ ### Giai đoạn 2 — Prelaunch: 3 nội dung giá trị (đăng cách nhau vài ngày)
54
+
55
+ Đăng tuần tự, mỗi nội dung cách nhau vài ngày để giữ nhịp chờ đợi. 3 nội dung này lần lượt đi qua nhịp 2, 3, 4 của Soap Opera Sequence — vẫn là Pha Cảm xúc, chưa chào bán.
56
+
57
+ **Nội dung 1 — Kịch tính/nỗi đau & lối mở (SOS nhịp 2 + đầu nhịp 3)**
58
+
59
+ ```text
60
+ Viết nội dung Prelaunch #1 cho [sản phẩm]. Mục tiêu:
61
+
62
+ 1. Nói rõ "bức tường" đã chặn đường — nỗi đau/khó khăn thật đã gặp,
63
+ những gì đã thử mà không hiệu quả, sự thất vọng thật (không phóng
64
+ đại, không kịch hoá giả tạo)
65
+ 2. Sau đó mới hé lộ ý tưởng lớn đằng sau sản phẩm — tiềm năng nó mang
66
+ lại, vì sao điều này quan trọng với người đọc ngay bây giờ
67
+
68
+ Chưa bán, chỉ mở ra khả năng mới sau khi đã thừa nhận nỗi đau thật.
69
+ ```
70
+
71
+ **Nội dung 2 — Khoảnh khắc giác ngộ & bằng chứng (SOS nhịp 3 + đầu nhịp 4)**
72
+
73
+ ```text
74
+ Viết nội dung Prelaunch #2 cho [sản phẩm]. Mục tiêu:
75
+
76
+ 1. Kể lại đúng khoảnh khắc phát hiện ra cách làm khác — chuyện gì cụ
77
+ thể đã xảy ra khiến góc nhìn thay đổi, không nói chung chung
78
+ 2. Chủ động nói ra những nghi ngờ/phản đối phổ biến người đọc có thể
79
+ có (giá, thời gian, liệu có hợp với mình không), trả lời thẳng thắn.
80
+ Nếu có case thật/phản hồi trước đó, đưa vào làm bằng chứng
81
+ ```
82
+
83
+ **Nội dung 3 — Lợi ích bất ngờ & bước tiếp theo (SOS nhịp 4)**
84
+
85
+ ```text
86
+ Viết nội dung Prelaunch #3 cho [sản phẩm]. Mục tiêu: dạy một phần thật
87
+ sự hữu ích (không giữ lại), cho người đọc thấy lợi ích cụ thể mà có
88
+ thể họ không ngờ tới khi mới nghe ý tưởng ban đầu, rồi hé lộ ngày mở
89
+ bán sắp tới.
90
+ ```
91
+
92
+ ### Giai đoạn 3 — Launch Day (mở bán)
93
+
94
+ **Soap Opera Sequence — Nhịp 5: Thúc giục hành động.** Đây là điểm chuyển từ Pha Cảm xúc sang Pha Thuyết phục — toàn bộ câu chuyện đã kể ở Giai đoạn 1-2 giờ dẫn tới lời chào mua rõ ràng.
95
+
96
+ ```text
97
+ Viết bài mở bán cho [sản phẩm], dùng cấu trúc bài launch:
98
+
99
+ Mở bằng mong muốn lâu nay.
100
+ Nói nỗi khó thật.
101
+ Kể lại điều vừa xảy ra / trải nghiệm gần đây.
102
+ Mở rộng khả năng mới.
103
+ Chặn hiểu lầm (không phải làm đại trà, công nghiệp giống nhau).
104
+ Đặt niềm tin: có hồn, có bản sắc, là mình.
105
+ Giới thiệu chương trình.
106
+ Nói rõ đầu ra.
107
+ Nói điều kiện, lịch, học phí, ưu đãi.
108
+ Nói quà tặng nếu có.
109
+ Kết bằng triết lý SHOWME.
110
+ CTA inbox.
111
+ ```
112
+
113
+ Có thể chạy trực tiếp `/agent-fbpost launch [sản phẩm]` cho bước này — dùng chung 1 cấu trúc.
114
+
115
+ ---
116
+
117
+ ## Nguyên tắc
118
+
119
+ - Cảm xúc trước, thuyết phục sau — không đảo ngược thứ tự 5 nhịp Soap Opera Sequence, không chào bán khi câu chuyện chưa kể xong
120
+ - Không mở bán ngay từ bài đầu tiên — luôn có ít nhất 2-3 nội dung giá trị trước Launch Day
121
+ - Nội dung Prelaunch phải cho giá trị thật và cảm xúc thật (nỗi đau/khoảnh khắc giác ngộ là chuyện có thật đã xảy ra), không phải teaser rỗng hay kịch hoá giả tạo chỉ để câu tương tác
122
+ - Chủ động nói ra phản đối/nghi ngờ trước khi người đọc tự nghĩ ra và bỏ qua
123
+ - Launch Day là nơi duy nhất được đẩy CTA rõ ràng — các bài trước không CTA mua
124
+ - Áp cùng nguyên tắc giọng văn SHOWME: minh bạch giá, không hook giả, không sáo rỗng
125
+
126
+ ## Files
127
+
128
+ ```
129
+ agent-launch-campaign/
130
+ └── SKILL.md — router + Soap Opera Sequence (Pha Cảm xúc) + Launch Day (Pha Thuyết phục), theo Product Launch Formula (file này)
131
+ ```
@@ -0,0 +1,144 @@
1
+ ---
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"
6
+ ---
7
+
8
+ # /agent-onboarding — Dựng CLAUDE.md Từ Context Thật
9
+
10
+ Đa số người dùng khó tự mô tả giọng văn của mình bằng lời (tự nhận ra giọng mình khó hơn tự nhận ra giọng người khác). Agent này giải quyết bằng 2 cách song song: hỏi trực tiếp về bối cảnh dự án, và phân tích bài viết mẫu có sẵn thay vì bắt khách tự mô tả giọng văn trừu tượng.
11
+
12
+ Nền tảng: phân biệt **Voice** và **Tone** (Mailchimp Content Style Guide) — Voice là giọng cố định, giữ nguyên xuyên suốt mọi bài viết (con người thật của bạn). Tone là cách giọng đó thể hiện ra tuỳ ngữ cảnh — bài dạy khác bài thông báo, khác bài ra mắt. CLAUDE.md cần ghi rõ cả hai, không gộp chung.
13
+
14
+ ## Routing
15
+
16
+ | Input | Hành động |
17
+ |---|---|
18
+ | _(empty)_ hoặc `help` | Bắt đầu **Full Flow** — hội thoại dẫn dắt qua 4 bước |
19
+ | `samples` | Chỉ chạy bước phân tích bài viết mẫu để rút Voice Profile |
20
+ | `interview` | Chỉ chạy bước phỏng vấn khi chưa có bài viết mẫu nào |
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
+
23
+ ---
24
+
25
+ ## Full Flow
26
+
27
+ ### Bước 1 — Bối cảnh dự án
28
+
29
+ Hỏi từng câu một, không hỏi dồn hết một lúc:
30
+
31
+ ```text
32
+ 1. Bạn đang làm/bán gì? (sản phẩm, dịch vụ, hoặc chuyên môn đang chia sẻ)
33
+ 2. Ai là người đọc/khách hàng chính? Họ đang vướng gì?
34
+ 3. Dùng agent này để làm gì là chính — viết blog đều hơn, ra bài SEO,
35
+ đăng Facebook, hay chuẩn bị ra mắt sản phẩm?
36
+ 4. Giai đoạn hiện tại của dự án là gì? (mới bắt đầu, đã có khách,
37
+ sắp ra mắt sản phẩm mới...)
38
+ ```
39
+
40
+ Tóm tắt lại thành đoạn ngắn để khách xác nhận trước khi qua bước 2.
41
+
42
+ ### Bước 2 — Rút Voice Profile (2 cách, chọn 1)
43
+
44
+ **Cách A — Có bài viết cũ (ưu tiên, chính xác hơn tự mô tả)**
45
+
46
+ ```text
47
+ Hãy dán 2-3 bài viết bạn từng viết (blog, Facebook, email — loại nào
48
+ cũng được, miễn là do chính bạn viết, không phải AI viết hộ).
49
+
50
+ Tôi sẽ phân tích và rút ra:
51
+ - Độ dài câu trung bình, câu ngắn hay dài
52
+ - Cách mở bài thường dùng (vào thẳng vấn đề, kể chuyện, đặt câu hỏi...)
53
+ - Từ/cụm từ hay lặp lại
54
+ - Cách kết bài
55
+ - Điều bạn có xu hướng tránh (ví dụ: không dùng từ to tát, không
56
+ viết câu cảm thán)
57
+
58
+ Sau đó tôi tóm tắt thành Voice Profile 4-5 dòng để bạn xác nhận
59
+ đúng là giọng của bạn không.
60
+ ```
61
+
62
+ **Cách B — Chưa có bài viết nào (dùng phỏng vấn)**
63
+
64
+ ```text
65
+ Chưa có bài mẫu thì trả lời nhanh các câu sau, trả lời bằng bản năng,
66
+ không cần nghĩ quá kỹ:
67
+
68
+ 1. Khi giải thích điều gì đó cho bạn bè, bạn hay nói dài dòng hay
69
+ đi thẳng vào ý chính?
70
+ 2. Bạn ghét đọc kiểu văn viết nào nhất? (sáo rỗng, khô khan, quá
71
+ nhiều thuật ngữ, quá "cố tỏ ra vui vẻ"...)
72
+ 3. Có câu/cụm từ nào bạn hay dùng khi nói chuyện đời thường, mà
73
+ muốn giữ cả khi viết?
74
+ 4. Có điều gì bạn nhất định không muốn xuất hiện trong bài viết
75
+ của mình? (ví dụ: CTA ép mua, viết hoa tuỳ tiện, nói quá về
76
+ sản phẩm)
77
+ ```
78
+
79
+ ### Bước 3 — Người viết truyền cảm hứng (tuỳ chọn)
80
+
81
+ ```text
82
+ Có ai bạn hay đọc và thích cách họ viết không? (không nhất thiết
83
+ cùng ngành)
84
+
85
+ Nếu có, hãy nói tên hoặc dán 1 đoạn viết của họ mà bạn thích. Tôi sẽ
86
+ chỉ ra cụ thể điều gì ở cách viết đó đáng học — ví dụ: cách vào bài,
87
+ cách dùng ví dụ, độ dài đoạn văn — để tham khảo kỹ thuật, không phải
88
+ để sao chép giọng của họ. Giọng cuối cùng vẫn phải là giọng bạn ở
89
+ Bước 2.
90
+ ```
91
+
92
+ ### Bước 4 — Tone theo ngữ cảnh + tổng hợp CLAUDE.md
93
+
94
+ ```text
95
+ Voice của bạn giữ nguyên, nhưng Tone (cách thể hiện) nên khác nhau
96
+ tuỳ loại bài. Hãy xác nhận nhanh:
97
+
98
+ - Bài dạy/chia sẻ kiến thức: tông muốn ra sao? (điềm tĩnh, chắc chắn...)
99
+ - Bài thông báo/khoe sản phẩm: tông muốn ra sao? (hào hứng nhưng
100
+ không quá đà...)
101
+ - Bài ra mắt/bán hàng: tông muốn ra sao? (tin tưởng, rõ ràng,
102
+ không ép buộc...)
103
+
104
+ Từ tất cả thông tin đã thu thập (Bước 1-4), hãy tổng hợp thành file
105
+ CLAUDE.md hoàn chỉnh theo đúng format:
106
+
107
+ # Giọng văn của tôi
108
+
109
+ ## Tôi là ai
110
+ [từ Bước 1]
111
+
112
+ ## Đối tượng đọc chính
113
+ [từ Bước 1]
114
+
115
+ ## Cách tôi thường nói
116
+ [Voice Profile từ Bước 2, có thể thêm điều học được từ Bước 3]
117
+
118
+ ## Tone theo loại bài
119
+ [từ Bước 4 — liệt kê rõ tông cho từng loại bài]
120
+
121
+ ## Điều tôi không muốn
122
+ [từ Bước 2]
123
+
124
+ ## Bối cảnh đang làm
125
+ [từ Bước 1]
126
+ ```
127
+
128
+ Lưu file này vào thư mục làm việc, tên `CLAUDE.md`. Từ phiên sau, mọi agent khác trong bộ Showme Studio tự đọc file này.
129
+
130
+ ---
131
+
132
+ ## Nguyên tắc
133
+
134
+ - Ư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
135
+ - Người viết truyền cảm hứng chỉ để học kỹ thuật cụ thể, không phải để giọng cuối cùng giống hệt người đó
136
+ - Tone thay đổi theo ngữ cảnh, Voice thì không — không gộp hai khái niệm này làm một khi viết CLAUDE.md
137
+ - Nếu khách trả lời sơ sài ở bước nào, hỏi lại 1 câu cụ thể hơn thay vì tự bịa cho đủ
138
+
139
+ ## Files
140
+
141
+ ```
142
+ agent-onboarding/
143
+ └── SKILL.md — router + 4 bước dựng CLAUDE.md (file này)
144
+ ```
@@ -0,0 +1,232 @@
1
+ ---
2
+ name: agent-platform
3
+ description: "Đăng bài blog (kèm ảnh) lên WordPress, Emdash hoặc Wix. Hướng dẫn lấy thông tin kết nối nền tảng, ghi vào file cấu hình _platforms/{nền tảng}.json, rồi đăng qua MCP/API. Đọc nội dung từ noi-dung/4-approved/{slug}/blog.md và ảnh trong images/, chuyển thư mục sang 5-published/ và cập nhật _context/published-index.md sau khi đăng."
4
+ argument-hint: "[slug bài viết muốn đăng, hoặc subcommand: connect | wordpress | emdash | wix]"
5
+ version: "1.3.0"
6
+ ---
7
+
8
+ # /agent-platform — Đăng Bài Lên Nền Tảng
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.
11
+
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
+
14
+ ## Routing
15
+
16
+ | Input | Hành động |
17
+ |---|---|
18
+ | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
19
+ | `connect [nền tảng]` | Hướng dẫn kết nối + tạo `_platforms/{nền tảng}.json` — chạy trước khi đăng lần đầu trên mỗi site |
20
+ | `wordpress [slug]` | Đăng bài trong `noi-dung/4-approved/[slug]/` lên WordPress |
21
+ | `emdash [slug]` | Đăng bài lên Emdash |
22
+ | `wix [slug]` | Đăng bài lên Wix |
23
+
24
+ Chỉ đăng bài đang ở `4-approved/` — nếu `[slug]` đang ở stage khác (`1-ideas`, `2-drafting`, `3-review`), báo user bài chưa được duyệt, không tự đăng.
25
+
26
+ Nếu chưa rõ đang dùng nền tảng nào, hỏi user trước khi chạy bất kỳ subcommand nào. Trước khi đăng, kiểm tra `_platforms/{nền tảng}.json` đã tồn tại chưa — nếu chưa, chạy `connect` trước.
27
+
28
+ ---
29
+
30
+ ## Subcommand: `connect` — Kết nối nền tảng (làm 1 lần cho mỗi site)
31
+
32
+ Trước khi hướng dẫn lấy thông tin kết nối, kiểm tra xem đã có MCP server phù hợp cấu hình sẵn chưa (WordPress MCP, MCP riêng theo site Emdash, hoặc Wix connector) — nếu có, ưu tiên dùng MCP thay vì gọi REST API trực tiếp bằng curl.
33
+
34
+ **Nguyên tắc chung khi tạo `_platforms/{nền tảng}.json`:** file này chỉ chứa cấu hình (site URL, tên MCP server, quy tắc format, scope quyền cần có) — **không bao giờ ghi token/password thật vào file này.** Token thật lưu trong biến môi trường hoặc trình quản lý secret riêng của máy, file JSON chỉ ghi *cách lấy* token đó.
35
+
36
+ ### WordPress
37
+
38
+ ```text
39
+ Để đăng bài lên WordPress qua REST API (nếu chưa có MCP WordPress), cần:
40
+
41
+ 1. Đăng nhập WordPress admin → Users → Profile (hồ sơ của chính bạn)
42
+ 2. Kéo xuống mục "Application Passwords"
43
+ 3. Đặt tên bất kỳ (ví dụ "Claude Agent"), bấm "Add New Application Password"
44
+ 4. Copy password hiện ra (chỉ hiện đúng 1 lần, dạng "xxxx xxxx xxxx xxxx")
45
+ 5. Ghi lại thêm: URL site và username đăng nhập
46
+
47
+ Lưu username + application password vào biến môi trường hoặc CLAUDE.md
48
+ cá nhân (không public, không commit git). Tạo _platforms/wordpress.json:
49
+
50
+ {
51
+ "platform": "wordpress",
52
+ "site_url": "https://your-domain.com",
53
+ "api_base": "https://your-domain.com/wp-json/wp/v2",
54
+ "format": { "input": "html", "note": "REST API nhận HTML, chuyển Markdown sang HTML trước khi gửi" },
55
+ "authentication": {
56
+ "type": "application-password",
57
+ "header": "Authorization: Basic base64(username:application_password)",
58
+ "note": "Tạo tại Users → Profile → Application Passwords"
59
+ },
60
+ "featured_image": { "field": "featured_media", "upload_endpoint": "/media" },
61
+ "publish": { "default_status": "draft" }
62
+ }
63
+ ```
64
+
65
+ ### Emdash
66
+
67
+ ```text
68
+ Emdash xác thực bằng Personal Access Token (PAT), không dùng OAuth:
69
+
70
+ 1. Vào {site_url}/_emdash → Settings → API Tokens
71
+ 2. Tạo token mới, chọn đủ scope: content:read, content:write,
72
+ media:read, media:write, taxonomies:manage
73
+ 3. Copy token (dạng "ec_pat_...", chỉ hiện 1 lần)
74
+
75
+ Lưu token vào biến môi trường hoặc CLAUDE.md cá nhân (không public,
76
+ không commit git). Tạo _platforms/emdash.json:
77
+
78
+ {
79
+ "platform": "emdash",
80
+ "site_url": "https://your-domain.com",
81
+ "admin_url": "https://your-domain.com/_emdash",
82
+ "mcp_endpoint": "https://your-domain.com/_emdash/api/mcp",
83
+ "mcp_server_name": "ten-mcp-server-da-cau-hinh-trong-claude-code",
84
+ "content_collection": "posts",
85
+ "format": { "input": "markdown", "note": "Emdash nhận Markdown trực tiếp, không cần chuyển sang Ricos JSON" },
86
+ "authentication": {
87
+ "type": "personal-access-token",
88
+ "token_format": "ec_pat_*",
89
+ "header": "Authorization: Bearer ec_pat_YOUR_TOKEN",
90
+ "scopes_needed": ["content:read", "content:write", "media:read", "media:write", "taxonomies:manage"]
91
+ },
92
+ "featured_image": { "field": "featured_image", "note": "Set qua field riêng, không chèn vào đầu nội dung body" },
93
+ "mcp_tools": {
94
+ "create_post": "content.create (collection: posts)",
95
+ "publish_post": "content.publish",
96
+ "update_post": "content.update",
97
+ "schedule_post": "content.schedule"
98
+ },
99
+ "publish": { "default_status": "draft" }
100
+ }
101
+
102
+ Nếu MCP server (dạng mcp__{ten-site}__content_create...) đã có sẵn
103
+ trong danh sách tool, dùng MCP thay vì gọi thẳng mcp_endpoint bằng curl.
104
+ Gọi thử content_list/content.list trước để xác nhận kết nối trước khi
105
+ đăng bài thật.
106
+ ```
107
+
108
+ ### Wix
109
+
110
+ ```text
111
+ Wix kết nối qua Wix connector (OAuth), không dùng API key thủ công:
112
+
113
+ 1. Nếu dùng claude.ai/Claude Desktop: mở phần cài đặt Connectors,
114
+ thêm Wix, đăng nhập tài khoản Wix để cấp quyền
115
+ 2. Nếu dùng Claude Code CLI: cần MCP server Wix đã cấu hình sẵn trong
116
+ môi trường — hỏi người hỗ trợ cài đặt nếu chưa quen việc này
117
+ 3. Sau khi kết nối, lấy site ID (gọi danh sách site qua MCP, ví dụ
118
+ ListWixSites) để xác nhận đúng site cần đăng
119
+
120
+ Tạo _platforms/wix.json:
121
+
122
+ {
123
+ "platform": "wix",
124
+ "site_id": "site-id-lay-tu-buoc-3",
125
+ "site_url": "https://your-domain.com",
126
+ "blog_url": "https://your-domain.com/blog",
127
+ "format": {
128
+ "input": "markdown",
129
+ "note": "Wix Blog API nhận Ricos JSON, không nhận Markdown thô — phải chuyển Markdown sang Ricos JSON trước khi gọi API (dùng Wix MCP nếu MCP tự lo bước này)"
130
+ },
131
+ "seo": {
132
+ "title_source": "Meta Title trong file draft — KHÔNG để Wix tự generate",
133
+ "description_source": "Meta Description trong file draft",
134
+ "slug_gotcha": "Wix mặc định tự sinh slug từ tiêu đề bài, thường ra tiếng Việt có dấu. Phải override thủ công qua field seoSlug (tiếng Anh/không dấu, nối bằng -) sau khi tạo draft."
135
+ },
136
+ "featured_image": { "field": "coverImage hoặc tương đương trong Wix Blog API", "note": "Dùng ảnh featured.png riêng, không chèn vào đầu nội dung body" },
137
+ "publish": { "default_status": "draft" }
138
+ }
139
+ ```
140
+
141
+ ---
142
+
143
+ ## Subcommand: `wordpress [slug]` — Đăng lên WordPress
144
+
145
+ ```text
146
+ Đăng bài noi-dung/4-approved/[slug]/blog.md lên WordPress, dùng cấu
147
+ hình đọc từ _platforms/wordpress.json.
148
+
149
+ 1. Đọc blog.md, tách tiêu đề (H1 đầu tiên) làm title, phần còn lại
150
+ chuyển từ Markdown sang HTML làm content
151
+ 2. Upload images/featured.png (nếu có) qua endpoint media, gán vào
152
+ field featured_media — không chèn ảnh này vào đầu content
153
+ 3. Với mỗi ảnh khác trong images/ được tham chiếu trong blog.md, upload
154
+ qua endpoint media, lấy URL trả về, thay tham chiếu cục bộ trong
155
+ content bằng URL đã upload
156
+ 4. Tạo bài viết với title, content, featured_media, status=draft —
157
+ chỉ đặt publish khi user xác nhận rõ ràng
158
+ 5. Trả về link bài viết (link nháp hoặc link live tuỳ status)
159
+ 6. Chỉ khi đã publish thật (không phải draft): thêm dòng URL bài đã
160
+ đăng vào phần ghi chú đăng bài trong blog.md, rồi di chuyển cả
161
+ thư mục bài viết sang noi-dung/5-published/[slug]/
162
+ 7. Thêm 1 dòng vào noi-dung/_context/published-index.md (tạo file với
163
+ header bảng nếu chưa có): ngày đăng, tiêu đề, URL, category, tags
164
+ ```
165
+
166
+ ## Subcommand: `emdash [slug]` — Đăng lên Emdash
167
+
168
+ ```text
169
+ Đăng bài noi-dung/4-approved/[slug]/blog.md lên Emdash, dùng cấu hình
170
+ đọc từ _platforms/emdash.json.
171
+
172
+ 1. Đọc blog.md, tách tiêu đề, mô tả ngắn (nếu có), nội dung — giữ
173
+ nguyên Markdown, Emdash nhận trực tiếp
174
+ 2. Upload images/featured.png (nếu có) qua MCP Emdash
175
+ (media_create/media.create), gán vào field featured_image — không
176
+ chèn ảnh này vào đầu nội dung
177
+ 3. Upload các ảnh khác trong images/ được tham chiếu trong blog.md,
178
+ thay tham chiếu cục bộ bằng URL/storageKey trả về
179
+ 4. Tạo nội dung bằng content_create/content.create (collection: posts),
180
+ mặc định status=draft — chỉ publish (content_publish/content.publish)
181
+ khi user xác nhận rõ ràng
182
+ 5. Trả về link xem trước
183
+ 6. Chỉ khi đã publish thật (không phải draft): thêm dòng URL bài đã
184
+ đăng vào phần ghi chú đăng bài trong blog.md, rồi di chuyển cả
185
+ thư mục bài viết sang noi-dung/5-published/[slug]/
186
+ 7. Thêm 1 dòng vào noi-dung/_context/published-index.md (tạo file với
187
+ header bảng nếu chưa có): ngày đăng, tiêu đề, URL, category, tags
188
+ ```
189
+
190
+ ## Subcommand: `wix [slug]` — Đăng lên Wix
191
+
192
+ ```text
193
+ Đăng bài noi-dung/4-approved/[slug]/blog.md lên Wix, dùng cấu hình
194
+ đọc từ _platforms/wix.json.
195
+
196
+ 1. Đọc blog.md, tách tiêu đề, nội dung
197
+ 2. Chuyển nội dung từ Markdown sang Ricos JSON (định dạng Wix Blog API
198
+ yêu cầu) — dùng Wix MCP nếu MCP tự lo bước chuyển đổi này
199
+ 3. Upload images/featured.png (nếu có) lên Wix, gán làm ảnh đại diện —
200
+ không chèn ảnh này vào đầu nội dung body
201
+ 4. Upload các ảnh khác trong images/ được tham chiếu trong blog.md,
202
+ gắn vào đúng vị trí trong Ricos JSON
203
+ 5. Lấy Meta Title/Meta Description từ blog.md, KHÔNG để Wix tự generate
204
+ 6. Tạo bài viết ở trạng thái draft, sau đó override field seoSlug
205
+ bằng slug tiếng Anh không dấu (Wix tự sinh slug có dấu từ tiêu đề,
206
+ phải sửa lại thủ công) — chỉ publish khi user xác nhận rõ ràng
207
+ 7. Trả về link bài viết
208
+ 8. Chỉ khi đã publish thật (không phải draft): thêm dòng URL bài đã
209
+ đăng vào phần ghi chú đăng bài trong blog.md, rồi di chuyển cả
210
+ thư mục bài viết sang noi-dung/5-published/[slug]/
211
+ 9. Thêm 1 dòng vào noi-dung/_context/published-index.md (tạo file với
212
+ header bảng nếu chưa có): ngày đăng, tiêu đề, URL, category, tags
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Nguyên tắc chung
218
+
219
+ - Mặc định tạo bản draft, không tự publish công khai — luôn hỏi user xác nhận trước khi đăng thật ra công chúng
220
+ - Không tự đoán thông tin kết nối (site URL, key, tên MCP server...) — nếu thiếu, chạy `connect` trước, không tự bịa
221
+ - Không bao giờ ghi token/application password thật vào `_platforms/{nền tảng}.json`, file trong `noi-dung/`, hay commit vào git — chỉ lưu trong biến môi trường hoặc `CLAUDE.md` cá nhân (không public)
222
+ - Nếu MCP/API trả lỗi xác thực, dừng lại và báo user kiểm tra lại bước `connect`, không tự thử đổi endpoint hay đoán lại thông tin khác
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
+ - Ả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
+ - 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
+
227
+ ## Files
228
+
229
+ ```
230
+ agent-platform/
231
+ └── SKILL.md — router + connect (3 nền tảng) + 3 flow đăng bài (file này)
232
+ ```
@@ -0,0 +1,145 @@
1
+ ---
2
+ name: agent-seo
3
+ description: "Viết bài SEO chuẩn cấu trúc, dựa trên E-E-A-T (Google), Skyscraper Technique (Backlinko), Topic Cluster (HubSpot) và TOFU-MOFU-BOFU (funnel marketing). Dùng khi muốn bài viết vừa xếp hạng tốt vừa giữ được chất chuyên gia thật, vừa phủ đều các giai đoạn hành trình mua hàng."
4
+ argument-hint: "[từ khoá/chủ đề muốn lên top, hoặc subcommand: cluster | research | onpage]"
5
+ version: "1.1.0"
6
+ ---
7
+
8
+ # /agent-seo — Viết Bài SEO Giữ Chất Chuyên Gia
9
+
10
+ Khác với bài blog kể chuyện tự do, bài SEO cần vừa đúng cấu trúc để công cụ tìm kiếm hiểu, vừa đủ thật để người đọc và Google tin đây là nội dung của một người có chuyên môn thật. Agent này dùng 4 nền tảng:
11
+
12
+ - **Topic Cluster / Pillar Page (HubSpot):** một trang trụ (pillar) bao quát chủ đề lớn, nhiều bài cluster đi sâu từng nhánh nhỏ, tất cả link chéo về nhau — thay vì viết rời rạc từng bài không liên kết
13
+ - **TOFU-MOFU-BOFU (funnel marketing):** phân loại từng bài Cluster theo giai đoạn hành trình mua hàng — TOFU (Top of Funnel: nhận biết vấn đề, chưa nghĩ tới giải pháp cụ thể), MOFU (Middle: đang cân nhắc giải pháp/so sánh lựa chọn), BOFU (Bottom: sẵn sàng mua, cần lý do chốt) — để bộ Cluster không lệch hẳn về TOFU (nhiều traffic nhưng ít ai mua) hay BOFU (ít traffic nhưng không ai tìm thấy)
14
+ - **Skyscraper Technique (Brian Dean/Backlinko):** tìm nội dung đang xếp hạng tốt nhất cho chủ đề, rồi làm bản tốt hơn — đầy đủ hơn, mới hơn, trình bày rõ hơn, đi sâu hơn
15
+ - **E-E-A-T (Google Search Quality Rater Guidelines):** Google và người đọc đánh giá nội dung qua Experience (trải nghiệm thật), Expertise (chuyên môn), Authoritativeness (uy tín), Trustworthiness (đáng tin) — không phải chỉ nhồi từ khoá
16
+
17
+ ## Routing
18
+
19
+ | Input | Hành động |
20
+ |---|---|
21
+ | _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
22
+ | từ khoá/chủ đề cụ thể | Chạy **Full Flow**: cluster → research → viết → onpage |
23
+ | `cluster [chủ đề lớn]` | Chỉ chạy bước xây pillar + cluster |
24
+ | `research [từ khoá]` | Chỉ chạy bước phân tích nội dung đang xếp hạng tốt |
25
+ | `onpage [bản nháp]` | Chỉ chạy checklist on-page cho bài đã viết |
26
+
27
+ ---
28
+
29
+ ## Full Flow
30
+
31
+ ### Bước 1 — Xây Pillar và Cluster
32
+
33
+ ```text
34
+ Chủ đề lớn tôi muốn làm chủ trên Google: [chủ đề]
35
+
36
+ Hãy giúp tôi:
37
+ 1. Xác định 1 trang Pillar bao quát toàn bộ chủ đề (mức độ tổng quan,
38
+ dài, dẫn tới các bài con)
39
+ 2. Đề xuất 5-8 bài Cluster — mỗi bài đi sâu 1 từ khoá dài (long-tail)
40
+ liên quan trực tiếp tới Pillar
41
+ 3. Gắn nhãn từng bài Cluster theo giai đoạn phễu:
42
+ - TOFU — bài giải thích khái niệm, nhận biết vấn đề, chưa nhắc giải pháp cụ thể
43
+ - MOFU — bài so sánh, đánh giá, hướng dẫn chọn giải pháp
44
+ - BOFU — bài giá cả, case study, "vì sao chọn [sản phẩm/dịch vụ mình]"
45
+ 4. Kiểm tra bộ Cluster đã đề xuất có phủ đủ cả 3 giai đoạn chưa —
46
+ nếu lệch hẳn về TOFU (toàn bài kiến thức chung) hoặc BOFU (toàn bài
47
+ bán hàng), đề xuất thêm bài để cân lại
48
+ 5. Vẽ sơ đồ: bài nào link về Pillar, Pillar link tới bài nào
49
+
50
+ Ưu tiên chủ đề mà tôi có kinh nghiệm thật để trả lời, không chọn
51
+ chủ đề chỉ vì có volume tìm kiếm cao.
52
+ ```
53
+
54
+ Trước khi vẽ sơ đồ, đọc `noi-dung/_context/published-index.md` (nếu có) — nếu đã có bài đã đăng cùng chủ đề, đưa thẳng vào sơ đồ Cluster thay vì chỉ đề xuất bài mới, tránh viết trùng chủ đề đã có.
55
+
56
+ ### Bước 2 — Nghiên cứu nội dung đang xếp hạng tốt (Skyscraper bước 1-2)
57
+
58
+ ```text
59
+ Từ khoá tôi muốn viết: [từ khoá]
60
+
61
+ Hãy giúp tôi phân tích những bài đang đứng top cho từ khoá này (dựa trên
62
+ tiêu đề, cấu trúc heading, độ dài, góc nhìn — tôi sẽ dán nội dung nếu có):
63
+
64
+ 1. Các bài đó đang trả lời câu hỏi gì, bỏ sót câu hỏi gì?
65
+ 2. Cấu trúc heading của họ ra sao?
66
+ 3. Thông tin nào đã cũ, chưa cập nhật?
67
+ 4. Tôi có thể làm bài "hơn" ở đâu — đầy đủ hơn, có ví dụ thật hơn,
68
+ trình bày rõ hơn, trả lời sâu hơn câu hỏi thật?
69
+
70
+ Không copy cấu trúc, chỉ dùng để biết mình cần vượt qua điều gì.
71
+ ```
72
+
73
+ ### Bước 3 — Viết bài theo cấu trúc SEO + chất riêng
74
+
75
+ ```text
76
+ Viết bài cho từ khoá [từ khoá], dựa trên khoảng trống đã tìm ở bước 2
77
+ và trải nghiệm thật của tôi: [dán trải nghiệm/ghi chú]
78
+
79
+ Yêu cầu cấu trúc:
80
+ - Heading H1 chứa từ khoá chính, đọc tự nhiên như người thật viết
81
+ (dùng `agent-title` subcommand `seo` nếu muốn sinh nhiều phương án
82
+ Title/H1 và chấm điểm trước khi viết bài)
83
+ - Đoạn mở trả lời thẳng câu hỏi trong 2-3 câu đầu (không vòng vo)
84
+ - Heading H2/H3 theo từng câu hỏi phụ người đọc thật hay hỏi
85
+ - Có ít nhất 1 đoạn thể hiện Experience thật (đã tự làm, tự thử,
86
+ tự gặp vấn đề này) — đây là phần AI không tự bịa được, cần chất liệu thật
87
+ - Có ít nhất 1 đoạn thể hiện Expertise cụ thể (số liệu, quy trình,
88
+ cách làm chi tiết mà người ngoài nghề không biết)
89
+ - Kết bài dẫn về Pillar/bài Cluster liên quan (nếu có)
90
+ - Đọc `noi-dung/_context/published-index.md`, chọn 1-3 bài đã đăng
91
+ cùng chủ đề/category/tags liên quan, chèn internal link tự nhiên
92
+ trong thân bài (không chỉ ở kết bài) kèm anchor text mô tả đúng nội
93
+ dung bài được link tới, không dùng "xem thêm tại đây"
94
+
95
+ Không nhồi từ khoá lặp lại máy móc — ưu tiên đọc tự nhiên trước,
96
+ đúng cấu trúc sau.
97
+ ```
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".
100
+
101
+ ### Bước 4 — Checklist On-page + E-E-A-T
102
+
103
+ ```text
104
+ Đây là bản nháp bài SEO của tôi:
105
+
106
+ [Dán bản nháp]
107
+
108
+ Hãy kiểm tra và chỉ ra chỗ cần sửa theo checklist:
109
+
110
+ On-page:
111
+ - Title có chứa từ khoá chính, dưới 60 ký tự không? (dùng `agent-title`
112
+ subcommand `seo` nếu cần sinh và chấm điểm nhiều phương án trước khi chốt)
113
+ - Meta description có nêu rõ lợi ích, dưới 155 ký tự không?
114
+ - Heading H2/H3 có theo đúng thứ tự logic không, có từ khoá phụ không?
115
+ - Có internal link về Pillar/bài liên quan không? (đối chiếu với
116
+ `noi-dung/_context/published-index.md` — còn bài đã đăng cùng chủ
117
+ đề nào chưa được link tới không?)
118
+ - Có ảnh minh hoạ kèm alt text mô tả đúng nội dung không?
119
+
120
+ E-E-A-T:
121
+ - Experience — có đoạn nào thể hiện tôi đã thật sự làm việc này không?
122
+ - Expertise — có chi tiết cụ thể mà chỉ người có chuyên môn mới biết không?
123
+ - Authoritativeness — có nhắc nguồn/số liệu đáng tin, hoặc dẫn về
124
+ bài khác đã viết cùng chủ đề không?
125
+ - Trustworthiness — có minh bạch (giá, giới hạn, điều sản phẩm/dịch vụ
126
+ không làm được) thay vì chỉ khen không?
127
+ ```
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".
130
+
131
+ ---
132
+
133
+ ## Nguyên tắc
134
+
135
+ - 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
+ - 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ụ
138
+ - 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
+
140
+ ## Files
141
+
142
+ ```
143
+ agent-seo/
144
+ └── SKILL.md — router + full flow (file này)
145
+ ```