> การแปลนี้สร้างโดย Claude หากมีข้อเสนอแนะในการปรับปรุง กรุณาเปิด PR
เทอร์มินัล macOS ที่ใช้ Ghostty พร้อมแท็บแนวตั้งและการแจ้งเตือนสำหรับเอเจนต์เขียนโค้ด AI
English | 日本語 | Tiếng Việt | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | ភាសាខ្មែរ | Українська
▶ วิดีโอสาธิต · The Zen of cmux
## คุณสมบัติ
วงแหวนแจ้งเตือนแพเนลจะมีวงแหวนสีน้ำเงินและแท็บจะสว่างขึ้นเมื่อเอเจนต์เขียนโค้ดต้องการความสนใจจากคุณ |
|
แผงการแจ้งเตือนดูการแจ้งเตือนที่ค้างอยู่ทั้งหมดในที่เดียว กระโดดไปยังรายการที่ยังไม่อ่านล่าสุด |
|
เบราว์เซอร์ในแอปแยกเบราว์เซอร์ไว้ข้างเทอร์มินัลของคุณ พร้อม API ที่เขียนสคริปต์ได้ซึ่งพอร์ตมาจาก agent-browser |
|
แท็บแนวตั้ง + แนวนอนแถบด้านข้างแสดงสาขา git, สถานะ/หมายเลข PR ที่เชื่อมโยง, ไดเรกทอรีทำงาน, พอร์ตที่กำลังฟัง และข้อความแจ้งเตือนล่าสุด แยกได้ทั้งแนวนอนและแนวตั้ง |
|
SSHcmux ssh user@remote สร้างพื้นที่ทำงานสำหรับเครื่องระยะไกล แพเนลเบราว์เซอร์จะกำหนดเส้นทางผ่านเครือข่ายระยะไกล ดังนั้น localhost จึงใช้งานได้เลย ลากรูปภาพเข้าไปในเซสชันระยะไกลเพื่ออัปโหลดผ่าน scp
|
|
Claude Code Teamscmux claude-teams รันโหมดเพื่อนร่วมทีมของ Claude Code ด้วยคำสั่งเดียว เพื่อนร่วมทีมจะเกิดขึ้นเป็นแพเนลแยกแบบเนทีฟพร้อมข้อมูลเมตาบนแถบด้านข้างและการแจ้งเตือน ไม่ต้องใช้ tmux
|
|
เปิดไฟล์ `.dmg` แล้วลาก cmux ไปยังโฟลเดอร์ Applications ของคุณ cmux อัปเดตอัตโนมัติผ่าน Sparkle ดังนั้นคุณจึงดาวน์โหลดเพียงครั้งเดียว
### Homebrew
```bash
brew tap manaflow-ai/cmux
brew install --cask cmux
```
อัปเดตในภายหลัง:
```bash
brew upgrade --cask cmux
```
เมื่อเปิดใช้งานครั้งแรก macOS อาจขอให้คุณยืนยันการเปิดแอปจากนักพัฒนาที่ระบุตัวตนได้ คลิก **Open** เพื่อดำเนินการต่อ
## ทำไมต้อง cmux?
ผมรันเซสชัน Claude Code และ Codex จำนวนมากพร้อมกัน ผมเคยใช้ Ghostty กับแพเนลที่แยกออกมาเป็นจำนวนมาก และพึ่งพาการแจ้งเตือนเนทีฟของ macOS เพื่อรู้ว่าเมื่อใดที่เอเจนต์ต้องการผม แต่เนื้อหาการแจ้งเตือนของ Claude Code มักจะเป็นแค่ "Claude is waiting for your input" เสมอ โดยไม่มีบริบทใด ๆ และเมื่อเปิดแท็บมากพอ ผมก็อ่านชื่อแท็บไม่ออกอีกต่อไป
ผมลองเครื่องมือออร์เคสเตรชันสำหรับเขียนโค้ดอยู่ไม่กี่ตัว แต่ส่วนใหญ่เป็นแอป Electron/Tauri และประสิทธิภาพก็ทำให้ผมรำคาญ ผมยังชอบเทอร์มินัลมากกว่า เพราะออร์เคสเตรเตอร์แบบ GUI ล็อกคุณไว้กับเวิร์กโฟลว์ของพวกมัน ดังนั้นผมจึงสร้าง cmux เป็นแอป macOS เนทีฟด้วย Swift/AppKit มันใช้ libghostty สำหรับการเรนเดอร์เทอร์มินัล และอ่านการตั้งค่า Ghostty ที่มีอยู่ของคุณสำหรับธีม ฟอนต์ และสี
ส่วนเสริมหลักคือแถบด้านข้างและระบบการแจ้งเตือน แถบด้านข้างมีแท็บแนวตั้งที่แสดงสาขา git, สถานะ/หมายเลข PR ที่เชื่อมโยง, ไดเรกทอรีทำงาน, พอร์ตที่กำลังฟัง และข้อความแจ้งเตือนล่าสุดของแต่ละพื้นที่ทำงาน ระบบการแจ้งเตือนจะรับซีเควนซ์ของเทอร์มินัล (OSC 9/99/777) และมี CLI (`cmux notify`) ที่คุณสามารถเชื่อมเข้ากับ hooks ของเอเจนต์อย่าง Claude Code, OpenCode ฯลฯ เมื่อเอเจนต์กำลังรอ แพเนลของมันจะมีวงแหวนสีน้ำเงินและแท็บจะสว่างขึ้นบนแถบด้านข้าง ทำให้ผมบอกได้ว่าตัวไหนต้องการผมท่ามกลางแพเนลที่แยกและแท็บต่าง ๆ Cmd+Shift+U จะกระโดดไปยังรายการที่ยังไม่อ่านล่าสุด
เบราว์เซอร์ในแอปมี API ที่เขียนสคริปต์ได้ซึ่งพอร์ตมาจาก [agent-browser](https://github.com/vercel-labs/agent-browser) เอเจนต์สามารถถ่ายภาพ accessibility tree, รับ refs ของ element, คลิก, กรอกฟอร์ม และประเมิน JS คุณสามารถแยกแพเนลเบราว์เซอร์ไว้ข้างเทอร์มินัลของคุณ และให้ Claude Code โต้ตอบกับ dev server ของคุณได้โดยตรง
ทุกอย่างเขียนสคริปต์ได้ผ่าน CLI และ socket API — สร้างพื้นที่ทำงาน/แท็บ, แยกแพเนล, ส่งการกดแป้นพิมพ์, เปิด URL ในเบราว์เซอร์
## The Zen of cmux
cmux ไม่กำหนดตายตัวว่านักพัฒนาควรถือเครื่องมือของพวกเขาอย่างไร มันคือเทอร์มินัลและเบราว์เซอร์พร้อม CLI และที่เหลือก็ขึ้นอยู่กับคุณ
cmux เป็น primitive ไม่ใช่ solution มันมอบเทอร์มินัล เบราว์เซอร์ การแจ้งเตือน พื้นที่ทำงาน การแยก แท็บ และ CLI สำหรับควบคุมทั้งหมดให้คุณ cmux ไม่บังคับให้คุณใช้เอเจนต์เขียนโค้ดในแบบที่มีความคิดเห็นตายตัว สิ่งที่คุณสร้างขึ้นจาก primitive เหล่านี้เป็นของคุณ
นักพัฒนาที่เก่งที่สุดสร้างเครื่องมือของตนเองมาโดยตลอด ยังไม่มีใครค้นพบวิธีที่ดีที่สุดในการทำงานกับเอเจนต์ และทีมที่สร้างผลิตภัณฑ์แบบปิดก็ยังไม่พบเช่นกันอย่างแน่นอน นักพัฒนาที่อยู่ใกล้ชิดกับโค้ดเบสของตนเองที่สุดจะค้นพบมันก่อน
มอบ primitive ที่ประกอบเข้าด้วยกันได้ให้นักพัฒนาหนึ่งล้านคน แล้วพวกเขาจะร่วมกันค้นพบเวิร์กโฟลว์ที่มีประสิทธิภาพที่สุดได้เร็วกว่าทีมผลิตภัณฑ์ใด ๆ ที่ออกแบบจากบนลงล่าง
## เอกสาร
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีกำหนดค่า cmux [ไปที่เอกสารของเรา](https://cmux.com/docs/getting-started?utm_source=readme)
## คีย์ลัด
### พื้นที่ทำงาน
| คีย์ลัด | การกระทำ |
|----------|--------|
| ⌘ N | พื้นที่ทำงานใหม่ |
| ⌘ 1–8 | กระโดดไปยังพื้นที่ทำงาน 1–8 |
| ⌘ 9 | กระโดดไปยังพื้นที่ทำงานสุดท้าย |
| ⌃ ⌘ ] | พื้นที่ทำงานถัดไป |
| ⌃ ⌘ [ | พื้นที่ทำงานก่อนหน้า |
| ⌘ ⇧ W | ปิดพื้นที่ทำงาน |
| ⌘ ⇧ R | เปลี่ยนชื่อพื้นที่ทำงาน |
| ⌥ ⌘ E | แก้ไขคำอธิบายพื้นที่ทำงาน |
| ⌘ B | สลับแถบด้านข้าง |
| ⌥ ⌘ B | สลับแถบด้านข้างขวา |
| ⌘ ⇧ E | สลับโฟกัสแถบด้านข้างขวา |
### พื้นผิว
| คีย์ลัด | การกระทำ |
|----------|--------|
| ⌘ T | พื้นผิวใหม่ |
| ⌘ ⇧ ] | พื้นผิวถัดไป |
| ⌘ ⇧ [ | พื้นผิวก่อนหน้า |
| ⌃ Tab | พื้นผิวถัดไป |
| ⌃ ⇧ Tab | พื้นผิวก่อนหน้า |
| ⌃ 1–8 | กระโดดไปยังพื้นผิว 1–8 |
| ⌃ 9 | กระโดดไปยังพื้นผิวสุดท้าย |
| ⌘ W | ปิดพื้นผิว |
### แพเนลที่แยก
| คีย์ลัด | การกระทำ |
|----------|--------|
| ⌘ D | แยกไปทางขวา |
| ⌘ ⇧ D | แยกลงด้านล่าง |
| ⌥ ⌘ ← → ↑ ↓ | โฟกัสแพเนลตามทิศทาง |
| ⌘ ⇧ H | กะพริบแพเนลที่โฟกัส |
### เบราว์เซอร์
คีย์ลัดเครื่องมือนักพัฒนาเบราว์เซอร์เป็นไปตามค่าเริ่มต้นของ Safari และปรับแต่งได้ใน `Settings → Keyboard Shortcuts`
คีย์ลัดสำหรับนำทาง command palette รวมถึง ⌃ P ก็ปรับแต่งได้เช่นกัน และสามารถล้างออกได้เพื่อให้การกดแป้นพิมพ์ไปถึงเทอร์มินัลที่ใช้งานอยู่
| คีย์ลัด | การกระทำ |
|----------|--------|
| ⌘ ⇧ L | เปิดเบราว์เซอร์ในการแยก |
| ⌘ L | โฟกัสแถบที่อยู่ |
| ⌘ [ | ย้อนกลับ |
| ⌘ ] | ไปข้างหน้า |
| ⌘ R | โหลดหน้าใหม่ |
| ⌥ ⌘ I | สลับเครื่องมือนักพัฒนา (ค่าเริ่มต้น Safari) |
| ⌥ ⌘ C | แสดง JavaScript Console (ค่าเริ่มต้น Safari) |
### การแจ้งเตือน
| คีย์ลัด | การกระทำ |
|----------|--------|
| ⌘ I | แสดงแผงการแจ้งเตือน |
| ⌘ ⇧ U | กระโดดไปยังรายการที่ยังไม่อ่านล่าสุด |
| ⌥ ⌘ U | สลับสถานะยังไม่อ่านของรายการปัจจุบัน |
| ⌃ ⌘ U | ทำเครื่องหมายรายการปัจจุบันเป็นรายการที่ยังไม่อ่านเก่าที่สุด และกระโดดไปยังรายการที่ยังไม่อ่านล่าสุดถัดไป |
### ค้นหา
| คีย์ลัด | การกระทำ |
|----------|--------|
| ⌘ F | ค้นหา |
| ⌘ ⇧ F | ค้นหาในไดเรกทอรี |
| ⌘ G / ⌥ ⌘ G | ค้นหาถัดไป / ก่อนหน้า |
| ⌥ ⌘ ⇧ F | ซ่อนแถบค้นหา |
| ⌘ E | ใช้สิ่งที่เลือกในการค้นหา |
### เทอร์มินัล
| คีย์ลัด | การกระทำ |
|----------|--------|
| ⌘ K | ล้าง scrollback |
| ⌘ C | คัดลอก (เมื่อมีการเลือก) |
| ⌘ V | วาง |
| ⌘ + / ⌘ - | เพิ่ม / ลดขนาดฟอนต์ |
| ⌘ 0 | รีเซ็ตขนาดฟอนต์ |
### หน้าต่าง
| คีย์ลัด | การกระทำ |
|----------|--------|
| ⌘ ⇧ N | หน้าต่างใหม่ |
| ⌘ ⇧ O | เปิดเซสชันก่อนหน้าอีกครั้ง |
| ⌘ , | การตั้งค่า |
| ⌘ ⇧ , | โหลดการกำหนดค่าใหม่ |
| ⌘ Q | ออก |
## Nightly Builds
[ดาวน์โหลด cmux NIGHTLY](https://github.com/manaflow-ai/cmux/releases/download/nightly/cmux-nightly-macos.dmg)
cmux NIGHTLY เป็นแอปแยกต่างหากที่มี bundle ID ของตัวเอง จึงทำงานเคียงข้างเวอร์ชันเสถียรได้ มันถูกสร้างขึ้นโดยอัตโนมัติจาก commit `main` ล่าสุด และอัปเดตอัตโนมัติผ่าน Sparkle feed ของตัวเอง
รายงานบั๊กของ nightly ได้ที่ [GitHub Issues](https://github.com/manaflow-ai/cmux/issues) หรือใน [#nightly-bugs บน Discord](https://discord.gg/xsgFEVrWCZ)
## การกู้คืนเซสชัน
การออกจาก cmux จะบันทึกเซสชันปัจจุบัน เมื่อเปิดใหม่ cmux จะกู้คืนสถานะที่แอปเป็นเจ้าของ:
- เลย์เอาต์หน้าต่าง/พื้นที่ทำงาน/แพเนล
- ไดเรกทอรีทำงาน
- scrollback ของเทอร์มินัล (เท่าที่ทำได้)
- URL และประวัติการนำทางของเบราว์เซอร์
cmux ไม่ทำ checkpoint สถานะกระบวนการที่กำลังทำงานอยู่ตามอำเภอใจ tmux, vim, shell และแอปเทอร์มินัลที่ไม่รองรับจะเปิดใหม่เป็นเทอร์มินัลธรรมดา
เซสชันเอเจนต์ที่รองรับสามารถกลับมาทำงานต่อได้เมื่อ hooks ได้บันทึก native session ID ไว้ ติดตั้ง hooks หลังจากติดตั้ง agent CLI เพื่อให้ไบนารีของมันอยู่บน `PATH`:
```bash
cmux hooks setup
cmux hooks setup codex
cmux hooks setup --agent opencode
```
`cmux hooks setup` จะติดตั้งเอเจนต์ที่รองรับซึ่งมันหาเจอ และพิมพ์สรุปสำหรับเอเจนต์ที่ถูกข้าม การผสานการกู้คืนที่รองรับรวมถึง Claude Code, Codex, Grok, OpenCode, Pi, Amp, Cursor CLI, Gemini, Rovo Dev, Copilot, CodeBuddy, Factory และ Qoder Claude Code จะถูกจัดการโดย cmux Claude wrapper เมื่อมีการเปิดใช้งานการผสาน Claude ในการตั้งค่า
ผู้ใช้ขั้นสูงและการผสานสามารถแนบคำสั่งกู้คืนแบบกำหนดเองเข้ากับพื้นผิวเทอร์มินัลปัจจุบัน ซึ่งมีประโยชน์สำหรับเครื่องมือที่มีสถานะคงทนของตัวเอง เช่น เซสชัน tmux หรือ agent CLI แบบกำหนดเอง:
```bash
cmux surface resume set --kind tmux --checkpoint work --shell "tmux attach -t work"
cmux surface resume show --json
cmux surface resume clear --checkpoint work
```
การผูกนี้จะยังคงแนบอยู่กับพื้นผิว cmux การผูกที่สร้างผ่าน CLI สาธารณะหรือ socket จะถูกเก็บไว้สำหรับการตรวจสอบและกู้คืนด้วยตนเอง เว้นแต่คุณจะอนุมัติคำนำหน้าคำสั่งที่ลงนามไว้สำหรับการกู้คืนอัตโนมัติ คำนำหน้าที่อนุมัติแล้วยังถูกผูกกับไดเรกทอรีทำงานและค่าสภาพแวดล้อมที่แน่นอนด้วย เมื่อมีอยู่ ตรวจสอบหรือแก้ไขการอนุมัติได้ใน **Settings > Terminal > Resume Commands** cmux จะรันการผูกการกู้คืนเฉพาะที่มันทำเครื่องหมายว่าเชื่อถือได้โดยอัตโนมัติเท่านั้น เช่น การผูก tmux ที่ตรวจพบจากกระบวนการที่กำลังทำงานหรือคำนำหน้าที่ผู้ใช้อนุมัติ คีย์สภาพแวดล้อมที่ละเอียดอ่อน เช่น โทเค็น รหัสผ่าน ความลับ และ API key จะถูกตัดออกก่อนที่จะเก็บการผูกการกู้คืน
เพื่อให้เทอร์มินัลเอเจนต์ที่กู้คืนแล้วอยู่ในสถานะว่างแทนที่จะรันคำสั่งกู้คืนโดยอัตโนมัติ ให้ปิด **Settings > Terminal > Resume Agent Sessions on Reopen** หรือตั้งค่านี้ใน `~/.config/cmux/cmux.json`:
```json
{
"terminal": {
"autoResumeAgentSessions": false
}
}
```
นี่จะปิดเฉพาะคำสั่งกู้คืนเอเจนต์อัตโนมัติเท่านั้น cmux ยังคงกู้คืนเลย์เอาต์ที่บันทึกไว้ ไดเรกทอรีทำงาน scrollback และประวัติเบราว์เซอร์
หากคุณต้องการนำสแนปช็อตที่บันทึกล่าสุดมาใช้ใหม่ด้วยตนเอง ให้ใช้:
- `File > Reopen Previous Session`
- `⌘ ⇧ O`
- `cmux restore-session`
เบื้องหลัง cmux จะเขียนสแนปช็อตที่มีการกำกับเวอร์ชันไว้ใต้ `~/Library/Application Support/cmux/` และ agent hooks จะเขียนการแมปเซสชันไว้ใต้ `~/.cmuxterm/` เมื่อกู้คืน cmux จะสร้างเลย์เอาต์ขึ้นใหม่ก่อน จากนั้นจึงรันคำสั่งกู้คืนเนทีฟของเอเจนต์ที่รองรับเมื่อมีการเปิดใช้งานการกู้คืนเอเจนต์อัตโนมัติ
อ่านคู่มือฉบับเต็มได้ที่
WeChat: สแกนคิวอาร์โค้ดเพื่อเข้าร่วมชุมชน