webmux 0.7.0
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 +147 -0
- package/backend/dist/server.js +9376 -0
- package/bin/webmux.js +1507 -0
- package/frontend/dist/assets/index-BQ3MC-qW.css +32 -0
- package/frontend/dist/assets/index-DCgS_jka.js +32 -0
- package/frontend/dist/index.html +21 -0
- package/package.json +54 -0
package/README.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# webmux
|
|
2
|
+
|
|
3
|
+
A web dashboard for managing parallel AI coding agents. Built on top of [workmux](https://github.com/raine/workmux), which handles git worktrees and tmux orchestration — webmux adds a browser UI with embedded terminals, live status tracking, and CI integration.
|
|
4
|
+
|
|
5
|
+
https://github.com/user-attachments/assets/48c9564f-42a5-404f-97e2-c5ee0138f15d
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
### Create & Manage Worktrees
|
|
10
|
+
|
|
11
|
+

|
|
12
|
+
|
|
13
|
+
Spin up new worktrees with one click. Pick a profile, type a prompt, and webmux creates the worktree, starts the agent, and begins streaming output. Merge or remove worktrees when you're done.
|
|
14
|
+
|
|
15
|
+
### Embedded Terminals
|
|
16
|
+
|
|
17
|
+
View and interact with your agents directly in the browser. Each worktree gets its own terminal session, streamed live via WebSocket. You can watch agents work, send prompts, and switch between worktrees instantly — no need to juggle tmux windows manually.
|
|
18
|
+
|
|
19
|
+
### PR, CI & Comments
|
|
20
|
+
|
|
21
|
+

|
|
22
|
+
|
|
23
|
+
See pull request status, CI check results, and review comments right next to each worktree. No more switching to GitHub to check if your agent's PR passed CI.
|
|
24
|
+
|
|
25
|
+
### Service Health Monitoring
|
|
26
|
+
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
Track dev server ports across worktrees. webmux polls configured services and shows live health badges so you know which worktrees have their servers running.
|
|
30
|
+
|
|
31
|
+
### Docker Sandbox Mode
|
|
32
|
+
|
|
33
|
+
<!-- gif -->
|
|
34
|
+
|
|
35
|
+
Run agents in isolated Docker containers for untrusted or experimental work. webmux manages the container lifecycle, port forwarding, and volume mounts automatically.
|
|
36
|
+
|
|
37
|
+
## Quick Start
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# 1. Install prerequisites
|
|
41
|
+
cargo install workmux # or: brew install raine/workmux/workmux
|
|
42
|
+
sudo apt install tmux # or: brew install tmux
|
|
43
|
+
curl -fsSL https://bun.sh/install | bash
|
|
44
|
+
|
|
45
|
+
# 2. Install webmux
|
|
46
|
+
bun install -g webmux
|
|
47
|
+
|
|
48
|
+
# 3. Set up your project
|
|
49
|
+
cd /path/to/your/project
|
|
50
|
+
webmux init # creates .workmux.yaml and .webmux.yaml
|
|
51
|
+
|
|
52
|
+
# 4. Start the dashboard
|
|
53
|
+
webmux # opens on http://localhost:5111
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Prerequisites
|
|
57
|
+
|
|
58
|
+
| Tool | Purpose |
|
|
59
|
+
|------|---------|
|
|
60
|
+
| [**bun**](https://bun.sh) | Runtime |
|
|
61
|
+
| [**workmux**](https://github.com/raine/workmux) | Worktree + tmux orchestration |
|
|
62
|
+
| **tmux** | Terminal multiplexer |
|
|
63
|
+
| **git** | Worktree management |
|
|
64
|
+
| **gh** | PR and CI status (optional) |
|
|
65
|
+
| **docker** | Sandbox profile only (optional) |
|
|
66
|
+
|
|
67
|
+
## Configuration
|
|
68
|
+
|
|
69
|
+
webmux uses two config files in the project root:
|
|
70
|
+
|
|
71
|
+
- **`.workmux.yaml`** — Controls worktree directory, pane layout, agent selection, and lifecycle hooks. See the [workmux docs](https://github.com/raine/workmux).
|
|
72
|
+
- **`.webmux.yaml`** — Dashboard-specific config: service health checks, profiles, linked repos, and Docker sandbox settings.
|
|
73
|
+
|
|
74
|
+
<details>
|
|
75
|
+
<summary><strong>.webmux.yaml example</strong></summary>
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
name: My Project
|
|
79
|
+
|
|
80
|
+
services:
|
|
81
|
+
- name: BE
|
|
82
|
+
portEnv: BACKEND_PORT
|
|
83
|
+
portStart: 5111
|
|
84
|
+
portStep: 10
|
|
85
|
+
- name: FE
|
|
86
|
+
portEnv: FRONTEND_PORT
|
|
87
|
+
portStart: 5112
|
|
88
|
+
portStep: 10
|
|
89
|
+
|
|
90
|
+
profiles:
|
|
91
|
+
default:
|
|
92
|
+
name: default
|
|
93
|
+
|
|
94
|
+
sandbox:
|
|
95
|
+
name: sandbox
|
|
96
|
+
image: my-sandbox
|
|
97
|
+
envPassthrough:
|
|
98
|
+
- AWS_ACCESS_KEY_ID
|
|
99
|
+
- AWS_SECRET_ACCESS_KEY
|
|
100
|
+
extraMounts:
|
|
101
|
+
- hostPath: ~/.codex
|
|
102
|
+
guestPath: /root/.codex
|
|
103
|
+
writable: true
|
|
104
|
+
systemPrompt: >
|
|
105
|
+
You are running inside a sandboxed container.
|
|
106
|
+
Backend port: ${BACKEND_PORT}. Frontend port: ${FRONTEND_PORT}.
|
|
107
|
+
|
|
108
|
+
linkedRepos:
|
|
109
|
+
- repo: myorg/related-service
|
|
110
|
+
alias: svc
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
</details>
|
|
114
|
+
|
|
115
|
+
<details>
|
|
116
|
+
<summary><strong>.webmux.yaml full schema</strong></summary>
|
|
117
|
+
|
|
118
|
+
| Parameter | Type | Required | Description |
|
|
119
|
+
|-----------|------|----------|-------------|
|
|
120
|
+
| `name` | string | no | Project name shown in sidebar and browser tab |
|
|
121
|
+
| `services[].name` | string | yes | Display name shown in the dashboard |
|
|
122
|
+
| `services[].portEnv` | string | yes | Env var containing the service port |
|
|
123
|
+
| `services[].portStart` | number | no | Base port for auto-allocation |
|
|
124
|
+
| `services[].portStep` | number | no | Port increment per worktree slot (default: `1`) |
|
|
125
|
+
| `profiles.default.name` | string | yes | Identifier for the default profile |
|
|
126
|
+
| `profiles.default.systemPrompt` | string | no | Agent system prompt; `${VAR}` placeholders expanded at runtime |
|
|
127
|
+
| `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
|
+
| `profiles.sandbox.image` | string | yes (if used) | Docker image for containers |
|
|
130
|
+
| `profiles.sandbox.systemPrompt` | string | no | Agent system prompt for sandbox |
|
|
131
|
+
| `profiles.sandbox.envPassthrough` | string[] | no | Host env vars forwarded into the container |
|
|
132
|
+
| `profiles.sandbox.extraMounts[].hostPath` | string | yes | Host path to mount (`~` expands to `$HOME`) |
|
|
133
|
+
| `profiles.sandbox.extraMounts[].guestPath` | string | no | Container mount path (defaults to `hostPath`) |
|
|
134
|
+
| `profiles.sandbox.extraMounts[].writable` | boolean | no | `true` for read-write; omit or `false` for read-only |
|
|
135
|
+
| `linkedRepos[].repo` | string | yes | GitHub repo slug (e.g. `org/repo`) |
|
|
136
|
+
| `linkedRepos[].alias` | string | no | Short label for the UI |
|
|
137
|
+
|
|
138
|
+
</details>
|
|
139
|
+
|
|
140
|
+
## Keyboard Shortcuts
|
|
141
|
+
|
|
142
|
+
| Shortcut | Action |
|
|
143
|
+
|----------|--------|
|
|
144
|
+
| `Cmd+Up/Down` | Navigate between worktrees |
|
|
145
|
+
| `Cmd+K` | Create new worktree |
|
|
146
|
+
| `Cmd+M` | Merge selected worktree |
|
|
147
|
+
| `Cmd+D` | Remove selected worktree |
|