purplemux 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +49 -49
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/routes-manifest.json +7 -7
  6. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06an6au._.js +1 -1
  7. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__02f5zis._.js → [root-of-the-server]__08dxtof._.js} +1 -1
  8. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08z3drz._.js +1 -1
  9. package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__11uqzxt._.js → [root-of-the-server]__0kumyrr._.js} +2 -2
  10. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0s7k1je._.js +3 -0
  11. package/.next/standalone/.next/server/chunks/ssr/{_13qovxu._.js → _0.stp0n._.js} +2 -2
  12. package/.next/standalone/.next/server/chunks/ssr/{_11h746h._.js → _00cx0p2._.js} +2 -2
  13. package/.next/standalone/.next/server/chunks/ssr/_02rms4q._.js +1 -1
  14. package/.next/standalone/.next/server/chunks/ssr/_06_8vkn._.js +2 -2
  15. package/.next/standalone/.next/server/chunks/ssr/{_0uwytsj._.js → _078y4dk._.js} +2 -2
  16. package/.next/standalone/.next/server/chunks/ssr/{_0uph6rf._.js → _0kzht5v._.js} +2 -2
  17. package/.next/standalone/.next/server/chunks/ssr/_0m6flec._.js +1 -1
  18. package/.next/standalone/.next/server/chunks/ssr/_0pg-q18._.js +1 -1
  19. package/.next/standalone/.next/server/chunks/ssr/_0r90z3l._.js +8 -0
  20. package/.next/standalone/.next/server/chunks/ssr/_0w.1ts8._.js +1 -1
  21. package/.next/standalone/.next/server/chunks/ssr/_0w6jc9p._.js +1 -1
  22. package/.next/standalone/.next/server/chunks/ssr/{_0z6yp7a._.js → _0y_feze._.js} +1 -1
  23. package/.next/standalone/.next/server/chunks/ssr/{_0v2czf2._.js → _10dec5o._.js} +1 -1
  24. package/.next/standalone/.next/server/chunks/ssr/{messages_01~7za1._.js → messages_0f3u1ly._.js} +1 -1
  25. package/.next/standalone/.next/server/chunks/ssr/{messages_10_yt3k._.js → messages_0k204ao._.js} +1 -1
  26. package/.next/standalone/.next/server/chunks/ssr/messages_de_terminal_json_[json]_cjs_05jirtw._.js +1 -1
  27. package/.next/standalone/.next/server/chunks/ssr/messages_en_terminal_json_[json]_cjs_0~ls3g-._.js +1 -1
  28. package/.next/standalone/.next/server/chunks/ssr/messages_es_terminal_json_[json]_cjs_04g2b1_._.js +1 -1
  29. package/.next/standalone/.next/server/chunks/ssr/messages_fr_terminal_json_[json]_cjs_0uhakya._.js +1 -1
  30. package/.next/standalone/.next/server/chunks/ssr/messages_ja_terminal_json_[json]_cjs_0776z4f._.js +1 -1
  31. package/.next/standalone/.next/server/chunks/ssr/messages_ko_terminal_json_[json]_cjs_06611.3._.js +1 -1
  32. package/.next/standalone/.next/server/chunks/ssr/messages_pt-BR_terminal_json_[json]_cjs_034yyg9._.js +1 -1
  33. package/.next/standalone/.next/server/chunks/ssr/messages_ru_terminal_json_[json]_cjs_0emk8~n._.js +1 -1
  34. package/.next/standalone/.next/server/chunks/ssr/messages_tr_terminal_json_[json]_cjs_0xpix8g._.js +1 -1
  35. package/.next/standalone/.next/server/chunks/ssr/messages_zh-CN_terminal_json_[json]_cjs_12vwl8a._.js +1 -1
  36. package/.next/standalone/.next/server/chunks/ssr/messages_zh-TW_terminal_json_[json]_cjs_0spg5z5._.js +1 -1
  37. package/.next/standalone/.next/server/chunks/ssr/node_modules_0t5csgq._.js +1 -1
  38. package/.next/standalone/.next/server/chunks/ssr/node_modules_use-intl_dist_esm_production_react_0bnxcps.js +1 -1
  39. package/.next/standalone/.next/server/chunks/ssr/{src_components_00nri37._.js → src_components_05-kki3._.js} +1 -1
  40. package/.next/standalone/.next/server/chunks/ssr/{src_components_0jrgsp7._.js → src_components_0fb83uz._.js} +1 -1
  41. package/.next/standalone/.next/server/chunks/ssr/{src_components_0mhu5-5._.js → src_components_0gkfyrc._.js} +1 -1
  42. package/.next/standalone/.next/server/chunks/ssr/{src_components_0~e6p9k._.js → src_components_0n3s0.7._.js} +1 -1
  43. package/.next/standalone/.next/server/chunks/ssr/src_components_features_mobile_mobile-terminal-page_tsx_02chzch._.js +1 -1
  44. package/.next/standalone/.next/server/chunks/ssr/src_components_features_workspace_terminal-page_tsx_0wuq-jl._.js +1 -1
  45. package/.next/standalone/.next/server/functions-config-manifest.json +1 -1
  46. package/.next/standalone/.next/server/middleware-build-manifest.js +49 -49
  47. package/.next/standalone/.next/server/pages/_app/build-manifest.json +6 -6
  48. package/.next/standalone/.next/server/pages/_app/client-build-manifest.json +1 -1
  49. package/.next/standalone/.next/server/pages/_app.js +2 -2
  50. package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/pages/_document.js +3 -3
  52. package/.next/standalone/.next/server/pages/_document.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/pages/_error/build-manifest.json +3 -3
  54. package/.next/standalone/.next/server/pages/_error/client-build-manifest.json +1 -1
  55. package/.next/standalone/.next/server/pages/_error.js +4 -4
  56. package/.next/standalone/.next/server/pages/_error.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/pages/de/404.html +1 -1
  58. package/.next/standalone/.next/server/pages/de/500.html +1 -1
  59. package/.next/standalone/.next/server/pages/en/404.html +1 -1
  60. package/.next/standalone/.next/server/pages/en/500.html +1 -1
  61. package/.next/standalone/.next/server/pages/es/404.html +1 -1
  62. package/.next/standalone/.next/server/pages/es/500.html +1 -1
  63. package/.next/standalone/.next/server/pages/fr/404.html +1 -1
  64. package/.next/standalone/.next/server/pages/fr/500.html +1 -1
  65. package/.next/standalone/.next/server/pages/index/build-manifest.json +7 -7
  66. package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
  67. package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +4 -4
  68. package/.next/standalone/.next/server/pages/index.js +5 -5
  69. package/.next/standalone/.next/server/pages/index.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/pages/ja/404.html +1 -1
  71. package/.next/standalone/.next/server/pages/ja/500.html +1 -1
  72. package/.next/standalone/.next/server/pages/ko/404.html +1 -1
  73. package/.next/standalone/.next/server/pages/ko/500.html +1 -1
  74. package/.next/standalone/.next/server/pages/login/build-manifest.json +4 -4
  75. package/.next/standalone/.next/server/pages/login/client-build-manifest.json +1 -1
  76. package/.next/standalone/.next/server/pages/login.js +4 -4
  77. package/.next/standalone/.next/server/pages/login.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/pages/pt-BR/404.html +1 -1
  79. package/.next/standalone/.next/server/pages/pt-BR/500.html +1 -1
  80. package/.next/standalone/.next/server/pages/reports/build-manifest.json +6 -6
  81. package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
  82. package/.next/standalone/.next/server/pages/reports.js +5 -5
  83. package/.next/standalone/.next/server/pages/reports.js.nft.json +1 -1
  84. package/.next/standalone/.next/server/pages/reset/build-manifest.json +4 -4
  85. package/.next/standalone/.next/server/pages/reset/client-build-manifest.json +1 -1
  86. package/.next/standalone/.next/server/pages/reset.js +5 -5
  87. package/.next/standalone/.next/server/pages/reset.js.nft.json +1 -1
  88. package/.next/standalone/.next/server/pages/ru/404.html +1 -1
  89. package/.next/standalone/.next/server/pages/ru/500.html +1 -1
  90. package/.next/standalone/.next/server/pages/stats/build-manifest.json +6 -6
  91. package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
  92. package/.next/standalone/.next/server/pages/stats.js +5 -5
  93. package/.next/standalone/.next/server/pages/stats.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/pages/tools-required/build-manifest.json +4 -4
  95. package/.next/standalone/.next/server/pages/tools-required/client-build-manifest.json +1 -1
  96. package/.next/standalone/.next/server/pages/tools-required.js +5 -5
  97. package/.next/standalone/.next/server/pages/tools-required.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/pages/tr/404.html +1 -1
  99. package/.next/standalone/.next/server/pages/tr/500.html +1 -1
  100. package/.next/standalone/.next/server/pages/webview/build-manifest.json +6 -6
  101. package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
  102. package/.next/standalone/.next/server/pages/webview.js +5 -5
  103. package/.next/standalone/.next/server/pages/webview.js.nft.json +1 -1
  104. package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
  105. package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
  106. package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
  107. package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
  108. package/.next/standalone/.next/static/chunks/01.oujz.z9cq..js +1 -0
  109. package/.next/standalone/.next/static/chunks/{0~23in~aqup16.js → 0176ysv-agwwx.js} +1 -1
  110. package/.next/standalone/.next/static/chunks/{0icark0o3b_6j.js → 03s5e91.zrsi_.js} +4 -4
  111. package/.next/standalone/.next/static/chunks/{0h57gqab.hlp8.js → 05zk.ks4roh-4.js} +6 -6
  112. package/.next/standalone/.next/static/chunks/05~6_0_288m3t.js +1 -0
  113. package/.next/standalone/.next/static/chunks/06uy95ammv.ud.js +1 -0
  114. package/.next/standalone/.next/static/chunks/08-el~h0ax929.js +1 -0
  115. package/.next/standalone/.next/static/chunks/{14_wa..vd6~2y.js → 0984g4~der6-4.js} +2 -2
  116. package/.next/standalone/.next/static/chunks/{016ho28abx9rt.js → 0_psc1~qmka.m.js} +4 -4
  117. package/.next/standalone/.next/static/chunks/{00s6ekn81~vi-.js → 0ap~c~__qw2_0.js} +6 -6
  118. package/.next/standalone/.next/static/chunks/0cir.n19rqu--.js +8 -0
  119. package/.next/standalone/.next/static/chunks/0dpud6_2~.2iv.js +1 -0
  120. package/.next/standalone/.next/static/chunks/0euxle0n3zjm3.js +1 -0
  121. package/.next/standalone/.next/static/chunks/0fax5v7rwhm7g.js +6 -0
  122. package/.next/standalone/.next/static/chunks/{0wf0tx~eo05t~.js → 0gfoib7v3q4k_.js} +1 -1
  123. package/.next/standalone/.next/static/chunks/{0538dx15fw8_n.js → 0kep81gqgj5f5.js} +7 -7
  124. package/.next/standalone/.next/static/chunks/0kriln8d9.mdo.js +1 -0
  125. package/.next/standalone/.next/static/chunks/{0eia27slkj8a0.js → 0l.88yoxq6tq8.js} +6 -6
  126. package/.next/standalone/.next/static/chunks/{0ea-k_kbq5gi1.js → 0n7jmg60eqx1a.js} +1 -1
  127. package/.next/standalone/.next/static/chunks/0nm1wy7i1z64_.js +1 -0
  128. package/.next/standalone/.next/static/chunks/0o1e0e_okaxww.js +1 -0
  129. package/.next/standalone/.next/static/chunks/{0l80eb3i.wx6k.js → 0p2m6i37_wprv.js} +1 -1
  130. package/.next/standalone/.next/static/chunks/0qz-agdkp9v1q.js +16 -0
  131. package/.next/standalone/.next/static/chunks/0w1v1a5wi.byq.js +1 -0
  132. package/.next/standalone/.next/static/chunks/0wha_~zny181w.js +1 -0
  133. package/.next/standalone/.next/static/chunks/0wu-q.gmu-64d.js +5 -0
  134. package/.next/standalone/.next/static/chunks/{00l132mp04ubq.js → 0xfp8sfehtui9.js} +1 -1
  135. package/.next/standalone/.next/static/chunks/0yzd69blq638o.js +1 -0
  136. package/.next/standalone/.next/static/chunks/{0erebazb6ppou.js → 12f3vk2rnkb8u.js} +6 -6
  137. package/.next/standalone/.next/static/chunks/135cvydv7redz.js +1 -0
  138. package/.next/standalone/.next/static/chunks/14rrqgjvv0_69.js +1 -0
  139. package/.next/standalone/.next/static/chunks/14vposxx99rq4.js +1 -0
  140. package/.next/standalone/.next/static/chunks/{09mlfwheuib_9.js → 168.xhj-0lt8a.js} +1 -1
  141. package/.next/standalone/.next/static/chunks/1792_-2m366un.js +1 -0
  142. package/.next/standalone/.next/static/chunks/{0nr5ul7mf1bo7.js → 179vwj~zm1gya.js} +1 -1
  143. package/.next/standalone/.next/static/chunks/{turbopack-10c4z.4l4dxnu.js → turbopack-0.6hkxuraykc4.js} +1 -1
  144. package/.next/standalone/.next/static/chunks/{turbopack-05.ehb143ourd.js → turbopack-0g2bivvnd2gyd.js} +1 -1
  145. package/.next/standalone/.next/static/chunks/{turbopack-0ji23rzquaykn.js → turbopack-0heaqdupr4xj6.js} +1 -1
  146. package/.next/standalone/.next/static/chunks/{turbopack-02wj1-z8.1081.js → turbopack-0jcfxeuy1ge85.js} +1 -1
  147. package/.next/standalone/.next/static/chunks/{turbopack-07.z46yb_52p5.js → turbopack-0rntg0~hh7h.0.js} +1 -1
  148. package/.next/standalone/.next/static/chunks/{turbopack-05j~l.6~_nm9l.js → turbopack-0sk1uk-fkcqdx.js} +1 -1
  149. package/.next/standalone/.next/static/chunks/{turbopack-11utvoktq4lmr.js → turbopack-0w89gj59tho~b.js} +1 -1
  150. package/.next/standalone/.next/static/chunks/{turbopack-04t3309-jsj3y.js → turbopack-0~gn911-6yqk2.js} +1 -1
  151. package/.next/standalone/.next/static/chunks/{turbopack-0-rpf9ad3km~v.js → turbopack-14fnzd5yh28gy.js} +1 -1
  152. package/.next/standalone/.next/static/{bybcCRIlOhSPtqdnJUPM- → pZhcwQ83aP87HDTIzzyJ6}/_buildManifest.js +8 -8
  153. package/.next/standalone/.next/static/{bybcCRIlOhSPtqdnJUPM- → pZhcwQ83aP87HDTIzzyJ6}/_clientMiddlewareManifest.js +1 -1
  154. package/.next/standalone/messages/de/terminal.json +1 -1
  155. package/.next/standalone/messages/en/terminal.json +1 -1
  156. package/.next/standalone/messages/es/terminal.json +1 -1
  157. package/.next/standalone/messages/fr/terminal.json +1 -1
  158. package/.next/standalone/messages/ja/terminal.json +1 -1
  159. package/.next/standalone/messages/ko/terminal.json +1 -1
  160. package/.next/standalone/messages/pt-BR/terminal.json +1 -1
  161. package/.next/standalone/messages/ru/terminal.json +1 -1
  162. package/.next/standalone/messages/tr/terminal.json +1 -1
  163. package/.next/standalone/messages/zh-CN/terminal.json +1 -1
  164. package/.next/standalone/messages/zh-TW/terminal.json +1 -1
  165. package/.next/standalone/package.json +6 -5
  166. package/.next/standalone/server.js +1 -1
  167. package/.next/standalone/src/config/tmux.conf +11 -3
  168. package/README.de.md +41 -14
  169. package/README.es.md +41 -14
  170. package/README.fr.md +41 -14
  171. package/README.ja.md +41 -14
  172. package/README.ko.md +41 -14
  173. package/README.md +41 -14
  174. package/README.pt-BR.md +41 -14
  175. package/README.ru.md +41 -14
  176. package/README.tr.md +41 -14
  177. package/README.zh-CN.md +41 -14
  178. package/README.zh-TW.md +41 -14
  179. package/dist/server.js +6 -5
  180. package/package.json +6 -5
  181. package/src/config/tmux.conf +11 -3
  182. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0y7-o~r._.js +0 -3
  183. package/.next/standalone/.next/server/chunks/ssr/_08ytq3p._.js +0 -8
  184. package/.next/standalone/.next/static/chunks/00snihvygw9l4.js +0 -1
  185. package/.next/standalone/.next/static/chunks/00yfl7agnve...js +0 -5
  186. package/.next/standalone/.next/static/chunks/02ocrfbfg24nx.js +0 -1
  187. package/.next/standalone/.next/static/chunks/04rkjr-2duj5b.js +0 -1
  188. package/.next/standalone/.next/static/chunks/0c8wt2p0xhe5i.js +0 -1
  189. package/.next/standalone/.next/static/chunks/0duqg-kf_y-i3.js +0 -1
  190. package/.next/standalone/.next/static/chunks/0ep22zye8flqz.js +0 -1
  191. package/.next/standalone/.next/static/chunks/0ff6a07hvp4pu.js +0 -6
  192. package/.next/standalone/.next/static/chunks/0fg9x61ohrtv3.js +0 -1
  193. package/.next/standalone/.next/static/chunks/0fgx5m8vdxaap.js +0 -1
  194. package/.next/standalone/.next/static/chunks/0m_sn0gry7q~c.js +0 -1
  195. package/.next/standalone/.next/static/chunks/0p5c0gp6gyhh6.js +0 -1
  196. package/.next/standalone/.next/static/chunks/0qsmo2marl-6d.js +0 -16
  197. package/.next/standalone/.next/static/chunks/0ul9.j_tmw365.js +0 -1
  198. package/.next/standalone/.next/static/chunks/107yj1xx63glr.js +0 -1
  199. package/.next/standalone/.next/static/chunks/12_04jv.ecbd-.js +0 -1
  200. package/.next/standalone/.next/static/chunks/14cccdp9z2qvf.js +0 -8
  201. package/.next/standalone/.next/static/chunks/14yj.l6qq359_.js +0 -1
  202. package/.next/standalone/.next/static/chunks/1786bmcy3s8sd.js +0 -1
  203. package/.next/standalone/.next/static/chunks/17mf_h-e8sebp.js +0 -1
  204. /package/.next/standalone/.next/static/{bybcCRIlOhSPtqdnJUPM- → pZhcwQ83aP87HDTIzzyJ6}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # purplemux
