Build Your Own AI Ghostwriter — Co-create với Claude Code

Hướng dẫn build Gemini Gem ghostwriter đúng giọng bạn · by yoloh3

Hướng dẫn dùng Claude Code (hoặc Cursor/Windsurf/coding chatbot khác) làm Co-creator để build 1 Gemini Gem ghostwriter đúng giọng bạn. Không phải copy 1 template có sẵn — mà học quy trình interact với AI coding assistant để iterate ra Gem của riêng mình.

Triết lý: "Người Cộng Sự" — AI không phải tool output 1 chiều, mà là co-thinker. Bạn mang domain + giọng văn + judgement. Claude Code mang cấu trúc prompt engineering + kỹ năng debug. Hai bên ping-pong 5-10 vòng → ra Gem chất.

Output cuối: 1 Gemini Gem của bạn (paid Gemini Advanced) — chạy workflow multi-step, viết đúng giọng bạn, export Substack được.

Mục lục
  1. Tại sao co-create, không chỉ paste template?
  2. Prerequisites
  3. Mental model — cách interact với Claude Code
  4. 4-Phase build process
  5. Ví dụ prompts hay cho Claude Code
  6. Common pitfalls
  7. Iteration roadmap sau v1
  8. Next steps

1. Tại sao co-create, không chỉ paste template?

Paste 1 prompt v0.5 của người khác cho bạn 1 Gem "chạy được". Co-create với Claude Code cho bạn:

  1. Gem fit giọng + niche của bạn — không phải fork H3's DNA.
  2. Bạn hiểu từng dòng prompt — khi fail, bạn biết fix chỗ nào.
  3. Iteration skill — lần sau build tool AI khác (sales bot, study coach, research agent) bạn biết pattern.
  4. Guardrails đúng với risk bạn care — H3 cấm em-dash, bạn có thể cấm thứ khác.

Nếu bạn chỉ cần Gem chạy nhanh → fork thẳng v0.5 của H3 (folder gemprompt/ghostwriter_v0.5/). Nếu muốn Gem của bạn — đọc tiếp.


2. Prerequisites


3. Mental model — cách interact với Claude Code

Trước khi bắt đầu, nội hoá 4 nguyên tắc:

3.1 Bạn dẫn — Claude Code phục vụ

Claude Code không đọc được ý bạn. Mỗi request nên có 3 thành phần:

Ví dụ tệ: "Viết prompt cho Gem ghostwriter"
Ví dụ tốt: "Viết system prompt cho Gemini Gem. Goal: coach người bận 40+ viết bài Substack 500 chữ. Constraint: không invent trải nghiệm user, luôn tiếng Việt có dấu, workflow phải có WAIT sau mỗi step để user reply."

3.2 Iterate qua test thực

Đừng tin prompt Claude Code viết lần đầu. Flow đúng:

Claude Code draft prompt → bạn paste vào Gem → chạy thật 1 bài →
gặp fail → report fail cho Claude Code → Claude Code fix → lặp lại

H3 đã chạy vòng này 5 lần (v0.1 → v0.5). Bạn sẽ chạy 3-5 vòng tối thiểu.

3.3 Fail là signal, không phải rác

Mỗi lần Gem sai, bạn có 1 data point thật về giới hạn của prompt. Ghi lại chính xác:

Feed nguyên block này cho Claude Code — nó debug tốt hơn hẳn lời kể mơ hồ.

3.4 Offload sang Knowledge files khi prompt quá dài

Gemini Gem có hard limit system prompt ~4000 chars. Quá thì cắt rules → đưa sang file .md trong Knowledge. Claude Code sẽ gợi ý chỗ nào nên tách — nếu không, bạn chủ động ask: "Phần này dài quá, tách sang knowledge file nào?"


4. 4-Phase build process

Làm theo thứ tự. Mỗi phase end bằng 1 artifact concrete trước khi sang phase sau.

Phase 1 — Scope + Skeleton (session 1, ~45 phút)

Goal của phase: ra được 1 skeleton system prompt cho Gem + danh sách Knowledge files cần tạo.

Cách interact với Claude Code:

  1. Mở Claude Code ở folder ~/my_ghostwriter/.
  2. Prompt mở đầu (customize theo bạn):
