deja-vu ขุด log เก่าของ Claude Code และ Codex ให้ agent ตอบได้ว่าเคยแก้บั๊กนี้ไปแล้ว
deja-vu เปลี่ยนไฟล์บันทึกบทสนทนาที่ Claude Code และ Codex เขียนทิ้งไว้ในเครื่องเรา ให้กลายเป็นความจำที่ค้นได้ ไฟล์เหล่านั้นสะสมอยู่ในเครื่องเป็นกิกะไบต์มานานแล้ว ที่ผ่านมายังไม่มีใครค้นเจอเท่านั้น

เดือนก่อนเราเพิ่งนั่งไล่บั๊กตัวหนึ่งกับ Claude Code ผู้ช่วยเขียนโค้ดที่เราพิมพ์สั่งงานเหมือนคุยแชต กว่าจะเจอว่าโค้ดไปทำงานผิดตรงไหน ก็คุยกันอยู่นาน วันนี้เปิดคุยรอบใหม่ ผู้ช่วยตัวเดิมเริ่มไล่บั๊กตัวเดิมใหม่ตั้งแต่ศูนย์ มันถามคำถามเดิม เดินเข้าทางตันเดิม แล้วเราก็เสียค่าใช้ AI ซ้ำอีกรอบ เพื่อให้ได้ข้อสรุปเดียวกับเมื่อเดือนก่อน deja-vu เป็นเครื่องมือที่ค้นบทสนทนาเก่าของผู้ช่วยพวกนี้ให้เจอ มันตอบได้ว่าบั๊กตัวนี้เคยแก้ไปเมื่อไหร่ และแก้ด้วยวิธีไหน
Codex CLI และ opencode ก็เป็นผู้ช่วยแบบเดียวกันคนละค่าย ทั้งสามตัวนี้เรียกรวมกันว่า coding agent และทุกตัวบันทึกบทสนทนาทุกรอบลงไฟล์ในเครื่องเราเองอยู่แล้ว ไฟล์ของ Claude Code อยู่ในโฟลเดอร์ ~/.claude/projects ส่วนตัวอื่นก็เก็บไว้คนละที่ ทุกบั๊กที่เคยแก้ และทุกเหตุผลที่เคยใช้ตัดสินใจ สะสมอยู่ในไฟล์เหล่านั้นจนรวมกันเป็นกิกะไบต์ ความจำก้อนนี้จึงไม่เคยหายไปไหน มันแค่ค้นไม่ได้ จะเปิดไล่อ่านเองก็ไม่ไหว deja-vu อ่านไฟล์ทั้งหมดแล้วทำดัชนีให้ค้นเจอ ตัวโปรแกรมมีเพียงไฟล์เดียว ไม่ต้องลงอะไรพ่วง และไม่ต้องเปลี่ยนวิธีทำงานเดิม เพราะมันอ่านสิ่งที่ผู้ช่วยเหล่านี้เขียนทิ้งไว้อยู่แล้วทุกวัน
ไฟล์ที่ coding agent เขียนทิ้งไว้ทุกวัน
ไฟล์บันทึกบทสนทนาพวกนี้เรียกสั้นๆ ว่า log และ deja-vu รู้ว่า log ของผู้ช่วยแต่ละตัวเก็บอยู่ที่ไหน รวม 8 แห่ง ใครใช้ตัวไหนอยู่ก็หาชื่อในตารางนี้แล้วเปิดดูไฟล์จริงได้เลย
| coding agent | ไฟล์ที่มันเขียนไว้ |
|---|---|
| Claude Code | ~/.claude/projects/**/*.jsonl |
| Codex CLI | ~/.codex/sessions/** และ history.jsonl |
| opencode | ~/.local/share/opencode/opencode.db |
| aider | .aider.chat.history.md ในโฟลเดอร์โปรเจกต์ |
| Gemini CLI | ~/.gemini/tmp/*/chats/** |
| Cursor | state.vscdb และ ~/.cursor/projects/**/agent-transcripts/*.jsonl |
| Antigravity | ~/.gemini/antigravity*/brain/*/.system_generated/logs/transcript.jsonl |
| Grok Build | ~/.grok/sessions/**/updates.jsonl |
ใครย้ายไฟล์ไปเก็บที่อื่นก็กำหนดตำแหน่งใหม่ได้ด้วยค่าอย่าง DEJA_CLAUDE_ROOT หรือ DEJA_CODEX_ROOT ซึ่งมีให้ใช้กับทุกค่ายในรูปแบบเดียวกัน
มีเครื่องมืออื่นนำ log ชุดเดียวกันนี้ไปใช้ด้วย เช่น ditto ที่อ่าน log แล้วสร้างเป็นโปรไฟล์ you.md ให้ agent อ่านก่อนลงมือ ส่วน deja-vu เก็บบทสนทนาไว้ทั้งหมดแล้วให้ค้นทีหลัง
ค้นย้อนหลังถึงบทสนทนาก่อนติดตั้ง deja-vu

