สรุป

เมื่อทำงานกับเอเจนต์ AI อย่าง Opencode ในโปรเจกต์ที่ซับซ้อนซึ่งดำเนินไปหลายเซสชัน เราจะเผชิญกับปัญหาพื้นฐานประการหนึ่ง:การรั่วไหลของบริบท. เอเจนต์ไม่จดจำเซสชันก่อนหน้า ทุกสิ่งที่อธิบายให้เอเจนต์ฟัง — สถาปัตยกรรม ธรรมเนียมปฏิบัติ สถานะของแบ็กлог — ล้วนสูญหาย การสร้างบริบทนี้ขึ้นใหม่ในทุกเซสชันมีต้นทุนสูง ช้า และก่อให้เกิดข้อผิดพลาด

บทความนี้นำเสนอกลยุทธ์แบบช่างฝีมือที่ฉันสร้างขึ้นเพื่อแก้ปัญหานี้: ระบบการกำกับดูแลที่คงอยู่ต่อเนื่องซึ่งอิงจากไฟล์ AsciiDoc พร้อมด้วยการแบ่งเป็นสองขั้วแบบประเมินทันที/แบบประเมินเมื่อจำเป็นเพื่อเพิ่มประสิทธิภาพการใช้โทเค็นบริบท และ…​ขั้นตอนการสิ้นสุดเซสชันที่ต้องดำเนินการอย่างหลีกเลี่ยงไม่ได้เพื่อรับประกันความต่อเนื่อง

ฉาก: วันจันทร์ที่ 21 เมษายน 9:00 น.

ฉันเปิด Opencode ใหม่เพื่อทำปลั๊กอิน Gradle ของฉันต่อ`plantuml-plugin`เมื่อคืนนี้ ฉันใช้เวลาสามชั่วโมงพูดคุยกับเอเจนต์ด้านสถาปัตยกรรมของพูลคีย์ API — การหมุนเวียนแบบ round-robin การจัดการโควตา การสลับไปใช้ตัวสำรองอัตโนมัติ เช้านี้ เอเจนต์มองฉันด้วยดวงตาแบบปลาทอง

Please provide the French text you’d like me to translate into Thai. สวัสดีครับ ผมเป็นผู้ช่วย Opencode ของคุณ วันนี้ผมสามารถช่วยคุณได้อย่างไร? __

ไม่ต้องมี — อ้อ ใช่ พูลคีย์ API เรามาถึงโครงสร้าง YAML แล้ว ไม่ต้องมี — ระวัง`PlantumlManager`เป็นออบเจ็กต์ Kotlin แบบซิงเกิลตัน ไม่ใช่คลาส ไม่มี — ไม่ เมื่อวานเราตัดสินใจว่า`SyntaxValidationResult`ยังคงมี sealed class แบบ nested อยู่ใน`PlantumlService`.

ทุกอย่างต้องทำใหม่หมด หรือพูดให้ถูกคือ ทุกอย่างต้องอธิบายใหม่หมด ฉันจะต้องใช้ยี่สิบนาทีแรกของเซสชันเพื่อประกอบบริบทขึ้นมาใหม่ที่เอเจนต์เคยได้รับมาแล้วเมื่อวาน ยี่สิบนาทีที่โทเคนถูกเผาทิ้งไป ยี่สิบนาทีที่ฉันควรจะได้เขียนโค้ด แต่กลับต้องมาทำหน้าที่สอนแบบเลี่ยงไม่ได้

นี่ไม่ใช่บั๊กของ Opencode นี่คือธรรมชาติของ LLM แบบสนทนาเอง: ระหว่างสองเซสชัน ความจำใช้งานคือถูกลบเลือนไปทั้งหมด. เอเจนต์ไม่จำภารกิจก่อนหน้า การตัดสินใจที่ได้ทำไป กับดักที่ระบุไว้ หรือโค้ดที่เราเขียนด้วยกัน

ฉันเคยเจอเรื่องนี้มาหลายสิบครั้งแล้ว ในสี่โปรเจกต์ที่ทำพร้อมกัน ด้วยเซสชันที่ต่อเนื่องกันเป็นเวลาหลายสัปดาห์ ฉันคำนวณแล้วว่า โดยเฉลี่ยแล้ว30 ถึง 40% ของเวลาในเซสชันได้อุทิศให้กับการปรับบริบทใหม่ของเอเจนต์ ในเซสชันที่ 87 ของโครงการ`plantuml-plugin`, ฉันทนไม่ไหวแล้ว ฉันไม่สามารถปล่อยให้ตัวเองต้องอธิบายซ้ำเป็นครั้งที่สิบอีกต่อไปว่า`AttemptEntry`เป็น data class ระดับบนสุดใน`DiagramProcessor.kt`.

ฉันต้องการระบบ ไม่ใช่แฮ็ก แต่เป็นการกำกับดูแลที่แท้จริง

ปฐมบท: จากความโกลาหลสู่ระเบียบวิธี

เซสชันแรก : ยุคแห่งความมืด

โปรเจกต์แรกของฉันกับ Opencode,plantuml-plugin, เริ่มต้นขึ้นโดยไม่มีการกำกับดูแลใด ๆ ฉันถามคำถาม เอเจนต์ตอบ เราวนทำซ้ำ เซสชันจบลง และวันถัดไปก็เริ่มต้นใหม่จากศูนย์ นั่นคือเซสชัน 1 จากนั้น 2 แล้วก็ 3…​ จนถึงเซสชัน 62 ที่ฉันตระหนักว่าฉันเสียเวลาสะสมหลายชั่วโมงไปกับการอธิบายสถาปัตยกรรมเดิมซ้ำแล้วซ้ำอีก

ในเซสชันที่ 62 ตัวเลขอยู่ตรงนั้นแล้ว:การทดสอบหน่วย 198 รายการผ่าน, การทดสอบเชิงฟังก์ชัน 42 รายการผ่านการตรวจสอบแล้ว, ปลั๊กอินทำงานได้ แต่ต้นทุนทางปัญญาเกินรับไหว ทุกเซสชันใหม่เริ่มต้นด้วยบทพูดคนเดียวยี่สิบนาทีเกี่ยวกับโครงสร้างโปรเจกต์

ตอนของ site.yml ที่ถูกทำลาย (เซสชัน 2, bakery-plugin)

วิธีการนี้ก็เกิดขึ้นจากหายนะเช่นกัน ในโครงการ`bakery-gradle`, ในเซสชันที่ 2 ฉันขอให้เอเจนต์แก้ไขไฟล์`site.yml`. เอเจนต์ โดยไม่ตรวจสอบว่าไฟล์ได้รับการจัดเวอร์ชันหรือไม่ ทำการ`Write`ที่สมบูรณ์ซึ่งเขียนทับเนื้อหา ผลลัพธ์: โทเค็นจริง (คีย์ API Firebase, ข้อมูลลับสำหรับการดีพลอย) ถูกแทนที่ด้วยตัวยึดตำแหน่งปลอม ไฟล์นี้ไม่ได้อยู่ใน git — มันอยู่ใน`.gitignore`เพื่อปกป้องความลับ

โดยไม่มีการสำรองข้อมูล โดยไม่`git restore`เป็นไปได้ ฉันติดขัด ฉันจำเป็นต้องสร้างไฟล์กำหนดค่าขึ้นใหม่ด้วยตนเอง ค้นหาโทเค็นในตัวจัดการรหัสผ่านของฉัน แล้วนำทุกอย่างกลับมาต่อกัน

ความหงุดหงิดนี้เองที่เป็นจุดกำเนิดของ…​กฎสัมบูรณ์ 1bPlease provide the French text you’d like me to translate — your message contains the instructions but no source text after the colon.

