webmux 0.7.2 → 0.7.3
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.
- package/README.md +60 -17
- package/backend/dist/server.js +3014 -1438
- package/bin/webmux.js +754 -100
- package/frontend/dist/assets/index-DeLoWUbI.js +32 -0
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
- package/frontend/dist/assets/index-B8KQ-AWX.js +0 -32
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# webmux
|
|
2
2
|
|
|
3
|
-
A web dashboard for managing parallel AI coding agents.
|
|
3
|
+
A web dashboard for managing parallel AI coding agents. webmux owns git worktree lifecycle, tmux layout, agent runtime events, service health monitoring, and sandbox containers directly.
|
|
4
4
|
|
|
5
5
|
https://github.com/user-attachments/assets/48c9564f-42a5-404f-97e2-c5ee0138f15d
|
|
6
6
|
|
|
@@ -38,8 +38,8 @@ Run agents in isolated Docker containers for untrusted or experimental work. web
|
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
40
|
# 1. Install prerequisites
|
|
41
|
-
cargo install workmux # or: brew install raine/workmux/workmux
|
|
42
41
|
sudo apt install tmux # or: brew install tmux
|
|
42
|
+
sudo apt install python3 # or: brew install python
|
|
43
43
|
curl -fsSL https://bun.sh/install | bash
|
|
44
44
|
|
|
45
45
|
# 2. Install webmux
|
|
@@ -47,7 +47,7 @@ bun install -g webmux
|
|
|
47
47
|
|
|
48
48
|
# 3. Set up your project
|
|
49
49
|
cd /path/to/your/project
|
|
50
|
-
webmux init # creates .
|
|
50
|
+
webmux init # creates .webmux.yaml
|
|
51
51
|
|
|
52
52
|
# 4. Start the dashboard
|
|
53
53
|
webmux # opens on http://localhost:5111
|
|
@@ -58,7 +58,7 @@ webmux # opens on http://localhost:5111
|
|
|
58
58
|
| Tool | Purpose |
|
|
59
59
|
|------|---------|
|
|
60
60
|
| [**bun**](https://bun.sh) | Runtime |
|
|
61
|
-
|
|
|
61
|
+
| **python3** | Per-worktree hook/event helper runtime |
|
|
62
62
|
| **tmux** | Terminal multiplexer |
|
|
63
63
|
| **git** | Worktree management |
|
|
64
64
|
| **gh** | PR and CI status (optional) |
|
|
@@ -66,10 +66,9 @@ webmux # opens on http://localhost:5111
|
|
|
66
66
|
|
|
67
67
|
## Configuration
|
|
68
68
|
|
|
69
|
-
webmux uses
|
|
69
|
+
webmux uses a single config file in the project root:
|
|
70
70
|
|
|
71
|
-
- **`.
|
|
72
|
-
- **`.webmux.yaml`** — Dashboard-specific config: service health checks, profiles, linked repos, and Docker sandbox settings.
|
|
71
|
+
- **`.webmux.yaml`** — Worktree root, pane layout, service ports, profiles, linked repos, and Docker sandbox settings.
|
|
73
72
|
|
|
74
73
|
<details>
|
|
75
74
|
<summary><strong>.webmux.yaml example</strong></summary>
|
|
@@ -77,6 +76,11 @@ webmux uses two config files in the project root:
|
|
|
77
76
|
```yaml
|
|
78
77
|
name: My Project
|
|
79
78
|
|
|
79
|
+
workspace:
|
|
80
|
+
mainBranch: main
|
|
81
|
+
worktreeRoot: __worktrees
|
|
82
|
+
defaultAgent: claude
|
|
83
|
+
|
|
80
84
|
services:
|
|
81
85
|
- name: BE
|
|
82
86
|
portEnv: BACKEND_PORT
|
|
@@ -89,15 +93,26 @@ services:
|
|
|
89
93
|
|
|
90
94
|
profiles:
|
|
91
95
|
default:
|
|
92
|
-
|
|
96
|
+
runtime: host
|
|
97
|
+
yolo: false
|
|
98
|
+
envPassthrough: []
|
|
99
|
+
panes:
|
|
100
|
+
- id: agent
|
|
101
|
+
kind: agent
|
|
102
|
+
focus: true
|
|
103
|
+
- id: frontend
|
|
104
|
+
kind: command
|
|
105
|
+
split: right
|
|
106
|
+
command: FRONTEND_PORT=$FRONTEND_PORT npm run dev
|
|
93
107
|
|
|
94
108
|
sandbox:
|
|
95
|
-
|
|
109
|
+
runtime: docker
|
|
110
|
+
yolo: true
|
|
96
111
|
image: my-sandbox
|
|
97
112
|
envPassthrough:
|
|
98
113
|
- AWS_ACCESS_KEY_ID
|
|
99
114
|
- AWS_SECRET_ACCESS_KEY
|
|
100
|
-
|
|
115
|
+
mounts:
|
|
101
116
|
- hostPath: ~/.codex
|
|
102
117
|
guestPath: /root/.codex
|
|
103
118
|
writable: true
|
|
@@ -108,6 +123,19 @@ profiles:
|
|
|
108
123
|
linkedRepos:
|
|
109
124
|
- repo: myorg/related-service
|
|
110
125
|
alias: svc
|
|
126
|
+
|
|
127
|
+
startupEnvs:
|
|
128
|
+
NODE_ENV: development
|
|
129
|
+
|
|
130
|
+
auto_name:
|
|
131
|
+
model: claude-3-5-haiku-latest
|
|
132
|
+
system_prompt: >
|
|
133
|
+
Generate a concise git branch name from the task description.
|
|
134
|
+
Return only the branch name in lowercase kebab-case.
|
|
135
|
+
|
|
136
|
+
lifecycleHooks:
|
|
137
|
+
postCreate: scripts/post-create.sh
|
|
138
|
+
preRemove: scripts/pre-remove.sh
|
|
111
139
|
```
|
|
112
140
|
|
|
113
141
|
</details>
|
|
@@ -118,25 +146,40 @@ linkedRepos:
|
|
|
118
146
|
| Parameter | Type | Required | Description |
|
|
119
147
|
|-----------|------|----------|-------------|
|
|
120
148
|
| `name` | string | no | Project name shown in sidebar and browser tab |
|
|
149
|
+
| `workspace.mainBranch` | string | no | Base branch used for new worktrees |
|
|
150
|
+
| `workspace.worktreeRoot` | string | no | Relative or absolute directory for managed worktrees |
|
|
151
|
+
| `workspace.defaultAgent` | string | no | Default agent for new worktrees |
|
|
121
152
|
| `services[].name` | string | yes | Display name shown in the dashboard |
|
|
122
153
|
| `services[].portEnv` | string | yes | Env var containing the service port |
|
|
123
154
|
| `services[].portStart` | number | no | Base port for auto-allocation |
|
|
124
155
|
| `services[].portStep` | number | no | Port increment per worktree slot (default: `1`) |
|
|
125
|
-
| `profiles
|
|
156
|
+
| `profiles.<name>.runtime` | string | yes | `host` or `docker` |
|
|
157
|
+
| `profiles.<name>.yolo` | boolean | no | Enables `--dangerously-skip-permissions` for Claude or `--yolo` for Codex |
|
|
158
|
+
| `profiles.<name>.panes[]` | array | yes | Pane layout for that profile |
|
|
159
|
+
| `profiles.<name>.panes[].kind` | string | yes | `agent`, `shell`, or `command` |
|
|
160
|
+
| `profiles.<name>.panes[].command` | string | yes (for `command`) | Startup command run inside the pane |
|
|
126
161
|
| `profiles.default.systemPrompt` | string | no | Agent system prompt; `${VAR}` placeholders expanded at runtime |
|
|
127
162
|
| `profiles.default.envPassthrough` | string[] | no | Env vars passed to the agent process |
|
|
128
|
-
| `profiles.sandbox.name` | string | yes (if used) | Identifier for the sandbox profile |
|
|
129
163
|
| `profiles.sandbox.image` | string | yes (if used) | Docker image for containers |
|
|
130
164
|
| `profiles.sandbox.systemPrompt` | string | no | Agent system prompt for sandbox |
|
|
131
165
|
| `profiles.sandbox.envPassthrough` | string[] | no | Host env vars forwarded into the container |
|
|
132
|
-
| `profiles.sandbox.
|
|
133
|
-
| `profiles.sandbox.
|
|
134
|
-
| `profiles.sandbox.
|
|
135
|
-
| `linkedRepos[].repo` | string | yes | GitHub repo slug (e.g. `org/repo`) |
|
|
136
|
-
| `linkedRepos[].alias` | string | no | Short label for the UI |
|
|
166
|
+
| `profiles.sandbox.mounts[].hostPath` | string | yes | Host path to mount (`~` expands to `$HOME`) |
|
|
167
|
+
| `profiles.sandbox.mounts[].guestPath` | string | no | Container mount path (defaults to `hostPath`) |
|
|
168
|
+
| `profiles.sandbox.mounts[].writable` | boolean | no | `true` for read-write; omit or `false` for read-only |
|
|
169
|
+
| `integrations.github.linkedRepos[].repo` | string | yes | GitHub repo slug (e.g. `org/repo`) |
|
|
170
|
+
| `integrations.github.linkedRepos[].alias` | string | no | Short label for the UI |
|
|
171
|
+
| `startupEnvs.<KEY>` | string or boolean | no | Extra env vars materialized into worktree runtime env |
|
|
172
|
+
| `auto_name.model` | string | no | Model used to generate the branch name when the branch field is left empty; supports Anthropic (`claude-*`), Gemini (`gemini-*`), and OpenAI (`gpt-*`, `chatgpt-*`, `o*`) models |
|
|
173
|
+
| `auto_name.system_prompt` | string | no | System prompt sent to the auto-name model |
|
|
174
|
+
| `lifecycleHooks.postCreate` | string | no | Shell command run after a managed worktree is created and its runtime env is materialized, but before the tmux session/panes are started |
|
|
175
|
+
| `lifecycleHooks.preRemove` | string | no | Shell command run before a managed worktree is removed |
|
|
137
176
|
|
|
138
177
|
</details>
|
|
139
178
|
|
|
179
|
+
Lifecycle hooks run with the worktree as `cwd` and receive the same computed runtime env that the managed panes will use, including `startupEnvs`, allocated service ports, and `WEBMUX_*` metadata.
|
|
180
|
+
|
|
181
|
+
When `auto_name` is enabled, `webmux` calls the provider API directly with structured output and uses `ANTHROPIC_API_KEY`, `GEMINI_API_KEY`, or `OPENAI_API_KEY` based on the configured model.
|
|
182
|
+
|
|
140
183
|
## Keyboard Shortcuts
|
|
141
184
|
|
|
142
185
|
| Shortcut | Action |
|