@projmux/darwin-x64 0.4.5 → 0.4.7

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 (3) hide show
  1. package/README.md +57 -273
  2. package/bin/projmux +0 -0
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -1,325 +1,109 @@
1
1
  # projmux
2
2
 
3
- Project-aware tmux workspace management for people who live in terminals.
3
+ <p align="center">
4
+ <img src="docs/assets/projmux-icon.png" alt="projmux icon" width="112">
5
+ </p>
4
6
 
5
- `projmux` turns project directories into durable tmux workspaces with previews,
6
- sidebar navigation, generated keybindings, status metadata, and AI-pane
7
- attention signals. It can run as its own tmux app (`projmux shell`) or install
8
- the same behavior into your existing tmux server.
7
+ Project-aware tmux workspaces with fast switching, previews, status context,
8
+ and AI-pane attention built in.
9
9
 
10
10
  [![npm version](https://img.shields.io/npm/v/projmux?logo=npm)](https://www.npmjs.com/package/projmux)
11
11
  [![CI](https://github.com/crevissepartners/projmux/actions/workflows/ci.yml/badge.svg)](https://github.com/crevissepartners/projmux/actions/workflows/ci.yml)
12
12
 
13
- [한국어 README](README-ko.md)
13
+ [Korean README](README-ko.md)
14
14
 
15
- ## Why projmux
15
+ ![projmux shell project sidebar demo](docs/assets/projmux-shell-sidebar.gif)
16
16
 
17
- Most tmux project switchers stop at "pick a directory and attach a session".
18
- `projmux` treats that as the foundation, then adds the app-level pieces needed
19
- for a daily terminal workspace:
17
+ ## What It Is
20
18
 
21
- - **Project identity stays stable.** Directories, pins, live sessions, preview
22
- selection, and lifecycle commands all use the same normalized session model.
23
- - **The UI shows context before you switch.** Popup and sidebar pickers preview
24
- sessions, windows, panes, git branch, Kubernetes context, and pane metadata.
25
- - **The tmux layer is generated, not hand-spliced.** `projmux` writes the tmux
26
- config it needs for popup launchers, window/pane rename flows, status
27
- segments, pane borders, attention badges, and app mode.
28
- - **AI panes are first-class.** Codex and Claude panes can be launched,
29
- labeled, tracked as thinking or waiting, surfaced in pane/window/session
30
- badges, and announced through desktop notifications.
31
- - **You can choose isolation or integration.** Use `projmux shell` as a
32
- self-contained tmux app, or install the generated snippet into your normal
33
- tmux server.
19
+ `projmux` turns project directories into durable tmux sessions. It gives you a
20
+ keyboard-first workspace app for switching projects, previewing sessions,
21
+ opening AI splits, and keeping useful context visible in tmux.
34
22
 
35
- ## What It Does
36
-
37
- - Creates or switches to tmux sessions from project directories.
38
- - Shows existing sessions with window and pane previews.
39
- - Provides popup and sidebar navigation surfaces backed by `fzf`.
40
- - Pins important projects and scans common source roots for new ones.
41
- - Persists preview selection for fast window and pane cycling.
42
- - Generates tmux bindings for launchers, rename prompts, pane borders, status
43
- segments, and attention hooks.
44
- - Displays git branch and Kubernetes context/namespace in the status area.
45
- - Renders a two-line clickable status bar with click-to-switch tabs on
46
- row 0 and HUD-style notify (left) and AI usage (right) segments on
47
- row 1.
48
- - Launches AI splits and keeps their agent name, topic, status, and
49
- notification state visible in tmux.
50
-
51
- ## Typical Workflow
52
-
53
- ```sh
54
- projmux shell
55
- ```
56
-
57
- Open the app once, then use its generated tmux bindings to:
58
-
59
- - jump between projects from a sidebar or popup,
60
- - inspect sessions before attaching,
61
- - split Codex, Claude, or a plain shell into the current workspace,
62
- - rename windows and AI pane topics without losing metadata,
63
- - see which panes need review from badges and desktop notifications.
23
+ Use it when you want one command to open your terminal workspace and one set of
24
+ keys to move between projects, windows, panes, notifications, and settings.
64
25
 
65
26
  ## Requirements
66
27
 
67
- - [Node.js](https://nodejs.org/) and npm — required for the recommended npm
68
- install path.
69
- - [Go 1.24+](https://go.dev/dl/) required only when installing with
70
- `go install` or building from source.
71
- - [tmux](https://github.com/tmux/tmux/wiki/Installing) **≥ 3.4** — the workspace runtime. Earlier versions miss `display-popup -T` and other features projmux depends on.
72
- - [fzf](https://github.com/junegunn/fzf#installation) **≥ 0.55** — interactive popup/sidebar pickers. The multiline picker uses `--marker-multi-line`, `--gap-line`, and `--highlight-line`, which landed by 0.55.
73
- - A Unix shell such as `bash`, `zsh`, or `sh` — `projmux shell` uses your
74
- absolute `$SHELL` for the generated app config, falling back to `/bin/sh`.
75
- - [git](https://git-scm.com/downloads) — branch/status metadata.
76
- - `stty` — POSIX terminal control, used by `projmux setup`. Already shipped by every macOS / Linux base system; not applicable on Windows hosts.
77
- - [kubectl](https://kubernetes.io/docs/tasks/tools/) — optional, only for the Kubernetes status segment.
78
-
79
- Desktop notifications: Linux uses `notify-send`; WSL routes Windows toasts via
80
- `powershell.exe`. Override either with `PROJMUX_NOTIFY_HOOK`.
28
+ - [Node.js](https://nodejs.org/) and npm, for the main install path.
29
+ - [tmux](https://github.com/tmux/tmux/wiki/Installing) **3.4 or newer**.
30
+ - [fzf](https://github.com/junegunn/fzf#installation) **0.65.0 or newer**.
81
31
 
82
- Run `projmux doctor` any time to verify runtime dependencies are on `PATH`
83
- and that tmux/fzf meet the minimum supported versions. Terminal key delivery
84
- is diagnosed separately with `projmux setup`.
32
+ Run `projmux doctor` after installing to check the local runtime. The `fzf`
33
+ requirement is the junegunn/fzf CLI binary; `npm i fzf` is a different
34
+ JavaScript library.
85
35
 
86
36
  ## Install
87
37
 
88
38
  ```sh
89
39
  npm install -g projmux
90
- ```
91
-
92
- npm installs a small Node.js shim plus the matching platform binary package
93
- for Linux and macOS on x64 or arm64. The shim marks the install as npm-managed
94
- so `projmux update` and the Settings About screen can use the right upgrade
95
- path.
96
-
97
- Verify:
98
-
99
- ```sh
100
40
  projmux version
101
41
  ```
102
42
 
103
- If npm is not a fit for your machine, install with Go:
104
-
105
- ```sh
106
- go install github.com/crevissepartners/projmux/cmd/projmux@latest
107
- ```
108
-
109
- This drops the binary in `$(go env GOBIN)` (when set) or `$(go env GOPATH)/bin`
110
- (default `~/go/bin`). Make sure that directory is on your `PATH`.
43
+ The npm package installs a small Node.js shim plus the matching projmux binary
44
+ for Linux and macOS on x64 or arm64. npm is the primary distribution path for
45
+ normal users.
111
46
 
112
- ### Optional: `PROJMUX_PROJDIR`
113
-
114
- `PROJMUX_PROJDIR` is the primary project root projmux uses for picker and
115
- discovery when you explicitly configure it. It is optional; when unset,
116
- projmux does not assume a canonical repo root. Discovery still uses pins, live
117
- sessions, saved workdirs, and weak common-folder probes (`~/source`, `~/work`,
118
- `~/projects`, `~/src`, `~/code`) when they exist.
119
-
120
- ```sh
121
- export PROJMUX_PROJDIR="/your/path"
122
- ```
123
-
124
- Add the line to `~/.bashrc`, `~/.zshrc`, or your shell's rc file. The resolved value is
125
- memoized to `~/.config/projmux/projdir` after first use, so later shells keep
126
- the same root even without the env var.
127
-
128
- `PROJMUX_PROJDIR` accepts an OS-native PATH-style multi-value (`:` on
129
- Linux/macOS, `;` on Windows). The first non-empty entry is the primary
130
- project root; any additional entries are prepended to the managed-roots
131
- search list, so they participate in discovery just like
132
- `PROJMUX_MANAGED_ROOTS`. Only the primary path is memoized to
133
- `~/.config/projmux/projdir`.
134
-
135
- ```sh
136
- # Linux/macOS — primary repo + secondary search root
137
- export PROJMUX_PROJDIR="/main/repos:/srv/work/repos"
138
- ```
139
-
140
- #### Set the project root during setup
141
-
142
- ```sh
143
- PROJMUX_PROJDIR=/your/path projmux shell
144
- ```
145
-
146
- The first invocation that sees the env var writes
147
- `~/.config/projmux/projdir`, so later shells without the env var still
148
- resolve the same root.
149
-
150
- You can also manage the saved value interactively with
151
- `projmux settings > Project Picker > Project Root`. That screen shows the
152
- effective primary root and source (`PROJMUX_PROJDIR`, `@projmux_projdir`,
153
- saved, or not configured), shows when a saved value is shadowed by env/tmux,
154
- and lets you set a path directly, use the current project context, or clear the
155
- saved value. When no Project Root is configured, the direct-set prompt starts
156
- with `$HOME` as an editable fallback; it is not treated as the effective root
157
- until you save it.
158
-
159
- ### From source
160
-
161
- ```sh
162
- git clone https://github.com/crevissepartners/projmux.git
163
- cd projmux
164
- make install
165
- ```
166
-
167
- `make install` builds, atomically replaces `$(go env GOPATH)/bin/projmux`, and
168
- runs `projmux tmux apply` so the live `-L projmux` server picks up new bindings
169
- without a restart. Override the destination with `INSTALL_DIR=/usr/local/bin`.
47
+ Manual Go, source checkout, GitHub Release, and packaging details live in
48
+ [Install](docs/install.md).
170
49
 
171
50
  ## Quick Start
172
51
 
173
- Launch the isolated projmux tmux app:
52
+ Open the isolated projmux tmux app:
174
53
 
175
54
  ```sh
176
55
  projmux shell
177
56
  ```
178
57
 
179
- projmux owns this tmux server, its generated config, status bar, and popup
180
- bindings. Cooperative terminals get `Alt-1`..`Alt-5` immediately, with no
181
- terminal config. The left status badge shows the current project name; the
182
- right side shows path, kube segment, git segment, and clock.
183
-
184
- If a key does not fire, run `projmux setup` outside tmux to see which
185
- sequences your terminal swallows. For supported terminals, preview the
186
- fallback with `projmux init [terminal]`, then apply it with
187
- `projmux init [terminal] --apply` (auto-detects when no terminal is given).
188
- Dotfiles users on multi-machine setups should pass
189
- `--allow-symlink` or `--config <path>` to make their intent explicit. Full
190
- flow and the manual CSI-u fallback are in
191
- [Terminal Keybindings](docs/keybindings.md).
192
-
193
- If anything looks off, `projmux doctor` reports which dependency is
194
- missing or stale and how to install it. See [Requirements](#requirements)
195
- for the supported versions.
196
-
197
- ## Upgrading
198
-
199
- The Settings About screen is the normal interactive update surface: it shows
200
- cached release status, installer source, Check Updates, Update Now, and
201
- release notes. The startup update prompt uses the same cache and never reaches
202
- the network.
203
- To refresh the cached release status manually, run:
204
-
205
- ```sh
206
- projmux update check
207
- ```
208
-
209
- Use Settings > About > Update or `projmux update apply` to update through the
210
- detected installer. See [Upgrading](docs/upgrading.md) for npm, Go, GitHub
211
- Release, and source-checkout details.
212
-
213
- ## Usage
214
-
215
- Day-to-day, projmux is driven by tmux keybindings inside `projmux shell` — see
216
- [Terminal Keybindings](docs/keybindings.md). For the full CLI surface (pins,
217
- preview state, status helpers, updates, etc.), run `projmux help` or
218
- `<command> --help`.
219
-
220
- ## How It Finds Projects
221
-
222
- `projmux switch` combines pinned directories, live tmux sessions, and discovered
223
- project roots. When no explicit search roots are configured, discovery uses
224
- weak common-folder probes such as `~/source`, `~/work`, `~/projects`, `~/src`,
225
- and `~/code` if they exist; it does not assume a canonical `~/source/repos`
226
- root. `projmux settings` also has `Project Picker > Add Project...`, which
227
- scans filesystem roots up to depth 3 so projects outside the weak probes can be
228
- added to the picker. Session names are derived from normalized directory paths,
229
- so a project keeps the same tmux session name across launches.
230
-
231
- For permanent search-root customization, the Project Picker section also
232
- includes:
233
-
234
- - `Project Root` - set, change, or clear the saved primary root. This is the
235
- one root used as the primary project context; env `PROJMUX_PROJDIR` and tmux
236
- `@projmux_projdir` override the saved value until unset. If no root is
237
- configured, the direct-set prompt pre-fills `$HOME` so the picker remains
238
- usable without inventing an implicit saved root.
239
- - `+ Add Workdir...` - append a single directory to the saved workdirs list.
240
- - `Workdirs` - review and remove saved workdirs. The same picker also surfaces
241
- any active `PROJMUX_MANAGED_ROOTS` / `TMUX_SESSIONIZER_ROOTS` env values as
242
- read-only rows so you can see why an env list might be overriding the saved
243
- file.
244
-
245
- `Add Workdir > Type path manually...` gives you a typed entry that skips the
246
- filesystem scan. Use it for paths you do not want crawled, e.g. WSL mounts
247
- (`/mnt/c/Users/...`), large NFS mounts, or per-project temp roots.
248
-
249
- The saved file lives at `~/.config/projmux/workdirs` (one absolute path per
250
- line, `#` comments allowed). It is consulted only when the env vars are unset.
58
+ Inside the app:
251
59
 
252
- ## Hooks
60
+ - `Alt-1` opens the project sidebar.
61
+ - `Alt-2` opens the notification list.
62
+ - `Alt-3` opens the existing-session picker.
63
+ - `Alt-4` opens the AI split picker.
64
+ - `Alt-5` opens settings.
65
+ - `Alt-6` opens the project switcher popup.
253
66
 
254
- projmux runs an optional user script at `~/.config/projmux/hooks/post-create`
255
- whenever it creates a new tmux session. Use it to inject per-session env via
256
- `tmux set-environment` (e.g. picking a `GH_TOKEN` based on the project path).
257
- Missing or non-executable hooks are skipped silently; failures never block
258
- session creation. See [Hooks](docs/hooks.md) for the env contract, examples,
259
- and troubleshooting.
67
+ See [Terminal Keybindings](docs/keybindings.md) for the full key map. If a key
68
+ does not fire, run `projmux setup` outside tmux, then use
69
+ `projmux init [terminal] --apply` for supported terminal fallbacks.
260
70
 
261
- ## Environment Variables
71
+ ## Day-To-Day Use
262
72
 
263
- | Variable | Purpose |
264
- | --- | --- |
265
- | `PROJMUX_PROJDIR` | Explicit primary project root for the current shell. Accepts an OS-native PATH-style multi-value: the first entry is the primary repo root (memoized to `~/.config/projmux/projdir`), and any additional entries are prepended to the managed-roots search list. |
266
- | `PROJMUX_MANAGED_ROOTS` | Colon-separated list of search roots. Overrides the saved/heuristic list. |
267
- | `PROJMUX_NOTIFY_HOOK` | External executable that receives AI desktop notifications instead of the built-in sender. |
268
- | `PROJMUX_USAGE_STATE_DIR` | Override directory for the AI-usage snapshot cache. Defaults to `<state>/projmux/usage`. Point this at a synced location (Dropbox, iCloud Drive, etc) to share authoritative usage between machines. |
269
- | `PROJMUX_USAGE_DEBUG` | When non-empty, surfaces adapter errors from `projmux status usage` to stderr instead of swallowing them. |
270
- | `PROJMUX_USAGE_LIMITS_PATH` | Deprecated. Limits now come from the upstream APIs (Anthropic OAuth usage endpoint, Codex `rate_limits`); this variable is read but ignored. |
73
+ - Pick a project directory and projmux creates or reuses its tmux session.
74
+ - Pin important projects so they stay easy to reach.
75
+ - Preview windows, panes, git branch, Kubernetes context, and AI pane state
76
+ before switching.
77
+ - Use Settings > Project Picker to add roots and workdirs without editing env
78
+ vars.
79
+ - Use Settings > About > Update or `projmux update apply` to upgrade.
271
80
 
272
- ## AI usage tracking
81
+ For detailed configuration, including `PROJMUX_PROJDIR`, managed roots,
82
+ notifications, and usage tracking, see [Configuration](docs/configuration.md).
83
+ For update behavior by installer type, see [Upgrading](docs/upgrading.md).
273
84
 
274
- `projmux usage` reports authoritative 5-hour and weekly utilisation for both
275
- Claude Code and the Codex CLI. Both adapters read from the upstream's own
276
- view of your account so the percentages match what `claude /usage` and
277
- `codex` show natively:
85
+ ## More Docs
278
86
 
279
- - **Claude** — calls `GET https://api.anthropic.com/api/oauth/usage` with the
280
- bearer token in `~/.claude/.credentials.json`. The adapter performs a
281
- single refresh round-trip on 401 and rewrites the credentials file with
282
- the rotated tokens. Tokens are never logged.
283
- - **Codex** — reads the most recent `rate_limits` payload from the newest
284
- `~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl`. `primary` maps to the 5h
285
- window, `secondary` to the weekly window.
286
-
287
- Snapshots are persisted under `<state>/projmux/usage/snapshots.json` (or
288
- `PROJMUX_USAGE_STATE_DIR`) and refreshed at most every 30 seconds when
289
- `projmux status usage` runs in the tmux status bar.
290
-
291
- ## Scope
292
-
293
- `projmux` owns the portable session-management core: naming, discovery, pins,
294
- preview state, tmux orchestration, status segments, and generated tmux bindings.
87
+ - [Install](docs/install.md)
88
+ - [Configuration](docs/configuration.md)
89
+ - [Terminal Keybindings](docs/keybindings.md)
90
+ - [CLI Reference](docs/cli.md)
91
+ - [Statusbar](docs/statusbar.md)
92
+ - [Hooks](docs/hooks.md)
93
+ - [Usage tracking](docs/usage-tracking.md)
94
+ - [Agent Workflow](docs/agent-workflow.md)
295
95
 
296
96
  ## Development
297
97
 
298
- Useful commands:
299
-
300
98
  ```sh
301
99
  make build
302
100
  make fmt
303
101
  make fix
304
102
  make test
305
- make test-integration
306
- make test-e2e
307
- make verify
308
103
  ```
309
104
 
310
- More documentation:
311
-
312
- - [Architecture](docs/architecture.md)
313
- - [CLI Reference](docs/cli.md)
314
- - [Statusbar](docs/statusbar.md)
315
- - [Notify queue](docs/notify-queue.md)
316
- - [Usage tracking](docs/usage-tracking.md)
317
- - [Upgrading](docs/upgrading.md)
318
- - [Hooks](docs/hooks.md)
319
- - [Migration Plan](docs/migration-plan.md)
320
- - [Repo Layout](docs/repo-layout.md)
321
- - [Terminal Keybindings](docs/keybindings.md)
322
- - [Agent Workflow](docs/agent-workflow.md)
105
+ See [Testing](docs/testing.md), [Architecture](docs/architecture.md), and
106
+ [Repo Layout](docs/repo-layout.md) for contributor details.
323
107
 
324
108
  ## License
325
109
 
package/bin/projmux CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projmux/darwin-x64",
3
- "version": "0.4.5",
3
+ "version": "0.4.7",
4
4
  "description": "macOS x64 binary for projmux",
5
5
  "license": "MIT",
6
6
  "repository": {