SSD Nodes Learn RAM 8GB — $66/ปี
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-01

ติดตั้ง Recall ให้ Claude Code จำงานบน VPS

เรียนรู้การติดตั้ง Recall แบบทำงานภายในเครื่องสำหรับ Claude Code บน VPS พร้อมตรวจสอบ Recall 0.4.0, Python 3.9 ขึ้นไป และการประหยัดโทเค็น

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, July 30, 2026.

สิ่งที่ Recall ทำเพื่อจัดการหน่วยความจำของ Claude Code

Recall เป็นปลั๊กอินของ Claude Code ที่ช่วยให้แต่ละโปรเจกต์มีหน่วยความจำต่อเนื่องข้ามเซสชัน โดยจะเขียนไฟล์ markdown 2 ไฟล์ลงในโฟลเดอร์ .recall/ ภายในโปรเจกต์ของคุณ ไฟล์หนึ่งเป็นบันทึกเหตุการณ์แบบเพิ่มข้อมูลต่อท้ายเท่านั้น อีกไฟล์เป็นสรุปสั้น ๆ ว่าคุณทำงานถึงจุดใด ทั้งสองไฟล์สร้างบนเครื่องที่คุณกำลังใช้งาน โดยตัวสรุปที่เขียนด้วย Python แบบทำงานภายในเครื่อง ดังนั้นหน่วยความจำจึงไม่ใช้โทเค็น API

Recall แก้ปัญหาช่องว่างเล็ก ๆ ที่เกิดขึ้นอย่างต่อเนื่อง คุณปิดเซสชันบน VPS ในวันอังคาร เมื่อถึงวันพุธ Claude Code จะไม่ทราบสิ่งที่เกิดขึ้นในวันอังคาร คุณต้องอธิบายโปรเจกต์ใหม่ด้วยตนเอง หรือให้โมเดลอ่าน repository ไปแล้วครึ่งหนึ่งเพื่อทำความเข้าใจ ทั้งสองวิธีใช้โทเค็น และวิธีที่สองใช้โทเค็นจำนวนมาก

Recall version 0.4.0 เป็นเวอร์ชันปัจจุบัน ณ July 2026 และโปรเจกต์นี้ใช้สัญญาอนุญาต MIT Recall เป็นปลั๊กอิน ภายในปลั๊กอินไม่มีส่วนใดเรียกใช้เครือข่าย

สิ่งที่ต้องมีบน VPS

Hook สำหรับการบันทึกของ Recall เป็นสคริปต์ Python ที่มากับ plugin ไม่มี dependency จาก third-party ดังนั้นข้อกำหนดที่แท้จริงมีเพียง interpreter

python3 -V

Ubuntu 24.04 แสดงผลเป็น Python 3.12.3 Recall รองรับ Python 3.9 ขึ้นไป อิมเมจ container แบบ minimal บางรายการไม่มี interpreter อยู่เลย ซึ่งในกรณีนั้น shell จะแสดงผลเป็น python3: command not found ให้ติดตั้ง interpreter ก่อนดำเนินการต่อ

sudo apt update && sudo apt install -y python3

NumPy เป็นตัวเร่งเสริมสำหรับขั้นตอนหนึ่งของ summarizer คุณไม่จำเป็นต้องติดตั้ง

python3 -c "import numpy"

ModuleNotFoundError: No module named 'numpy' เป็นคำตอบที่ยอมรับได้ในกรณีนี้ summarizer มีเส้นทางการทำงานด้วย pure Python และชุดทดสอบของโปรเจ็กต์ตรวจสอบว่าเส้นทางทั้งสองเลือกประโยคเดียวกัน

หน่วยความจำของ session มีความสำคัญบน server มากกว่าบน laptop เพราะงานดูแล server มักเข้ามาเป็นช่วงสั้น ๆ และกระจายอยู่หลายวัน หากคุณมี Claude Code ที่ทำงานใน tmux บน VPS อยู่แล้ว Recall คือส่วนที่นำ session ของเมื่อวานมาใช้ต่อในวันนี้

ติดตั้ง Recall จากตลาดปลั๊กอิน