Please provide the French text you’d like me to translate into Thai. ห้ามทับเด็ดขาดไฟล์ config ที่มี`Write`สมบูรณ์เมื่อ`Edit`เพียงบางส่วนก็เพียงพอห้ามแทนที่โดยเด็ดขาดค่าที่ละเอียดอ่อนด้วยค่าหลอกตรวจสอบ git check-ignore และ `git ls-filesก่อนการแก้ไขใด ๆ __

กฎข้อนี้ ซึ่งปัจจุบันถูกจารึกไว้อย่างมั่นคงในไฟล์ทั้งหมดของฉัน`AGENT.adoc` et `INDEX.adoc`ในสี่โปรเจกต์ เกิดจากข้อผิดพลาดจริงที่ทำให้ฉันต้องเสียเวลาทำงานด้วยมือหนึ่งชั่วโมง

การย้าย Markdown → AsciiDoc (เซสชัน 1, cheroliv.com)

วันที่ 25 เมษายน 2026 บน`cheroliv.com`, ฉันตัดสินใจอย่างเด็ดขาด: แปลงการกำกับดูแลทั้งหมดจาก Markdown ไปเป็น AsciiDoc นี่ไม่ใช่เรื่องของความสวยงาม แต่เป็นเรื่องของการใช้งาน AsciiDoc มีโครงสร้างเชิงความหมายที่ LLM อ่านได้ดีกว่า: ส่วนแบบลำดับชั้น ตารางแบบมีชนิด คำเตือน (NOTE, WARNING, CAUTION), แอตทริบิวต์ของเอกสารที่เครื่องอ่านได้

เซสชัน 1 ของ`cheroliv.com`ทำให้โครงสร้างเป็นทางการ:

  • การแปลงของ`AGENTS.md` en AGENT.adoc

  • การสร้างเอเจนต์เฉพาะทาง:`CODER.adoc`, SCRUM_MASTER.adoc, PLANTUML_DESIGNER.adoc

  • การสร้างโครงสร้าง Eager/Lazy :`INDEX.adoc`, SESSIONS_HISTORY.adoc, AGENT_SESSION_MANAGER.adoc, SESSION_CHECKLIST.adoc, PROCEDURES.adoc

คอมมิตเดียว:`90975e9 refactor: migrate agent governance from Markdown to AsciiDoc`. และเว็บไซต์ยังคงทำงานต่อไป

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

title วิวัฒนาการของเซสชัน — จากเซสชัน 1 ถึง 150+
legend top
    |= Couleur |= Projet |
    | <#4CAF50> | cheroliv.com |
    | <#2196F3> | plantuml-plugin |
    | <#FF9800> | bakery-plugin |
    | <#9C27B0> | magic-stick |
endlegend

concise "เซสชันที่ใช้งานอยู่" as S

@S
0 is ".md แบบดิบ"
1 is "การย้ายข้อมูล\nAsciiDoc"
10 is "Eager/Lazy\nแบบเป็นทางการ"
62 is "กฎความปลอดภัย\n(site.yml)"
87 is "การแคร็ก\nบริบท"
109 is "การเพิ่มประสิทธิภาพ\n-60% โทเค็น"
133 is "133 เซสชัน\n240 การทดสอบ PASS"

S@0 -> S@1 : Session 1\n(cheroliv.com)
S@1 -> S@10
S@10 -> S@62 : Session 62\n(plantuml-plugin)
S@62 -> S@87 : Session 87\n(Cry 4 help)
S@87 -> S@109 : Session 109\n(API Key Pool)
S@109 -> S@133 : Session 133\n(Aujourd'hui)

@enduml

ไทม์ไลน์ข้างต้นแสดงให้เห็นความคืบหน้าจริง จุดพลิกผันคือเซสชันที่ 87: นั่นคือจุดที่ความหงุดหงิดจากการกำหนดบริบทใหม่ซ้ำ ๆ เกินเกณฑ์ความอดทน และวิธี Eager/Lazy เลิกเป็นเพียงแนวคิดแล้วกลายเป็นสิ่งที่ต้องทำ

กลยุทธ์: เจาะลึก Eager/Lazy

ปรัชญา: แคชคอมพิวเตอร์ประยุกต์กับการรู้คิด

แนวทางของฉันได้รับแรงบันดาลใจโดยตรงจากการจัดการแคชคอมพิวเตอร์ ทุกสิ่งที่สำคัญและใช้บ่อยต้องสามารถเข้าถึงได้ทันที (กระตือรือร้น). ทุกสิ่งที่เป็นตามบริบทหรือมีขนาดใหญ่ต้องโหลดตามคำขอ (ขี้เกียจ).

Eager (แดชบอร์ด)

Lazy (คู่มือเจ้าของ)

ขนาด

น้อยกว่า 100 บรรทัด, น้อยกว่า 10k โทเค็น

ไม่จำกัด, ละเอียด

กำลังโหลด

อัตโนมัติ เมื่อเริ่มต้นเซสชัน

ตามคำขอของตัวแทน

เนื้อหา

กฎเด็ดขาด, ภารกิจปัจจุบัน, สถานะวิกฤต

คลังเก็บเซสชัน ประวัติทั้งหมด ขั้นตอนโดยละเอียด เอกสารอ้างอิงทางเทคนิค

บทบาท

ชี้นำตัวแทนทันที

ตอบคำถามเกี่ยวกับบริบทเชิงลึก

ไฟล์ Eager: แดชบอร์ด

ไฟล์เหล่านี้อยู่ที่รากของแต่ละโปรเจกต์ และถูกโหลดโดยอัตโนมัติโดยเอเจนต์เมื่อเริ่มต้นแต่ละเซสชัน พวกมันประกอบเป็นแดชบอร์ด-- ข้อมูลสำคัญที่เข้าถึงได้ทันที

@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200

package "Racine du Projet (Eager - Auto-chargé)" {
    component "<b>AGENT.adoc</b>\nกฎสัมบูรณ์\nโครงสร้างและข้อกำหนด" as AGENT
    component "<b>PROMPT_REPRISE.adoc</b>\nภารกิจของเซสชัน N\nสรุป N-1" as PROMPT
    component "<b>INDEX.adoc</b>\nจุดเริ่มต้น\nกฎ + เซสชัน" as INDEX
    component "<b>*_ESSENTIALS.adoc</b>\nบริบททางธุรกิจ\nสำคัญยิ่ง" as ESS
}

package ".agents/ (Lazy - โหลดตามคำขอ)" {
    component "<b>sessions/N-*.adoc</b>\nคลังเก็บโดยละเอียด\nการตัดสินใจ & ผลลัพธ์" as SESS
    component "<b>SESSIONS_HISTORY.adoc</b>\nตารางสรุป\nวันที่/ประเภท/คะแนน" as HIST
    component "<b>PROCEDURES.adoc</b>\nเทมเพลตท้ายเซสชัน\n6 ขั้นตอน\n" as PROC
    component "<b>*_REFERENCE.adoc</b>\nสถาปัตยกรรมทั้งหมด\nข้อมูลอ้างอิงทางเทคนิค" as REF
    component "<b>COMPLETED_TASKS_ARCHIVE</b>\nงานที่เสร็จสิ้น\nรายเดือน" as ARCH
    component "<b>AGENT_MODUS_OPERANDI.adoc</b>\nเอกสารกลยุทธ์\nระเบียบวิธี" as MOD
    component "<b>*_REFERENCE.adoc</b>\nการทดสอบ Boot, พาร์ทิชัน A/B\nบริบทเฉพาะ" as SPEC
}

AGENT --> PROMPT : "ข้อมูลอ้างอิง"
AGENT --> INDEX : "ข้อมูลอ้างอิง"
INDEX --> SESS : "ดัชนี"
INDEX --> HIST : "ดัชนี"
INDEX --> PROC : "อ้างอิง"
INDEX --> ARCH : "อ้างอิง"
INDEX --> REF : "อ้างอิง"
PROMPT --> SESS : "คลังเก็บ N-1"
PROMPT --> ESS : "บริบททางธุรกิจ N"

@enduml

AGENT.adoc-- ไฟล์หลัก บน`cheroliv.com`, มี 200 บรรทัดและประกอบด้วย:

  • กฎเด็ดขาดของโปรเจกต์ (ห้ามคอมมิตโดยไม่ได้รับอนุญาต, ห้าม`rm`โดยไม่มีการยืนยัน)

  • โครงสร้างโปรเจกต์และแนวปฏิบัติการเขียนโค้ด

  • คำสั่งที่จำเป็น (./gradlew serve, ./gradlew test)

  • เอปิกและแบ็กлогผลิตภัณฑ์ (ยูสเซอร์สตอรีที่จัดลำดับความสำคัญแล้ว)

  • เกณฑ์คุณภาพแบบข้ามสายงาน (การเข้าถึงได้ การรองรับขนาดหน้าจอ ความเข้ากันได้)

บน`bakery-plugin`, กฎข้อ 0 นั้นแตกต่าง:./gradlew -q publishToMavenLocal` จำเป็นหลังจากแก้ไขซอร์สโค้ดทุกครั้ง. เพราะการทดสอบปลั๊กอินโดยไม่เผยแพร่ JAR โลคอลอีกครั้งทำให้ฉันเสียเวลาหนึ่งชั่วโมงไปกับการดีบั๊กโค้ดที่ยังไม่ได้แพ็กเกจ.

PROMPT_REPRISE.adoc-- ภารกิจของเซสชันปัจจุบัน อัปเดตทุกครั้งเมื่อสิ้นสุดเซสชัน โดยประกอบด้วย:

  • หมายเลขเซสชันและภารกิจที่มีความสำคัญลำดับแรก

  • บทสรุปของเซสชันก่อนหน้า (สิ่งที่ทำเสร็จแล้ว สิ่งที่ยังคงต้องทำ)

  • เกณฑ์การยอมรับของเซสชันปัจจุบัน

  • การเตือนความจำทางเทคนิคเฉพาะ

.agents/INDEX.adoc-- จุดเริ่มต้น มันสรุปกฎสัมบูรณ์ เซสชันล่าสุด และที่สำคัญที่สุดพอร์ตโฟลิโอโครงการจัดการด้วยระเบียบวิธีเดียวกัน ณ วันนี้ มีห้าโครงการอยู่ในนั้น:

----
----
| magic-stick    | Session 23 | SCRIPT_VERIFICATION.adoc | 2026-04-27 |
| bakery-gradle  | Session 11 | TEST_COVERAGE_ANALYSIS   | 2026-04-27 |
| cheroliv.com   | Session 9  | TEST_COVERAGE_ANALYSIS   | 2026-04-27 |
| plantuml-gradle| Session 133| TEST_COVERAGE_ANALYSIS   | 2026-04-23 |
| jhipster-gradle-plugins | Session 1 | TEST_COVERAGE_ANALYSIS | 2026-04-28 |
----

No source text was provided to translate. Please send the French text you would like translated into Thai.`*_ESSENTIALS.adoc`** -- การเพิ่มเติมล่าสุด (Session 109, plantuml-plugin) เพื่อเพิ่มประสิทธิภาพบริบทแบบ Eager ให้ดียิ่งขึ้น แทนที่จะโหลดบริบททางธุรกิจ 200 บรรทัดบนพูลคีย์ API ฉันโหลด 50 บรรทัดของส่วนสำคัญ และอีก 150 บรรทัดที่เหลือยังคงอยู่ในสถานะ LAZY ใน`*_REFERENCE.adoc`.

ผลลัพธ์ที่วัดได้: การเปลี่ยนผ่านของ**~25k โทเคน EAGER ถึง ~10k โทเคน**(ประหยัดได้ 60%) เอเจนต์ไม่จำเป็นต้องใช้การแจ้งเตือนที่สิ้นเปลืองพลังงานอีกต่อไป

==== จุดเชื่อมที่หายไป : `opencode.json

ฉันต้องสารภาพกับคุณถึงเรื่องหนึ่งที่ฉันเกือบลืมบันทึกไว้ เหนือไฟล์ .adoc ทั้งหมดนี้ มีไฟล์ JSON ขนาดจิ๋วไฟล์หนึ่งซึ่งถ้าไม่มีมันแล้วทุกอย่างก็ไม่ทำงาน มันมีชื่อว่า`opencode.json`และมันมีหกบรรทัด ตามตัวอักษรคือหกบรรทัด

[source,json]
----
{
  "$schema": "https://opencode.ai/config.json",
  "instructions": [
    "AGENT.adoc"
  ]
}
----

ไฟล์นี้เป็นไฟล์ที่บอกกับ Opencode ว่า « เมื่อเริ่มต้น ให้โหลด`AGENT.adoc`โดยอัตโนมัติ. » หากไม่มีมัน เอเจนต์ก็เป็นหน้าว่างเปล่าตรงกับที่ฉันอธิบายไว้ตอนต้นบทความทุกประการ เมื่อมีมัน เอเจนต์ก็มีกฎเด็ดขาด สถาปัตยกรรมของโปรเจกต์ และคำสั่งสำคัญอยู่ในมือแล้ว — ก่อนที่ฉันจะพูดสวัสดีด้วยซ้ำ

ฉันค้นพบความสำคัญของไฟล์นี้โดยบังเอิญ บน`bakery-plugin`, มันไม่มีอยู่จริง ฉันสงสัยว่าทำไมเอเจนต์จึงดู « หลงทาง » อย่างเป็นระบบในโปรเจกต์นี้มากกว่าโปรเจกต์อื่น กฎสัมบูรณ์นั้นอยู่ใน`AGENT.adoc`— แต่`AGENT.adoc`ไม่เคยถูกโหลด เอเจนต์อ่านเฉพาะสิ่งที่ฉันบอกให้อ่านด้วยตนเองในแต่ละเซสชัน นี่คือเซสชันที่ 11 ของ`bakery-plugin`เมื่อฉันตระหนักถึงการไม่มีอยู่ของ`opencode.json`. ฉันสร้างมันขึ้นมา — และเซสชันที่ 12 ก็เริ่มต้นเหมือนกับเซสชันอื่นๆ

ไฟล์นี้ชัดเจนสำหรับฉันมากในตอนนี้จนฉันไม่คิดถึงมันอีกแล้ว ความผิดพลาดแบบคลาสสิกของนักพัฒนาที่รู้จักเครื่องมือของตัวเองดีเกินไป วันนี้ฉันสร้างมันเป็นประจำ *ก่อน*`AGENT.adoc`. นี่คือศิลาก้อนแรก

==== ทวิภาพของ `INDEX.adoc

ความละเอียดอ่อนอีกประการหนึ่งที่สมควรได้รับการอธิบายให้ชัดเจน:`INDEX.adoc`อาศัยอยู่ใน`.agents/`— โฟลเดอร์ที่ฉันนำเสนอว่าเป็น LAZY อย่างไรก็ตาม ฉันระบุโฟลเดอร์นี้เป็น EAGER ในตารางทั้งหมดของฉัน มีความขัดแย้งที่ดูเหมือนจะปรากฏอยู่ตรงนี้

ความเป็นจริงภาคสนาม: ไฟล์`.agents/INDEX.adoc`ถูกโหลดโดยอัตโนมัติเรียบร้อยแล้วเมื่อเริ่มต้นเซสชัน เช่นเดียวกับ`AGENT.adoc` et `PROMPT_REPRISE.adoc`. พวกเขาอยู่ใน`.agents/`ด้วยเหตุผลด้านการจัดระเบียบ — ไม่ให้รุกล้ำราก — แต่พฤติกรรมของพวกมันเป็น EAGER

บน`plantuml-plugin`, `INDEX.adoc`มี 200 บรรทัด และมีกฎเด็ดขาดที่*ครบถ้วน*พร้อมประวัติของกฎเหล่านั้น (บทเรียนจากเซสชันที่ผ่านมา) EPIC พร้อมคะแนน และพอร์ตโฟลิโอโครงการ นี่คือเอกสารที่เอเจนต์ใช้ตรวจดูเพื่อรู้ว่า « ตอนนี้เราอยู่ตรงไหน » บน`bakery-plugin`, มันมี 150 บรรทัดพร้อมด้วยโรดแมปและเซสชันล่าสุด

ความซ้ำซ้อนโดยเจตนาระหว่าง`AGENT.adoc` et `INDEX.adoc`อาจทำให้ประหลาดใจได้ กฎเด็ดขาดมีอยู่ในทั้งสอง ทำไม? เพราะกฎเหล่านี้ทำหน้าที่สองบทบาทที่แตกต่างกัน: ใน`AGENT.adoc`, พวกมันเป็น *เชิงอธิบาย* (การเล่าเรื่องของกฎ บทเรียนที่ได้เรียนรู้) ; ใน`INDEX.adoc`, สิ่งเหล่านี้เป็น *เชิงปฏิบัติการ* (กฎเปล่า ๆ โดยไม่มีเหตุผลรองรับ สำหรับการอ้างอิงอย่างรวดเร็ว) เอเจนต์อ่าน`AGENT.adoc`ครั้งหนึ่งเพื่อ *ทำความเข้าใจ* ; เขาอ่านอีกครั้ง`INDEX.adoc`ในแต่ละเซสชันเพื่อ *นำไปใช้* สองการใช้งาน สองรูปแบบ

[plantuml, format=svg, id=diag-dualite-agent-index, alt="Comparaison entre AGENT.adoc (narratif) et INDEX.adoc (exécutif)"]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title ความเป็นคู่ของ AGENT.adoc ←→ INDEX.adoc
left to right direction

rectangle "AGENT.adoc\n(ราก — EAGER)" as AGENT #E3F2FD {
  rectangle "📖 **รูปแบบการเล่าเรื่อง**\nการเล่าเรื่องของกฎ\nบทเรียนที่ได้รับ, บริบท" as NARR
  rectangle "🏗️ **สถาปัตยกรรมแบบสมบูรณ์**\nโครงสร้างโครงการ, องค์ประกอบ\nBacklog โดยละเอียดของ US" as ARCHI
  rectangle "📋 **กฎเชิงอธิบาย**\nทำไมกฎจึงมีอยู่\nประวัติของเหตุการณ์" as EXPL
}

rectangle "INDEX.adoc\n(.agents/ — EAGER)" as INDEX #E8F5E9 {
  rectangle "⚡ **รูปแบบสำหรับผู้บริหาร**\nกฎล้วน ๆ โดยไม่มีเหตุผลประกอบ\nการเปิดดูอย่างรวดเร็ว" as EXEC
  rectangle "📊 **Roadmap & EPICs**\nตารางสรุป\nความคืบหน้า, คะแนน, ลำดับความสำคัญ" as ROAD
  rectangle "🌐 **พอร์ตโฟลิโอโครงการ**\nมุมมองข้ามโครงการ\n5 โครงการที่ซิงโครไนซ์แล้ว" as PORT
}

AGENT --> INDEX : "เอเจนต์อ่าน AGENT.adoc\n1 ครั้งเพื่อ **เข้าใจ**"
INDEX --> AGENT : "เอเจนต์อ่าน INDEX.adoc ซ้ำ\nทุกเซสชันเพื่อ **นำไปใช้**"