2
2
 
3
- **Claude Code, many tasks at once. Faster.**
3
+ **Claude Code and Codex, many tasks at once. Faster.**
4
4
 
5
5
  Every session on a single screen. Uninterrupted, even on your phone.
6
6
 
@@ -24,7 +24,7 @@ Prefer a native app? Grab the macOS Electron build from the [latest release](htt
24
24
 
25
25
  ## Why purplemux
26
26
 
27
- - **Multi-session dashboard** — See working/needs-input status for every Claude Code session at a glance
27
+ - **Multi-session dashboard** — See working/needs-input status for every Claude Code and Codex session at a glance
28
28
  - **Rate limit monitoring** — 5-hour / 7-day remaining usage with reset countdown
29
29
  - **Push notifications** — Desktop and mobile alerts when a task finishes or needs input
30
30
  - **Mobile & multi-device** — Reach the same session from a phone, tablet, or another desktop
@@ -49,20 +49,23 @@ Plus
49
49
  - **Keyboard shortcuts** — Splits, tab switching, focus movement
50
50
  - **Terminal themes** — Dark / light mode, multiple color themes
51
51
  - **Workspaces & groups** — Save and restore panel layouts, tabs, and working directories. Organize workspaces into groups with drag-and-drop
52
- - **Git workflow** — Side-by-side / line-by-line diff with syntax highlighting, inline hunk expansion, and a paginated history tab. Fetch / pull / push from the panel with ahead/behind indicators — if sync fails (dirty worktree, conflicts), Ask Claude in one click
52
+ - **Git workflow** — Side-by-side / line-by-line diff with syntax highlighting, inline hunk expansion, and a paginated history tab. Fetch / pull / push from the panel with ahead/behind indicators — if sync fails (dirty worktree, conflicts), Ask Claude or Codex in one click
53
53
  - **Web browser panel** — Embedded browser for checking dev output (Electron). Drive it from the `purplemux` CLI and switch viewports with a built-in device emulator
54
+ - **Agent tabs** — Start Claude, Codex, or a combined session list from the new-tab menu
54
55
 
55
- ### Claude Code integration
56
+ ### Claude Code and Codex integration
56
57
 
57
58
  - **Real-time status** — Working / needs-input indicators with session switching
58
59
  - **Live session view** — Messages, tool calls, tasks, permission prompts, thinking blocks
59
- - **One-click resume** — Restart a paused session directly from the browser
60
+ - **Codex tabs** — Launch Codex CLI sessions with the same tmux-backed persistence as Claude
61
+ - **Session list** — Browse and resume recent Claude and Codex sessions from one combined view
62
+ - **One-click resume** — Restart a paused Claude or Codex session directly from the browser
60
63
  - **Auto resume** — Recover previous Claude sessions on server start
61
64
  - **Quick prompts** — Register frequently used prompts and send with one click
62
65
  - **Attachments** — Drop images into the chat input, or attach files to insert their paths. Works on mobile
63
66
  - **Message history** — Reuse previous messages
64
- - **Usage analytics** — Tokens (input / output / cache read / cache write), cost, per-project breakdowns, daily AI reports
65
- - **Rate limits** — 5-hour / 7-day remaining usage with reset countdown
67
+ - **Usage analytics** — Claude + Codex tokens, cost, per-project breakdowns, and daily AI reports
68
+ - **Rate limits** — 5-hour / 7-day remaining usage with reset countdown for supported providers
66
69
 
67
70
  ### Mobile & accessibility
68
71
 
@@ -90,6 +93,22 @@ Plus
90
93
  - [Node.js](https://nodejs.org/) 20+
91
94
  - [tmux](https://github.com/tmux/tmux)
92
95
 
96
+ Required for Claude tabs. Install Claude Code and sign in before starting a Claude tab:
97
+
98
+ ```bash
99
+ curl -fsSL https://claude.ai/install.sh | bash
100
+ # or, with Homebrew latest channel
101
+ brew install --cask claude-code@latest
102
+ ```
103
+
104
+ Optional for Codex tabs. Install Codex CLI and sign in before starting a Codex tab:
105
+
106
+ ```bash
107
+ npm i -g @openai/codex
108
+ # or
109
+ brew install --cask codex
110
+ ```
111
+
93
112
  ### npx (fastest)
94
113
 
95
114
  ```bash
@@ -103,6 +122,13 @@ npm install -g purplemux
103
122
  purplemux
104
123
  ```
105
124
 
125
+ ### CLI examples
126
+
127
+ ```bash
128
+ purplemux tab create -w WS -t codex-cli -n "fix auth"
129
+ purplemux tab create -w WS -t agent-sessions
130
+ ```
131
+
106
132
  ### Run from source
107
133
 
108
134
  ```bash
@@ -199,24 +225,25 @@ The default is HTTP. Always use HTTPS when exposing the app externally:
199
225
  ▼ ▼ ▼
200
226
  ┌─────────────────────────────────────────────────────────────┐
201
227
  │ System │
202
- │ tmux (purple socket) Claude Code
228
+ │ tmux (purple socket) Agent CLIs
203
229
  │ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
204
- │ │Session1│ │Session2│ ... │ ~/.claude/sessions/ │ │
205
- │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/ │ │
206
- │ └────────┘ └────────┘ │ └─ {project}/{sid}.jsonl │ │
230
+ │ │Session1│ │Session2│ ... │ Claude Code │ │
231
+ │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
232
+ │ └────────┘ └────────┘ │ Codex │ │
233
+ │ │ ~/.codex/sessions/*.jsonl │ │
207
234
  │ └────────────────────────────┘ │
208
235
  └─────────────────────────────────────────────────────────────┘
209
236
  ```
210
237
 
211
238
  **Terminal I/O** — xterm.js connects to node-pty via WebSocket; node-pty attaches to tmux sessions. A binary protocol handles stdin/stdout/resize with backpressure control.
212
239
 
213
- **Status detection** — Claude Code event hooks (`SessionStart`, `Stop`, `Notification`) deliver instant updates via HTTP POST. Polling every 5–15s inspects process trees and analyzes the last 8KB of JSONL files.
240
+ **Status detection** — Agent event hooks deliver instant updates via HTTP POST. Claude Code uses `SessionStart`, `Stop`, and `Notification`; Codex uses `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop`, and `PermissionRequest`. Polling every 5–15s inspects process trees and analyzes the last 8KB of JSONL files.
214
241
 
215
- **Timeline** — Watches JSONL session logs under `~/.claude/projects/`, parses new lines on change, and streams structured entries to the browser.
242
+ **Timeline** — Watches JSONL session logs under `~/.claude/projects/` and `~/.codex/sessions/`, parses new lines on change, and streams structured entries to the browser.
216
243
 
217
244
  **tmux isolation** — Uses a dedicated `purple` socket, completely separate from your existing tmux. No prefix key, no status bar.
218
245
 
219
- **Auto recovery** — On server start, restores previous Claude sessions via `claude --resume {sessionId}`.
246
+ **Auto recovery** — On server start, restores previous Claude sessions via `claude --resume {sessionId}`. Codex sessions can be resumed from the session list or with `codex resume {sessionId}`.
220
247
 
221
248
  ## License
222
249
 
package/README.pt-BR.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # purplemux
2
2
 
3
- **Claude Code, várias tarefas ao mesmo tempo. Mais rápido.**
3
+ **Claude Code e Codex, várias tarefas ao mesmo tempo. Mais rápido.**
4
4
 
5
5
  Todas as sessões em uma tela só. Sem quebras, até no celular.
6
6
 
@@ -24,7 +24,7 @@ Prefere um app nativo? Baixe a versão Electron para macOS na [última release](
24
24
 
25
25
  ## Por que purplemux
26
26
 
27
- - **Painel multissessão** — Veja o status «trabalhando / aguardando entrada» de todas as sessões do Claude Code de relance
27
+ - **Painel multissessão** — Veja o status «trabalhando / aguardando entrada» de todas as sessões do Claude Code e do Codex de relance
28
28
  - **Monitor de rate limit** — Saldo de 5 horas / 7 dias com contagem regressiva até o reset
29
29
  - **Notificações push** — Alertas no desktop e no mobile quando uma tarefa termina ou precisa de entrada
30
30
  - **Mobile e multi-dispositivo** — Acesse a mesma sessão a partir do celular, tablet ou outro desktop
@@ -49,20 +49,23 @@ E ainda
49
49
  - **Atalhos de teclado** — Divisão, troca de abas, movimento de foco
50
50
  - **Temas do terminal** — Modo escuro / claro e vários esquemas de cores
51
51
  - **Workspaces e grupos** — Salve e restaure layouts de painéis, abas e diretórios de trabalho por workspace. Organize os workspaces em grupos com arrastar e soltar
52
- - **Fluxo de trabalho Git** — Side-by-side / Line-by-line com destaque de sintaxe, expansão de hunks inline e uma aba de histórico paginada. Fetch / pull / push direto do painel com indicadores ahead/behind — se o sync falhar (dirty worktree, conflitos), Ask Claude em um clique
52
+ - **Fluxo de trabalho Git** — Side-by-side / Line-by-line com destaque de sintaxe, expansão de hunks inline e uma aba de histórico paginada. Fetch / pull / push direto do painel com indicadores ahead/behind — se o sync falhar (dirty worktree, conflitos), Ask Claude ou Codex em um clique
53
53
  - **Painel de navegador web** — Navegador embutido ao lado do terminal para conferir o resultado de desenvolvimento (Electron). Controle pelo CLI `purplemux` e alterne viewports com um emulador de dispositivo integrado
54
+ - **Abas de agentes** — Inicie Claude, Codex ou uma lista de sessões combinada pelo menu de nova aba
54
55
 
55
- ### Integração com Claude Code
56
+ ### Integração com Claude Code e Codex
56
57
 
57
58
  - **Status em tempo real** — Indicadores de trabalhando / aguardando entrada e troca entre sessões
58
59
  - **Visualização da sessão ao vivo** — Mensagens, chamadas de ferramentas, tarefas, solicitações de permissão e blocos thinking
59
- - **Resume em um clique** — Retome sessões pausadas direto do navegador
60
+ - **Abas Codex** — Inicie sessões do Codex CLI com a mesma persistência baseada em tmux do Claude
61
+ - **Lista de sessões** — Navegue e retome sessões recentes do Claude e do Codex em uma visualização combinada
62
+ - **Resume em um clique** — Retome sessões pausadas do Claude ou do Codex direto do navegador
60
63
  - **Resume automático** — Restauração automática de sessões anteriores do Claude ao iniciar o servidor
61
64
  - **Prompts rápidos** — Cadastre prompts frequentes e envie com um clique
62
65
  - **Anexos** — Solte imagens no campo de chat ou anexe arquivos para inserir o caminho. Funciona também no mobile
63
66
  - **Histórico de mensagens** — Reutilize mensagens anteriores
64
- - **Estatísticas de uso** — Tokens (input / output / cache read / cache write), custo, análise por projeto e relatórios de IA diários
65
- - **Rate limit** — Saldo de 5 horas / 7 dias com contagem regressiva de reset
67
+ - **Estatísticas de uso** — Tokens do Claude + Codex, custo, análise por projeto e relatórios de IA diários
68
+ - **Rate limit** — Saldo de 5 horas / 7 dias com contagem regressiva de reset para provedores compatíveis
66
69
 
67
70
  ### Mobile e acessibilidade
68
71
 
@@ -90,6 +93,22 @@ E ainda
90
93
  - [Node.js](https://nodejs.org/) 20+
91
94
  - [tmux](https://github.com/tmux/tmux)
92
95
 
96
+ Necessário para abas Claude. Instale o Claude Code e faça login antes de iniciar uma aba Claude:
97
+
98
+ ```bash
99
+ curl -fsSL https://claude.ai/install.sh | bash
100
+ # ou com o canal latest do Homebrew
101
+ brew install --cask claude-code@latest
102
+ ```
103
+
104
+ Opcional para abas Codex. Instale o Codex CLI e faça login antes de iniciar uma aba Codex:
105
+
106
+ ```bash
107
+ npm i -g @openai/codex
108
+ # ou
109
+ brew install --cask codex
110
+ ```
111
+
93
112
  ### npx (mais rápido)
94
113
 
95
114
  ```bash
@@ -103,6 +122,13 @@ npm install -g purplemux
103
122
  purplemux
104
123
  ```
105
124
 
125
+ ### Exemplos de CLI
126
+
127
+ ```bash
128
+ purplemux tab create -w WS -t codex-cli -n "fix auth"
129
+ purplemux tab create -w WS -t agent-sessions
130
+ ```
131
+
106
132
  ### A partir do código-fonte
107
133
 
108
134
  ```bash
@@ -199,24 +225,25 @@ Por padrão, o protocolo é HTTP. Sempre use HTTPS ao expor externamente:
199
225
  ▼ ▼ ▼
200
226
  ┌─────────────────────────────────────────────────────────────┐
201
227
  │ System │
202
- │ tmux (purple socket) Claude Code
228
+ │ tmux (purple socket) Agent CLIs
203
229
  │ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
204
- │ │Session1│ │Session2│ ... │ ~/.claude/sessions/ │ │
205
- │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/ │ │
206
- │ └────────┘ └────────┘ │ └─ {project}/{sid}.jsonl │ │
230
+ │ │Session1│ │Session2│ ... │ Claude Code │ │
231
+ │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
232
+ │ └────────┘ └────────┘ │ Codex │ │
233
+ │ │ ~/.codex/sessions/*.jsonl │ │
207
234
  │ └────────────────────────────┘ │
208
235
  └─────────────────────────────────────────────────────────────┘
209
236
  ```
210
237
 
211
238
  **I/O do terminal** — xterm.js conecta-se ao node-pty via WebSocket e o node-pty se acopla às sessões do tmux. Um protocolo binário trata stdin/stdout/resize com controle de backpressure.
212
239
 
213
- **Detecção de status** — Os hooks de eventos do Claude Code (`SessionStart`, `Stop`, `Notification`) entregam atualizações imediatas via HTTP POST. A cada 5–15 s a árvore de processos é inspecionada e os últimos 8 KB dos arquivos JSONL são analisados.
240
+ **Detecção de status** — Os hooks de eventos dos agentes entregam atualizações imediatas via HTTP POST. Claude Code usa `SessionStart`, `Stop` e `Notification`; Codex usa `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop` e `PermissionRequest`. A cada 5–15 s a árvore de processos é inspecionada e os últimos 8 KB dos arquivos JSONL são analisados.
214
241
 
215
- **Timeline** — Observa os logs de sessão JSONL em `~/.claude/projects/`, faz o parse das novas linhas a cada mudança e envia entradas estruturadas para o navegador.
242
+ **Timeline** — Observa os logs de sessão JSONL em `~/.claude/projects/` e `~/.codex/sessions/`, faz o parse das novas linhas a cada mudança e envia entradas estruturadas para o navegador.
216
243
 
217
244
  **Isolamento do tmux** — Usa um socket `purple` dedicado, completamente separado do seu tmux existente. Sem tecla prefixo nem barra de status.
218
245
 
219
- **Recuperação automática** — Ao iniciar o servidor, sessões anteriores do Claude são restauradas via `claude --resume {sessionId}`.
246
+ **Recuperação automática** — Ao iniciar o servidor, sessões anteriores do Claude são restauradas via `claude --resume {sessionId}`. Sessões do Codex podem ser retomadas pela lista de sessões ou com `codex resume {sessionId}`.
220
247
 
221
248
  ## License
222
249
 
package/README.ru.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # purplemux
2
2
 
3
- **Claude Code, много задач одновременно. Быстрее.**
3
+ **Claude Code и Codex, много задач одновременно. Быстрее.**
4
4
 
5
5
  Все сессии на одном экране. Без обрывов — даже с телефона.
6
6
 
@@ -24,7 +24,7 @@ npx purplemux@latest
24
24
 
25
25
  ## Почему purplemux
26
26
 
27
- - **Дашборд нескольких сессий** — одним взглядом видите статус «работает / ждёт ввода» по каждой сессии Claude Code
27
+ - **Дашборд нескольких сессий** — одним взглядом видите статус «работает / ждёт ввода» по каждой сессии Claude Code и Codex
28
28
  - **Мониторинг rate limit** — остаток за 5 часов / 7 дней и обратный отсчёт до сброса
29
29
  - **Push-уведомления** — оповещения на десктопе и мобильном, когда задача завершена или нужен ввод
30
30
  - **Мобильность и мульти-устройства** — доступ к одной и той же сессии с телефона, планшета или другого рабочего места
@@ -49,20 +49,23 @@ npx purplemux@latest
49
49
  - **Горячие клавиши** — разделение, переключение вкладок, перемещение фокуса
50
50
  - **Темы терминала** — тёмный / светлый режим, несколько цветовых тем
51
51
  - **Рабочие пространства и группы** — сохранение и восстановление раскладки панелей, вкладок и рабочих каталогов в пределах рабочего пространства. Объединяйте рабочие пространства в группы перетаскиванием
52
- - **Git-воркфлоу** — Side-by-side / Line-by-line с подсветкой синтаксиса, инлайновое раскрытие hunk и отдельная вкладка истории с пагинацией. Fetch / pull / push прямо из панели с индикаторами ahead/behind — при ошибке синхронизации (dirty worktree, конфликты) можно в один клик Ask Claude
52
+ - **Git-воркфлоу** — Side-by-side / Line-by-line с подсветкой синтаксиса, инлайновое раскрытие hunk и отдельная вкладка истории с пагинацией. Fetch / pull / push прямо из панели с индикаторами ahead/behind — при ошибке синхронизации (dirty worktree, конфликты) можно в один клик Ask Claude или Codex
53
53
  - **Панель веб-браузера** — встроенный браузер рядом с терминалом для проверки результата разработки (Electron). Управляется через CLI `purplemux`, со встроенным эмулятором устройств для переключения viewport
54
+ - **Вкладки агентов** — запускайте Claude, Codex или общий список сессий из меню новой вкладки
54
55
 
55
- ### Интеграция с Claude Code
56
+ ### Интеграция с Claude Code и Codex
56
57
 
57
58
  - **Статус в реальном времени** — индикаторы «работает / ждёт ввода», переключение между сессиями
58
59
  - **Live-вид сессии** — сообщения, вызовы инструментов, задачи, запросы разрешений, блоки thinking
59
- - **Resume в один клик** возобновляйте приостановленную сессию прямо из браузера
60
+ - **Вкладки Codex** запускайте сессии Codex CLI с той же tmux-персистентностью, что и Claude
61
+ - **Список сессий** — просматривайте и возобновляйте недавние сессии Claude и Codex в одном общем представлении
62
+ - **Resume в один клик** — возобновляйте приостановленную сессию Claude или Codex прямо из браузера
60
63
  - **Автоматический resume** — при старте сервера восстанавливаются предыдущие сессии Claude
61
64
  - **Быстрые промпты** — сохраняйте часто используемые промпты и отправляйте их в один клик
62
65
  - **Вложения** — перетаскивайте изображения в поле ввода чата или прикрепляйте файлы — путь будет вставлен автоматически. Работает и на мобильных
63
66
  - **История сообщений** — повторно используйте прошлые сообщения
64
- - **Статистика использования** — токены (input / output / cache read / cache write), стоимость, разбивка по проектам, ежедневные AI-отчёты
65
- - **Rate limit** — остаток за 5 часов / 7 дней, обратный отсчёт до сброса
67
+ - **Статистика использования** — токены Claude + Codex, стоимость, разбивка по проектам, ежедневные AI-отчёты
68
+ - **Rate limit** — остаток за 5 часов / 7 дней с обратным отсчётом до сброса для поддерживаемых провайдеров
66
69
 
67
70
  ### Мобильность и доступность
68
71
 
@@ -90,6 +93,22 @@ npx purplemux@latest
90
93
  - [Node.js](https://nodejs.org/) 20+
91
94
  - [tmux](https://github.com/tmux/tmux)
92
95
 
96
+ Требуется для вкладок Claude. Установите Claude Code и войдите в аккаунт перед запуском вкладки Claude:
97
+
98
+ ```bash
99
+ curl -fsSL https://claude.ai/install.sh | bash
100
+ # или через Homebrew latest channel
101
+ brew install --cask claude-code@latest
102
+ ```
103
+
104
+ Необязательно для вкладок Codex. Установите Codex CLI и войдите в аккаунт перед запуском вкладки Codex:
105
+
106
+ ```bash
107
+ npm i -g @openai/codex
108
+ # или
109
+ brew install --cask codex
110
+ ```
111
+
93
112
  ### npx (самый быстрый способ)
94
113
 
95
114
  ```bash
@@ -103,6 +122,13 @@ npm install -g purplemux
103
122
  purplemux
104
123
  ```
105
124
 
125
+ ### Примеры CLI
126
+
127
+ ```bash
128
+ purplemux tab create -w WS -t codex-cli -n "fix auth"
129
+ purplemux tab create -w WS -t agent-sessions
130
+ ```
131
+
106
132
  ### Запуск из исходников
107
133
 
108
134
  ```bash
@@ -199,24 +225,25 @@ tailscale serve --bg off 8022
199
225
  ▼ ▼ ▼
200
226
  ┌─────────────────────────────────────────────────────────────┐
201
227
  │ System │
202
- │ tmux (purple socket) Claude Code
228
+ │ tmux (purple socket) Agent CLIs
203
229
  │ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
204
- │ │Session1│ │Session2│ ... │ ~/.claude/sessions/ │ │
205
- │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/ │ │
206
- │ └────────┘ └────────┘ │ └─ {project}/{sid}.jsonl │ │
230
+ │ │Session1│ │Session2│ ... │ Claude Code │ │
231
+ │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
232
+ │ └────────┘ └────────┘ │ Codex │ │
233
+ │ │ ~/.codex/sessions/*.jsonl │ │
207
234
  │ └────────────────────────────┘ │
208
235
  └─────────────────────────────────────────────────────────────┘
209
236
  ```
210
237
 
211
238
  **I/O терминала** — xterm.js подключается к node-pty через WebSocket, а node-pty — к сессиям tmux. Бинарный протокол обрабатывает stdin/stdout/resize с контролем backpressure.
212
239
 
213
- **Определение статуса** — хуки событий Claude Code (`SessionStart`, `Stop`, `Notification`) мгновенно доставляют обновления по HTTP POST. Каждые 5–15 с проверяется дерево процессов и анализируются последние 8 КБ JSONL-файла.
240
+ **Определение статуса** — хуки событий агентов мгновенно доставляют обновления по HTTP POST. Claude Code использует `SessionStart`, `Stop` и `Notification`; Codex использует `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop` и `PermissionRequest`. Каждые 5–15 с проверяется дерево процессов и анализируются последние 8 КБ JSONL-файла.
214
241
 
215
- **Таймлайн** — отслеживает JSONL-логи сессий в `~/.claude/projects/`, разбирает новые строки при изменении файла и транслирует структурированные записи в браузер.
242
+ **Таймлайн** — отслеживает JSONL-логи сессий в `~/.claude/projects/` и `~/.codex/sessions/`, разбирает новые строки при изменении файла и транслирует структурированные записи в браузер.
216
243
 
217
244
  **Изоляция tmux** — используется отдельный сокет `purple`, полностью независимый от уже работающего tmux. Без prefix-клавиши и статус-бара.
218
245
 
219
- **Автовосстановление** — при старте сервера предыдущие сессии Claude восстанавливаются через `claude --resume {sessionId}`.
246
+ **Автовосстановление** — при старте сервера предыдущие сессии Claude восстанавливаются через `claude --resume {sessionId}`. Сессии Codex можно возобновить из списка сессий или командой `codex resume {sessionId}`.
220
247
 
221
248
  ## License
222
249
 
package/README.tr.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # purplemux
2
2
 
3
- **Claude Code, birden çok işi aynı anda. Daha hızlı.**
3
+ **Claude Code ve Codex, birden çok işi aynı anda. Daha hızlı.**
4
4
 
5
5
  Tüm oturumlarınız tek bir ekranda. Telefonda bile kopuksuz.
6
6
 
@@ -24,7 +24,7 @@ Yerel bir uygulama mı tercih edersiniz? macOS Electron sürümünü [en son sü
24
24
 
25
25
  ## Neden purplemux
26
26
 
27
- - **Çoklu oturum panosu** — Tüm Claude Code oturumlarının «çalışıyor / giriş bekliyor» durumunu tek bakışta görün
27
+ - **Çoklu oturum panosu** — Tüm Claude Code ve Codex oturumlarının «çalışıyor / giriş bekliyor» durumunu tek bakışta görün
28
28
  - **Rate limit takibi** — 5 saat / 7 gün kalan kullanım ve sıfırlama geri sayımı
29
29
  - **Push bildirimleri** — Görev bitince veya giriş gerektiğinde masaüstü ve mobil uyarılar
30
30
  - **Mobil ve çoklu cihaz** — Aynı oturuma telefonunuzdan, tabletinizden veya başka bir masaüstünden erişin
@@ -49,20 +49,23 @@ Ayrıca
49
49
  - **Klavye kısayolları** — Bölme, sekme değiştirme, odak hareketi
50
50
  - **Terminal temaları** — Koyu / açık mod, çeşitli renk temaları
51
51
  - **Çalışma alanları & gruplar** — Panel düzenini, sekmeleri ve çalışma dizinlerini çalışma alanı bazında kaydedin ve geri yükleyin. Çalışma alanlarını sürükle-bırak ile gruplara ayırarak yönetin
52
- - **Git iş akışı** — Side-by-side / Line-by-line geçişi ve sözdizimi vurgulamasıyla birlikte satır içi hunk genişletme ve sayfalandırılmış geçmiş sekmesi. Panelden doğrudan fetch / pull / push (ahead/behind göstergeleriyle) — sync başarısız olursa (dirty worktree, çakışma) tek tıkla Ask Claude
52
+ - **Git iş akışı** — Side-by-side / Line-by-line geçişi ve sözdizimi vurgulamasıyla birlikte satır içi hunk genişletme ve sayfalandırılmış geçmiş sekmesi. Panelden doğrudan fetch / pull / push (ahead/behind göstergeleriyle) — sync başarısız olursa (dirty worktree, çakışma) tek tıkla Ask Claude veya Codex
53
53
  - **Web tarayıcı paneli** — Geliştirme çıktısını kontrol etmek için terminalin yanında gömülü tarayıcı (Electron). `purplemux` CLI'dan kontrol edin ve dahili cihaz öykünücüsüyle viewport'u değiştirin
54
+ - **Ajan sekmeleri** — Yeni sekme menüsünden Claude, Codex veya birleşik oturum listesini başlatın
54
55
 
55
- ### Claude Code entegrasyonu
56
+ ### Claude Code ve Codex entegrasyonu
56
57
 
57
58
  - **Gerçek zamanlı durum** — Çalışıyor / giriş bekliyor göstergeleri ve oturumlar arası geçiş
58
59
  - **Canlı oturum görünümü** — Mesajlar, araç çağrıları, görevler, izin istekleri ve thinking blokları
59
- - **Tek tıkla Resume** — Duraklatılmış oturumu doğrudan tarayıcıdan devam ettirin
60
+ - **Codex sekmeleri** — Claude ile aynı tmux tabanlı kalıcılıkla Codex CLI oturumları başlatın
61
+ - **Oturum listesi** — Yakın tarihli Claude ve Codex oturumlarını tek birleşik görünümden inceleyin ve devam ettirin
62
+ - **Tek tıkla Resume** — Duraklatılmış Claude veya Codex oturumunu doğrudan tarayıcıdan devam ettirin
60
63
  - **Otomatik Resume** — Sunucu başlatıldığında önceki Claude oturumlarını otomatik olarak kurtarır
61
64
  - **Hızlı prompt'lar** — Sık kullanılan prompt'ları kaydedin ve tek tıkla gönderin
62
65
  - **Ekler** — Sohbet alanına görseller bırakın veya dosya ekleyerek yolunu otomatik ekletin. Mobilde de çalışır
63
66
  - **Mesaj geçmişi** — Önceki mesajları tekrar kullanın
64
- - **Kullanım istatistikleri** — Token'lar (input / output / cache read / cache write), maliyet, proje bazlı kırılım, günlük AI raporları
65
- - **Rate limit** — 5 saat / 7 gün kalan kullanım ve sıfırlama geri sayımı
67
+ - **Kullanım istatistikleri** — Claude + Codex token'ları, maliyet, proje bazlı kırılım, günlük AI raporları
68
+ - **Rate limit** — Desteklenen sağlayıcılar için 5 saat / 7 gün kalan kullanım ve sıfırlama geri sayımı
66
69
 
67
70
  ### Mobil ve erişilebilirlik
68
71
 
@@ -90,6 +93,22 @@ Ayrıca
90
93
  - [Node.js](https://nodejs.org/) 20+
91
94
  - [tmux](https://github.com/tmux/tmux)
92
95
 
96
+ Claude sekmeleri için gereklidir. Claude Code'u kurun ve Claude sekmesi başlatmadan önce giriş yapın:
97
+
98
+ ```bash
99
+ curl -fsSL https://claude.ai/install.sh | bash
100
+ # veya Homebrew latest kanalıyla
101
+ brew install --cask claude-code@latest
102
+ ```
103
+
104
+ Codex sekmeleri için isteğe bağlıdır. Codex CLI'ı kurun ve Codex sekmesi başlatmadan önce giriş yapın:
105
+
106
+ ```bash
107
+ npm i -g @openai/codex
108
+ # veya
109
+ brew install --cask codex
110
+ ```
111
+
93
112
  ### npx (en hızlısı)
94
113
 
95
114
  ```bash
@@ -103,6 +122,13 @@ npm install -g purplemux
103
122
  purplemux
104
123
  ```
105
124
 
125
+ ### CLI örnekleri
126
+
127
+ ```bash
128
+ purplemux tab create -w WS -t codex-cli -n "fix auth"
129
+ purplemux tab create -w WS -t agent-sessions
130
+ ```
131
+
106
132
  ### Kaynaktan çalıştırma
107
133
 
108
134
  ```bash
@@ -199,24 +225,25 @@ Varsayılan protokol HTTP'dir. Dışarı açarken mutlaka HTTPS kullanın:
199
225
  ▼ ▼ ▼
200
226
  ┌─────────────────────────────────────────────────────────────┐
201
227
  │ System │
202
- │ tmux (purple socket) Claude Code
228
+ │ tmux (purple socket) Agent CLIs
203
229
  │ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
204
- │ │Session1│ │Session2│ ... │ ~/.claude/sessions/ │ │
205
- │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/ │ │
206
- │ └────────┘ └────────┘ │ └─ {project}/{sid}.jsonl │ │
230
+ │ │Session1│ │Session2│ ... │ Claude Code │ │
231
+ │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
232
+ │ └────────┘ └────────┘ │ Codex │ │
233
+ │ │ ~/.codex/sessions/*.jsonl │ │
207
234
  │ └────────────────────────────┘ │
208
235
  └─────────────────────────────────────────────────────────────┘
209
236
  ```
210
237
 
211
238
  **Terminal G/Ç** — xterm.js, node-pty'ye WebSocket üzerinden bağlanır; node-pty ise tmux oturumlarına iliştirilir. İkili bir protokol stdin/stdout/resize işlemlerini backpressure kontrolüyle yürütür.
212
239
 
213
- **Durum algılama** — Claude Code olay hook'ları (`SessionStart`, `Stop`, `Notification`) HTTP POST ile anında güncelleme gönderir. Her 5–15 sn'de bir süreç ağacı kontrol edilir ve JSONL dosyalarının son 8 KB'si analiz edilir.
240
+ **Durum algılama** — Ajan olay hook'ları HTTP POST ile anında güncelleme gönderir. Claude Code `SessionStart`, `Stop` ve `Notification` kullanır; Codex `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop` ve `PermissionRequest` kullanır. Her 5–15 sn'de bir süreç ağacı kontrol edilir ve JSONL dosyalarının son 8 KB'si analiz edilir.
214
241
 
215
- **Zaman tüneli** — `~/.claude/projects/` altındaki JSONL oturum loglarını izler, değişiklikte yeni satırları ayrıştırır ve yapılandırılmış girişleri tarayıcıya akıtır.
242
+ **Zaman tüneli** — `~/.claude/projects/` ve `~/.codex/sessions/` altındaki JSONL oturum loglarını izler, değişiklikte yeni satırları ayrıştırır ve yapılandırılmış girişleri tarayıcıya akıtır.
216
243
 
217
244
  **tmux izolasyonu** — Mevcut tmux'unuzdan tamamen ayrı, özel bir `purple` soketi kullanır. Prefix tuşu yok, durum çubuğu yok.
218
245
 
219
- **Otomatik kurtarma** — Sunucu başlatıldığında önceki Claude oturumları `claude --resume {sessionId}` ile geri yüklenir.
246
+ **Otomatik kurtarma** — Sunucu başlatıldığında önceki Claude oturumları `claude --resume {sessionId}` ile geri yüklenir. Codex oturumları oturum listesinden veya `codex resume {sessionId}` ile devam ettirilebilir.
220
247
 
221
248
  ## License
222
249
 
package/README.zh-CN.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # purplemux
2
2
 
3
- **Claude Code,多任务同时进行。更快。**
3
+ **Claude Code 与 Codex,多任务同时进行。更快。**
4
4
 
5
5
  一屏纵览所有会话,在手机上也毫无中断。
6
6
 
@@ -24,7 +24,7 @@ npx purplemux@latest
24
24
 
25
25
  ## 为什么选择 purplemux
26
26
 
27
- - **多会话仪表盘** — 一眼掌握所有 Claude Code 会话的「运行中 / 等待输入」状态
27
+ - **多会话仪表盘** — 一眼掌握所有 Claude Code 与 Codex 会话的「运行中 / 等待输入」状态
28
28
  - **速率限制监控** — 显示 5 小时 / 7 天剩余额度及重置倒计时
29
29
  - **推送通知** — 任务完成或需要输入时,桌面与移动端推送提醒
30
30
  - **移动端 & 多设备** — 在手机、平板或其他桌面都能访问同一会话
@@ -49,20 +49,23 @@ npx purplemux@latest
49
49
  - **键盘快捷键** — 分割、切换标签、焦点移动
50
50
  - **终端主题** — 深色 / 浅色模式,多种配色主题
51
51
  - **工作区 & 分组** — 以工作区为单位保存 / 恢复面板布局、标签与工作目录。通过拖拽将工作区组织为分组进行管理
52
- - **Git 工作流** — 支持 Side-by-side / Line-by-line 切换与语法高亮,以及行内 hunk 展开、分页历史标签。可从面板直接 fetch / pull / push (含 ahead/behind 指示) — 同步失败时 (dirty worktree、冲突) 一键 Ask Claude
52
+ - **Git 工作流** — 支持 Side-by-side / Line-by-line 切换与语法高亮,以及行内 hunk 展开、分页历史标签。可从面板直接 fetch / pull / push (含 ahead/behind 指示) — 同步失败时 (dirty worktree、冲突) 一键 Ask Claude 或 Codex
53
53
  - **内置浏览器面板** — 在终端旁嵌入浏览器查看开发结果 (Electron)。可通过 `purplemux` CLI 控制,并内置设备模拟器切换视口
54
+ - **智能体标签** — 从新建标签菜单启动 Claude、Codex 或统一会话列表
54
55
 
55
- ### Claude Code 集成
56
+ ### Claude Code 与 Codex 集成
56
57
 
57
58
  - **实时状态** — 运行中 / 等待输入指示,支持在会话间切换
58
59
  - **实时会话视图** — 消息、工具调用、任务、权限请求、thinking 区块
59
- - **一键 Resume** — 直接从浏览器恢复已中断的会话
60
+ - **Codex 标签** 使用与 Claude 相同的 tmux 持久化能力启动 Codex CLI 会话
61
+ - **会话列表** — 在统一视图中浏览并恢复最近的 Claude 与 Codex 会话
62
+ - **一键 Resume** — 直接从浏览器恢复已中断的 Claude 或 Codex 会话
60
63
  - **自动 Resume** — 服务器启动时自动恢复之前的 Claude 会话
61
64
  - **快速提示** — 注册常用提示,一键发送
62
65
  - **附件** — 在聊天输入中拖入图片,或附加文件以自动插入路径。移动端同样可用
63
66
  - **消息历史** — 复用之前的消息
64
- - **用量统计** — Token (input / output / cache read / cache write)、成本、按项目拆分、每日 AI 报告
65
- - **速率限制** — 5 小时 / 7 天剩余额度,重置倒计时
67
+ - **用量统计** — Claude + Codex Token、成本、按项目拆分、每日 AI 报告
68
+ - **速率限制** — 支持的提供方的 5 小时 / 7 天剩余额度,重置倒计时
66
69
 
67
70
  ### 移动端 & 易用性
68
71
 
@@ -90,6 +93,22 @@ npx purplemux@latest
90
93
  - [Node.js](https://nodejs.org/) 20+
91
94
  - [tmux](https://github.com/tmux/tmux)
92
95
 
96
+ Claude 标签需要。安装 Claude Code,并在启动 Claude 标签前登录:
97
+
98
+ ```bash
99
+ curl -fsSL https://claude.ai/install.sh | bash
100
+ # 或使用 Homebrew latest 频道
101
+ brew install --cask claude-code@latest
102
+ ```
103
+
104
+ Codex 标签为可选。安装 Codex CLI,并在启动 Codex 标签前登录:
105
+
106
+ ```bash
107
+ npm i -g @openai/codex
108
+ # 或
109
+ brew install --cask codex
110
+ ```
111
+
93
112
  ### npx (最快)
94
113
 
95
114
  ```bash
@@ -103,6 +122,13 @@ npm install -g purplemux
103
122
  purplemux
104
123
  ```
105
124
 
125
+ ### CLI 示例
126
+
127
+ ```bash
128
+ purplemux tab create -w WS -t codex-cli -n "fix auth"
129
+ purplemux tab create -w WS -t agent-sessions
130
+ ```
131
+
106
132
  ### 从源码运行
107
133
 
108
134
  ```bash
@@ -199,24 +225,25 @@ tailscale serve --bg off 8022
199
225
  ▼ ▼ ▼
200
226
  ┌─────────────────────────────────────────────────────────────┐
201
227
  │ System │
202
- │ tmux (purple socket) Claude Code
228
+ │ tmux (purple socket) Agent CLIs
203
229
  │ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │
204
- │ │Session1│ │Session2│ ... │ ~/.claude/sessions/ │ │
205
- │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/ │ │
206
- │ └────────┘ └────────┘ │ └─ {project}/{sid}.jsonl │ │
230
+ │ │Session1│ │Session2│ ... │ Claude Code │ │
231
+ │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │
232
+ │ └────────┘ └────────┘ │ Codex │ │
233
+ │ │ ~/.codex/sessions/*.jsonl │ │
207
234
  │ └────────────────────────────┘ │
208
235
  └─────────────────────────────────────────────────────────────┘
209
236
  ```
210
237
 
211
238
  **终端 I/O** — xterm.js 通过 WebSocket 连接 node-pty,node-pty 再接入 tmux 会话。使用二进制协议处理 stdin / stdout / resize 并进行背压控制。
212
239
 
213
- **状态检测** — Claude Code 事件 hook (`SessionStart`、`Stop`、`Notification`) 通过 HTTP POST 立即推送更新。每 5–15 秒轮询一次进程树,并分析 JSONL 文件末尾 8KB。
240
+ **状态检测** — 智能体事件 hook 通过 HTTP POST 立即推送更新。Claude Code 使用 `SessionStart`、`Stop`、`Notification`;Codex 使用 `SessionStart`、`UserPromptSubmit`、`PreToolUse`、`PostToolUse`、`Stop`、`PermissionRequest`。每 5–15 秒轮询一次进程树,并分析 JSONL 文件末尾 8KB。
214
241
 
215
- **时间线** — 监听 `~/.claude/projects/` 下的 JSONL 会话日志,文件变化时解析新行并将结构化条目流式传送到浏览器。
242
+ **时间线** — 监听 `~/.claude/projects/` 与 `~/.codex/sessions/` 下的 JSONL 会话日志,文件变化时解析新行并将结构化条目流式传送到浏览器。
216
243
 
217
244
  **tmux 隔离** — 使用专用的 `purple` socket,与现有 tmux 完全隔离。无前缀键,无状态栏。
218
245
 
219
- **自动恢复** — 服务器启动时通过 `claude --resume {sessionId}` 恢复之前的 Claude 会话。
246
+ **自动恢复** — 服务器启动时通过 `claude --resume {sessionId}` 恢复之前的 Claude 会话。Codex 会话可从会话列表恢复,也可使用 `codex resume {sessionId}`。
220
247
 
221
248
  ## License
222
249