Tôi muốn build 1 Gemini Gem ghostwriter cho [mô tả target audience
của bạn, ví dụ: "người Việt 35-50 tuổi bận rộn muốn viết Substack
tiếng Việt"]. Pain points chính tôi muốn giải quyết:
1. [pain 1]
2. [pain 2]
3. [pain 3]

Output của Gem: 1 bài blog [độ dài, format].

Reference: H3 đã build v0.5 ở folder `[path tới ghostwriter_v0.5]`.
Đọc folder đó hiểu approach, rồi propose skeleton cho Gem của tôi.
Đừng copy nguyên — scope lại cho use case của tôi.
  1. Claude Code sẽ propose:
  2. Review + push back. Câu hỏi tốt:
  3. Chốt skeleton version v0.1 của BẠN. Lưu vào system_prompt_v0.1.md trong folder.

Exit criteria phase 1:system_prompt_v0.1.md + danh sách 5-8 Knowledge files (chưa cần content, chỉ cần tên + chức năng).

Phase 2 — Knowledge files content (session 2, ~60 phút)

Goal: mỗi Knowledge file có content concrete đủ cho Gem consult.

Pattern interact:

Làm từng file một. Với mỗi file:

  1. Prompt:
Viết content cho file `tone_rules.md`. Chức năng: liệt kê từ/cụm
cấm + voice rules cho Gem. Context: tôi muốn giọng [description],
không muốn [anti-patterns]. Format: mỗi rule 1 dòng, có ví dụ
tốt/xấu khi cần. Tham khảo file `tone_rules.md` của H3 (ở
ghostwriter_v0.5/) nhưng adapt cho giọng tôi.
  1. Claude Code draft file → bạn review → fix.
  2. Điểm cần check mỗi file:
  3. Lặp cho các file còn lại. Priority order:

Exit criteria phase 2: có folder my_knowledge/ với 5-8 file .md, mỗi file <2000 chars, content concrete.

Phase 3 — Tone anchor (session 3, ~45 phút)

Goal: Gem viết ra giọng bạn, không giọng AI generic.

Đây là phase fail nhất. 3 options từ dễ → mạnh:

OptionEffortReusable?Độ match
A. Sample paste5 phút/sessionKhông60-70%
B. Tone extractor prompt15 phút × 1 lần85-90%
C. Few-shot heavy1-2 giờ setup90-95%

Recommend Option B lần đầu. Cách co-create với Claude Code:

  1. Prompt:
Tôi muốn build 1 "tone extractor prompt" — 1 prompt bằng tiếng Anh
mà user chạy ở 1 chatbot phụ (ChatGPT/Claude web) với sample văn
của họ, output ra TONE PROFILE structured. Sau đó paste TONE
PROFILE vào Gem để calibrate voice.

Tham khảo `tone_guide.md` của H3 ở ghostwriter_v0.5/. Adapt cho
use case của tôi. Yêu cầu:
1. Prompt phải chạy được trên ChatGPT free / Claude web free
2. Output TONE PROFILE structured theo [N] dimensions tôi care nhất
3. Mỗi dimension phải có evidence quote lấy từ sample user upload
4. Có fallback [NEED MORE DATA] nếu sample không đủ

Propose N dimensions nào fit use case của tôi nhất, không cần giữ
nguyên 7 dim của H3.
  1. Claude Code draft prompt. Bạn test thực: chạy nó ở ChatGPT với 3-5 sample bạn. Xem output.
  2. Report lại Claude Code:
  3. Iterate 2-3 vòng cho đến khi output chất.
  4. Embed prompt final vào file tone_guide.md (section "prompt cho user copy").
Lưu ý: Bạn tự chọn bao nhiêu dimensions. Ít quá (2-3) thì profile mỏng. Nhiều quá (8+) thì user mệt. Sweet spot 5-7.

Exit criteria phase 3: tone_guide.md có tone extractor prompt test được.

Phase 4 — Smoke test + iteration (session 4, ~60 phút)

Goal: Gem chạy end-to-end 1 bài thật mà không cần intervene.

Setup Gem:

  1. Mở gemini.google.com/gems/create.
  2. New Gem → Name + Description (ask Claude Code draft giùm nếu muốn).
  3. Paste system prompt v0.1 của bạn vào Instructions.
  4. Upload folder my_knowledge/ lên Google Drive → link vào Gem Knowledge.
  5. Save.

Smoke test scripts (ask Claude Code draft 4-5 test case trước đó):

Debug loop với Claude Code:

Mỗi test fail, quay lại Claude Code:

Test [N] fail.
Paste lại full conversation với Gem:
[paste]

Expected: [...]
Actual: [...]

Hypothesis của tôi: [nếu có]

Fix prompt hay fix knowledge file?

Claude Code debug → propose fix (có thể edit system prompt hoặc Knowledge file cụ thể) → bạn apply → test lại.

Version bump: mỗi lần fix xong 1 batch, đổi v0.1 → v0.2, keep v0.1 backup.

Exit criteria phase 4: 5 test pass liên tiếp → Gem v1 ready cho bài thật.


5. Ví dụ prompts hay cho Claude Code

Copy + paste, thay phần [...]:

Start fresh:

Đọc folder `[path tới ghostwriter_v0.5]` hiểu approach H3 đã dùng.
Sau đó đừng hỏi gì, hỏi tôi 5 câu quan trọng nhất để scope Gem
cho use case của tôi.

Debug fail cụ thể:

Gem v0.2 của tôi fail ở Step 4. Paste conversation:
[...]
Expected: [...]
Actual: [...]
Hypothesis 3 nguyên nhân ranked likelihood. Đừng fix vội, diagnose
trước.

Review Knowledge file:

Đọc `my_knowledge/tone_rules.md`. Tìm 3 weakness: rule trừu tượng,
thiếu ví dụ, redundancy với system prompt. Suggest fix inline.

Merge/split decision:

System prompt v0.3 đang 4800 chars — vượt limit. Đọc prompt, đề
xuất phần nào tách sang knowledge file và phần nào keep inline.
Criteria: Gem phải đọc mỗi turn → keep inline. Consult theo step
→ tách ra.

Tune sau feedback beta:

5 beta tester feedback:
1. [...]
2. [...]
...
Gom cluster root cause. Rank fix theo impact × effort. Đừng fix
từng cái riêng — fix root cause.

6. Common pitfalls

PitfallTriệu chứngFix
Over-engineering phase 1 Skeleton 12 steps, prompt 6000 chars Scope lại: MVP = 6 steps. Cut phase 2/3 features trước khi test baseline.
Prompt trừu tượng Gem skip rule, output generic Thêm ví dụ cụ thể + counter-example. "Đừng dùng em-dash (—)" < "Đừng dùng —, thay bằng phẩy hoặc chấm. Ví dụ: 'X — Y' → 'X, Y'."
Bỏ qua Knowledge files System prompt dồn hết rules → vượt limit Split từ đầu: system prompt = workflow + guardrails; Knowledge = reference data.
Tune giữa lúc viết bài thật Mất focus cả 2 bên Tune ở session riêng. Viết bài thật = freeze version.
Test quá ít Gem fail bất ngờ trên user beta Min 5 test case × 2 modes trước release.
Không version control Mất version tốt sau khi fix 1 cái lại break cái khác Mỗi batch fix = version bump. Backup folder theo version. Git tốt hơn.
Paste fail không đủ context Claude Code propose fix sai Luôn paste full conversation + expected vs actual, không chỉ "Gem sai".

7. Iteration roadmap sau v1

Sau khi Gem v1 chạy ổn, 3 hướng tune:

Short loop (mỗi bài): note 1-2 điểm fail → fix next session.

Medium loop (mỗi 5-10 bài): cluster fail theo root cause → version bump (v1.1, v1.2).

Long loop (mỗi 30-50 bài): rethink architecture. Có thể merge/split step, thay framework outline, đổi mode structure. Đây là lúc v0.5 → v0.6 của H3 — full redesign.

Mỗi loop đều interact với Claude Code: bạn mang data, nó mang structure.


8. Next steps

Stuck chỗ nào, ping group AIMM kèm paste conversation với Claude Code. Debug bằng context thật hiệu quả hơn hỏi chung.


Reference