คำสั่ง 2 รายการที่ป้อนภายในเซสชัน Claude Code:

/plugin marketplace add raiyanyahya/recall
/plugin install recall@recall

คำสั่งรายการที่สองอ่าน plugin@marketplace ชื่อทั้งสองรายการเป็น recall ในที่นี้ ซึ่งดูเหมือนเป็นข้อผิดพลาดจากการคัดลอกและวาง แต่ไม่ใช่

ตรวจสอบการติดตั้งโดยเรียกใช้คำสั่งของปลั๊กอินรายการใดรายการหนึ่ง:

/recall:show

/recall:show แสดงสรุปปัจจุบัน ในโปรเจกต์ใหม่ที่เพิ่งสร้างจะยังไม่มีข้อมูลให้แสดง ดังนั้นสิ่งที่ตรวจสอบจริงคือคำสั่งมีอยู่หรือไม่ หาก Claude Code ไม่รู้จัก /recall:show แสดงว่าปลั๊กอินยังไม่ได้โหลด และ hook จะไม่ทำงาน

หากต้องการเรียกใช้จาก checkout ให้ clone repository แล้วตรวจสอบก่อน:

git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .

claude plugin validate . อ่าน manifest ใน .claude-plugin/ และรายงานว่าปลั๊กอินมีรูปแบบถูกต้องหรือไม่ จากนั้นเริ่ม Claude Code จากไดเรกทอรีโปรเจกต์ด้วย claude --plugin-dir ~/recall.

hook เขียนข้อมูลอะไรและทำงานเมื่อใด

Recall ลงทะเบียน hook ของ Claude Code จำนวน 3 รายการ โดยแต่ละรายการจะเรียกใช้สคริปต์ Python จากไดเรกทอรีของ plugin

  • SessionStart ทำงานเมื่อเริ่มต้น ทำงานต่อ และล้างข้อมูล โดยแสดง context.md เพื่อให้เมื่อเปิดเซสชัน คุณจะเห็นสรุปของเซสชัน
  • Stop ทำงานทุกครั้งที่ Claude ตอบเสร็จ โดยเพิ่มรอบการทำงานนั้นลงใน log
  • SessionEnd ทำงานเมื่อปิดเซสชัน และสามารถสร้างสรุปใหม่ได้

การทำงานนี้สร้างไฟล์ 2 รายการ โดยไฟล์ทั้งสองอยู่ภายใน .recall/

  • history.md คือบันทึกแบบเพิ่มข้อมูลต่อท้ายเท่านั้น ประกอบด้วย prompt, การตอบกลับ, ไฟล์ที่มีการแก้ไข และคำสั่งที่เรียกใช้
  • context.md คือสรุปที่สร้างขึ้น ประกอบด้วยเป้าหมาย สรุป ขั้นตอนถัดไป ไฟล์ที่มีการแก้ไข คำสั่งที่เรียกใช้ และบริบทของ git

หลังจากใช้งานเซสชันจริง 1 ครั้ง ให้ดูไดเรกทอรี

ls -la .recall/

คุณควรเห็น history.md ที่มีเนื้อหาอยู่ภายใน อาจไม่พบ context.md เลย ซึ่งเป็นพฤติกรรมเริ่มต้น ไม่ใช่ข้อผิดพลาด auto_save_context คือ off หากไม่ได้กำหนดค่าไว้ ระบบจะเขียนสรุปเฉพาะเมื่อคุณเรียกใช้คำสั่งดังกล่าว:

/recall:save

คำสั่งนี้จะเรียกตัวสรุปภายในเครื่องกับ history.md และเขียนทับ context.md อัลกอริทึมใช้การให้คะแนน TF-IDF (ความถี่ของคำและความถี่ผกผันของเอกสาร) แล้วจัดอันดับประโยคด้วย TextRank อัลกอริทึมนี้ให้ผลลัพธ์เหมือนเดิมทุกครั้งและเป็นแบบดึงข้อความจากต้นฉบับ กล่าวคือ ระบบจะเลือกประโยคที่มีอยู่แล้วใน log ไม่มีการเรียกใช้ model ดังนั้นขั้นตอนนี้จึงไม่มีค่าใช้จ่ายและทำงานแบบออฟไลน์บนเครื่องได้

