เวลา SSH เข้าเครื่อง dev หรือ server แล้วเปิด claude เพื่อใช้ Claude Code ปัญหาที่เจอบ่อยคือ session หลุดกลางทาง
เช่น เน็ตหลุด, SSH timeout, ปิด terminal ผิดหน้าต่าง, เครื่อง client sleep หรือย้ายที่ทำงานแล้ว connection หาย
ที่น่าหงุดหงิดคือบางครั้ง Claude Code กำลังคิด กำลังแก้ไฟล์ หรือกำลังรัน test อยู่ พอ SSH หลุด เราต้อง login ใหม่ เข้า folder ใหม่ เปิด Claude Code ใหม่ แล้วค่อยไล่ context ต่ออีกที เสียเวลามาก
วิธีแก้ง่าย ๆ คือใช้ tmux
tmux จะทำให้ terminal session อยู่ต่อบนเครื่องปลายทาง แม้ SSH จากเครื่องเราจะหลุดไปแล้วก็ตาม พอกลับมา SSH ใหม่ ก็ attach กลับเข้า session เดิมได้ทันที
แทนที่จะทำแบบนี้:
ssh user@server
cd ~/project
claude
ให้ทำแบบนี้แทน:
ssh user@server
cd ~/project
tmux new -s claude-work
claude
ถ้า SSH หลุด หรือเราปิด terminal ไปโดยไม่ตั้งใจ Claude Code จะยังอยู่ใน tmux
กลับเข้ามาใหม่ด้วย:
ssh user@server
tmux attach -t claude-work
แล้วจะกลับไปเจอ Claude Code session เดิม
บน Ubuntu หรือ Debian:
sudo apt update
sudo apt install tmux
บน macOS ให้รัน brew install tmux
เช็กว่าใช้ได้:
tmux -V
SSH เข้าเครื่องก่อน:
ssh user@server
เข้า project:
cd ~/project
สร้าง tmux session:
tmux new -s claude-work
เปิด Claude Code ด้วยคำสั่ง claude
จากนั้นใช้งานตามปกติ
ถ้าจะออกจาก tmux แต่ให้ Claude Code ทำงานต่อ ให้กด:
Ctrl+B แล้วกด D
อันนี้เรียกว่า detach
หลัง detach แล้วจะกลับมาที่ shell ปกติ จากนั้นจะออกจาก SSH ก็ได้:
exit
Claude Code ยังไม่หาย เพราะมันยังอยู่ใน tmux บนเครื่องปลายทาง
SSH กลับเข้าเครื่อง:
ssh user@server
ดู tmux session ที่เปิดอยู่:
tmux ls
ถ้าเห็นประมาณนี้:
claude-work: 1 windows
ก็ attach กลับเข้าไปได้เลย:
tmux attach -t claude-work
เท่านี้ก็กลับไปที่ Claude Code session เดิมได้แล้ว
ถ้าใช้หลาย repo ให้ตั้งชื่อ session แยกกัน จะได้ไม่งง
tmux new -s claude-api
tmux new -s claude-web
tmux new -s claude-docs
ดู session ทั้งหมด:
tmux ls
attach เข้า session ที่ต้องการ:
tmux attach -t claude-api
ถ้าอยากเปิด tmux แล้วเข้า project พร้อมเปิด Claude Code ทันที:
tmux new -s claude-work 'cd ~/project && claude'
ถ้าอยากสร้าง session ไว้เบื้องหลังแบบไม่ attach ทันที:
tmux new-session -d -s claude-work 'cd ~/project && claude'
แล้วค่อยกลับเข้าไปดู:
tmux attach -t claude-work
บางครั้งเราไม่อยาก attach เข้าไป แต่แค่อยากส่ง prompt เข้า Claude Code ที่เปิดค้างไว้
ใช้คำสั่งนี้:
tmux send-keys -t claude-work 'ช่วยแก้ test ที่ fail แล้วรัน test ยืนยันให้ด้วย' Enter
ดู output ล่าสุด:
tmux capture-pane -t claude-work -p -S -100
คำสั่งนี้มีประโยชน์มากเวลาคุมหลาย session พร้อมกัน หรืออยากเช็กว่า Claude Code ทำงานถึงไหนแล้วโดยไม่ต้อง attach เข้าไป
สร้าง session:
tmux new -s claude-work
สร้าง session แบบ background:
tmux new-session -d -s claude-work
ดู session ทั้งหมด:
tmux ls
attach เข้า session:
tmux attach -t claude-work
detach โดยไม่ปิดงาน:
Ctrl+B แล้วกด D
ส่งข้อความเข้า session:
tmux send-keys -t claude-work 'your prompt here' Enter
ดู output ล่าสุด:
tmux capture-pane -t claude-work -p -S -100
ปิด session:
tmux kill-session -t claude-work
สมมติ SSH เข้าเครื่อง dev แล้วอยากให้ Claude Code แก้ bug ใน repo
ssh user@server
cd ~/my-app
tmux new -s claude-my-app
claude
จากนั้นสั่งใน Claude Code:
ช่วยอ่าน repo นี้ แล้วแก้ bug login redirect ให้หน่อย หลังแก้เสร็จให้รัน test ที่เกี่ยวข้อง และสรุปว่าแก้อะไรไปบ้าง
ถ้าต้องปิดเครื่องหรือเน็ตเริ่มไม่นิ่ง ให้ detach:
Ctrl+B แล้วกด D
ออกจาก SSH:
exit
ผ่านไปสักพัก กลับมาดูใหม่:
ssh user@server
tmux attach -t claude-my-app
Claude Code session เดิมจะยังอยู่
เวลาใช้ Claude Code ใน session ยาว ๆ ควรสั่งให้ชัดว่าให้ทำอะไร ขอบเขตอยู่ตรงไหน ห้ามทำอะไร และต้องตรวจงานยังไง
ตัวอย่าง:
แก้ bug login redirect หลัง OAuth callback
เงื่อนไข:
- อ่าน codebase ก่อน
- แก้เฉพาะไฟล์ที่เกี่ยวข้องกับ auth และ routing
- อย่า commit
- หลังแก้เสร็จให้รัน test ที่เกี่ยวข้อง
- สรุปสาเหตุ bug, ไฟล์ที่แก้, และผล test จริง
หรือถ้าให้ refactor:
Refactor payment service ให้แยก validation, provider call, และ persistence ออกจากกัน
เงื่อนไข:
- รักษา public API เดิม
- เพิ่มหรือแก้ test ให้ครอบคลุม behavior เดิม
- อย่าเปลี่ยน business logic
- รัน test payment ทั้งหมดก่อนสรุป
อย่าสั่งแค่ “แก้ให้หน่อย” เพราะ agent จะต้องเดาขอบเขตเอง ควรบอกให้ครบว่าอยากให้มันทำอะไรและยืนยันผลยังไง
เพราะ Claude Code ยังเป็น interactive session ปกติ เราสามารถใช้ slash command ได้ เช่น:
/review
/compact focus on current auth bug and test failures
/context
/cost
ถ้าจะส่งจากข้างนอก tmux:
tmux send-keys -t claude-work '/compact focus on current implementation and unresolved errors' Enter
ถ้าแค่อยากออกชั่วคราว ให้ detach ด้วย:
Ctrl+B แล้วกด D
แต่ถ้าพิมพ์ /exit ใน Claude Code หรือ kill tmux session งานจะจบจริง
ชื่อที่ดีควรบอกว่าเป็นงานอะไร เช่น:
claude-api
claude-web
claude-payment
claude-bug-login
ถ้างานเสร็จแล้วควรปิด session:
tmux kill-session -t claude-work
หรือเข้า Claude Code แล้วพิมพ์:
/exit
ถ้าใช้ Claude Code session เดิมนาน ๆ context จะเริ่มแน่น ให้ใช้:
/compact focus on current task, files changed, test results, and remaining issues
ถ้างานคนละเรื่อง ควรแยก tmux session เช่น backend, frontend, docs หรือ review จะคุมง่ายกว่าและ context ไม่ปนกัน
ถ้าใช้บ่อย สร้างไฟล์ชื่อ claude-tmux.sh:
#!/usr/bin/env bash
SESSION_NAME="${1:-claude-work}"
PROJECT_DIR="${2:-$PWD}"
tmux new-session -d -s "$SESSION_NAME" "cd $PROJECT_DIR && claude"
echo "Started Claude Code in tmux session: $SESSION_NAME"
echo "Attach with:"
echo "tmux attach -t $SESSION_NAME"
ทำให้รันได้:
chmod +x claude-tmux.sh
ใช้งาน:
./claude-tmux.sh claude-my-app ~/my-app
attach เข้าไปดู:
tmux attach -t claude-my-app
ถ้าใช้ Claude Code ผ่าน SSH แล้วเจอปัญหา session หลุด ต้อง login ใหม่ หรือเสีย context บ่อย ๆ ให้ใช้ tmux
จำ flow นี้พอ:
ssh user@server
cd ~/project
tmux new -s claude-work
claude
ถ้าจะออกชั่วคราว:
Ctrl+B แล้วกด D
กลับมาใหม่:
ssh user@server
tmux attach -t claude-work
แค่นี้ Claude Code ก็จะทำงานต่อได้แม้ SSH จะหลุด ไม่ต้องเริ่มใหม่ทุกครั้ง และเหมาะมากสำหรับงาน coding agent ที่ใช้เวลานานหรือมีหลายรอบตรวจแก้