note bottom of AGENT
ขนาดสูงสุด: 200 บรรทัด
end note

note bottom of INDEX
ขนาดสูงสุด: 200 บรรทัด
  Source de vérité en cas de divergence
end note

@enduml
----

ความซ้ำซ้อนที่ตั้งใจไว้นี้เป็นทางเลือกในการออกแบบ โดยใช้โทเคน EAGER เพิ่มขึ้นราว 50 บรรทัด — แต่ช่วยรับประกันว่าตัวแทนจะมีกฎอยู่ตรงหน้าอยู่เสมอ รวมถึงในรูปแบบกระชับซึ่งเอื้อต่อการปฏิบัติตามได้ทันที

=== ไฟล์ LAZY: คู่มือเจ้าของ

ไฟล์เหล่านี้อยู่ใน`.agents/`และจะถูกอ่านเฉพาะเมื่อเอเจนต์จำเป็นต้องใช้เท่านั้น พวกมันเป็นความมั่งคั่งที่แท้จริงของวิธีการนี้ เพราะพวกมันสะสมความรู้ของโครงการโดยไม่ปนเปื้อนบริบทปัจจุบัน

[plantuml, format=svg, id=diag-agents-tree, alt="Arborescence complète du dossier .agents/"]
----
@startuml
skinparam folderBackgroundColor #E3F2FD
skinparam folderBorderColor #1565C0
skinparam fileBackgroundColor #FFF3E0
skinparam fileBorderColor #EF6C00

folder ".agents/" as ROOT {
  file "INDEX.adoc\n(EAGER -- 200 บรรทัด)" as IDX #E8F5E9
  file "AGENT_SESSION_MANAGER.adoc\n(แม่แบบเซสชัน)" as ASM
  file "SESSION_CHECKLIST.adoc\n(เมื่อใดควรเปลี่ยน)" as CHK
  file "PROCEDURES.adoc\n(6 ขั้นตอน + LAZY/EAGER)" as PRO
  file "SESSIONS_HISTORY.adoc\n(ทุกเซสชัน)" as HIS

  folder "sessions/" as SESS {
    file "1-chore-migration.adoc" as S1
    file "109-formalisation-lazy.adoc" as S109 #FFECB3
    file "133-epic11-article.adoc" as S133
    file "... +130 รายการอื่น" as SMORE
  }

  folder "archives/" as ARCH {
    file "COMPLETED_TASKS_2026-04.adoc" as CTA
    file "SESSIONS_HISTORY_83-95.adoc" as SHIST
    folder "sessions_summaries/" as SUM {
      file "SESSION_64_SUMMARY.adoc" as SU64
      file "SESSION_73_SUMMARY.adoc" as SU73
      file "..." as SUMORE
    }
    folder "prompts_archive/" as PARCH {
      file "PROMPT_REPRISE_S65.adoc" as PR65
      file "PROMPT_REPRISE_S75.adoc" as PR75
      file "..." as PMORE
    }
  }
}

IDX --> SESS : "จัดทำดัชนี"
IDX --> HIS : "จัดทำดัชนี"
IDX --> ARCH : "อ้างอิง"

note right of S109
เซสชัน 109 =
การทำให้กลยุทธ์เป็นทางการ
LAZY/EAGER
โทเคน : ~25k → ~10k
end note

@enduml
----

โครงสร้างแบบต้นไม้ด้านบนแสดงโครงสร้างจริงของโฟลเดอร์`.agents/`บน`plantuml-plugin`, โปรเจกต์ที่สมบูรณ์ที่สุด โปรดสังเกตความลึกแบบสามชั้น: ไฟล์ราก (เมทาดาทา), โฟลเดอร์`sessions/`(จดหมายเหตุตามลำดับเวลา) และแฟ้มเอกสาร`archives/`(การรวมและการสรุป) ความลึกนี้เองที่เปลี่ยนการกำกับดูแลของไฟล์ TODO ธรรมดาให้กลายเป็น**ความจำองค์กรที่สมบูรณ์**.

**.agents/sessions/{N}-{titre}.adoc**-- ไฟล์เก็บถาวรโดยละเอียดของแต่ละเซสชัน ปัจจุบัน:

* `plantuml-plugin`No source text was provided to translate. Please send the French text you'd like translated into Thai.**133 เซสชันที่ถูกเก็บถาวร**(ตั้งแต่เซสชันที่ 1 ถึง 133)
* `bakery-plugin`(No French text was provided to translate — the message ends with " : " and no source text follows.)**11 เซสชัน**
* `magic-stick`Please provide the French text you'd like me to translate into Thai.**23 เซสชัน**
* `cheroliv.com`No text was provided to translate. Please send the French text you'd like translated into Thai.**9 เซสชันอย่างเป็นทางการ**+ เซสชันก่อนระบบ 7 ครั้งที่สร้างขึ้นย้อนหลัง

ไฟล์เก็บถาวรแต่ละไฟล์มีบริบทที่สมบูรณ์ของเซสชัน การตัดสินใจที่ได้ทำ ปัญหาที่พบและวิธีแก้ไข คำสั่งที่รัน และเอาต์พุตของคำสั่งเหล่านั้น

**.agents/SESSIONS_HISTORY.adoc**-- ตารางสรุปของทุกเซสชันพร้อมคะแนน ตัวอย่างบน`cheroliv.com`ไม่มีข้อความภาษาฝรั่งเศสให้แปลในข้อความของคุณ กรุณาส่งข้อความที่ต้องการแปล

----

| -6 | 2025-05 | chore | Initialisation projet Gradle/JBake | 7/10 |  1 | 2026-04-25 | chore | Migration gouvernance agent | 8/10 |  7 | 2026-04-27 | debug/fix | Correction publishSite | 9/10 |  8 | 2026-04-27 | analyse | Analyse article 0108 | 7/10

**.agents/COMPLETED_TASKS_ARCHIVE_{mois}.adoc**-- งานที่เสร็จสิ้นแล้วจะถูกเก็บถาวรเป็นรายเดือน เพื่อไม่ให้ backlog ที่ใช้งานอยู่มีภาระมากเกินไป เมื่อ user story เสร็จสิ้นแล้ว จะถูกย้ายมาที่นี่ backlog ยังคงอ่านง่าย: มีรายการที่ใช้งานอยู่สูงสุด 10 รายการ

**.agents/PROCEDURES.adoc**-- เทมเพลตโดยละเอียดของขั้นตอนการสิ้นสุดเซสชัน ยาว แต่เอเจนต์อ่านเพียงครั้งเดียวเมื่อเรียนรู้วิธีการ จากนั้นขั้นตอนจะกลายเป็นกลไกอัตโนมัติ

**.agents/AGENT_MODUS_OPERANDI.adoc**-- เอกสารเชิงกลยุทธ์ฉบับสมบูรณ์ เกี่ยวกับ`plantuml-plugin`, ไฟล์นี้ทำ**900+ บรรทัด**และในความเป็นจริงมีชื่อว่า`AGENT_METHODOLOGIES.adoc`— ฉันเปลี่ยนชื่อระหว่างการเขียนบทความนี้กับการนำไปใช้จริง ความคลาดเคลื่อนในการตั้งชื่อแบบนี้เป็นเรื่องเลี่ยงไม่ได้ในระบบงานฝีมือที่พัฒนาอยู่ สิ่งสำคัญคือแบบแผนการตั้งชื่อ: หากไฟล์นั้นอธิบาย *วิธีการ* มันจะเริ่มต้นด้วย`AGENT_`หรือคำนำหน้าที่ชัดเจน มันจัดทำเอกสารวิธีการ Eager/Lazy แพตเทิร์นที่ควรปฏิบัติตาม และแอนติแพตเทิร์นที่ควรหลีกเลี่ยง มันเป็น LAZY เพราะเอเจนต์ไม่จำเป็นต้องอ่านกลยุทธ์ทั้งหมดซ้ำในทุกเซสชัน แต่เฉพาะเมื่อมีความกำกวมเท่านั้น

No text was provided to translate. Please send the French text you'd like translated into Thai.`*_REFERENCE.adoc`** -- ข้อมูลอ้างอิงทางเทคนิคเฉพาะของโครงการ บน`magic-stick`, สองไฟล์ LAZY แบบหนาแน่น:

* `AB_PARTITION_REFERENCE.adoc`(147 บรรทัด) -- สถาปัตยกรรมพาร์ทิชัน A/B GPT, สคริปต์`update-system.sh`, ขนาดที่ประมาณไว้, กลไกการย้อนกลับ
* `BOOT_TEST_REFERENCE.adoc`(144 บรรทัด) -- ขั้นตอน QEMU + VNC สำหรับทดสอบการบูตของ ISO โดยไม่มีฮาร์ดแวร์จริง รายการตรวจสอบ BIOS/UEFI ข้อจำกัด CI/CD

บน`plantuml-plugin`It looks like your message is missing the French text you'd like translated into Thai. Could you please provide the source text?

