Recall ปลั๊กอินที่ทำให้ Claude Code จำบริบทโปรเจกต์ข้ามเซสชันได้ เก็บไว้ในเครื่อง ไม่กินโทเคน
Recall เป็นปลั๊กอินของ Claude Code ที่บันทึกบริบทโปรเจกต์ไว้ในเครื่อง แล้วโหลดกลับมาให้ทุกครั้งที่เปิดเซสชันใหม่ จุดต่างคือมันสรุปด้วยอัลกอริทึมบนเครื่องล้วน ไม่เรียก LLM ไม่ส่งข้อมูลออก และบริบทที่ได้มีขนาดราว 1–2K tokens

Claude Code คือเครื่องมือ AI ที่ช่วยเขียนและแก้โค้ดในโปรเจกต์ผ่านหน้าจอ terminal คนใช้ประจำคงคุ้นนิสัยอย่างหนึ่งของมันดี: ทุกครั้งที่เปิดเซสชันใหม่ มันจะเริ่มจากศูนย์ ไม่รู้ว่าโปรเจกต์นี้กำลังทำอะไรค้างไว้ ไฟล์ไหนเพิ่งแก้ หรือทำไมถึงเลือกทำแบบนี้ สุดท้ายก็ต้องเสียเวลาช่วงต้นเล่าบริบทเดิมซ้ำทุกวัน หรือไม่ก็ปล่อยให้มันเดาเอง Recall เป็นปลั๊กอินที่เข้ามาอุดช่องว่างนี้โดยตรง มันบันทึกสิ่งที่เกิดขึ้นในแต่ละเซสชันไว้ในเครื่อง แล้วสรุปเป็นบริบทสั้นๆ เพื่อโหลดกลับมาให้อัตโนมัติตอนเปิดเซสชันถัดไป
สิ่งที่ทำให้ Recall น่าสนใจกว่าวิธีอื่นคือมันทำทุกอย่างบนเครื่อง ไม่ส่งข้อมูลออกไปไหน ไม่เรียก LLM และไม่ต้องใช้ API key เลย บริบทที่สรุปออกมามีขนาดเพียงราว 1–2K tokens จึงไม่กินโทเคนมากทุกครั้งที่เริ่มงาน
สองไฟล์ที่อยู่เบื้องหลังทั้งหมด

หัวใจของ Recall คือโฟลเดอร์ .recall/ ที่มันสร้างไว้ในโปรเจกต์ ข้างในมีไฟล์หลักสองตัว ถ้าเข้าใจสองไฟล์นี้ ก็แทบเข้าใจ Recall ทั้งหมด
history.md คือสมุดบันทึกแบบเขียนต่อท้ายไปเรื่อยๆ แต่ละเซสชันจะบันทึกลงที่นี่ ทั้ง prompt ที่พิมพ์ คำตอบของ Claude ไฟล์ที่แตะ และคำสั่งที่รัน มันคือบันทึกดิบของสิ่งที่เกิดขึ้นจริง ไม่ใช่ภาพจำลางๆ ของเรา
context.md คือบทสรุปแบบย่อ ในนั้นมีเป้าหมายของงาน สถานะล่าสุด งานที่ยังค้างอยู่ ไฟล์ที่แก้ และ git diff --stat ต่างจาก history.md ตรงที่ระบบจะเขียนทับไฟล์นี้ใหม่ทุกครั้งที่สั่งบันทึก เพราะหน้าที่ของมันคือบอกสถานะปัจจุบันให้สั้นและตรง ไม่ใช่เก็บประวัติยาวๆ
บริบทที่ไม่ได้มาจากการถาม AI อีกตัว
จุดที่หลายคนคงสงสัยคือ แล้วใครเป็นคนสรุป history.md ที่ยาวเหยียดให้เหลือ context.md สั้นๆ คำตอบคือไม่ใช่ LLM แต่เป็นอัลกอริทึม Python ที่รันบนเครื่อง
Recall ใช้วิธี extractive summarization ด้วย TF-IDF และ TextRank พูดง่ายๆ คือมันคัดประโยคที่สำคัญที่สุดจากข้อมูลที่บันทึกไว้จริง ไม่ได้ให้โมเดลแต่งบทสรุปขึ้นใหม่ ผลที่ได้จึงเป็น deterministic: บันทึกเดิมจะสรุปออกมาเหมือนเดิม และไม่มีโอกาสที่บทสรุปจะหลอนเพิ่มสิ่งที่ไม่เคยเกิดขึ้น ค่าเริ่มต้นตั้งไว้ที่ 8 ประโยค ถ้า history.md ยาวเกิน 200,000 ตัวอักษร มันจะตัดส่วนที่เก่าที่สุดทิ้งก่อนสรุป
อีกเรื่องที่ดีต่อคนติดตั้งคือไม่ต้อง pip install อะไรเพิ่ม ตัว summarizer อยู่ในไฟล์ summarizer.py ไฟล์เดียวเรียบร้อยแล้ว ส่วน numpy เป็นแค่ตัวช่วยเร่งความเร็ว จะใช้ก็ได้ ไม่ใช้ก็ได้
วงจรหนึ่งวันของการทำงาน
เมื่อติดตั้งแล้ว Recall จะแทรกตัวเข้าไปในจังหวะปกติของการใช้ Claude Code ผ่าน hooks โดยที่แทบไม่ต้องคิดถึงมันเลย วงจรหนึ่งรอบเป็นแบบนี้
- ระหว่างทำงาน hook
StopและSessionEndจะเขียนข้อมูลของเซสชันต่อท้ายลงในhistory.mdทีละนิดแบบ incremental - เปิดเซสชันใหม่ hook
SessionStartจะโหลดcontext.mdขึ้นมา แล้วให้ Claude ถามสองคำถาม คือจะ resume จากบริบทที่บันทึกไว้ไหม และจะเปิดบันทึกเซสชันนี้ด้วยไหม - ก่อนปิดงาน สั่ง
/recall:saveตัว summarizer บนเครื่องจะอ่านhistory.mdแล้วเขียนcontext.mdขึ้นใหม่
ถ้าไม่อยากต้องจำว่าให้สั่งบันทึกเองทุกครั้ง ตั้งค่า auto_save_context: "on_end" ไว้ แล้ว context.md จะถูกสร้างใหม่อัตโนมัติทุกครั้งที่เซสชันจบ เป็นการแลกความเป๊ะของจังหวะบันทึกกับความสบายที่ไม่ต้องคิดถึงมันเลย
นอกจากนี้ยังมีคำสั่งไว้ดูข้อมูลที่บันทึกไว้ด้วย /recall:show เปิดดู context.md ที่เป็นบทสรุปปัจจุบัน ส่วน /recall:log ใช้ดูท้ายๆ ของ history.md ว่าล่าสุดบันทึกอะไรไป
ทำไมไม่ใช้ของที่ Claude Code มีอยู่แล้ว