กำหนดค่า Recall สำหรับโครงการเดียว

การกำหนดค่าอยู่ในไฟล์ recall.config.json ที่ไดเรกทอรีรากของโครงการ ค่ามาตรฐานที่ซอฟต์แวร์จัดส่งมามีดังนี้:

{
  "output_dir": ".recall",
  "capture_history": true,
  "summary_sentences": 8,
  "redact": true,
  "include_git": true,
  "max_input_chars": 200000
}
  • output_dir กำหนดตำแหน่งที่จัดเก็บไฟล์ 2 ไฟล์ ให้จัดเก็บไว้ภายในโครงการ
  • capture_history เปิดหรือปิดบันทึก history.md
  • auto_save_context รับค่า off หรือ on_end และใช้ค่าเริ่มต้นเป็น off
  • summary_sentences กำหนดจำนวนประโยคที่จะคงไว้ใน context.md การเพิ่มค่านี้ทำให้สรุปยาวขึ้น และเพิ่มภาระเล็กน้อยเมื่อเริ่มเซสชัน
  • redact ลบรูปแบบข้อมูลลับที่พบบ่อยก่อนเขียนข้อมูลใด ๆ ลงดิสก์
  • include_git เพิ่ม diff ปัจจุบันและ commit ล่าสุดลงในสรุป
  • max_input_chars จำกัดปริมาณข้อมูลจาก history.md ที่ตัวสรุปจะอ่านในแต่ละรอบ

สำหรับโครงการที่ทำงานบน VPS การเปลี่ยนแปลงที่มีประโยชน์คือการบันทึกโดยอัตโนมัติ เนื่องจากเซสชันบนเซิร์ฟเวอร์มักสิ้นสุดเมื่อ terminal หายไป ไม่ใช่เมื่อคุณตัดสินใจหยุด

{
  "auto_save_context": "on_end",
  "summary_sentences": 12
}

หากต้องการหยุดการเก็บข้อมูลชั่วคราวโดยไม่แก้ไขการกำหนดค่า ให้สร้าง pause marker ลบ marker ดังกล่าวเพื่อเริ่มเก็บข้อมูลอีกครั้ง

touch .recall/.capture-paused

ดำเนินการนี้ก่อนเซสชันที่คุณจะจัดการข้อมูลรับรองของ production เนื่องจากการปกปิดข้อมูลเป็นเพียงตัวกรอง ไม่ใช่การรับประกัน เหตุผลเดียวกันนี้เป็นหลักการของ การเก็บข้อมูลลับไว้นอก AI agents โดยทั่วไป ข้อมูลลับที่ปลอดภัยคือข้อมูลที่ agent ไม่เคยเห็น

Recall ช่วยประหยัดโทเค็นได้เท่าไร

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

ChartTypical cost of resuming work, per session
The data behind this chart
[
  {
    "label": "Recall context.md",
    "char_count": "4,800",
    "est_tokens": "1,200"
  },
  {
    "label": "Hand-written CLAUDE.md",
    "char_count": "3,200",
    "est_tokens": "800"
  },
  {
    "label": "Re-reading the repo",
    "char_count": "120,000",
    "est_tokens": "30,000"
  },
  {
    "label": "Full transcript replay",
    "char_count": "340,000",
    "est_tokens": "85,000"
  }
]

ตัวเลขเหล่านี้เป็นค่าทั่วไปสำหรับโครงการขนาดกลาง ไม่ใช่ค่าที่วัดจากโครงการของคุณ การโหลดสรุปของ Recall ใช้ประมาณ 1,200 โทเค็น ซึ่งสอดคล้องกับข้อมูลที่โครงการเผยแพร่ว่า การกลับมาทำงานต่อใช้ 1 ถึง 2 พันโทเค็น การโหลดทรานสคริปต์ก่อนหน้าทั้งหมดจะโหลดบทสนทนาทั้งหมดกลับมา โดยอยู่ที่ประมาณ 85,000 โทเค็น การให้โมเดลอ่านไฟล์เพื่อทำความเข้าใจโครงการใหม่มีค่าอยู่ระหว่างสองกรณีนี้ โดยอยู่ที่ประมาณ 30,000 โทเค็น และตัวเลขนี้จะเพิ่มขึ้นตามขนาดของ repository แถว CLAUDE.md ใช้สำหรับเปรียบเทียบขนาด ค่าใช้จ่ายต่ำกว่าเพราะมีเนื้อหาสั้นและคงที่ และใช้แจ้งกฎถาวรของคุณแก่โมเดล แทนการบอกว่าเมื่อคืนเกิดอะไรขึ้น