* `ARCHITECTURE.adoc`(134 บรรทัด) -- โครงสร้างของ 11 data classes, จุดที่ควรระวัง (กับดักที่ควรหลีกเลี่ยง), คำสั่งทดสอบที่ปรับให้เหมาะสม
* `API_KEY_POOL_REFERENCE.adoc`-- รายละเอียดทั้งหมดของพูลคีย์ (LAZY ขณะที่`ESSENTIALS`คือ EAGER)

== เอเจนต์ผู้เชี่ยวชาญ: ทีมเสมือนจริง

การกำกับดูแลไม่ได้จำกัดอยู่เพียงไฟล์แบบพาสซีฟ ฉันได้จัดทำอย่างเป็นทางการ...**บทบาทของเอเจนต์เฉพาะทาง**ในไฟล์ LAZY ที่จัดเตรียมไว้โดยเฉพาะ ซึ่งกำหนดเวิร์กโฟลว์ที่คาดหวังตามประเภทของงาน

|===
|Please provide the French text you'd like me to translate into Thai. |ไฟล์ |บทบาท |โครงการ |**เข้ารหัส** |`CODER.adoc` |การนำ FTL/CSS/JS ไปใช้, แท็กเชิงความหมาย, เกณฑ์การเข้าถึง |cheroliv.com |**สครัมมาสเตอร์** |`SCRUM_MASTER.adoc` |การวางแผน US, การแบ่งเป็นงานย่อย, การตรวจจับการพึ่งพา |cheroliv.com |**PlantUML Designer** |`PLANTUML_DESIGNER.adoc` |การสร้างไดอะแกรม, ไวยากรณ์ PUML, การผสานรวม JBake |cheroliv.com
|===

ไฟล์`CODER.adoc`บน`cheroliv.com`มีกฎเกณฑ์ที่เป็นรูปธรรม : _มีเพียงหนึ่ง`<h1>`ต่อหน้า_, _นำหน้าเส้นทางด้วย`${content.rootpath}`_, _ประกาศภาษา`<html lang="${content.lang!"fr"}">`_. ข้อตกลงเหล่านี้ ซึ่งเขียนไว้เพียงครั้งเดียว ได้รับการปฏิบัติตามโดยอัตโนมัติโดยเอเจนต์ตั้งแต่เซสชันที่ 1

ไฟล์`SCRUM_MASTER.adoc`กำหนดโครงสร้างของสิ่งที่ต้องส่งมอบ:**วัตถุประสงค์**, **งาน**(เรียงลำดับพร้อมการกำหนดค่า),**เกณฑ์การยอมรับ**, **ความเสี่ยง**. เมื่อฉันขอแผนปฏิบัติการ เอเจนต์สร้างโครงสร้างนี้โดยที่ฉันไม่ได้ขอ การกำกับดูแล**โปรแกรม**เจ้าหน้าที่

==== เมื่อเอเจนต์เฉพาะทางกลายเป็นสิ่งที่ขาดไม่ได้

การสร้างเอเจนต์เฉพาะทางเป็นไปตามเส้นโค้งตามธรรมชาติ ในช่วงเริ่มต้นของโครงการ คุณยังไม่จำเป็นต้องมีมัน —`AGENT.adoc`ก็เพียงพอแล้วอย่างมาก แต่เมื่อโปรเจกต์เติบโตขึ้น (สมมติว่าเกิน 20 เซสชัน) สัญญาณสองอย่างต้องเตือนคุณ :

1. เอเจนต์ผสมปนธรรมเนียมปฏิบัติของสองโดเมนที่แตกต่างกัน (เช่น ไวยากรณ์ PlantUML และกฎ CSS)
2. คุณใช้เวลามากขึ้นในการแก้ไขเอเจนต์เกี่ยวกับแนวปฏิบัติที่คุณอธิบายให้มันฟังไปแล้ว 5 ครั้ง

บน`cheroliv.com`, มันเกิดขึ้นในเซสชัน... 1. ใช่ ตั้งแต่เริ่มแรก เพราะโปรเจกต์นี้เป็นเว็บไซต์ที่มีสามภาษา (FTL, CSS, JS) เนื้อหา AsciiDoc และไดอะแกรม PlantUML — สามโดเมนที่ไม่เกี่ยวข้องกันเลย เอเจนต์ CODER จำเป็นต้องรู้ขนาดฟอนต์และ media queries ; เอเจนต์ PLANTUML_DESIGNER จำเป็นต้องรู้ไวยากรณ์`@startuml`. หากไม่มีการแยกจากกัน เอเจนต์ CODER เสนอไดอะแกรมให้ฉัน และในทางกลับกัน ความวุ่นวาย

บน`jhipster-gradle-plugins`, ฉันได้สร้างเอเจนต์เฉพาะทางสองตัวที่เหมาะสำหรับการพัฒนาplugin Gradle:`PLUGIN_DEVELOPER.adoc` et `BACKLOG_MANAGER.adoc`. ตัวแรกเข้ารหัสแบบแผน Kotlin/Gradle ทั้งหมด (ไม่มี`!!`, คลาสข้อมูลสำหรับโมเดล,`@TaskAction`สำหรับงาน) คนที่สองรู้ว่า`persistence`ต้องเสถียรก่อนที่`assistant`ไม่เริ่มการพัฒนาของตน — การพึ่งพาที่สำคัญในโมโนรีโป

ข้อผิดพลาดที่ต้องไม่ทำ: การสร้างเอเจนต์มากเกินไปเร็วเกินไป`plantuml-plugin`ได้รอจนถึงเซสชัน 108 ก่อนที่จะจัดทำเป็นเอเจนต์เฉพาะทางสำหรับพูลคีย์ API ก่อนหน้านั้น บริบททางธุรกิจอยู่ภายใน`AGENT.adoc`. หลักการคร่าว ๆ: เอเจนต์เฉพาะทางมีความสมเหตุสมผลเมื่อโดเมนธุรกิจของมันมีเอกสารเกิน 100 บรรทัด

==== ข้อกำหนดการตั้งชื่อเซสชัน

รายละเอียดที่ดูเหมือนไม่สำคัญ แต่จะกลายเป็นเรื่องวิกฤตเมื่อถึง 100 เซสชัน จะตั้งชื่อไฟล์อาร์ไคฟ์อย่างไร?

ฉันเรียนรู้จากประสบการณ์ตรงว่าจำเป็นต้องมีข้อตกลงร่วมกัน — ตอนแรกมีสี่โปรเจกต์ สี่รูปแบบที่แตกต่างกัน และฉันก็ตามไม่ทันอีกต่อไป ตอนนี้ ข้อตกลงที่ฉันทำให้ลงตัวแล้วคือ:

{N}-{type}-{sujet-kebab-case}.adoc

ตัวอย่างที่เป็นรูปธรรม:

* `1-chore-migration-gouvernance-agent.adoc`— เซสชัน 1 ประเภทงานบ้าน
* `10-solidification-tests.adoc`— เซสชัน 10 โดยไม่มีชนิดที่ระบุชัดเจน (หัวข้อเพียงพอ)
* `036-debug-graphify-symlink-epic9.adoc`— เซสชัน 36 พร้อมหมายเลข 3 หลักสำหรับการจัดเรียง

หมายเลขเซสชันเป็นเกณฑ์การเรียงลำดับหลัก โปรเจกต์ที่ใช้หมายเลข 3 หลัก (001, 036, 133) จะหลีกเลี่ยงปัญหาการเรียงลำดับแบบพจนานุกรมเมื่อเกิน 99 นี่คือสิ่งที่ฉันใช้อยู่ตอนนี้บน`magic-stick`No French text was provided to translate.`001-init-projet.adoc`, `036-debug-graphify-symlink-epic9.adoc`.

ประเภทเป็นทางเลือกและได้มาจากคีย์เวิร์ดของเซสชัน (debug, feature, refactor, docs, chore, test) หัวข้อในรูปแบบ kebab-case เป็นส่วนที่สำคัญที่สุด: ต้องทำให้สามารถค้นหาเซสชันได้โดยไม่ต้องเปิดไฟล์ หากคุณสงสัยว่า «นั่นคือเซสชันไหนที่เราแก้ไข timeout ของการทดสอบการรวมระบบ?» คำตอบคือ`124-fix-timeout-integration-test.adoc`.

สำหรับเซสชันย้อนหลังที่สร้างขึ้นใหม่ (โปรเจกต์ที่เกิดก่อนการกำกับดูแล) ฉันใช้หมายเลขติดลบ บน`cheroliv.com`, เซสชัน -6 ถึง 0 ครอบคลุมประวัติศาสตร์ก่อนการกำกับดูแลของโครงการทั้งหมด และสำหรับเซสชัน « ที่ไม่ได้บันทึกเป็นเอกสาร » หรือที่สูญหาย ฉันสร้างรายการใน`SESSIONS_HISTORY.adoc`โดยไม่มีเอกสารเก็บถาวรที่สอดคล้องกัน โดยมีคะแนน`?`. ซึ่งซื่อสัตย์กว่าการแสร้งทำ