Claude Code มีวิธีจำบริบทอยู่บ้างแล้ว แต่แต่ละวิธีแก้คนละปัญหา และยังมีช่องที่ Recall เข้ามาเติม
CLAUDE.mdหรือ#shortcut คือบันทึกที่เขียนเอง ต้องคอยอัปเดตเอง และมันบอกได้แค่สิ่งที่เราตั้งใจเขียนลงไป ไม่ได้บันทึกว่างานจริงในเซสชันทำอะไรไปบ้าง--continueหรือ--resumeดึง transcript เต็มของบทสนทนากลับมา ซึ่งกินโทเคนหนัก ผูกกับเซสชันบนเครื่องเดียว และย้ายไปที่อื่นไม่ได้- Context compaction ย่อบทสนทนาให้สั้นลงภายในเซสชันเดียว แต่ไม่ได้เก็บเป็นบันทึกถาวรที่ข้ามวันได้
Recall อยู่ตรงช่องว่างระหว่างของพวกนี้พอดี คือบันทึกอัตโนมัติจากงานจริง ผลลัพธ์ออกมาเหมือนเดิมเสมอ บทสรุปมีขนาดราว 1–2K tokens และเป็น plaintext ที่ย้ายไปไหนก็ได้ ใครเขียน CLAUDE.md เองอยู่แล้วก็ยังใช้ต่อได้ Recall ไม่ได้มาแทน แต่มาเก็บส่วนที่มือเราเก็บไม่ทัน
ความปลอดภัยที่คิดมาตั้งแต่ต้น
เพราะ Recall ทำงานบนเครื่องและไม่ยุ่งกับเครือข่าย ในตัวปลั๊กอินจึงไม่มี credentials ไม่มี API key และไม่เรียก HTTP เลย แต่เรื่องที่ต้องระวังคือไฟล์ที่มันเขียน เพราะ history.md บันทึกของจริงที่อาจมีความลับปนมา
Recall จึงมีตัวกรองความลับเปิดไว้เป็นค่าเริ่มต้น (redact) คอยตัดรูปแบบที่ดูเป็นความลับอย่าง API key, token, ค่าใน .env และ PEM key ออกก่อนเขียน แต่ต้องเข้าใจว่านี่เป็นการกันแบบ best-effort ไม่ใช่หลักประกัน เวลามันอ่านสถานะ git ก็รัน git diff กับ git log แบบปิด core.fsmonitor, diff.external, hooks และ pager เพื่อกัน repo ที่ไม่น่าไว้ใจฉวยจังหวะรันโค้ดแปลกปลอม ระบบยังบังคับให้ไฟล์ที่เขียนอยู่ในโปรเจกต์เสมอ จะ redirect ออกไป path อื่นหรือไต่ออกด้วย ../.. ไม่ได้
เริ่มใช้วันนี้
ขั้นแรกสุดคือเพิ่ม marketplace แล้วติดตั้ง พิมพ์สองบรรทัดนี้ใน Claude Code
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recall
ถ้าอยากลองก่อนโดยไม่ติดตั้งจริง ชี้ไปที่โฟลเดอร์ที่ clone มาได้เลย
claude --plugin-dir /path/to/recall
จากนั้นทำงานตามปกติหนึ่งเซสชัน ก่อนปิดให้สั่ง /recall:save หนึ่งครั้ง พอเปิดเซสชันใหม่ Recall จะถามว่าจะ resume จากบริบทเดิมไหม ตอบรับครั้งเดียวก็ได้บริบทของเมื่อวานกลับมาทันที เท่านี้ก็เห็นแล้วว่ามันต่างจากการต้องเล่าใหม่ทุกวันยังไง
ความจำของ AI ที่ดีที่สุดอาจไม่ใช่ของที่เก็บไว้บนคลาวด์ของใครสักคน แต่เป็นบันทึกเล็กๆ ที่อยู่ในโปรเจกต์ของเราเอง เปิดอ่านได้ด้วยตา และไม่หายไปเมื่อปิดหน้าต่าง
ที่มา: raiyanyahya/recall — durable offline memory Claude Code จาก raiyanyahya