วัดค่าของคุณเอง โทเค็นหนึ่งรายการมีขนาดประมาณอักขระภาษาอังกฤษ 4 ตัวในข้อความทั่วไป และมักมีขนาดน้อยกว่านี้สำหรับโค้ด

wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))

ภายในเซสชัน /context แสดงสิ่งที่โหลดอยู่ในหน้าต่างบริบทขณะนั้น และ /cost รายงานยอดรวมของเซสชัน เริ่มเซสชันหนึ่งโดยไม่มีข้อมูลเดิม จากนั้นเริ่มเซสชันถัดไปโดยมีสรุปอยู่แล้ว แล้วเปรียบเทียบผล หากต้องการดูภาพรวมทั้งหมดว่าโทเค็นของเซสชันถูกใช้ไปกับส่วนใด Claude Code ใช้โทเค็นอย่างไร มีรายละเอียดแจกแจงไว้

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

สร้างสรุปใหม่โดยไม่ใช้เซสชัน

หากคุณโคลน repository แล้ว ตัวสรุปจะมีจุดเรียกใช้งานผ่าน command line ของตัวเอง วิธีนี้มีประโยชน์บน VPS เมื่อเซสชันสิ้นสุดลงพร้อมกับ terminal และคุณยังต้องการ digest

python3 ~/recall/scripts/make_context.py --help

ผลลัพธ์ help จะแสดง flags ที่รองรับ ได้แก่ --cwd สำหรับ root ของโปรเจกต์, --transcript สำหรับไฟล์ transcript ที่ระบุโดยตรง, --quiet เพื่อไม่ให้แสดงผลลัพธ์ และ --harness เพื่อเลือกระหว่าง claude กับ opencode ระบุโปรเจกต์ให้กับคำสั่งดังนี้:

python3 ~/recall/scripts/make_context.py --cwd /srv/projects/api

คำสั่งจะอ่าน transcript ของเซสชันและ history.md จากนั้นเขียน context.md ไว้ภายใต้ไดเรกทอรีที่คุณระบุ หากคุณติดตั้งผ่าน marketplace, plugin จะอยู่ในไดเรกทอรีที่ Claude Code จัดการ และ /recall:save คือวิธีที่รองรับสำหรับทำงานเดียวกัน

เหตุใดจึงไม่มีการเขียนข้อมูล

ไม่มีไดเรกทอรี .recall/ หลังจากจบเซสชันทั้งหมด hooks ไม่เคยทำงาน พิมพ์ /recall:show เพื่อยืนยันว่าโหลดปลั๊กอินแล้ว จากนั้นเรียกใช้ python3 -V คำสั่งของ hook จะลองใช้ python3 ก่อน และลองใช้ python เป็นลำดับที่สอง ดังนั้นระบบที่ไม่มีทั้งสองรายการจะไม่เขียนข้อมูลและไม่แจ้งเตือน

history.md มีขนาดเพิ่มขึ้น แต่ context.md ไม่เคยเปลี่ยนแปลง ค่าเริ่มต้นของ auto_save_context คือ off เรียกใช้ /recall:save หรือตั้งคีย์เป็น on_end แล้วให้ hook ของ SessionEnd ดำเนินการ

ไฟล์ปรากฏอยู่ใต้โครงการที่ไม่ถูกต้อง Recall จะเขียนไฟล์โดยอ้างอิงจากไดเรกทอรีที่ใช้เริ่มต้น Claude Code ดังนั้นการเริ่มเซสชันจากไดเรกทอรี home จะทำให้หน่วยความจำถูกเขียนไว้ที่นั่น ให้เริ่มจากรากของโครงการ และใช้ ls -la .recall/ เพื่อค้นหาตำแหน่งที่ไฟล์ถูกเขียนจริง