[plantuml, format=svg, id=diag-naming-convention, alt="Arbre de décision pour le nommage des fichiers de session"]

@startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center skinparam wrapWidth 200

title หลักการตั้งชื่อเซสชัน start

:Une session se termine; note right: Trigger "สิ้นสุดเซสชัน"

if (Session antérieure\nà la gouvernance ?) then (oui) :Numéro NÉGATIF\n-6, -5 …​ 0; note right: ประวัติ\nที่สร้างขึ้นใหม่ :Suffixe : reconstitution; else (non) :Numéro POSITIF\nsur 3 chiffres si > 99; note right: 001, 036, 133\nสำหรับการเรียงลำดับตามพจนานุกรม

:Détecter le **TYPE**;
if (Mots-clés trouvés ?) then (oui)
  :debug / feature / refactor\ndocs / chore / test;
else (non)
  :Omettre le type\n(le sujet suffit);
endif
  :Formuler le **SUJET** en kebab-case;
  note right
ตัวอย่าง: fix-timeout-integration-test
ต้องทำให้สามารถค้นหาได้
โดยไม่ต้องเปิดไฟล์
  end note
endif

note right • 1-chore-migration-gouvernance.adoc • 036-debug-graphify-symlink.adoc • 124-fix-timeout-integration-test.adoc • 133-epic11-article-blog-kg.adoc end note

if (Session documentée ?) then (oui) :Créer archive dans sessions/; :Ajouter ligne SESSIONS_HISTORY\navec score X/10; else (non) :Ajouter ligne SESSIONS_HISTORY\navec score ?\nsans archive; note right: ความซื่อสัตย์\nแทนที่จะเป็นความว่างเปล่า endif

stop @enduml

==== TEST_COVERAGE_ANALYSIS.adoc` — ขั้นตอนที่ 5 แบบเจาะลึก

ขั้นตอนที่ 5 ของกระบวนการสิ้นสุดเซสชันเป็นขั้นตอนที่ลึกลับที่สุด โดยกล่าวว่า « อัปเดต`TEST_COVERAGE_ANALYSIS.adoc`หากมีการเพิ่มหรือแก้ไขการทดสอบ » แต่ไฟล์นี้มีลักษณะอย่างไร?

บน`plantuml-plugin`, มันพัฒนาจากไม่กี่บรรทัดไปเป็นโครงสร้างที่สมบูรณ์ นี่คือรูปแบบที่เสถียรแล้วของมัน:

[source]

Analyse de Couverture de Tests

Suivi des Tests

Classe de test

Type

Tests

Statut

Dernière MAJ

PlantumlServiceTest

unit

45/45

✅ PASS

2026-04-23

ApiKeyPoolTest

integration

15/15

✅ PASS

2026-04-20

Historique par Session

| Session | Tests ajoutés | Tests modifiés | Couverture | 133 | 0 | 2 | 100% | 132 | 5 | 0 | 100%

----

ประโยชน์ไม่ได้อยู่ที่ไฟล์เอง — แต่อยู่ที่ข้อบังคับในการ จดบันทึก สิ่งที่เปลี่ยนแปลง หากไม่มีขั้นตอนนี้ หลังจากผ่านไป 50 เซสชัน คุณจะไม่รู้อีกต่อไปว่าการทดสอบใดครอบคลุมอะไร เอเจนต์ก็เช่นกัน ไฟล์นี้กลายเป็นแหล่งความจริงเดียวเกี่ยวกับความครอบคลุมการทดสอบของโปรเจกต์

สำหรับโปรเจกต์ที่ไม่มีテストแบบดั้งเดิม (เช่น`magic-stick`ที่ทดสอบสคริปต์ bash) ขั้นตอนที่ 5 ถูกแทนที่ด้วย`SCRIPT_VERIFICATION.adoc`. กลไกนั้นเหมือนกัน: ไฟล์ที่ติดตามสถานะการตรวจสอบความถูกต้องของสคริปต์ ปรับขั้นตอนที่ 5 ให้เข้ากับโปรเจกต์ของคุณ แต่ห้ามข้ามเด็ดขาด มันคือตาข่ายนิรภัยที่ป้องกันการถดถอยแบบเงียบ

หากโปรเจกต์ของคุณไม่มีการทดสอบ ใด ๆ เลย — ไม่ว่าจะเป็นยูนิตเทสต์ การทดสอบเชิงฟังก์ชัน หรือสคริปต์ — ก็ให้สร้างไฟล์เปล่าที่มีส่วน « สิ่งที่ต้องทำ: กำหนดกลยุทธ์การทดสอบ » ขึ้นมาเช่นกัน มันเป็นที่คั่นหน้าที่จะคอยเตือนตัวคุณในอนาคตว่าหัวข้อนี้ยังไม่ได้รับการจัดการ

[plantuml, format=svg, id=diag-session-flow, alt="Flux d’une session type avec Eager/Lazy et agents"] ---- @startuml skinparam backgroundColor #FEFEFE

start

:Début session; note right: เอเจนต์เป็นหน้ากระดาษเปล่า

:Chargement EAGER auto; note right * AGENT.adoc (กฎเด็ดขาด) * PROMPT_REPRISE.adoc (ภารกิจ N) * INDEX.adoc (สถานะโครงการ) end note

if (Mission claire ?) then (oui) :Exécution directe; else (non) :Charge LAZY sur demande; note right * SESSIONS_HISTORY.adoc (บริบทที่ผ่านมา) * sessions/{N-1}-.adoc (การตัดสินใจ) * *REFERENCE.adoc (สถาปัตยกรรม) end note endif

:Délégation agent spécialisé ?;

if (CODER ?) then (oui) :Lit CODER.adoc; :Suit conventions FTL/CSS; elseif (SCRUM Master ?) then (oui) :Lit SCRUM_MASTER.adoc; :Structure livrable imposée; elseif (PlantUML ?) then (oui) :Lit PLANTUML_DESIGNER.adoc; :Syntaxe PUML + intégration; else (non) endif

:Travail de la session;

:Fin de session (trigger utilisateur);

:Procédure 6 étapes; note right 1. เก็บถาวร sessions/N-.adoc 2. อัปเดต PROMPT_REPRISE.adoc (N+1) 3. อัปเดต SESSIONS_HISTORY.adoc 4. อัปเดต INDEX.adoc 5. อัปเดต TEST_COVERAGE (ถ้าเกี่ยวข้อง) 6. อัปเดต COMPLETED_TASKS_ARCHIVE.adoc end note

:Checklist [✅] x 6;

stop @enduml ----

แผนภาพด้านบนแสดงวงจรชีวิตทั้งหมดของเซสชัน จุดสำคัญคือการแยกสองทางหลังจากโหลด EAGER: ไม่ว่าภารกิจจะชัดเจนพอที่จะดำเนินการโดยตรง (80% ของกรณี) หรือเอเจนต์จะโหลด LAZY เพื่อแก้ความกำกวม (20% ของกรณี) การแยกแยะนี้เองที่ช่วยประหยัดโทเค็น

== ขั้นตอนการสิ้นสุดเซสชัน: กฎทอง

=== ทำไมเธอจึงขาดไม่ได้

หากไม่มีขั้นตอนนี้ กลยุทธ์ Eager/Lazy ก็ไม่มีประโยชน์เลย ขั้นตอนนี้เองที่เปลี่ยนงานของเซสชันให้เป็นข้อมูลที่คงอยู่ถาวร ขั้นตอนนี้ทำงานตามคำขอโดยชัดแจ้งของผู้ใช้(คำสำคัญ: "สิ้นสุดเซสชัน", "ฉันออก", ฯลฯ), และมันคือจำเป็นไม่มีข้อยกเว้นใด ๆ ไม่มีการละเว้นใด ๆ

ไฟล์`SESSION_CHECKLIST.adoc`กำหนดตัวชี้วัดของเซสชันในอุดมคติ:

* ระยะเวลา: 15-30 นาที * ไฟล์ที่แก้ไข: สูงสุด 1-3 * การแลกเปลี่ยน LLM: 5-10 ข้อความ * บริบทโทเค็น: < 50k

และสัญญาณที่บ่งบอกว่าต้องเปลี่ยนเซสชัน: _LLM ทำซ้ำข้อผิดพลาดที่แก้ไขแล้ว, มีไฟล์ที่ถูกแก้ไขพร้อมกันมากกว่า 3 ไฟล์, บทสนทนามีมากกว่า 50 ข้อความ กฎทอง:5 เซสชันละ 20 นาทีดีกว่าหนึ่งเซสชัน 2 ชั่วโมงที่มีการดีบักวุ่นวาย

=== ลำดับขั้นตอน 6 ขั้น (อย่างเงียบ ๆ)

[plantuml, format=svg, id=diag-end-session-flow, alt="Flux de la procédure de fin de session"] ---- @startuml skinparam defaultTextAlignment center skinparam wrapWidth 200 skinparam activityBackgroundColor #E3F2FD

start :L’utilisateur dit "สิ้นสุดเซสชัน"; note right: คำสำคัญทริกเกอร์

:Agent détecte le trigger;

:Étape 1\nCréer archive\n`.agents/sessions/N-.adoc`; note right: บริบททั้งหมดของเซสชัน

:Étape 2\nMettre à jour\n`PROMPT_REPRISE.adoc`; note right: ภารกิจ N + เกณฑ์การยอมรับ N+1

:Étape 3\nMettre à jour\n`SESSIONS_HISTORY.adoc`; note right: บรรทัดสรุป: # / วันที่ / ประเภท / หัวข้อ / คะแนน

:Étape 4\nMettre à jour\n`INDEX.adoc`; note right: สถานะปัจจุบัน, แผนงาน, ไฟล์ที่แก้ไข

:Étape 5\nMettre à jour\n`TEST_COVERAGE_ANALYSIS.adoc`; note right: หากเพิ่มหรือแก้ไขการทดสอบ

:Étape 6\nMettre à jour\n`COMPLETED_TASKS_ARCHIVE.adoc`; note right: เก็บถาวรงานที่เสร็จสิ้นแล้ว

:Afficher la checklist de confirmation; note right: ตรวจสอบว่า [✅] แต่ละรายการสมควรได้รับหรือไม่

stop @enduml ----

=== ผลลัพธ์จากกว่า 150 เซสชัน

นี่คือผลลัพธ์ของกระบวนการนี้เมื่อนำไปใช้อย่างเป็นระบบกับสี่โครงการของฉัน:

plantuml-pluginNo source text was provided to translate. Please send the French text you’d like translated into Thai.

* 133 เซสชันตั้งแต่เริ่มต้นโครงการ * 240/240 การทดสอบผ่าน(ครอบคลุม 100%) — EPIC 1-7 เสร็จสิ้นแล้ว * 57 สถานการณ์ Cucumber BDDผ่านการตรวจสอบแล้ว * กฎความปลอดภัยเกี่ยวกับไฟล์กำหนดค่าที่เกิดจากข้อผิดพลาดจริง (Session 2 bakery-plugin)

ปลั๊กอินเบเกอรีThe text to be translated is missing.

* 11 เซสชันภายในสองสัปดาห์ * การโยกย้าย Supabase → Firebase เสร็จสิ้น (แก้ไขการทดสอบ 9 รายการ) * EPIC 6 (publishProfile) ใช้งานได้ในสภาพแวดล้อมการผลิต * กฎ 0 ถูกสร้างขึ้น:`publishToMavenLocal`บังคับหลังจากแก้ไขแต่ละครั้ง

ไม้วิเศษPlease provide the French text you’d like me to translate into Thai.

* 23 เซสชันเพื่อสร้างระบบไลฟ์ Xubuntu พร้อมพาร์ทิชัน A/B * ISO แรกที่สร้างขึ้นในเซสชัน 10 * การทดสอบการบูต QEMU + VNC ที่จัดทำเป็นทางการ (เอกสาร LAZY จำนวน 144 บรรทัด) * CI/CD SourceForge ที่ใช้งานได้

cheroliv.comPlease provide the French text you’d like me to translate into Thai.

* 9 เซสชันอย่างเป็นทางการ+ การสร้างใหม่ของ 7 เซสชันก่อนระบบ * บทความ 0101 (OpenCode PATH) เผยแพร่แล้ว * บทความ 0108 (ฉบับนี้) ถูกเขียนใหม่หลังจากการวิเคราะห์ข้อบกพร่องของมัน * การกำกับดูแลที่สมบูรณ์ซึ่งย้ายจาก Markdown ไปยัง AsciiDoc

=== เช็กลิสต์สุดท้าย

หลังจากดำเนินการทั้ง 6 ขั้นตอนแบบเงียบแล้ว เอเจนต์ต้องแสดงรายการตรวจสอบการยืนยัน:

----

✅ Procédure de fin de session exécutée 📋 Checklist :

กฎเด็ดขาด: ไม่สามารถทำเครื่องหมายขั้นตอนใดได้`[✅]หากไฟล์ไม่ได้รับการแก้ไขและตรวจสอบจริง