พิมพ์ deja ตามด้วยคำที่อยากค้น แล้วมันจะไล่หาให้ทั้งกอง
$ deja "jwt refresh token"
[claude] api · Jul 8 · 8f31c0a9 — 2 matches
[codex] web · Jul 1 · b77d91e2 — 1 matchแต่ละบรรทัดบอกว่าเจอในผู้ช่วยตัวไหน โปรเจกต์อะไร และวันที่เท่าไร พร้อมสรุปสั้นๆ ว่าตอนนั้นแก้อะไรไป จากนั้นเราเปิดอ่านฉบับเต็มด้วย deja show <id> หรือกลับเข้าบทสนทนาเดิมที่เรียกว่า session ด้วย deja resume <id> ได้เลย
deja-vu ค้นบทสนทนาที่เกิดขึ้นก่อนติดตั้งได้ด้วย ถ้าลงวันนี้แล้วค้นเรื่องที่คุยไว้เมื่อสามเดือนก่อนก็ยังเจอ เพราะไฟล์พวกนั้นมีอยู่ก่อนแล้ว deja-vu แค่เข้ามาอ่านทีหลัง
เพราะทำงานเพียงเท่านี้ deja-vu จึงค้นได้เร็ว ตัวเลขนี้วัดจากข้อมูลจริงกว่า 1,250 session ขนาดรวมราว 3.3GB จากผู้ช่วยสามตัว การค้นทั่วไปใช้เวลา 7-9 มิลลิวินาที และกรณีช้าที่สุดใช้ราว 40 มิลลิวินาที ส่วนการสร้างดัชนีรอบแรกซึ่งทำเพียงครั้งเดียวใช้เวลาราว 10 วินาที ดัชนีใช้พื้นที่ราว 2.4% ของไฟล์ต้นทาง หลังจากนั้น deja-vu จะอ่านเพิ่มเฉพาะไฟล์ที่มีข้อมูลใหม่ ไม่ได้ไล่อ่านใหม่ทั้งกอง
เมื่อใส่คำค้นหลายคำ ระบบจะหาผลลัพธ์ที่มีครบทุกคำ และยังค้นจากคำบางส่วนได้ด้วย พิมพ์ code ก็เจอ opencode ถ้าผลลัพธ์เยอะเกินไปก็จำกัดด้วย --since 30d เพื่อดูเฉพาะเดือนล่าสุด ใช้ --harness เลือกผู้ช่วยที่ต้องการ หรือ --project เลือกเฉพาะโปรเจกต์
deja install --all ให้ agent เรียกใช้ความจำของตัวเองได้
ค้นเองได้ก็ดีอยู่ แต่ปมของเรื่องนี้คือ agent ต่างหากที่ควรเป็นฝ่ายค้น คำสั่ง deja install --all ต่อ deja-vu เข้ากับผู้ช่วยทุกตัวที่มันเจอในเครื่อง ผ่าน MCP ซึ่งเป็นมาตรฐานกลางที่ให้ AI เรียกใช้เครื่องมือภายนอกได้ ตัวติดตั้งจะไปแก้ไฟล์ตั้งค่าของผู้ช่วยแต่ละตัว โดยสำรองของเดิมเป็น .bak ไว้ให้
หลังจากนั้น agent จะมีเครื่องมือเรียกความจำสองตัว ตัวแรกชื่อ recall รับคำค้นแล้วส่งส่วนของบทสนทนาที่ตรงที่สุดกลับมา โดยจำกัดขนาดไม่เกิน 4KB เพื่อไม่ให้กินพื้นที่ในบทสนทนาปัจจุบัน ตัวที่สองชื่อ recall_context ส่งสรุปทั้งฉบับของ session ที่ตรงที่สุดกลับมา ใช้เมื่อต้องการเข้าใจโดยรวมว่าคราวนั้นคิดกันอย่างไร
เราจึงถามผู้ช่วยด้วยภาษาคนได้เลย เช่น "เคยแก้เรื่อง jwt refresh rotation ไปหรือยัง ลองเช็คความจำดู" แล้วมันจะไปเปิดดูให้เอง ข้อยกเว้นมีเพียง aider ที่ยังไม่มีตัวเชื่อม MCP จึงต้องใส่ข้อมูลจากความจำไปพร้อมคำสั่งเองแบบนี้
claude "Prior context: $(deja ctx 'database migration')"deja ctx คือคำสั่งที่ย่อ session ที่ตรงที่สุดให้เป็นสรุปสั้นๆ แล้วนำไปใส่ในคำถามต่อได้ทันที ใครไม่อยากยุ่งกับ MCP ก็ใช้วิธีนี้แทน MCP ได้เลย
โหมด auto ที่ไม่ต้องรอให้เราถาม
ปัญหาของ recall คือมันยังต้องรอให้ใครสักคนนึกขึ้นได้ก่อนว่าเรื่องนี้น่าจะเคยทำมาแล้ว ซึ่งเป็นสิ่งที่เราลืมพอๆ กับที่ agent ลืม
deja install --auto ทำทุกอย่างเหมือน --all แต่เพิ่มตัวดักตอนเปิด session มีทั้ง hook ของ Claude Code, hooks.json ของ Codex และปลั๊กอินของ opencode เมื่อเปิดคุยรอบใหม่ ระบบจะใส่ความจำล่าสุดของโปรเจกต์นั้นไว้ในบทสนทนาตั้งแต่ประโยคแรกโดยที่เราไม่ต้องถาม
ตัวดักนี้อ่านอย่างเดียว ไม่แก้อะไร และจำกัดไว้ที่ 2KB เพื่อไม่ให้ถ่วงจังหวะเปิดงาน ส่วน Cursor, Gemini CLI, Antigravity และ Grok Build ยังไม่มีจุดให้ดักแบบนี้ การติดตั้งของสี่ตัวนี้จึงจบที่ MCP recall
กุญแจ API หายไปตั้งแต่ตอนทำดัชนี
log เก่าไม่ได้มีแต่โค้ด บางรอบมีรหัสที่เผลอวางลงไปตอนไล่บั๊กปนอยู่ด้วย
deja-vu กวาดข้อมูลเหล่านี้ออกตั้งแต่ตอนทำดัชนี จึงค้นรหัสเหล่านี้ไม่เจอ รายการที่มันกวาดมีทั้งกุญแจ AWS ค่าที่เขียนแบบ api_key= หรือ token= โทเคนแบบ bearer ข้อความ JWT ดิบๆ บล็อกกุญแจส่วนตัวแบบ PEM โทเคนที่ขึ้นต้นด้วย ghp_ sk- npm_ xox. AIza ไปจนถึง URL ที่มีรหัสผ่านฝังอยู่แบบ scheme://user:pass@host ระบบจะแทนข้อมูลที่เจอด้วย [redacted:<kind>] ส่วนข้อความรอบๆ ยังค้นได้ตามปกติ
deja-vu ไม่ได้ไปแก้ไฟล์ log ต้นทาง ของเดิมยังอยู่ครบเหมือนเดิมทุกตัวอักษร สิ่งที่เกิดขึ้นคือรหัสพวกนั้นไม่เคยเข้ามาอยู่ในดัชนี ในสรุป ในไฟล์ที่แชร์ หรือในข้อมูลที่ซิงก์ออกไป
ส่วนเรื่องข้อมูลออกนอกเครื่อง โค้ดที่ทำดัชนีและค้นหาไม่เชื่อมต่ออินเทอร์เน็ตเลย มีแค่อ่านไฟล์ในเครื่องแล้วเขียนแคชกลับลงที่ ~/.cache/deja มีเพียง deja update ที่เชื่อมต่ออินเทอร์เน็ตเพื่อโหลดตัวใหม่มาติดตั้ง ส่วน deja share กับ deja sync export จะส่งข้อมูลออกเมื่อเราสั่งเองเท่านั้น และจะกวาดรหัสซ้ำอีกครั้งตอนส่งออกด้วย
ข้อจำกัดที่ควรรู้ก่อนลง
ของที่ทำงานได้เร็วขนาดนี้ ย่อมแลกอะไรมาบ้าง
การค้นของ deja-vu จับคำตรงตัว ไม่ได้ค้นจากความหมายที่ใกล้เคียงกัน ถ้านึกคำที่เคยพิมพ์ไว้ไม่ออกจริงๆ ก็มีโอกาสค้นไม่เจอ ข้อจำกัดนี้ทำให้ระบบค้นได้เร็วระดับมิลลิวินาทีโดยไม่ต้องพึ่งบริการนอกเครื่อง ถ้าอยากได้คลังความรู้ที่เรียบเรียงใหม่เป็นเรื่องเป็นราว ก็มี LLM Wiki ที่สร้างคลังความรู้ถาวรให้ agent ซึ่งทำงานคนละแบบและตอบคนละโจทย์
เรื่องต่อมา การอ่าน log ของ opencode และ Cursor ฝั่ง IDE ต้องใช้คำสั่ง sqlite3 ในเครื่อง ซึ่งปกติติดมากับ macOS และ Linux อยู่แล้ว ฝั่ง Windows มีตัวติดตั้งและผลการรันชุดทดสอบให้ดู แต่ระบบที่ผ่านการใช้งานจริงจนเจอปัญหามาครบแล้วคือ macOS กับ Linux
เวลา agent แยกงานย่อยไปให้ sub-agent ทำ deja-vu จะไม่นำบทสนทนาส่วนนั้นมาทำดัชนีตั้งแต่แรก เพราะซ้ำกับรอบหลักอยู่แล้ว ใครอยากได้ครบก็เปิดด้วย DEJA_INCLUDE_SUBAGENTS=1
สุดท้าย ถ้ามีโปรเจกต์ที่ไม่อยากให้เข้าดัชนีเลย ตอนนี้ยังสั่งเว้นเป็นรายโปรเจกต์ไม่ได้ มีแผนจะเพิ่ม --exclude แต่ยังไม่มีให้ใช้ ทางเลือกที่มีคือกำหนดค่า DEJA_*_ROOT ให้ชี้ไปยังสำเนาที่กรองไว้แล้วแทน ข้อนี้สำคัญสำหรับคนที่รับงานโค้ดจากลูกค้าหลายเจ้าและต้องแยกงานแต่ละเจ้าออกจากกัน
ลองของจริงในไม่กี่คำสั่ง

