Cover photo

ใช้ tmux - Claude Code session ยาว ไม่ต้อง login บ่อยๆ

ใช้ tmux เพื่อให้ Claude Code session อยู่ต่อแม้ SSH หลุด

ใช้ Claude Code ผ่าน SSH ยังไงไม่ให้หลุด: แก้ด้วย tmux

เวลา 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 เดิมได้ทันที

Flow สั้น ๆ

แทนที่จะทำแบบนี้:

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 เดิม

ติดตั้ง tmux

บน 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

จากนั้นใช้งานตามปกติ

ออกจาก SSH โดยไม่ปิด Claude Code

ถ้าจะออกจาก tmux แต่ให้ Claude Code ทำงานต่อ ให้กด:

Ctrl+B แล้วกด D

อันนี้เรียกว่า detach

หลัง detach แล้วจะกลับมาที่ shell ปกติ จากนั้นจะออกจาก SSH ก็ได้:

exit

Claude Code ยังไม่หาย เพราะมันยังอยู่ใน tmux บนเครื่องปลายทาง

กลับเข้ามาดู session เดิม

SSH กลับเข้าเครื่อง:

ssh user@server

ดู tmux session ที่เปิดอยู่:

tmux ls

ถ้าเห็นประมาณนี้:

claude-work: 1 windows

ก็ attach กลับเข้าไปได้เลย:

tmux attach -t claude-work

เท่านี้ก็กลับไปที่ Claude Code session เดิมได้แล้ว

ตั้งชื่อ session ตาม project

ถ้าใช้หลาย 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

เปิด Claude Code ใน tmux แบบคำสั่งเดียว

ถ้าอยากเปิด 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

ส่ง prompt เข้า Claude Code จากข้างนอก tmux

บางครั้งเราไม่อยาก 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 เข้าไป

คำสั่ง tmux ที่ใช้บ่อย

สร้าง 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

ตัวอย่าง workflow จริง

สมมติ 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 เดิมจะยังอยู่

Prompt ควรเขียนให้ชัด

เวลาใช้ 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 จะต้องเดาขอบเขตเอง ควรบอกให้ครบว่าอยากให้มันทำอะไรและยืนยันผลยังไง

ใช้ slash command ผ่าน tmux ได้เหมือนเดิม

เพราะ 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

ข้อควรระวัง

1. อย่าเผลอปิด session จริง

ถ้าแค่อยากออกชั่วคราว ให้ detach ด้วย:

Ctrl+B แล้วกด D

แต่ถ้าพิมพ์ /exit ใน Claude Code หรือ kill tmux session งานจะจบจริง

2. ตั้งชื่อ session ให้จำง่าย

ชื่อที่ดีควรบอกว่าเป็นงานอะไร เช่น:

claude-api
claude-web
claude-payment
claude-bug-login

3. ปิด session เมื่อจบงาน

ถ้างานเสร็จแล้วควรปิด session:

tmux kill-session -t claude-work

หรือเข้า Claude Code แล้วพิมพ์:

/exit

4. ถ้า session ยาวมาก ให้ compact

ถ้าใช้ Claude Code session เดิมนาน ๆ context จะเริ่มแน่น ให้ใช้:

/compact focus on current task, files changed, test results, and remaining issues

5. แยก session ตามงาน

ถ้างานคนละเรื่อง ควรแยก tmux session เช่น backend, frontend, docs หรือ review จะคุมง่ายกว่าและ context ไม่ปนกัน

Script สั้น ๆ สำหรับเปิด Claude Code ใน tmux

ถ้าใช้บ่อย สร้างไฟล์ชื่อ 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 ที่ใช้เวลานานหรือมีหลายรอบตรวจแก้