== คู่มือ Bootstrap: วันที่ 1 เซสชัน 0

คุณมั่นใจในวิธีนี้แล้ว คุณต้องการนำไปใช้กับโครงการใหม่ ควรเริ่มจากตรงไหน?

ฉันได้สัมผัสช่วงเวลานี้เมื่อวันที่ 28 เมษายน 2026 ฉันเปิด Opencode บน`jhipster-gradle-plugins, โมโนรีโปของฉันที่มีปลั๊กอิน Gradle JHipster สองตัว นี่คือโปรเจกต์ที่มีอยู่แล้ว — โค้ดอยู่ตรงนั้น งาน Gradle ทำงานได้ แต่การกำกับดูแลเอเจนต์ล่ะ? ศูนย์. หน้าว่าง. ราวกับ`plantuml-plugin`ในเซสชันที่ 1 ของตน เมื่อหลายเดือนก่อน

นี่คือขั้นตอนที่แน่นอนซึ่งฉันได้ปฏิบัติตาม และจะปฏิบัติตามสำหรับทุกโครงการใหม่ โปรดสังเกตลำดับให้ดี — มันสำคัญ

[plantuml, format=svg, id=diag-bootstrap, alt="Flux de bootstrap en 6 étapes pour initialiser la gouvernance agent sur un nouveau projet"] ---- @startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center skinparam wrapWidth 250 skinparam activityBackgroundColor #E8F5E9

title ธรรมาภิบาลแบบ Bootstrap — วันที่ 1, เซสชัน 0 start :Étape 0\nCréer opencode.json\n(6 lignes, instructions: AGENT.adoc); note right: บริดจ์ที่โหลด\nAGENT.adoc โดยอัตโนมัติ

:Étape 1\nCréer les dossiers\nmkdir -p .agents/sessions/ .agents/archives/; note right: คอนเทนเนอร์เปล่า\nก่อนที่เอเจนต์จะเขียนลงไป

:Étape 2\nCréer AGENT.adoc\n(200 lignes, règles absolues); note right: ไฟล์หลัก\nโครงสร้างขั้นต่ำ v1

:Étape 3\nCréer PROMPT_REPRISE.adoc\nMission session 1 (max 70 lignes); note right: สิ่งที่ตัวแทนต้อง\nทำในเซสชันถัดไป

:Étape 4\nCréer .agents/INDEX.adoc\nRègles exécutives + roadmap; note right: จุดเข้า EAGER\nในโฟลเดอร์ LAZY

:Étape 5\nCréer les fichiers LAZY structurants\n6 fichiers : SESSIONS_HISTORY, CHECKLIST, etc.; note right • SESSIONS_HISTORY.adoc • SESSION_CHECKLIST.adoc • PROCEDURES.adoc • AGENT_SESSION_MANAGER.adoc • TEST_COVERAGE_ANALYSIS.adoc • เอเจนต์เฉพาะทาง (หากจำเป็น) end note

:Étape 6\nAjouter le projet au Portefeuille\nMettre à jour TOUS les INDEX.adoc existants; note right: การบำรุงรักษาแบบข้ามสายงาน\nจำเป็นแต่น่าเบื่อ

:✅ Bootstrap terminé\nSession 1 prête; note right: ลงทุน 20 นาที\nประหยัดได้หลายร้อย

stop @enduml ----

=== ขั้นตอนที่ 0: สร้าง opencode.json

นี่คือไฟล์แรก ไม่`AGENT.adoc, ไม่`INDEX.adoc`.opencode.json`ก่อนอื่น ด้วยเหตุผลง่าย ๆ: หากคุณสร้าง`AGENT.adoc`อย่างแรก คุณจะลืมสร้างบริดจ์ที่โหลดมันโดยอัตโนมัติ ฉันทำมันบน`bakery-plugin, ฉันรู้ว่าฉันพูดถึงอะไร

=== ขั้นตอนที่ 1 : สร้างโฟลเดอร์

[source,bash] ---- mkdir -p .agents/sessions .agents/archives ----

โฟลเดอร์ว่างสองโฟลเดอร์`sessions/จะได้รับไฟล์เก็บถาวรของแต่ละเซสชัน`archives/`จะได้รับ COMPLETED_TASKS_ARCHIVE ประจำเดือน โฟลเดอร์เหล่านี้ต้องมีอยู่ *ก่อน ที่เอเจนต์จะจำเป็นต้องเขียนลงไป เอเจนต์ที่ต้องสร้างทั้งโฟลเดอร์และไฟล์ในเวลาเดียวกัน คือเอเจนต์ที่อาจล้มเหลวอย่างเงียบ ๆ

=== ขั้นตอนที่ 2: สร้าง `AGENT.adoc — ไฟล์หลัก

โครงสร้างขั้นต่ำสำหรับเวอร์ชันแรก (มันจะเติบโตขึ้น):

[source] ---- = {NOM_PROJET} — Directives Agent

[CAUTION] ----

ต้องหยุดก่อน rm, Write, การลบ :