ติดตั้งได้หลายแบบตามถนัด ทั้งสคริปต์ curl บรรทัดเดียว ทั้ง go install และ brew บน macOS ถ้าอยากลองก่อนโดยยังไม่ติดตั้งอะไรในเครื่อง ก็เรียกผ่าน npx แล้วพิมพ์คำค้นได้เลย ส่วนสามคำสั่งนี้คือทั้งหมดที่ต้องรู้ในวันแรก
deja "คำที่อยากค้น" # ค้นได้ทันที ไม่ต้องรอสะสมอะไรใหม่
deja install --all # ต่อ recall เข้าผู้ช่วยทุกตัวที่เจอในเครื่อง
deja install --auto # เพิ่มการดึงความจำเข้ามาให้เองตั้งแต่เปิด sessionรอบแรกจะช้าหน่อยตรงที่มันไล่อ่านกองไฟล์เพื่อสร้างดัชนี หลังจากนั้นเปิดผู้ช่วยขึ้นมาแล้วลองถามคำถามที่รู้อยู่แก่ใจว่าเคยคุยกันไปแล้ว ถ้าคำตอบพาเราย้อนกลับไปที่ session เก่าได้จริง แปลว่ามันทำงานแล้ว จากนั้นค่อยดูภาพรวมด้วย deja stats ว่าความจำที่มีอยู่แบ่งเป็นของผู้ช่วยตัวไหนบ้าง โปรเจกต์อะไรบ้าง
ตั้งแต่วันแรกที่เราเปิดใช้ผู้ช่วยเขียนโค้ด เราสะสมบันทึกการแก้ปัญหาของตัวเองไว้ทุกวันโดยไม่รู้ตัว มันละเอียดกว่าที่เราจะนั่งจดเองไหว และมันรออยู่ในเครื่องมาตลอด เหลือแค่คำสั่งเดียวที่เปิดมันขึ้นมาอ่าน
ชอบเรื่องแนวนี้ มีอีบุ๊คฟรีให้อ่านต่อ
สร้าง Claude Skill แบบไม่ต้องรู้โค้ด คู่มือสร้าง Claude Skill ของคุณเองด้วยการคุยกับ Claude Code เป็นภาษาไทย
กดสมัครแล้วเราจะส่งเทคนิค AI และของแจกใหม่ๆ ให้ทางอีเมล เลิกรับได้ตลอด