การเก็บข้อมูลหยุดลงโดยไม่มีการแจ้งเตือน ตรวจสอบ pause marker ด้วย ls -a .recall/ ไฟล์ .capture-paused ที่คุณสร้างไว้เมื่อสัปดาห์ที่แล้วจะยังคงมีผลอยู่

สรุปมีข้อมูลน้อยหลังจากเซสชันที่ใช้เวลานาน max_input_chars จำกัดอินพุตของตัวสรุปไว้ที่ 200000 อักขระ ดังนั้น log ที่ยาวมากจะถูกตัด ให้หมุนเวียน log

mv .recall/history.md .recall/history-2026-07-30.md

จากนั้นเรียกใช้เซสชันสั้นๆ 1 ครั้ง และตรวจสอบ ls -la .recall/ อีกครั้งเพื่อยืนยันว่ามี history.md รายการใหม่เกิดขึ้น

Recall หยุดอยู่ที่ใด

Recall ประกอบด้วยบันทึกและตัวสรุป จึงควรทำความเข้าใจให้ชัดเจนว่าสิ่งใดไม่ได้รวมอยู่ด้วย

ตัวสรุปใช้วิธีดึงข้อความมาโดยตรง TextRank เลือกประโยคที่มีอยู่แล้วใน history.md จึงไม่เคยประเมินว่าการตัดสินใจนั้นถูกต้องหรือไม่ การเลือกทางผิดที่บันทึกไว้เมื่อวันอังคารจะมีลักษณะเหมือนการตัดสินใจที่ดีในวันพุธทุกประการ เมื่อเรื่องนั้นมีผลกระทบจริง ให้อ่าน context.md และแก้ไขด้วยตนเอง ไฟล์นี้เป็นไฟล์ markdown และคุณสามารถแก้ไขได้โดยไม่มีข้อจำกัด

ไม่มีการค้นหา คุณจะมีสรุปปัจจุบัน 1 รายการและบันทึกที่ขยายขึ้นเรื่อย ๆ 1 รายการต่อโครงการ ไม่ใช่หน่วยความจำที่ค้นหาได้จากทุกโครงการ หากคำถามคือคุณตัดสินใจเรื่องฐานข้อมูลไว้อย่างไรเมื่อ 3 สัปดาห์ก่อน คุณต้องใช้ grep กับ history.md

Recall ไม่ช่วยภายใน session เดียวกัน context window ที่เต็มระหว่าง session เป็นปัญหาอีกประเภทหนึ่ง ซึ่งมีวิธีแก้ต่างกัน และ การจัดการ context window ภายใน session เดียว เป็นบทความประกอบของคู่มือนี้

ระบบถือว่าสรุปเป็นข้อมูลนำเข้าที่ไม่น่าเชื่อถือโดยตั้งใจ ระบบจะแทรก context.md ใน fenced block พร้อมป้ายกำกับ และ Claude จะถามก่อนนำไปใช้ การออกแบบนี้มีไว้เพราะไดเรกทอรี .recall/ ที่ commit แล้วเป็นตำแหน่งที่ผู้มีสิทธิ์ commit สามารถเขียนข้อความใด ๆ ที่ agent ของคุณจะอ่านได้ ให้ตัดสินใจครั้งเดียวว่า .recall/ เป็นข้อมูลส่วนบุคคลหรือข้อมูลที่ใช้ร่วมกัน: เพิ่มลงใน .gitignore สำหรับหน่วยความจำส่วนบุคคล หรือ commit ไว้แล้วตรวจสอบเช่นเดียวกับ contribution อื่น ๆ หาก agent ทำงานโดยไม่มีผู้ควบคุม การเรียกใช้ Claude Code อย่างปลอดภัยบน VPS จะอธิบายขอบเขตที่กว้างกว่านี้