1. อ่านไฟล์ทั้งหมด 2. ตรวจสอบ git ls-files 3. ขอคำยืนยัน 4. รอ "oui

== โครงการ

ชื่อThe source text to translate is missing — please provide the French text. สแต็ก: …​ เอกสารประกอบ: AsciiDoc

== กฎเด็ดขาด

=== 0. สภาพแวดล้อมการพัฒนา

คำสั่งที่จำเป็น…​

=== 1. คอมมิต/GIT

การห้ามอย่างเป็นทางการ…​

=== 1b. ไฟล์การกำหนดค่า — กฎความปลอดภัยขั้นเด็ดขาด

ห้ามเขียนทับ…​

=== 2. การทดสอบเมื่อสิ้นสุดเซสชัน

การห้ามอย่างเป็นทางการ…​

=== 3. ขั้นตอนการสิ้นสุดเซสชัน

6 ขั้นตอนบังคับ…​

== การจัดการบริบท — LAZY/EAGER

ไฟล์ EAGER / ไฟล์ LAZY…​

เทมเพลตขั้นต่ำนี้ช่วยให้เอเจนต์เริ่มต้นได้ เวอร์ชันที่สมบูรณ์ — พร้อมด้วยโครงสร้างโปรเจกต์ องค์ประกอบสำคัญ EPIC ต่างๆ และแบ็กлог — จะมาในเซสชันที่ 1 เมื่อเอเจนต์มีกฎพื้นฐานหลักแล้วและสามารถช่วยคุณเพิ่มความสมบูรณ์ให้เอกสารได้

=== ขั้นตอนที่ 3 : สร้าง PROMPT_REPRISE.adoc — ภารกิจเซสชันที่ 1

ไฟล์ที่ระบุอย่างชัดเจนว่า « นี่คือเซสชัน 1 ภารกิจที่ต้องกำหนด » ไม่เกิน 70 บรรทัด โดยมีส่วน Session 0 (สรุปการบูตสแตรป) และส่วน Session 1 (ลำดับความสำคัญที่ต้องกำหนดร่วมกับผู้ใช้)

=== ขั้นตอนที่ 4: สร้าง .agents/INDEX.adoc — จุดเริ่มต้น

ไฟล์ที่จะบรรจุกฎสัมบูรณ์ (ฉบับผู้บริหาร) และตารางเซสชัน สำหรับการบูตสแตรป มันจะแสดงรายการกฎ 0 ถึง 3 ในรูปแบบกระชับ พอร์ตโฟลิโอโครงการ (รวมถึงโครงการใหม่พร้อมอีโมจิ 🆕) และโรดแมปว่างเปล่าที่พร้อมจะกรอก

=== ขั้นตอนที่ 5: สร้างไฟล์ LAZY เชิงโครงสร้าง

ตามลำดับ:

1. .agents/SESSIONS_HISTORY.adoc— อาร์เรย์ที่มีเพียงเซสชัน 0 2. .agents/SESSION_CHECKLIST.adoc— เทมเพลต «เมื่อใดควรเปลี่ยนเซสชัน 3. .agents/PROCEDURES.adoc— ขั้นตอนทั้งหมด 6 ขั้นตอน + EAGER/LAZY 4. .agents/AGENT_SESSION_MANAGER.adoc— เทมเพลตไฟล์เก็บถาวร 5. .agents/TEST_COVERAGE_ANALYSIS.adoc— ตารางติดตามการทดสอบ ซึ่งว่างเปล่าในตอนเริ่มต้น

หากโครงการของคุณมีโดเมนธุรกิจที่ซับซ้อน (เช่น`jhipster-gradle-plugins`ด้วยโมโนรีโป persistence/assistant ของมัน) สร้างเอเจนต์เฉพาะทางได้เลยตอนนี้:

1. .agents/PLUGIN_DEVELOPER.adoc— แนวปฏิบัติการเขียนโค้ดและขอบเขตการพึ่งพา (หากเป็นปลั๊กอิน) 2. .agents/BACKLOG_MANAGER.adoc— โครงสร้างการวางแผนและความเสี่ยงที่ระบุไว้

อย่าสร้างเอเจนต์ที่คุณจะไม่ใช้งาน เอเจนต์ที่ไม่มีข้อกำหนดร่วมที่เป็นรูปธรรมให้เข้ารหัสนั้นเป็นไฟล์ที่ตายแล้วซึ่งก่อให้เกิดความปนเปื้อน`.agents/.

=== ขั้นตอนที่ 6: เพิ่มโครงการลงในพอร์ตโฟลิโอของโครงการทั้งหมด

นี่คือขั้นตอนที่เรามักลืมกันเสมอ ทุก`INDEX.adoc`ของแต่ละโครงการมีตาราง « Portefeuille de Projets » ซึ่งแสดงรายการโครงการทั้งหมดด้วยระเบียบวิธีเดียวกัน เมื่อคุณสร้างโครงการใหม่ คุณต้อง:

1. เพิ่มรายการในพอร์ตโฟลิโอของโครงการใหม่ (ตรรกะ) 2. เพิ่มหนึ่งบรรทัดในพอร์ตโฟลิโอของโครงการที่มีอยู่ทั้งหมด — ใช่ ทั้งหมด

ในสี่ (ตอนนี้ห้า) โปรเจกต์ของฉัน นั่นหมายถึงการเปิด`INDEX.adoc de magic-stick, bakery-gradle, cheroliv.com, `plantuml-gradle`และเพิ่มบรรทัดนั้นเข้าไป`jhipster-gradle-plugins

Session 1

…​

2026-04-28 🆕.

มันน่าเบื่อ มันเป็นการทำด้วยมือ และยังเป็นวิธีเดียวที่จะรับประกันได้ว่า ไม่ว่าคุณจะทำงานกับโปรเจกต์ใดก็ตาม เอเจนต์จะรู้ว่ามีโปรเจกต์อื่นใดอยู่และมีสถานะอย่างไร ในเซสชัน 012 ของ`magic-stick, เอเจนต์ตรวจพบความไม่สอดคล้องกันสองประการในพอร์ตโฟลิโอ —`bakery-gradle`มี COMPLETED_TASKS_ARCHIVE ของตนล่าช้า และ`plantuml-gradle`มีความคลาดเคลื่อนระหว่างเอกสารขั้นตอนการดำเนินงานของตน (5 ขั้นตอน) กับ INDEX ของตน (6 ขั้นตอน) หากไม่มีตารางเชื่อมโยงนี้ ความไม่สอดคล้องเหล่านี้ก็คงยังมองไม่เห็น

[plantuml, format=svg, id=diag-portfolio-graph, alt="Graphe du portefeuille de projets — références croisées entre INDEX.adoc"] ---- @startuml skinparam backgroundColor #FEFEFE skinparam defaultTextAlignment center skinparam nodeBackgroundColor #E3F2FD

title พอร์ตโฟลิโอโครงการ — การอ้างอิงข้าม INDEX.adoc node "magic-stick\nเซสชัน 037\nการตรวจสอบสคริปต์" as MS #E1BEE7 node "bakery-gradle\nเซสชัน 11\nความครอบคลุมการทดสอบ" as BG #FFE0B2 node "cheroliv.com\nเซสชัน 10\nความครอบคลุมการทดสอบ" as CH #C8E6C9 node "plantuml-gradle\nเซสชัน 133\nความครอบคลุมการทดสอบ" as PG #BBDEFB node "jhipster-gradle\nเซสชัน 1 🆕\nความครอบคลุมการทดสอบ" as JG #FFCDD2

MS -→ BG : INDEX.adoc référence MS -→ CH : INDEX.adoc référence MS -→ PG : INDEX.adoc référence MS -→ JG : INDEX.adoc référence 🆕

BG -→ MS : INDEX.adoc référence BG -→ CH : INDEX.adoc référence BG -→ PG : INDEX.adoc référence BG -→ JG : INDEX.adoc référence 🆕

CH -→ MS : INDEX.adoc référence CH -→ BG : INDEX.adoc référence CH -→ PG : INDEX.adoc référence CH -→ JG : INDEX.adoc référence 🆕

PG -→ MS : INDEX.adoc référence PG -→ BG : INDEX.adoc référence PG -→ CH : INDEX.adoc référence PG -→ JG : INDEX.adoc référence 🆕

JG -→ MS : INDEX.adoc référence JG -→ BG : INDEX.adoc référence JG -→ CH : INDEX.adoc référence JG -→ PG : INDEX.adoc référence

note bottom of JG เมื่อเพิ่มโปรเจกต์: • ต้องอัปเดต INDEX.adoc 4 ไฟล์ • 1 บรรทัดต่อพอร์ตโฟลิโอ • ใช้เวลา: 5 นาที end note

legend bottom

= Couleur

= Projet

<#E1BEE7>

magic-stick — ISO Linux live

<#FFE0B2>

bakery-gradle — Plugin JBake

<#C8E6C9>

cheroliv.com — Site personnel

<#BBDEFB>

plantuml-gradle — Plugin IA

<#FFCDD2>

บทความที่เกี่ยวข้อง