thai-writing
Skill0 starsChanged 22 days agoMITView on GitHub
Writes and edits natural Thai for work, study and everyday life, and translates English to Thai. Strongest for Thai tech teams (Jira comments and tickets, PR reviews, Slack/LINE/Teams, email, slides, docs, UX copy, incident reports); also office documents (reports, proposals, HR and finance), academic writing (reports, theses, abstracts), public content (social posts, ad copy, articles, press releases) and personal writing (messages to family or elders, invitations, condolences, speeches, job applications). Use whenever the reply or deliverable is in Thai, the user writes in Thai and wants something written, including explanations or summaries meant for someone else (a manager, a client), or asks to fix stiff, translated or AI-sounding Thai (เขียนไทย, แปลไทย, ขัดภาษา, ภาษาแข็ง, คอมเมนต์ Jira, อีเมล, รายงาน, โพสต์, การ์ดเชิญ).
1 other project uses a version of this.
Adopted by
Most recently taken up by
- toontm/claude-skillstheir own version, first seen May 30, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- toontm/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- exports/AGENTS.mdAGENTS.md
- thai-configSkill
- thai-learnSkill
- thai-polishSkill
- thai-termSkill
- thai-translateSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 29
Check: Run the checklist at the end.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
thai-writing
!python3 "${CLAUDE_SKILL_DIR}/scripts/thai_native.py" context --project-dir "${CLAUDE_PROJECT_DIR}" --plugin-option 'register=${user_config.register}' --plugin-option 'particle=${user_config.particle}' --plugin-option 'term_policy=${user_config.term_policy}' || true
No [thai-native …] line above: run python3 scripts/thai_native.py context in this skill's folder (${CLAUDE_SKILL_DIR}; thai_native.py below means that script), or use defaults (register and particle auto). The user's explicit instructions override these settings.
เสียงที่ต้องการ
เขียนเหมือนคนไทยที่เขียนงานแบบนั้นเป็นประจำเขียนถึงผู้อ่านตรงหน้า (งานทีมเทค: คนในทีมที่ทำงานมาหลายปี) เข้าเรื่องเลย บอกสิ่งที่ผู้อ่านต้องรู้หรือต้องทำก่อน ประโยคสั้นยาวสลับกัน ใช้คำที่คนกลุ่มนั้นพูดกันจริง ศัพท์เรียกตามที่ผู้อ่านเรียก แล้วจบที่ขั้นต่อไป
Workflow
- Context card (silent). Decide reader, channel, genre, purpose, stakes, persona. Start from the genre's default register (table below), then +1 for an external reader or first contact (bad news: same or +1; Jira/wiki: never below team); a senior insider keeps the genre register, plus พี่ + ชื่อ, รบกวน and an end particle; −1 only when the user says the reader is close. Unsure: internal → the lower register, external → the higher. Read
references/context-register.mdfor a senior or external reader, a refusal/apology/escalation/pushback, or an unclear register. Client, exec and announcement text: business, no casual endings or spoken words (นะ/จ้า, ล่ม, จะได้…); brand posts followsocial.md. - Persona and particles. Use the configured particle (
krap= ครับ,ka= ค่ะ/คะ,none); if the user's message uses the other one, follow the message without comment, in the draft and in your own lines. Ifauto, use the particle the user writes with. If none is shown and the text needs one (chat or email, especially to a senior or client): ask once (ครับ / ค่ะ / ไม่ใช้; AskUserQuestion if available) and save it:python3 "${CLAUDE_SKILL_DIR}/scripts/thai_native.py" config set particle krap|ka|none. If you cannot ask, write without a gendered particle and carry the politeness in other words (chat: พี่ + ชื่อ, รบกวน…หน่อยนะ · email: เรียน…, close ขอแสดงความนับถือ · more incontext-register.md§6). Only for chat or email to a senior or a client, one line before the draft: (ร่างนี้ยังไม่ใส่ ครับ หรือ ค่ะ บอกได้ว่าใช้คำไหน); docs, tickets, slides, group chat: no line. Never writeครับ/ค่ะwith a slash, never mix them, never infer gender from a name. Chat: one at the end (a long message: one more after the opening or request), never every sentence or bullet. Slides, docs, ticket descriptions, UI: none. - Plan meaning, then draft Thai directly. Note the points (who does what, why, what next) and write Thai from them, not from English sentences. Do not invent facts about the user's situation (times, names, numbers, decisions, what was already done) or firm up what they left open (คาดว่า, ยังไม่ยืนยัน stays so); a
[placeholder]only for a detail the reader needs that the user did not give, ≤3 per draft. A given fact that looks wrong (date on the wrong weekday) stays as given; flag it in the line before the draft, never fix or blank it. Proposals and explainers fill gaps with general knowledge, not blanks. Templates are menus: fill only the sections the notes support, add nothing unasked (sections, labels, deadlines) but keep what the text needs to work (poll options for a vote), and short wins when asked for short. For an English source text, readreferences/translation.mdfirst. - Terms. Follow the term policies in the context line and in the
thai-native glossary, terms in this messagenote when one arrives with the message. Other terms:thai_native.py terms "<text>"(prep --file <source>before translating), or the default: keep jargon Thai devs say in English (deploy, merge, PR), use the Thai word when an everyday one exists (ประชุม, ฐานข้อมูล), transliterate with Royal Institute spelling (อีเมล, แอป, อัปเดต). Readers outside tech (app users, sales, marketing, a client's business side; an executive only when the user says so): say what it means for them in everyday Thai, no English in brackets; a term the user asks to explain is named once as the team says it, then explained. Everyone else, including heads and directors of a tech company and a client's IT team, gets the team's English terms in every genre; Thai (English) only in formal letters and, on first mention, academic writing. Details:references/vocabulary.md. - Genre file. Short chat with colleagues or friends, Jira and review comments: the table line is enough. Anything else (documents, decks, email, letters, academic, public writing, translation): read the table's file the first time in a session.
- Check. Run the checklist at the end. Deliverables over ~300 Thai characters:
thai_native.py lint --genre <genre>on the text, fix only real problems. EN→TH: check modality (อาจ/ควร/ต้อง), negation and numbers against the source. Short chat replies: checklist only.
Give a draft to paste cleanly. Before it, at most one short line, only for what the user must check or fill in that the draft cannot show (a date that looks wrong, a file you could not open); never explain the particle, register, placeholders, term choices or notes the system attached. No ผม/ดิฉัน, nothing after the draft, no second version, no tool footer or session link.
งาน → ระดับภาษา → หลักสั้น ๆ → ไฟล์
| งาน | register | หลักสั้น ๆ | ไฟล์ |
| Jira comment, ticket, AC | team | สถานะ → สาเหตุ → ขั้นต่อไป · @ชื่อ · ไม่มีหัวข้อตัวหนา | references/genres/jira.md |
| PR, code review, commit | team | พูดถึงโค้ด ไม่พูดถึงคน · เสนอ ไม่สั่ง · ป้าย nit: / suggestion: / blocking: | references/genres/code-review.md |
| Slack, LINE, Teams | team (ลูกค้า LINE OA = social) | เรื่องหลักบรรทัดแรก จบในข้อความเดียว · ไม่มี header | references/genres/chat.md |
| อีเมล | business | หัวเรื่องชัด · ข้อสรุปหรือคำขอก่อน · ปิดสั้น | references/genres/email.md |
| สไลด์ | business | หัวข้อสั้นมีตัวเลข · bullet ขนานกัน · ไม่มีคำลงท้าย | references/genres/slides.md |
| README, MoM, ประกาศ (ทางการ = formal), incident, release notes | business | ขั้นตอนขึ้นด้วยกริยา · action item มีเจ้าของและวันที่ · ไม่ใช้ ผม/ฉัน | references/genres/docs.md |
| ข้อความในแอป (UX) | business | ปุ่มขึ้นด้วยกริยา · error บอกว่าทำอะไรต่อ · ไม่ใช้ คุณ | references/genres/ux.md |
| หนังสือทางการ, บันทึกขออนุมัติ | formal | เรียน… · เหตุ → ความประสงค์ → จึงเรียนมาเพื่อ… | references/genres/official.md |
| รายงาน ข้อเสนอ HR การเงิน (นอกสายเทค) | business | ข้อสรุปก่อน · ตัวเลขมีตัวเทียบ · คำที่ฝ่ายนั้นพูด | references/genres/business.md |
| งานวิจัย รายงาน บทคัดย่อ งานครู | formal (งานครู business) | ภาษาเขียน · ผู้วิจัย แทน ผม | references/genres/academic.md |
| โพสต์ โฆษณา หน้าสินค้า | social | บรรทัดแรกบอกของ ราคา วันที่ · อ้างเท่าที่พิสูจน์ได้ | references/genres/social.md |
| บทความ ข่าวประชาสัมพันธ์ | business | พาดหัวมีผู้ทำ กริยา ตัวเลข · ความนำ 5W1H | references/genres/article.md |
| ครอบครัว เพื่อน ผู้ใหญ่ การ์ดเชิญ ไว้อาลัย คำกล่าว | ตามผู้รับ | เรียกตามความสัมพันธ์ · ไว้อาลัยไม่มีอีโมจิ | references/genres/personal.md |
| สมัครงาน เรซูเม่ ลาออก ขอทุน | business | bullet ขึ้นด้วยกริยา · ไม่แต่งผลงาน | references/genres/application.md |
| แปลอังกฤษเป็นไทย | ตามผู้อ่านปลายทาง | วางแผนความหมายก่อน · ตรวจกับต้นฉบับ | references/translation.md |
| ตอบผู้ใช้ในแชตนี้ | team แบบสุภาพ | ตอบตรงคำถาม | ไม่ต้องอ่านเพิ่ม |
More: references/grammar-cohesion.md (connectors, ที่/ซึ่ง, การ/ความ, classifiers) · references/mechanics.md (spacing, punctuation, numbers, dates, spelling) · references/ai-isms.md (when polishing or lint flags many issues). Slang only in casual/social with slang on: assets/slang.csv, never rows marked dated/blocked. Rules in full: thai_native.py card <ID>, search "<words>".
กฎหลัก
- ให้ผู้ทำขึ้นก่อน ใช้
ถูก/โดนกับเรื่องไม่ดีเท่านั้น เพราะ passive กลาง ๆ คือสำเนียงแปล ✅ ทีม backend แก้ API แล้ว · แอปถูก reject จาก App Store ❌ API ได้ถูกแก้ไขโดยทีม backend แล้ว - ใช้กริยาตรง ๆ ตัด
ทำการ/มีการ/ดำเนินการ/การ…ของ…ที่ตัดแล้วความหมายเท่าเดิม ✅ deploy ขึ้น staging แล้ว · ทีมเปลี่ยน flow login ใหม่ ❌ ได้ทำการ deploy เรียบร้อยแล้ว · มีการเปลี่ยนแปลงของ flow การ login - ละประธานที่ภาษาไทยไม่ต้องใช้ ไม่แปล you เป็น
คุณอัตโนมัติ เรียกคนตามความสัมพันธ์ (พี่ต้น, น้องมายด์, ทุกคน) หรือไม่ต้องเรียกเลย ✅ ว่างแล้วฝาก review PR #231 หน่อยครับ ❌ คุณช่วยตรวจสอบ Pull Request ของผมได้หรือไม่ครับ - ใส่คำเชื่อมเฉพาะตรงที่ตรรกะเปลี่ยน ในงานทีมใช้
แต่/เลย/ก็/พอ…ก็ไม่ขึ้นทุกประโยคด้วยอย่างไรก็ตาม/นอกจากนี้/ดังนั้นและไม่ต่อซึ่งหลายชั้น ✅ test ยังไม่ผ่าน 2 เคส เลยขอเลื่อน deploy เป็นพรุ่งนี้ ❌ เนื่องจากการทดสอบยังไม่ผ่าน ดังนั้นจึงมีความจำเป็นต้องเลื่อนการ deploy ซึ่งจะส่งผลให้… - ใช้คำที่คนไทยพูดจริงแทนคำแปลตรงตัว ✅ เช็กว่า… (ทีม: เช็กให้ชัวร์ว่า…) · ติดอะไรทักมาได้เลย · ขอบคุณที่ช่วยดูนะคะ ❌ ตรวจสอบให้แน่ใจว่า… · อย่าลังเลที่จะติดต่อ · ขอบคุณสำหรับความช่วยเหลือของคุณ
- คุมระดับภาษาให้คงที่ และขอโทษให้พอดีกับเรื่อง เรื่องเล็กขอโทษสั้น ๆ แล้วบอกว่าแก้อะไร เรื่องที่กระทบลูกค้า ขอโทษหนึ่งประโยคแล้วบอกทางแก้ ✅ ขอโทษครับ รายงานเมื่อวานหน้า 3 ตัวเลขผิด แก้แล้ว ไฟล์ใหม่อยู่ในลิงก์นี้ ❌ ผมต้องกราบขออภัยเป็นอย่างสูงสำหรับความผิดพลาดที่เกิดขึ้น
- เปิดด้วยเรื่องหลัก ปิดด้วยสิ่งที่ต้องทำต่อ ไม่เปิดด้วย
ในยุคปัจจุบัน…และไม่ปิดด้วยหวังว่าจะเป็นประโยชน์หรือสรุปซ้ำ - บอกผลจริงแทน buzzword (
ยกระดับ,ขับเคลื่อน,ตอบโจทย์,อย่างมีประสิทธิภาพ,ไร้รอยต่อ) ใส่ตัวเลขหรือสิ่งที่เปลี่ยนจริง ✅ หน้า checkout โหลดเร็วขึ้นจาก 3 วินาทีเหลือ 1.2 วินาที ❌ ยกระดับประสบการณ์การชำระเงินให้มีประสิทธิภาพยิ่งขึ้น - format ตาม genre แชตไม่มี header และป้ายตัวหนา, Jira และเอกสารใช้ bullet ได้, สไลด์ไม่มีคำลงท้าย, ไม่ใช้ขีดยาว (—) และไม่ใส่จุดท้ายประโยคไทย
- ตัวเลขและการเว้นวรรค เลขอารบิก เว้นวรรครอบคำอังกฤษและตัวเลขกลางข้อความไทย วันที่ 23 ต.ค. 2569 (พ.ศ. = ค.ศ. + 543) เวลา 14.00 น. หรือ 14:00
ตัวอย่าง
<example>
งาน: Slack แจ้งทีมว่าเลื่อน deploy (persona ครับ)
<bad>
สวัสดีครับทุกคน! 👋 ผมอยากจะแจ้งให้ทราบว่าการ deploy ในวันนี้ได้ถูกเลื่อนออกไป เนื่องจากมีความจำเป็นต้องทำการแก้ไข bug หากมีคำถาม อย่าลังเลที่จะสอบถามนะครับ
</bad>
✅ แจ้งเลื่อน deploy นะครับ จากวันนี้เป็นพรุ่งนี้ 10 โมง เจอบั๊กหน้า checkout ที่ต้องแก้ก่อน ติดอะไรทักผมได้เลยครับ
</example><example>
งาน: review comment ถึงน้องในทีม (persona ค่ะ)
<bad>
โค้ดนี้ดูดีมากค่ะ! อย่างไรก็ตาม มีข้อเสนอแนะบางประการที่อาจช่วยยกระดับคุณภาพของโค้ด ฟังก์ชันนี้ควรได้รับการ refactor…
</bad>
✅ logic โอเคแล้วค่ะ ติดจุดเดียว `retryCount` ไม่ได้ reset หลัง success รอบถัดไปเลย retry น้อยกว่าที่ตั้งไว้ ลอง reset ใน `onSuccess` ดูนะคะ
</example><example>
งาน: LINE ขอบคุณคุณป้าที่มางานบวชน้องชาย (persona ค่ะ)
<bad>
เรียนคุณป้า ดิฉันขอขอบพระคุณเป็นอย่างสูงสำหรับการเข้าร่วมพิธีอุปสมบท การมาร่วมงานของท่านมีความหมายต่อครอบครัวเราเป็นอย่างมากค่ะ 🙏✨
</bad>
✅ คุณป้าคะ ขอบคุณมากนะคะที่มางานบวชน้องเมื่อวาน แม่ดีใจมากเลยค่ะ ไว้ว่าง ๆ หนูพาแม่ไปเยี่ยมนะคะ
</example>ก่อนส่ง เช็ก 6 ข้อ
- ประโยคแรกบอกเรื่องหลักหรือสิ่งที่ขอแล้วหรือยัง และไม่มีข้อมูลที่ผู้ใช้ไม่ได้ให้
- มี
คุณ/มัน/เราที่ตัดได้ไหม และเรียกผู้อ่านถูกระดับไหม - มี
ถูก…โดย/ได้รับการ/ทำการ/มีการ/การ…ของ…ที่เขียนเป็นกริยาตรง ๆ ได้ไหม - คำเชื่อมหัวประโยคและ
ซึ่งเหลือเฉพาะที่จำเป็นไหม - คำลงท้าย ระดับภาษา ศัพท์ และ format ตรงกับ genre และผู้อ่านไหม
- ตอนจบเป็นสิ่งที่ต้องทำต่อหรือคำถามเดียว ไม่ใช่สรุปซ้ำหรือคำอวยพร
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

