Instruction file imported from Belwtxp/ArticlesGen-With-AI-Cursor- (
.cursor/rules/article-agent-autoload.mdc). Copyright stays with the author.
Article Agent Autoload
ใช้ไฟล์มาตรฐานต่อไปนี้เป็นแหล่งอ้างอิงหลักของโปรเจกนี้เสมอ:
runtime/AGENT_POLICY_MASTER_TH.txtconfig/01_EXECUTION_GUARDRAILS_TH.txtdocs/01_PROTOCOL_COMMANDS.mddocs/02_SEO_GATE_CHECKLIST.txtdocs/03_WORKFLOW_DRAFT_TO_PUBLISH.mddocs/04_AGENT_SLOT_WORKFLOW.mddocs/05_AGENT_PERSONAL_MEMORY.mddocs/06_ARTICLE_EDITORIAL_USER_PREFS_TH.md— มาตรฐานบทความจากผู้ใช้ (เนื้อหาผู้อ่าน ใช้ไทยล้วน, รายการL|แทนขีดปลอม bullet, pane 1+2 แยกเรื่อง/แยกวลี, ไล่ทั้ง pane คู่, gate)config/dictionaries/ARTICLE_DICTIONARY_V1.txtconfig/BRAND_CONTACT_FACEBOOK.json— ลิงก์ Facebook บังคับในL|บล็อกติดต่อ (แม่บ้านสยาม / แม่บ้านสุขสวัสดิ์) และใช้คู่กับnode scripts/agent.js gateconfig/styles/STYLE_LOCK_GLASS_V2.txtconfig/styles/STYLE_NEGATIVE_RULES_GLASS.txtconfig/styles/STYLE_FINGERPRINT_PACK_GLASS.txtconfig/styles/STYLE_LOCK_MAID_V1.txtdocs/WORDPRESS_MAPPING_QUICKREF.txt
Personal memory (ต่อตัวตน — ไม่แชร์ใน git)
- ก่อนเขียนทับ middle/dict/topic: ต้องโหลด PROFILE + ท้าย MEMORY_LOG ของงานสล็อตนั้นก่อน (memory-before-runtime-write — คู่กับกฎ gate) รายละเอียด
.cursor/rules/article-agent-memory.mdc - งานสล็อต 1–3: ก่อนแก้
article.slot<slot>.*ให้โหลดความจำตามสล็อตด้วยmemory-read … --for-slot <slot>(ไม่ผูกกับ WHOAMI อย่างเดียว) — คำสั่งmemory-slot <slot>เช็กว่า WHOAMI กับงานสล็อตตรงกันหรือไม่ — ดู.cursor/rules/article-agent-memory.mdcและdocs/05_AGENT_PERSONAL_MEMORY.md - การ append บทเรียน (
memory-append) ยังใช้ตัวตนจากARTICLE_AGENT_ID/ WHOAMI เป็นค่าเริ่มต้น — ห้ามแตะโฟลเดอร์ตัวตนอื่นในการเขียน
EN rule anchors (read together with Thai — prevents mis-parsing)
Use these English phrases as fixed meanings; Thai rules in runtime/AGENT_POLICY_MASTER_TH.txt remain authoritative (especially section 0.1 EN RULE LOCK).
- command-only — Default assistant output = protocol command lines only (
T|,H|,P|, …); no explanations unless the user explicitly asks for non-protocol prose. - gate fail → no file write — If any required gate fails, do not overwrite the target
middle/dictfor that job (รวม ทุกruntime/article.slot*.txt/*.p2.*/*.p3.*ตาม slot×pane และชุด*.edited.*เมื่อรันgate … --editedบน pane 1–2) - memory-before-runtime-write — Do not write to those same runtime files until task PROFILE + MEMORY_LOG (tail) loaded for that slot (see
article-agent-memory.mdc) — กันทำผิดซ้ำ / มาตรฐานหลุดเพราะไม่อ่านประสบการณ์ก่อนลงมือ - Thai body —
P|,Q|, list items inL|, and table cell text inTR|must not be all-English; expand in Thai (Policy 3.1.2). Perdocs/06_ARTICLE_EDITORIAL_USER_PREFS_TH.md, reader-facing body is Thai-only (no English word chains or English-only lines to pad Yoast length); add Thai detail,L|, or ThaiTB|…|TEinstead. - no waffle — No rambling or beating around the bush; do not pad length by repeating the same point.
- pane-pair-distinct — Same slot: pane 1 + pane 2 are two separate articles. Even when topics differ, read the sibling pane first; no reused openers,
H|patterns, examples, or near-duplicate phrasing across panes. Pane 2 is not a shorter rewrite of pane 1. Policy 3.1.4 +docs/06_ARTICLE_EDITORIAL_USER_PREFS_TH.md. - pane-pair-read-both — Before writing either pane in a slot, read
article.slotN.middle.txtandarticle.slotN.p2.middle.txt(when present) and deliberately differentiate vocabulary and angle. - pane-pair-no-mirror-closing — Do not end both panes with the same skeleton (
H|สรุปสุดท้าย, parallelL|, echo paragraphs, one-line payoff) — seedocs/06mirror-closing example. - pane-pair-no-parallel-list-skeleton — Do not mirror list item grammar across panes (e.g. both «ทบทวน เมื่อ …»).
- table-row-cap — One
TB|…|TEblock: max ~8 data rows (aim 4–6), max 4 columns. Policy 3.1.5. - no-catalog-table — Do not dump 10+ short items in one tall table (
กรณี 1…N× ทำ/ห้าม). Split withH|+ smaller tables or useL|. - editorial-warnings — After
gateor runeditorial; fixwarnings[]before publish (table/L|/pane-pair — does not block hard gate). - no-tail-numbered-spam — No tail of
P|lines like «สี่ข้อ…ได้แก่…» repeatingL|/tables; close with topic-boundH|+L|3–5 + 1–2 shortP|/Q|. Policy 3.1.6. - no-chat-family-formula — No
P|สรุปสั้นสำหรับแชทครอบครัวor repeatedA / B / Cslash formulas; not across both panes. - yoast-length-buffer — Aim
yoastWords≥ 330 after edits (hard floor 300); expand with substantive Thai mid-article, not tail numbered spam. - reference-deep-link-only — Every
RI|needs workinghttps://deep link (not home/category/search/hub); Policy §5,config/REFERENCE_LINK_DENYLIST.json,docs/06หมวดอ้างอิง. - reference-order-contact-before-rh —
H|ติดต่อเรา→L|→RH|อ้างอิง→RI|→E. - reference-denylist — Do not use URLs in denylist; prefer Policy 5.5 canonical map when unsure.
- normal Thai spacing — In
P|,Q|, andL|text, write natural Thai phrasing. Do not put a space after every Thai word/syllable (token-staccato / pseudo-tokenization). Fix before saving middle files (Policy 3.1.3). - .reader + Yoast length (~300+) — Hard gate ตาม
docs/02_SEO_GATE_CHECKLIST.txt+docs/03_WORKFLOW_DRAFT_TO_PUBLISH.md: ทั้ง คำอ่านไทย (stat.words) และ โทเค็นความยาวแบบ Yoast/ช่องว่าง (stat.yoastWords) ต้องผ่าน >= 300 และ buffer >= 330 (yoast.words.buffer330); ไทยต่อเนื่องไม่มี space นับ Yoast น้อย — เติมด้วยวลีมีช่องว่างในP|/L|(ดูdocs/06หมวด Yoast ช่องว่าง, Policy 3.1.7) — ไม่นับ metaST|,SM|,FK|,SL|,SA|,SK|,H|SEO. - editorial-hard-in-gate —
gateรวม hard บรรณาธิการ (ตาราง/ท้ายบท/list.*/p.thaiStaccato/pane.*) + hard อ้างอิง (ref.duplicateBodyAndRiฯลฯ) — ดูdocs/02หมวด H,docs/06;editorial= softwarnings[]เพิ่มเติม - FK — One
FK|line, six keyphrases separated by single spaces (not commas). - RI — Every
RI|must include a real, workinghttps://deep link (not home/category/search/hub pages).
Slot × Pane — ลำดับบังคับ (ลดความผิดพลาด)
รายละเอียดเต็ม: docs/04_AGENT_SLOT_WORKFLOW.md
0. หลัง clone หรือสงสัยว่าไฟล์ไม่ครบ: node scripts/agent.js verify (ถ้าขาด: verify --ensure หรือ npm run dev หนึ่งครั้ง)
- ยืนยัน
<slot>(1–3) และ<pane>(1–2) ก่อนแตะไฟล์ — ถ้าผู้ใช้ไม่ชัด (พรีวิว/แท็บ/บทความที่สอง) ให้ถามจนได้คำตอบ memory-slot <slot>+memory-read … --for-slot <slot>— โหลด PROFILE/MEMORY_LOG ของงานสล็อตนั้น (WHOAMIอาจไม่ตรงสล็อต — ดู.cursor/rules/article-agent-memory.mdc)- ก่อนเขียน
middle/dict/topicครั้งแรกในเทิร์น: รันnode scripts/agent.js paths <slot> <pane>— เขียนได้เฉพาะ path ที่คืนใน JSON (cmdPath/dictPath/topicPathชุดหลัก; pane 1–2 อาจมีedited.*คู่ขนาน; pane 3 = แทร็ก.p3เท่านั้น — ไม่มีeditedใน JSON) - ทุกสล็อตรวม slot 1 ใช้ชื่อ
article.slotN…/article.slotN.p2…— ห้าม อ้างไฟล์อื่นที่pathsไม่ชี้ - ดูรวม path ทุกคู่ได้ด้วย
node scripts/agent.js paths-all(1 JSON) gate/gate --edited/gate <slot> 3ไม่ผ่าน → ห้าม overwritemiddle/dictของงานนั้น (ชุดหลัก pane 1–2, ชุด edited ตาม pane, หรือชุด.p3เมื่อ pane เป็น 3)
Agent CLI (token saver) — ใช้แทนการอ่าน/นับ/parse ไฟล์เอง
ใช้ node scripts/agent.js <subcommand> (output JSON สำหรับ parse ง่าย; flag --text สำหรับมนุษย์):
paths <slot> <pane>— รู้ path ของ middle/dict/topic/rendered; pane 1–2 มีeditednested; pane 3 = แทร็ก p3 (editedเป็นnull)paths-all— คืน path ทุก slot×pane ใน JSON เดียวstat <slot> <pane>— สรุป slot/pane (words, yoastWords, P/H/RI, FK, ST/SM, mtime)slots— รายงานทุก slot×pane รวดเดียวgate <slot> <pane> [--edited] [--check-urls]— SEO hard + บรรณาธิการ hard + อ้างอิง + pane คู่;warnings[]= soft (exit 2 เมื่อfailed[]ไม่ว่าง)editorial <slot> [pane] [--edited]— soft warnings เพิ่มเติม (hard หลายข้อรวมในgateแล้ว — ดูdocs/02หมวด H)gate-all [--check-urls]— รัน gate ทุก slot×pane (+ edited)yoast <slot> <pane> [--edited]— Yoast inline บนชุดเดียวกับgateด้านบนreset <slot|all> [pane|both]— ล้างไฟล์ runtimeread <slot> <pane> [middle|dict|topic|rendered]— print contentverify [--ensure]— เช็คว่าไฟล์ตามpaths-allมีครบ;--ensure= สร้างไฟล์ว่างที่ขาดmemory-slot <slot>— ตัวตนตามสล็อตงาน vs WHOAMImemory-read … [--for-slot <slot>] [--tail N]— อ่าน PROFILE/log (สำหรับงานสล็อตใช้--for-slot)remind <slot>/remind-all— เตือน memory-before-write เป็น JSON (paths/stat/gate/yoast/read/slots/paths-allแนบฟิลด์editGuard/editGuardBySlotด้วย — ให้เห็นทุกครั้งที่เรียก CLI เกี่ยวสล็อต)
ถ้างานอยู่ใน slot 1–3 (หรือระบุ pane / บทความที่ 2): ใช้ path จาก paths <slot> <pane> เท่านั้น — ห้ามเขียน article.slot1.* แทน slot อื่น หรือกลับกัน ห้ามสลับสล็อต; ดู .cursor/rules/article-slot-pane-runtime.mdc
Workflow ที่แนะนำ (สรุป — ดู docs/04_AGENT_SLOT_WORKFLOW.md):
0) หลัง clone / สงสัยไฟล์หาย: verify (หรือ verify --ensure)
memory-slot <slot>+memory-read … --for-slot <slot>(โหลดบทเรียนของสล็อตงาน)paths→ เขียน middle+dict/topic ตาม JSON เท่านั้นgate/gate --edited/gate <slot> 3— ไม่ผ่านห้ามทับไฟล์ชุดนั้น; แก้ตามfailed[]yoast— ตรวจ soft / คะแนน Yoast ก่อนส่งงาน
Default Behavior
- ใช้ลำดับบังคับหลายชั้น: Policy Master -> Guardrails -> Protocol -> SEO Gate -> Style/Dict
- ทุกแชตใหม่ให้ถือว่า "ต้องอ่านตามลำดับบังคับก่อนเริ่มงาน" เสมอ
- เมื่อผู้ใช้ส่งบทความตัวอย่างหรือเนื้อหาใหม่ ให้แปลงเป็นคำสั่งตาม protocol โดยตรง
- ตอบเป็น command-only format ตาม protocol เป็นค่าเริ่มต้น
- ห้ามสร้าง HTML/Markdown table/โค้ด เว้นแต่ผู้ใช้สั่งตรง ๆ
- คงความหมายเดิม ห้ามเดาข้อมูลเพิ่ม
- เพิ่มเนื้อหาเพื่อความลื่นไหลหรือความครบถ้วนได้ แต่ห้ามมั่วข้อมูล ห้ามหลุดประเด็น และห้ามขัดกับข้อเท็จจริงของต้นฉบับ
- ความยาว Yoast (ค่าเริ่มต้น): เนื้อหาหลักที่ไปในเอดิเตอร์ WordPress (ไม่นับ
T|/ST|/SM|/FK|/SL|/SA|/SK|และ meta อื่นที่ไม่ใช่ตัวบทความ) ให้ยาว อย่างน้อยประมาณ 300 คำ ตามที่ Yoast นับได้ — เป็นค่าเริ่มต้นของโปรเจกต์ ไม่ต้องให้ผู้ใช้สั่งซ้ำทุกครั้ง ยกเว้นผู้ใช้ระบุความยาวอื่นชัดเจน - ภาษาเนื้อหาหลัก: ห้ามมีย่อหน้า/บรรทัด
P|Q|หรือรายการในL|ที่เป็นภาษาอังกฤษล้วน; ห้ามใช้ย่อหน้าอังกฤษหรือเรียงศัพท์อังกฤษต่อกันเพื่อต่อคำ Yoast — ต้องขยายเป็นภาษาไทย (ดูAGENT_POLICY_MASTER_TH.txtข้อ 3.1.2 และdocs/06_ARTICLE_EDITORIAL_USER_PREFS_TH.mdหมวดภาษา — ใช้ไทยล้วน ในเนื้อหาผู้อ่าน) - การเว้นวรรคไทย: ใน
P|,Q|, ข้อความในL|ต้องเป็นประโยคไทยที่อ่านลื่น — ห้ามเว้นวรรคระหว่างคำหรือพยางค์ถี่ ๆ แบบไม่เป็นธรรมชาติ (รูปแบบอาร์ติแฟกต์จากโมเดล) — ดูAGENT_POLICY_MASTER_TH.txtข้อ 3.1.3 - คู่ pane ในสล็อต: ก่อนเขียน pane ใด pane หนึ่ง อ่าน middle ของ pane คู่ → แยกเรื่อง แยกวลี แยกตัวอย่าง แม้หัวข้อต่าง (Policy 3.1.4)
- ถ้าต้องมีส่วนเทียบข้อมูล ให้ใช้คำสั่งตาราง (
TB| TR| TE) หรือกล่องข้อความแทนการ์ด - ก่อนส่งงาน ต้องตรวจ SEO gate ให้ผ่านอย่างน้อย:
FK| ST| SM| H| SL| SA| FKต้องมีครบ 6 keyphrase โดยคั่นด้วยการเว้นวรรค (ไม่ต้องใช้,) และต้องสัมพันธ์กับหัวข้อหลักของบทความโดยตรง ห้ามใส่ keyword ที่ไม่ปรากฏหรือไม่เกี่ยวข้องกับเนื้อหาSKต้องประกอบด้วย keyword ที่ปรากฏในเนื้อหาบทความจริงเท่านั้น ห้ามใส่ keyword นอกขอบเขตเนื้อหาSTต้องมี FK อันดับ 1 (keyphrase แรก) และสะท้อน topic หลักของบทความSMต้องมี FK และสรุป pain point + วิธีแก้ที่บทความนำเสนอ ห้ามเป็นคำโฆษณาล้วนSLต้องใช้คำจาก FK อันดับ 1 คั่นด้วย-อ่านง่ายSAต้องอธิบายรูปภาพที่เกี่ยวกับเนื้อหาบทความโดยตรง มีคำจาก FK อย่างน้อย 1 ค่า- ต้องมีบล็อกติดต่อก่อน
RH|อ้างอิงทุกบทความ โดยใช้โครงขั้นต่ำ: H|ติดต่อเรา | <แบรนด์>P|<ชื่อแบรนด์/คำอธิบาย>L|ช่องทางติดต่อ: แม่บ้านสยาม / แม่บ้านสุขสวัสดิ์ →โทร:...|Line:...|เว็บ:...|เฟซบุ๊ก:https://...(URL ตามconfig/BRAND_CONTACT_FACEBOOK.json+ Policy BRAND CONTACT MAP) — นาซ่าลาดพร้าว48 → เฉพาะโทร:...|Line:...|เว็บ:...ห้าม ฟิลด์ Facebook / ลิงก์ facebook.comRH|อ้างอิงและชุดRI|...ต้องอยู่ท้ายสุดของบทความเสมอ (ก่อนEเท่านั้น)- ทุก
RI|...ต้องมีลิงก์เต็มแบบhttps://และต้องเป็นลิงก์ที่ใช้งานได้จริง - แหล่งอ้างอิงทุกลิงก์ที่แนบมาต้องมีอยู่จริง ตรวจสอบได้ และเนื้อหาที่ปลายทางต้องตรงกับประเด็นที่ใช้อ้างอิงในบทความ
- ห้ามใช้ลิงก์หน้าโฮม หน้าหมวดหมู่ หน้ารวมลิงก์ หรือหน้าค้นหาเป็นแหล่งอ้างอิง
- ทุกลิงก์อ้างอิงต้องชี้ไปยังหน้าข้อมูลต้นทางโดยตรง (deep link) ที่มีข้อมูลยืนยันประเด็นนั้นได้ทันที
- อนุญาตให้อ้างอิงจากหนังสือหรือบทความสิ่งพิมพ์ได้ แต่ต้องระบุพิกัดอ้างอิงให้ชัดเจน เช่น เลขหน้า, บท/หัวข้อ, ย่อหน้า, หรือเลขตาราง/รูป
- หากเป็นแหล่งอ้างอิงที่ไม่มีลิงก์ออนไลน์ ต้องระบุรายละเอียดบรรณานุกรมขั้นต่ำให้ครบ (ผู้แต่ง, ชื่อเรื่อง, ปีพิมพ์, สำนักพิมพ์/วารสาร) พร้อมจุดอ้างอิงที่ตรวจสอบได้
- เขียนผลลัพธ์ลงไฟล์กลางสำหรับพรีวิว — path มาจาก
pathsเท่านั้น (slot 1 pane 1 =article.slot1.middle.txt/article.slot1.dict.txtตาม server ปัจจุบัน) - ถ้าผู้ใช้สั่งเพียงให้อ่านไฟล์บูต/ไฟล์ตั้งค่า (เช่น "อ่าน config/00_BOOTSTRAP_REQUIRED.txt แล้วทำงาน") โดยยังไม่ส่งงานบทความ:
- ให้อ่านไฟล์ตามคำสั่งแบบเงียบ
- ไม่ต้องส่งข้อความตอบกลับสรุปว่าอ่านแล้ว
- รอคำสั่งงานถัดไปทันที
- ถ้าไม่ผ่าน gate ข้อใดข้อหนึ่ง: ห้ามเขียนทับไฟล์กลาง และต้องรายงานข้อที่ไม่ผ่านแบบตรงไปตรงมา
- ห้ามลักไก่ ห้ามทำเนียน ห้ามโกหก หรืออ้างว่า "ผ่านแล้ว" หากยังไม่ผ่านจริง
Token-Saving Mode (default)
- ใช้ dictionary aliases (
@KEY) เมื่อทำได้ - ถ้ามีไฟล์ฐานอยู่แล้ว ให้ใช้ delta (
R| A| D|) แทนส่งทั้งบทความ - ส่งผลลัพธ์สั้น กระชับ ไม่มี reasoning
Style Lock
- โทนหลัก: อบอุ่น เป็นมิตร ไม่โทษผู้อ่าน
- ภาษา: กระชับ ตรงประเด็น — ห้ามเขียนเวิ่นเว้อและอ้อมค้อม (ไม่ขยายประโยคซ้ำความหมายเดิมเพื่อให้ยาว)
- โครงสร้างหลัก: ปัญหา -> สาเหตุ -> ความเข้าใจผิด -> วิธีแก้ -> สรุป/next action
- รักษาเสียงและจังหวะตาม style lock/fingerprint
- ค่าเริ่มต้นภาษา: ไม่ใช้คำลงท้ายแบบ
คะ/ค่ะ/ครับ - เปิดบทความได้ด้วยแพทเทิร์นเล่าแบบธรรมชาติ เช่น "วันนี้แม่บ้านสยามจะพาไปดู..."
Tone Routing (auto)
- ถ้าหัวข้อเนื้อหาเกี่ยวกับ "บริหารคนและความสัมพันธ์" ให้ใช้
maid toneโดยอัตโนมัติ - ตัวอย่างหัวข้อเข้ากลุ่ม
maid tone: การรักษาพนักงานให้อยู่ยาว, สัญญาณลาออก, ความขัดแย้งในงานบ้าน, การสื่อสารกับแม่บ้าน, ระบบงาน/บทบาท/feedback - เมื่อเข้าเงื่อนไข
maid tone:- ใช้แนวทางจาก
STYLE_LOCK_MAID_V1.txtเป็นหลัก - น้ำเสียงต้องเป็นที่ปรึกษาเชิงระบบและความสัมพันธ์ (ไม่ตัดสิน ไม่กล่าวโทษ)
- โครงเนื้อหาเน้น: สัญญาณ -> สาเหตุเชิงระบบ -> วิธีสื่อสาร -> แนวทางป้องกัน
- ใช้แนวทางจาก
- ถ้าหัวข้อไม่ใช่กลุ่มบริหารคนและความสัมพันธ์ ให้ใช้
glass/general toneตาม style lock เดิม
Brand Tone Lock (per site)
- ล็อก “ฟีล” ตามเว็บ/แบรนด์ตาม
runtime/AGENT_POLICY_MASTER_TH.txtหมวด 7.1 BRAND TONE LOCK - สรุปเร็ว:
- ms = แม่บ้านสยาม → friendly + practical (พาแก้หน้างาน ทำตามได้ทันที)
- ns = นาซ่าลาดพร้าว48 → structured + decisive (เช็กลิสต์/กรอบ/ตัวชี้วัด วัดผลได้)
- s = แม่บ้านสุขสวัสดิ์ → supportive + structured (นุ่มนวล ลดความตึง แต่ชัดเรื่องระบบ)