การลบข้อมูลระบุตัวตนเป็นเพียงความพยายามอย่างดีที่สุด ระบบมุ่งตรวจจับรูปแบบทั่วไป เช่น API keys, tokens, บล็อก PEM และการกำหนดค่า .env อ่าน .recall/ ก่อน commit ไฟล์นี้

หมายเลขเวอร์ชันสะท้อนระดับความสมบูรณ์ตามจริง ที่เวอร์ชัน 0.4.0 ในเดือนกรกฎาคม 2026 คีย์การกำหนดค่าและโครงสร้างไฟล์ยังสามารถเปลี่ยนแปลงระหว่าง releases ได้ ดังนั้นให้อ่าน changelog ก่อนอัปเกรดระบบที่คุณต้องพึ่งพา

FAQ

Recall ส่งโค้ดหรือบันทึกการสนทนาของฉันไปที่ใดหรือไม่

ไม่ส่ง สคริปต์ capture hooks และ summarizer เป็นสคริปต์ Python ที่ทำงานบนเครื่องของคุณเอง ปลั๊กอินไม่มี API key และไม่เรียกใช้เครือข่าย การสรุปใช้ TF-IDF และ TextRank แทน model ดังนั้นขั้นตอนนี้ไม่มีค่าใช้จ่ายและทำงานได้เมื่อเครื่องออฟไลน์ ข้อแลกเปลี่ยนคือ summary เป็นแบบ extractive โดยเลือกประโยคจาก log ของคุณ แทนการเขียนประโยคใหม่

เหตุใด .recall/context.md ของฉันจึงหายไปหรือล้าสมัย

โดยค่าเริ่มต้น auto_save_context จะเป็น off ดังนั้น summary จะถูกสร้างใหม่เฉพาะเมื่อคุณเรียกใช้ /recall:save เท่านั้น ตั้งค่า "auto_save_context": "on_end" ใน recall.config.json เพื่อให้เขียน summary ใหม่เมื่อแต่ละ session สิ้นสุดลง หาก history.md หายไปด้วย แสดงว่า hooks ไม่ได้ทำงานเลย ให้ตรวจสอบว่าปลั๊กอินถูกโหลดด้วย /recall:show จากนั้นตรวจสอบว่า python3 -V ตอบสนองบนเครื่องนั้น เนื่องจาก hooks เป็นสคริปต์ Python

Recall ช่วยประหยัดต่อ session ได้เท่าใด

การโหลด summary ใช้ประมาณ 1,200 tokens เทียบกับประมาณ 30,000 tokens สำหรับ model ที่ต้องอ่าน repository ของคุณอีกครั้งเพื่อระบุตำแหน่งปัจจุบัน ตัวเลขเหล่านี้เป็นค่าทั่วไป ให้ตรวจวัดค่าของคุณเองด้วย wc -c .recall/context.md และคำสั่ง /context ภายใน session โดยเปรียบเทียบการเริ่มต้นแบบ cold start กับการเริ่มต้นต่อจาก summary

ฉันยังจำเป็นต้องมีไฟล์ CLAUDE.md หรือไม่

จำเป็น และไฟล์ทั้งสองมีหน้าที่ต่างกัน CLAUDE.md คือสิ่งที่คุณเขียนขึ้นโดยตั้งใจ ได้แก่ กฎถาวรและคำสั่ง build ส่วน context.md สร้างจากสิ่งที่เกิดขึ้นจริงใน session ก่อนหน้า จึงเก็บข้อมูล migration ที่ทำค้างไว้ ซึ่งคุณอาจไม่คิดว่าจะต้องบันทึกไว้ ให้เก็บทั้งสองไฟล์

VPS หนึ่งเครื่องเก็บ memory สำหรับหลายโปรเจกต์ได้หรือไม่

ได้ Recall เก็บ memory ไว้ใน .recall/ ภายในไดเรกทอรีของแต่ละโปรเจกต์ ดังนั้นโปรเจกต์สองรายการบน server เดียวกันจะมี log และ summary แยกจากกัน ให้เริ่ม Claude Code จาก project root ทุกครั้ง เนื่องจากไฟล์จะอ้างอิงตาม working directory ไม่ใช่ user account