ผมแยก workspace ให้แต่ละ agent
แต่ละ agent มี folder ของตัวเอง เช่น dev, devops, qa, uxui, po อันนี้ไม่ได้ทำเพื่อให้ดูเป็น role play แต่เพื่อแยก operating context ให้ชัด
workspace-dev/
AGENTS.md # rules ของ Dev
SOUL.md # identity / tone
MEMORY.md # long-term memory ของ agent
memory/ # daily notes + chat logs
shared/
README.md
knowledge/dev-guide.md
standards/*.md
scripts/*.md
ตอน start agent ส่วนใหญ่จะถูกสั่งให้อ่านของตัวเองก่อน เช่น AGENTS.md, SOUL.md, memory/ แล้วค่อยอ่าน shared/README.md กับ role guide ของตัวเอง
ตรงนี้ช่วยลดปัญหาว่า Dev คิดแบบ QA หรือ QA ไปทำตัวเป็น DevOps เพราะแต่ละตัวมีกติกาของตัวเอง มี memory ของตัวเอง และมี guide ของ role ตัวเอง
แต่ source of truth ผมไม่ให้ไปอยู่ใน memory
memory ช่วยจำ context ได้ แต่เวลาตอบเรื่องสถานะงาน requirement code deploy หรือ QA ผมให้กลับไปเช็ค Linear กับ GitLab ก่อน
ถ้า AI บอกว่าส่ง QA แล้ว แต่ Linear ยังไม่ได้อยู่ฝั่ง QA ผมยังถือว่างานยังไม่ไป QA ถ้า AI บอกว่าแก้ code แล้ว แต่ GitLab ไม่มี commit หรือ MR ให้ดู ผมก็ยังไม่ถือว่ามีของจริง
อันนี้ทำให้ระบบดูแข็งขึ้นนิดนึง แต่ผมชอบ เพราะมันบังคับให้ทุกคำว่า “เสร็จแล้ว” ต้องมีอะไรให้คนเปิดเช็คต่อได้
การส่งงานต่อไม่ได้ให้ AI ทักกันมั่วๆ
ผมเคยลองหลายแบบ สุดท้าย flow ที่คุมง่ายกว่าคือให้ agent สร้าง handoff file แล้วมี relay script ไปส่งต่อเอง
UX/UI done
↓
write shared/handoff/to-dev-project-timestamp.md
↓
relay.sh reads file
↓
Discord delivery + Linear sync
↓
Dev receives work with issue + links + context
ข้อดีคือมันมี artifact เหลือไว้ ถ้างานหายหรือคนต้อง audit ย้อนหลัง อย่างน้อยยังมีไฟล์ handoff กับ Linear/GitLab link ให้ตามต่อ ไม่ใช่มีแค่ข้อความในแชทที่หาไม่เจอ
อีกอย่างคือมันลด cost และลดความมั่วของการให้ AI คุยข้าม agent ตรงๆ เพราะการส่งงานกลายเป็น file + script + status update ที่ตรวจย้อนหลังได้
Qdrant มี แต่ผมไม่ให้เป็น default truth
ระบบมี Qdrant เก็บ conversation archive กับ snapshot บางอย่างไว้จริง อันนี้มีประโยชน์มากตอนอยากค้นย้อนหลัง เช่น เคยคุยอะไรไว้ handoff เก่าหาย หรืออยาก audit ว่า decision มาจากไหน
แต่ผมไม่อยากให้ agent ทุกตัวค้น Qdrant ทุกครั้งแล้วเอามาตอบเป็นสถานะล่าสุด เพราะ vector search เก่งเรื่อง recall ไม่ได้แปลว่ามันคือ current state ของงาน
policy ที่ผมล็อกไว้เลยคือ Qdrant ใช้เมื่อคนสั่งค้นย้อนหลัง หรือใช้ recover context เท่านั้น ถ้าเอาข้อมูลจาก Qdrant มาใช้ ต้องบอกชัดว่ามาจาก archive แล้วต้อง cross-check กับ Linear/GitLab ก่อน
Qdrant เอาไว้จำ conversation เก่า แต่ Linear กับ GitLab เอาไว้บอกว่างานตอนนี้เป็นยังไง
สุดท้ายผมออกแบบให้มันรับไม้ต่อกันได้
ภาพที่ผมอยากได้ไม่ใช่ AI ที่เก่งที่สุดตัวเดียว แต่เป็นทีมเล็กๆ ที่แต่ละตัวรู้ขอบเขตตัวเอง รู้ว่าจะอ่าน context จากไหน เชื่ออะไร ส่งต่อยังไง และต้องรอ approval ตรงไหน
ถ้า AI หาย คนยังเปิด Linear / GitLab / Discord / staging แล้วทำต่อได้ ถ้า AI กลับมา มันก็อ่าน source เดียวกับคนแล้วทำต่อจาก state ล่าสุด ไม่ต้องเริ่มจากการเดาว่าก่อนหน้านี้คุยอะไรไว้
ตอนนี้ flow นี้ยังถูกปรับอยู่เรื่อยๆ แต่สำหรับผม architecture เริ่มสำคัญพอๆ กับ prompt หรือ model แล้ว