@viraatdas/rudder 1.0.73 → 1.1.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 +169 -510
- package/dist/auth.d.ts +2 -0
- package/dist/auth.js +22 -1
- package/dist/auth.js.map +1 -1
- package/dist/backends.js +88 -1
- package/dist/backends.js.map +1 -1
- package/dist/board/board.css +1 -0
- package/dist/board/board.js +2 -0
- package/dist/board/daemon.d.ts +21 -0
- package/dist/board/daemon.js +838 -0
- package/dist/board/daemon.js.map +1 -0
- package/dist/brain.d.ts +9 -0
- package/dist/brain.js +36 -9
- package/dist/brain.js.map +1 -1
- package/dist/bus.d.ts +9 -0
- package/dist/bus.js +23 -0
- package/dist/bus.js.map +1 -0
- package/dist/cloud.js +80 -350
- package/dist/cloud.js.map +1 -1
- package/dist/daemon.d.ts +21 -0
- package/dist/daemon.js +141 -0
- package/dist/daemon.js.map +1 -0
- package/dist/git.d.ts +19 -13
- package/dist/git.js +283 -35
- package/dist/git.js.map +1 -1
- package/dist/goal.d.ts +30 -0
- package/dist/goal.js +75 -0
- package/dist/goal.js.map +1 -0
- package/dist/graph.d.ts +56 -0
- package/dist/graph.js +213 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/jj.d.ts +121 -0
- package/dist/jj.js +524 -0
- package/dist/jj.js.map +1 -0
- package/dist/main.js +191 -17
- package/dist/main.js.map +1 -1
- package/dist/migration.js +8 -1
- package/dist/migration.js.map +1 -1
- package/dist/models.js +21 -36
- package/dist/models.js.map +1 -1
- package/dist/native/rudder-native +0 -0
- package/dist/planner.d.ts +27 -0
- package/dist/planner.js +540 -0
- package/dist/planner.js.map +1 -0
- package/dist/repl.js +6 -2
- package/dist/repl.js.map +1 -1
- package/dist/run-manager.d.ts +10 -0
- package/dist/run-manager.js +225 -54
- package/dist/run-manager.js.map +1 -1
- package/dist/scheduler.d.ts +124 -0
- package/dist/scheduler.js +849 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/state.d.ts +18 -1
- package/dist/state.js +139 -3
- package/dist/state.js.map +1 -1
- package/dist/surfaces.d.ts +23 -0
- package/dist/surfaces.js +196 -0
- package/dist/surfaces.js.map +1 -0
- package/dist/task-summary.d.ts +18 -0
- package/dist/task-summary.js +132 -0
- package/dist/task-summary.js.map +1 -1
- package/dist/tmux-dashboard.js +58 -7
- package/dist/tmux-dashboard.js.map +1 -1
- package/dist/tui.js +112 -17
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +214 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +6 -1
- package/dist/util.js +37 -7
- package/dist/util.js.map +1 -1
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -11,14 +11,10 @@
|
|
|
11
11
|
[](https://nodejs.org/)
|
|
12
12
|
[](https://rudder.viraat.dev)
|
|
13
13
|
|
|
14
|
-
Rudder
|
|
14
|
+
Rudder runs coding agents the way they should be used: several at once,
|
|
15
15
|
isolated, reviewable, and easy to merge. It opens a native three-pane dashboard,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
Rudder Cloud lives behind `/login`, `/cloud`, and `/sail`. It keeps the same
|
|
20
|
-
local dashboard and worktree flow, with an optional Fly Machines worker path for
|
|
21
|
-
tasks that should continue away from your laptop.
|
|
16
|
+
gives every task its own git worktree, and runs real Claude Code or Codex
|
|
17
|
+
processes in the worker pane.
|
|
22
18
|
|
|
23
19
|
## Install
|
|
24
20
|
|
|
@@ -27,589 +23,240 @@ npm install -g @viraatdas/rudder@latest
|
|
|
27
23
|
rudder
|
|
28
24
|
```
|
|
29
25
|
|
|
30
|
-
Upgrade with the same command
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
npm install -g @viraatdas/rudder@latest
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Run without a global install:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npx @viraatdas/rudder@latest
|
|
40
|
-
```
|
|
26
|
+
Upgrade with the same command. Run without a global install using
|
|
27
|
+
`npx @viraatdas/rudder@latest`.
|
|
41
28
|
|
|
42
29
|
## Requirements
|
|
43
30
|
|
|
44
31
|
- Node.js 20 or newer
|
|
45
32
|
- Git
|
|
46
33
|
- Claude Code and/or Codex installed and logged in
|
|
47
|
-
- macOS, Linux, or another Unix-like terminal
|
|
34
|
+
- macOS, Linux, or another Unix-like terminal
|
|
48
35
|
|
|
49
|
-
Check
|
|
36
|
+
Check your setup at any time:
|
|
50
37
|
|
|
51
38
|
```bash
|
|
52
39
|
rudder doctor
|
|
53
40
|
```
|
|
54
41
|
|
|
55
|
-
##
|
|
42
|
+
## Quick start
|
|
56
43
|
|
|
57
44
|
```bash
|
|
58
|
-
rudder
|
|
45
|
+
rudder
|
|
59
46
|
```
|
|
60
47
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
- Codex auth from `~/.codex/auth.json`
|
|
66
|
-
- `ANTHROPIC_API_KEY` and `OPENAI_API_KEY`
|
|
67
|
-
|
|
68
|
-
If auth is missing, Rudder lets you skip it and set up the backend later. It
|
|
69
|
-
does not require API keys when you already use Claude Code or Codex login.
|
|
70
|
-
|
|
71
|
-
Config is written to `~/.rudder/config.json`. Mirrored auth metadata is written
|
|
72
|
-
to `~/.rudder/auth-profiles.json`.
|
|
73
|
-
|
|
74
|
-
## Rudder Cloud
|
|
48
|
+
With no arguments, `rudder` opens the dashboard. Type a task in the bottom input
|
|
49
|
+
and press `Enter`. Rudder creates a git worktree for it and starts your agent
|
|
50
|
+
(Claude Code or Codex) in the worker pane. Start more tasks the same way; each
|
|
51
|
+
gets its own worktree so they never step on each other.
|
|
75
52
|
|
|
76
|
-
|
|
77
|
-
control surface: you start in your repo, choose a task, and decide whether it
|
|
78
|
-
should run locally or be handed to a cloud worker.
|
|
53
|
+
You can also start a task directly from the shell:
|
|
79
54
|
|
|
80
55
|
```bash
|
|
81
|
-
rudder
|
|
82
|
-
rudder
|
|
83
|
-
rudder
|
|
84
|
-
rudder cloud byoc rudder-workstation
|
|
85
|
-
rudder cloud onload
|
|
86
|
-
rudder cloud onload <runId>
|
|
87
|
-
rudder cloud logs <id>
|
|
88
|
-
rudder cloud migration-lab
|
|
89
|
-
rudder sail staging-worker
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
By default the CLI points at the hosted Rudder Cloud control plane:
|
|
93
|
-
`https://rudder-cloud-control.fly.dev`. Set `RUDDER_CLOUD_URL` to
|
|
94
|
-
override it for local development or another deployment. If the public Fly
|
|
95
|
-
edge is unavailable from the current network, Rudder automatically retries
|
|
96
|
-
through a local `flyctl proxy` to `rudder-cloud-control.internal`, so startup
|
|
97
|
-
still reaches the same control plane without a manual proxy command.
|
|
98
|
-
|
|
99
|
-
Inside the dashboard, `/login` starts browser auth and `/cloud list` lists
|
|
100
|
-
cloud workers after you are logged in. `rudder cloud` starts or attaches a fast
|
|
101
|
-
fresh Fly workspace for the current repo name; it does not upload the local repo
|
|
102
|
-
snapshot first. Use `rudder cloud onload` only when you explicitly want to move
|
|
103
|
-
the current Rudder workspace state to the cloud, including the repo snapshot,
|
|
104
|
-
selected HOME auth/config paths, `RUDDER.md`, and saved
|
|
105
|
-
`.rudder/runs/*/run.json` metadata. `/cloud help` shows the cloud command
|
|
106
|
-
reference.
|
|
107
|
-
|
|
108
|
-
Cloud workers use Fly Machines by default. To bring your own workstation or
|
|
109
|
-
server instead, add it to `~/.ssh/config` and run:
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
rudder cloud byoc rudder-workstation
|
|
56
|
+
rudder "fix the failing tests"
|
|
57
|
+
rudder claude "fix the auth redirect bug"
|
|
58
|
+
rudder codex --model gpt-5.5 "refactor the parser"
|
|
113
59
|
```
|
|
114
60
|
|
|
115
|
-
|
|
116
|
-
user. Rudder checks the host and stores it in `~/.rudder/cloud.json`.
|
|
117
|
-
After setup, `rudder cloud vm <task>` prepares a BYOC run and Rudder tries to
|
|
118
|
-
start it on that host over SSH. Plain `rudder cloud` and dashboard `/cloud`
|
|
119
|
-
always use Fly for the fresh workspace shortcut so startup behaves
|
|
120
|
-
consistently. Use `rudder cloud runtime [fly|byoc]` to inspect or change the
|
|
121
|
-
saved CLI runtime.
|
|
122
|
-
Set `RUDDER_BYOC_AUTOSTART=0` if you always want Rudder to print the Docker
|
|
123
|
-
command instead of starting it over SSH.
|
|
124
|
-
|
|
125
|
-
`rudder login` connects this machine to Rudder Cloud by opening the browser for
|
|
126
|
-
the control plane's Better Auth login. If that browser login endpoint is
|
|
127
|
-
unavailable, Rudder falls back to local GitHub CLI auth and then GitHub's
|
|
128
|
-
browser device flow. It is separate from Claude Code and Codex login: provider
|
|
129
|
-
auth still belongs to the official CLIs unless you explicitly configure
|
|
130
|
-
otherwise.
|
|
131
|
-
|
|
132
|
-
Cloud admins can attach existing OAuth clients without redeploying the control
|
|
133
|
-
plane:
|
|
61
|
+
## Onboarding and auth
|
|
134
62
|
|
|
135
63
|
```bash
|
|
136
|
-
rudder
|
|
137
|
-
rudder cloud setup-github <github-client-id>
|
|
138
|
-
rudder cloud setup-google <google-client-id>
|
|
64
|
+
rudder onboard
|
|
139
65
|
```
|
|
140
66
|
|
|
141
|
-
|
|
142
|
-
the provider credentials into Rudder Cloud's S3-backed state. For automation,
|
|
143
|
-
use `RUDDER_GITHUB_CLIENT_ID`, `RUDDER_GITHUB_CLIENT_SECRET`,
|
|
144
|
-
`RUDDER_GOOGLE_CLIENT_ID`, and `RUDDER_GOOGLE_CLIENT_SECRET`.
|
|
145
|
-
|
|
146
|
-
`rudder cloud list` will show cloud-capable runs and remote workers. `rudder
|
|
147
|
-
cloud onload` uploads the current Rudder workspace. `rudder cloud onload
|
|
148
|
-
<runId>` keeps the older single-run path for moving one local run to the cloud
|
|
149
|
-
from the same task context. `rudder cloud logs <id>` currently shows worker
|
|
150
|
-
status while full cloud log streaming is being wired up.
|
|
67
|
+
Onboarding uses the auth you already have, so you usually do not need API keys:
|
|
151
68
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
cloud run does not mutate your local branch directly. Completed cloud work comes
|
|
156
|
-
back through the same review and merge path as local work.
|
|
157
|
-
|
|
158
|
-
Rudder includes selected HOME config paths in the launch snapshot so cloud
|
|
159
|
-
workers can behave like your local environment where that is useful: Claude,
|
|
160
|
-
Codex, GitHub CLI, git config, npm, Vercel, and Hunk config are considered. It
|
|
161
|
-
filters obvious high-risk material such as AWS credentials, `.env` files, SSH
|
|
162
|
-
keys, Docker auth, kube config, and private key directories.
|
|
163
|
-
|
|
164
|
-
The cloud control plane code lives in `cloud/`. It uses Better Auth for
|
|
165
|
-
Google/GitHub login, stores launch snapshots in an encrypted S3 bucket, and
|
|
166
|
-
starts Fly Machines workers with one-hour presigned snapshot URLs. The local CLI
|
|
167
|
-
package stays small; cloud state and worker orchestration run in the separate
|
|
168
|
-
control plane.
|
|
169
|
-
|
|
170
|
-
## Architecture
|
|
171
|
-
|
|
172
|
-
Rudder has three layers:
|
|
173
|
-
|
|
174
|
-
```text
|
|
175
|
-
┌────────────────────────────────────────────────────────────┐
|
|
176
|
-
│ Local Rudder CLI │
|
|
177
|
-
│ native OpenTUI dashboard, task input, panes, worktrees │
|
|
178
|
-
├────────────────────────────────────────────────────────────┤
|
|
179
|
-
│ Agent Process Layer │
|
|
180
|
-
│ real claude or codex terminals, not mocked transcript UIs │
|
|
181
|
-
├────────────────────────────────────────────────────────────┤
|
|
182
|
-
│ Optional Rudder Cloud │
|
|
183
|
-
│ Better Auth, S3 snapshots, Fly Machines, BYOC Docker runs │
|
|
184
|
-
└────────────────────────────────────────────────────────────┘
|
|
185
|
-
```
|
|
69
|
+
- Claude Code auth from the macOS Keychain or `~/.claude/.credentials.json`
|
|
70
|
+
- Codex auth from `~/.codex/auth.json`
|
|
71
|
+
- `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` if you prefer keys
|
|
186
72
|
|
|
187
|
-
|
|
73
|
+
If auth is missing you can skip it and set up a backend later. Config is written
|
|
74
|
+
to `~/.rudder/config.json`.
|
|
188
75
|
|
|
189
|
-
|
|
190
|
-
the three-pane UI, creates PTYs for workers, and routes keyboard and mouse input.
|
|
76
|
+
## The dashboard
|
|
191
77
|
|
|
192
78
|
```text
|
|
193
79
|
┌───────────────┬────────────────────────────────────────────┐
|
|
194
|
-
│ agents │ worker
|
|
195
|
-
│ task list │ live Claude Code or Codex
|
|
196
|
-
│ status/model │ scrollback, review view, copy selection
|
|
80
|
+
│ agents │ worker │
|
|
81
|
+
│ task list │ live Claude Code or Codex terminal │
|
|
82
|
+
│ status/model │ scrollback, review view, copy selection │
|
|
197
83
|
├───────────────┴────────────────────────────────────────────┤
|
|
198
|
-
│ task input: new tasks, slash commands, cloud launch prompts
|
|
199
|
-
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
The worker pane is an actual terminal process. When you focus it, keystrokes go
|
|
203
|
-
to Claude Code or Codex. Rudder only intercepts global controls such as
|
|
204
|
-
`Ctrl-C`, pane focus, review mode, merge, and delete.
|
|
205
|
-
|
|
206
|
-
### Worktrees And Context
|
|
207
|
-
|
|
208
|
-
Each normal task gets its own git worktree so agents do not compete inside the
|
|
209
|
-
same checkout.
|
|
210
|
-
|
|
211
|
-
```text
|
|
212
|
-
main checkout
|
|
213
|
-
├─ .rudder/runs/<run-id>/run.json local run metadata
|
|
214
|
-
├─ RUDDER.md current agent map, gitignored
|
|
215
|
-
└─ ~/.rudder-worktrees/<repo>/<run-id> isolated agent checkout
|
|
84
|
+
│ task input: new tasks, slash commands, cloud launch prompts │
|
|
85
|
+
└──────────────────────────────────────────────────────────────┘
|
|
216
86
|
```
|
|
217
87
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
88
|
+
- **agents** (left): one row per task with its backend, model, effort, and status.
|
|
89
|
+
- **worker** (right): the real Claude Code or Codex terminal. When it is focused,
|
|
90
|
+
your keystrokes go straight to the agent, so its prompts, slash commands,
|
|
91
|
+
selection, and `Tab` all work normally.
|
|
92
|
+
- **task** (bottom): start the next agent without leaving the dashboard.
|
|
223
93
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
```
|
|
94
|
+
Mouse wheel and trackpad scroll the pane under the pointer. Over the worker or
|
|
95
|
+
review pane they scroll Rudder's captured scrollback.
|
|
227
96
|
|
|
228
|
-
|
|
229
|
-
AI resolver in the main checkout. It does not hide the conflicted git state.
|
|
97
|
+
## Keyboard shortcuts
|
|
230
98
|
|
|
231
|
-
|
|
99
|
+
**Direct (work from any pane):**
|
|
232
100
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
selected
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
The review pane is also a real terminal. Mouse wheel and trackpad events scroll
|
|
242
|
-
Rudder's captured scrollback first; if there is no Rudder scrollback to move,
|
|
243
|
-
events can pass through to the inner TUI.
|
|
244
|
-
|
|
245
|
-
### Cloud Auth
|
|
246
|
-
|
|
247
|
-
Rudder Cloud auth is separate from Claude Code and Codex auth.
|
|
248
|
-
|
|
249
|
-
```text
|
|
250
|
-
/login or rudder login
|
|
251
|
-
-> browser opens Rudder Cloud
|
|
252
|
-
-> Better Auth handles Google or GitHub
|
|
253
|
-
-> control plane issues a Rudder CLI token
|
|
254
|
-
-> local CLI writes ~/.rudder/cloud.json
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
Claude Code and Codex credentials stay in their normal locations such as
|
|
258
|
-
`~/.claude`, `~/.codex`, Keychain, or existing environment variables. Cloud
|
|
259
|
-
workers receive a filtered snapshot of useful HOME config, excluding obvious
|
|
260
|
-
high-risk material such as SSH keys, AWS credentials, Docker auth, kube config,
|
|
261
|
-
and `.env` files.
|
|
262
|
-
|
|
263
|
-
### Fly Cloud Path
|
|
264
|
-
|
|
265
|
-
Plain `rudder cloud` always uses the Fly workspace path. This keeps startup
|
|
266
|
-
predictable even if the CLI default runtime was changed to BYOC.
|
|
267
|
-
|
|
268
|
-
```text
|
|
269
|
-
rudder cloud
|
|
270
|
-
-> control plane creates or reuses a Fly workspace machine
|
|
271
|
-
-> worker initializes a fresh git repo on its workspace volume
|
|
272
|
-
-> worker starts Rudder
|
|
273
|
-
|
|
274
|
-
If the public Fly hostname resets or times out, the CLI falls back to a local
|
|
275
|
-
Fly proxy and retries the same request. This keeps the default path usable when
|
|
276
|
-
Fly public ingress is flaky, while `RUDDER_CLOUD_URL` still overrides the
|
|
277
|
-
control plane for explicit local or custom deployments.
|
|
278
|
-
|
|
279
|
-
rudder cloud onload
|
|
280
|
-
-> local CLI creates repo snapshot with selected Rudder state
|
|
281
|
-
-> control plane stores snapshot in S3
|
|
282
|
-
-> control plane creates Fly Machine
|
|
283
|
-
-> worker downloads snapshot and starts Rudder
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
The cloud indicator in the agents pane shows whether the local dashboard is
|
|
287
|
-
connected to Rudder Cloud.
|
|
288
|
-
|
|
289
|
-
### BYOC Path
|
|
290
|
-
|
|
291
|
-
BYOC is for a server you own, reachable through SSH.
|
|
292
|
-
|
|
293
|
-
```text
|
|
294
|
-
rudder cloud byoc <ssh-host>
|
|
295
|
-
-> read ~/.ssh/config
|
|
296
|
-
-> verify SSH and Docker
|
|
297
|
-
-> save host in ~/.rudder/cloud.json
|
|
298
|
-
|
|
299
|
-
rudder cloud vm "task"
|
|
300
|
-
-> upload snapshot to Rudder Cloud
|
|
301
|
-
-> receive docker run bootstrap command
|
|
302
|
-
-> run it over SSH with nohup
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
On ARM hosts, the bootstrap command switches from
|
|
306
|
-
`public.ecr.aws/exla/rudder-worker:latest` to
|
|
307
|
-
`public.ecr.aws/exla/rudder-worker:arm64`, so Jetson-style machines do not try
|
|
308
|
-
to run an amd64 worker image.
|
|
101
|
+
| Key | Action |
|
|
102
|
+
| --- | --- |
|
|
103
|
+
| `Option-1` / `Option-2` / `Option-3` | Focus the agents, worker, or task pane |
|
|
104
|
+
| `Option-v` | Toggle the selected agent's review view |
|
|
105
|
+
| `Cmd-C` | Copy the active Rudder selection |
|
|
106
|
+
| `Ctrl-C` | Quit (asks to confirm if agents are still running) |
|
|
309
107
|
|
|
310
|
-
|
|
108
|
+
`Option-1/2/3` work out of the box on macOS terminals, whether or not "Use Option
|
|
109
|
+
as Meta" is enabled.
|
|
311
110
|
|
|
312
|
-
|
|
111
|
+
**Leader: press `Ctrl-W`, then one key.** A reliable way to run a dashboard
|
|
112
|
+
command, even while typing inside the worker pane:
|
|
313
113
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
└─ heartbeat completion back to the control plane
|
|
328
|
-
```
|
|
114
|
+
| Then press | Action |
|
|
115
|
+
| --- | --- |
|
|
116
|
+
| `1` / `2` / `3` | Focus agents / worker / task |
|
|
117
|
+
| `v` | Toggle review |
|
|
118
|
+
| `m` | Merge the selected completed worktree |
|
|
119
|
+
| `M` | Merge all completed worktrees |
|
|
120
|
+
| `R` | Review all completed worktrees (Codex review-all agent) |
|
|
121
|
+
| `r` | Rename the selected agent |
|
|
122
|
+
| `u` | Sync (rebase) the selected worktree onto its base branch |
|
|
123
|
+
| `d` | Delete the selected agent and its worktree |
|
|
124
|
+
| `j` / `k` | Move the agent selection |
|
|
125
|
+
| `q` | Quit |
|
|
126
|
+
| `Esc` | Cancel the leader |
|
|
329
127
|
|
|
330
|
-
|
|
128
|
+
`Ctrl-G` toggles the same command set as a sticky "nav mode" (`Esc` exits) if you
|
|
129
|
+
prefer a held mode over the one-shot leader.
|
|
331
130
|
|
|
332
|
-
|
|
131
|
+
**In the worker pane:** keystrokes go to the agent. `Tab` / `Shift+Tab` are
|
|
132
|
+
forwarded to it, `Shift+Enter` inserts a newline, and `PageUp` / `PageDown`
|
|
133
|
+
scroll the pane.
|
|
333
134
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
The dashboard has three panes:
|
|
339
|
-
|
|
340
|
-
- `agents`: the left pane with one row per task, its backend, model, effort, and
|
|
341
|
-
completion status
|
|
342
|
-
- `worker`: the right pane with the actual Claude Code or Codex terminal
|
|
343
|
-
- `task`: the bottom input for starting a new agent
|
|
344
|
-
|
|
345
|
-
Type a task in the task pane and press `Enter`. Rudder creates a worktree,
|
|
346
|
-
writes the current agent context to `RUDDER.md`, and starts the selected backend
|
|
347
|
-
inside the worker pane.
|
|
348
|
-
|
|
349
|
-
When the worker pane is focused, your keystrokes go directly to Claude Code or
|
|
350
|
-
Codex. Their slash commands, cursor movement, copy/paste, and terminal UI
|
|
351
|
-
continue to work normally. `Ctrl-C` is reserved by Rudder and leaves the
|
|
352
|
-
dashboard from any pane.
|
|
353
|
-
|
|
354
|
-
Rudder owns mouse input inside the dashboard. Wheel or trackpad scrolling is
|
|
355
|
-
routed to the pane under the pointer. Over the worker or review pane, it scrolls
|
|
356
|
-
Rudder's captured pane output, not the underlying Claude Code, Codex, or Hunk
|
|
357
|
-
chat. Use the worker's up and down arrow keys when you want to move through the
|
|
358
|
-
agent's own prompt history or menus. Drag selection inside the worker pane
|
|
359
|
-
copies selected text, including when you drag upward past the top of the pane.
|
|
360
|
-
For full-screen alternate-screen workers, Rudder keeps its own pane history so
|
|
361
|
-
trackpad scrolling moves the pane instead of depending on the child app. If the
|
|
362
|
-
pane has no Rudder scrollback to move and the inner TUI has explicitly requested
|
|
363
|
-
mouse input, Rudder passes the wheel event through so Claude Code, Codex, Hunk,
|
|
364
|
-
or another full-screen app can scroll its own view.
|
|
365
|
-
|
|
366
|
-
Codex needs one extra guard. Rudder launches its pinned `rudder-codex` fork with
|
|
367
|
-
`--no-alt-screen`, `CODEX_RUDDER_SCROLLBACK_SAFE=1`, `-c notify=[]`,
|
|
368
|
-
`-c features.plugins=false`, and `-c features.computer_use=false`, so Codex keeps
|
|
369
|
-
its normal renderer without clearing the parent pane's scrollback and does not
|
|
370
|
-
inherit desktop-app notification hooks or bundled plugin helpers that expect the
|
|
371
|
-
official signed app launch chain. Codex still inserts finalized transcript rows with
|
|
372
|
-
top-origin terminal scroll regions rather than ordinary newlines. Rudder's
|
|
373
|
-
embedded `vt100` parser does not expose those rows as normal scrollback, so the
|
|
374
|
-
native worker pane mirrors rows that leave a top-origin scroll region into
|
|
375
|
-
Rudder-owned pane scrollback before applying the bytes to the parser. Wheel and
|
|
376
|
-
trackpad events then scroll that pane history first, which makes Codex and
|
|
377
|
-
Claude worker panes follow the same rule: Rudder scrolls the visible worker
|
|
378
|
-
transcript, and only forwards wheel events to an inner TUI when Rudder has no
|
|
379
|
-
pane scrollback to move.
|
|
380
|
-
|
|
381
|
-
Keep that behavior covered with:
|
|
135
|
+
**In the agents pane:** `j` / `k` or arrows move the selection, `Enter` focuses
|
|
136
|
+
the worker, and `m` / `M` / `R` / `r` / `u` / `d` act on the selection.
|
|
382
137
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
138
|
+
**In the task pane:** `Enter` starts the task, `Up` / `Down` browse history,
|
|
139
|
+
`Alt-Left` / `Alt-Right` move by word, `Alt-Backspace` (or `Ctrl-Backspace`)
|
|
140
|
+
deletes the previous word, and `/` opens command suggestions.
|
|
386
141
|
|
|
387
|
-
|
|
388
|
-
worker wheel routing tests for normal screen, alternate screen, and edge
|
|
389
|
-
forwarding. If a local dashboard still behaves like an older build, check
|
|
390
|
-
`rudder --version`, upgrade with `npm install -g @viraatdas/rudder@latest`, and
|
|
391
|
-
restart existing Rudder dashboards so no stale `rudder-native` or managed Codex
|
|
392
|
-
process is still running.
|
|
142
|
+
## Task pane commands
|
|
393
143
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
| Key | Action |
|
|
397
|
-
| --- | --- |
|
|
398
|
-
| `Enter` | Start the typed task, or focus the selected worker when the task input is empty |
|
|
399
|
-
| `Option-1` / `Option-2` / `Option-3` | Focus agents, worker, or task directly |
|
|
400
|
-
| `Tab` / `Shift+Tab` in worker | Forward to the focused agent TUI |
|
|
401
|
-
| `Ctrl-G` | Toggle Rudder nav mode while focused inside a worker |
|
|
402
|
-
| `Alt-v` | Toggle the selected agent's review view from any pane |
|
|
403
|
-
| `Shift+Enter` | Insert a new line in the focused worker prompt |
|
|
404
|
-
| `PageUp` / `PageDown` | Scroll the focused worker pane by roughly one page |
|
|
405
|
-
| `j` / `k` or arrows | Move through agents when the agents pane is focused |
|
|
406
|
-
| `Up` / `Down` | Browse task history when the task pane is focused |
|
|
407
|
-
| `Alt-Left` / `Alt-Right` | Move by word in the task pane and in supported worker prompts |
|
|
408
|
-
| `Alt-Backspace` / `Ctrl-W` | Delete the previous word in the task pane and in supported worker prompts |
|
|
409
|
-
| `Cmd-C` / `Meta-C` | Copy the active Rudder text selection without forwarding `c` to the worker |
|
|
410
|
-
| `Ctrl-C` | Leave Rudder from any pane |
|
|
411
|
-
| `v` | Toggle the selected agent's review view |
|
|
412
|
-
| `Esc` | Leave the review view when it is focused |
|
|
413
|
-
| `r` | Restart the selected stopped agent in its worktree |
|
|
414
|
-
| `m` | Merge the selected completed worktree |
|
|
415
|
-
| `R` | Combine completed worktrees and start a Codex review-all agent when the agents pane or nav mode is active |
|
|
416
|
-
| `M` | Merge all completed worktrees when the agents pane or nav mode is active |
|
|
417
|
-
| `dd` | Delete the selected agent and remove its worktree; if it has changes, Rudder gives you a merge chance first |
|
|
418
|
-
| `q` | Quit when the worker is not consuming input |
|
|
419
|
-
|
|
420
|
-
## Task Pane Commands
|
|
421
|
-
|
|
422
|
-
Type `/` in the task pane to open command suggestions. Use `Up`/`Down` to move
|
|
423
|
-
through suggestions and `Enter` to choose one.
|
|
144
|
+
Type `/` in the task pane to open suggestions. Move with `Up` / `Down`, choose
|
|
145
|
+
with `Enter`.
|
|
424
146
|
|
|
425
147
|
| Command | Action |
|
|
426
148
|
| --- | --- |
|
|
427
|
-
| `/model` |
|
|
428
|
-
| `/main` or `/m` | Start a new main-branch agent
|
|
429
|
-
| `/plan` | Toggle
|
|
430
|
-
| `/plan <task>` |
|
|
431
|
-
| `/rudder-plan <task>` |
|
|
149
|
+
| `/model` | Pick provider, then model, then effort |
|
|
150
|
+
| `/main` or `/m` | Start a new main-branch agent |
|
|
151
|
+
| `/plan` | Toggle read-only plan mode |
|
|
152
|
+
| `/plan <task>` | Run one read-only planning session |
|
|
153
|
+
| `/rudder-plan <task>` | Plan, then spawn worker agents for the steps |
|
|
432
154
|
| `/run <task>` | Start an implementation run even when plan mode is on |
|
|
155
|
+
| `/sync` | Rebase the selected worktree onto its base branch |
|
|
433
156
|
| `/review-all` | Combine completed worktrees and start a Codex review-all agent |
|
|
434
157
|
| `/merge-all` | Merge all completed worktrees |
|
|
435
|
-
| `/login` |
|
|
436
|
-
| `/cloud` |
|
|
437
|
-
| `/cloud <task>` | Start a cloud task worker |
|
|
438
|
-
| `/cloud byoc <ssh-host>` | Use an SSH host from `~/.ssh/config` for BYOC cloud workers |
|
|
439
|
-
| `/cloud runtime [fly\|byoc]` | Show or set the saved cloud runtime |
|
|
158
|
+
| `/login` | Browser login for Rudder Cloud |
|
|
159
|
+
| `/cloud` | Onload the current workspace or start a fresh cloud worker |
|
|
440
160
|
| `/cloud list` | List cloud workers |
|
|
441
|
-
| `/cloud logs <id>` | Show cloud worker status while log streaming is pending |
|
|
442
|
-
| `/cloud help` | Show cloud command help |
|
|
443
|
-
| `/sail <name or task>` | Short alias for starting a cloud worker |
|
|
444
161
|
| `/help` | Show the short command hint |
|
|
445
162
|
|
|
446
|
-
Use `Ctrl-G` before a Rudder shortcut if the worker pane is focused and you want
|
|
447
|
-
the key handled by Rudder instead of by Claude Code or Codex.
|
|
448
|
-
|
|
449
|
-
If trackpad scrolling does not behave as expected, run
|
|
450
|
-
`rudder mouse-test parsed` to confirm your terminal is sending `ScrollUp` and
|
|
451
|
-
`ScrollDown` events. For lower-level escape bytes, run `rudder mouse-test raw`.
|
|
452
|
-
To inspect live dashboard routing, start Rudder with `RUDDER_MOUSE_DEBUG=1`.
|
|
453
|
-
Rudder scrolls one terminal row per wheel event by default so trackpad scrolling
|
|
454
|
-
feels smooth in worker and review panes. Override with
|
|
455
|
-
`RUDDER_WHEEL_SCROLL_ROWS=<n>` if your terminal is configured differently.
|
|
456
|
-
|
|
457
163
|
## Models
|
|
458
164
|
|
|
459
|
-
Run `/model`
|
|
460
|
-
model
|
|
165
|
+
Run `/model` and pick the provider, then the model, then the effort level the
|
|
166
|
+
model supports. Claude offers aliases like `sonnet`, `opus`, `haiku` (and the
|
|
167
|
+
`[1m]` long-context variants); Codex offers `gpt-5.5`, `gpt-5.4-codex`, and other
|
|
168
|
+
discovered models. `auto` effort means Rudder passes no override.
|
|
461
169
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
- Codex models include Codex-relevant OpenAI model IDs such as `gpt-5.5`,
|
|
466
|
-
`gpt-5.4`, `gpt-5.4-mini`, and discovered GPT-5/Codex models.
|
|
467
|
-
- `auto` effort means Rudder does not pass an effort override.
|
|
170
|
+
Your last provider, model, and effort are saved in `~/.rudder/config.json` and
|
|
171
|
+
reused next time. Rudder refreshes model metadata from
|
|
172
|
+
`https://models.dev/api.json` and falls back to local caches when offline.
|
|
468
173
|
|
|
469
|
-
|
|
470
|
-
`~/.rudder/config.json`, so the same defaults are used when you open a new
|
|
471
|
-
dashboard or shell session.
|
|
174
|
+
## Plan mode
|
|
472
175
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
176
|
+
Type `/plan` to toggle planning on or off. While on, `Enter` starts a read-only
|
|
177
|
+
planner instead of an implementation run. Use `/plan <task>` for a one-off plan,
|
|
178
|
+
or `/run <task>` to bypass plan mode. `/rudder-plan <task>` plans and then starts
|
|
179
|
+
each resulting step as its own worktree agent. Planners run in the current
|
|
180
|
+
checkout and use each backend's native read-only mode, so they do not write
|
|
181
|
+
files.
|
|
477
182
|
|
|
478
|
-
##
|
|
183
|
+
## Worktrees and merging
|
|
479
184
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
185
|
+
Every dashboard task runs in its own git worktree under `~/.rudder-worktrees/...`,
|
|
186
|
+
so parallel agents never edit the same checkout. Run records live under
|
|
187
|
+
`.rudder/runs/`. If you quit Rudder, live workers stop but the agents stay listed
|
|
188
|
+
the next time you open Rudder in that repo.
|
|
483
189
|
|
|
484
|
-
|
|
190
|
+
- Press `m` to merge the selected completed agent back into its branch.
|
|
191
|
+
- Press `M` to merge all completed agents. Rudder confirms first.
|
|
192
|
+
- Press `u` (or run `/sync`) to only rebase a worktree onto its base.
|
|
485
193
|
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
--model <model> \
|
|
490
|
-
--effort <effort> "<task>"
|
|
491
|
-
```
|
|
194
|
+
Clean merges become merge commits. If git reports conflicts, Rudder leaves the
|
|
195
|
+
conflicted state in place and can open an agent in the main checkout to help
|
|
196
|
+
resolve it.
|
|
492
197
|
|
|
493
|
-
|
|
198
|
+
Choose the merge behavior in `~/.rudder/config.json`:
|
|
494
199
|
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
--dangerously-bypass-approvals-and-sandbox \
|
|
498
|
-
-c model_reasoning_summary="detailed" \
|
|
499
|
-
-c model_supports_reasoning_summaries=true \
|
|
500
|
-
-c model_reasoning_effort="<effort>" \
|
|
501
|
-
-m <model> "<task>"
|
|
200
|
+
```json
|
|
201
|
+
{ "mergeStrategy": "rebase" }
|
|
502
202
|
```
|
|
503
203
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
## Plan Mode
|
|
507
|
-
|
|
508
|
-
Type `/plan` to toggle planning on or off. While it is on, pressing `Enter`
|
|
509
|
-
starts a planner instead of an
|
|
510
|
-
implementation run. You can also use `/plan <task>` for a one-off plan, or
|
|
511
|
-
`/run <task>` to bypass plan mode and start a normal worktree agent.
|
|
512
|
-
|
|
513
|
-
Planning sessions use the currently selected Claude or Codex model and lean on
|
|
514
|
-
the backend's native planning/read-only controls:
|
|
515
|
-
|
|
516
|
-
- The planner runs in the current checkout instead of creating a worktree.
|
|
517
|
-
- Codex planners launch with `--sandbox read-only`, `--ask-for-approval never`,
|
|
518
|
-
`--enable goals`, and `--search`, so filesystem writes are blocked, Codex
|
|
519
|
-
goals are available, and the native Responses `web_search` tool is available.
|
|
520
|
-
- Claude planners launch with Claude Code's native `--permission-mode plan`.
|
|
521
|
-
|
|
522
|
-
`/rudder-plan <task>` uses the same read-only planner controls, but asks the
|
|
523
|
-
planner to emit a structured `RUDDER_PLAN_TASKS` block. When Rudder sees that
|
|
524
|
-
block, it starts each listed task as a normal isolated worktree agent. For
|
|
525
|
-
larger tasks with a clear validation loop, the planner can attach a durable
|
|
526
|
-
Codex `/goal` objective; Rudder passes that into the worker prompt so Codex can
|
|
527
|
-
set the goal before implementation. If the planner asks follow-up questions
|
|
528
|
-
instead of emitting the block, Rudder does not spawn workers.
|
|
529
|
-
- Rudder only prefixes the task with a short planning request; it no longer
|
|
530
|
-
injects a custom planner contract.
|
|
531
|
-
- Normal implementation runs are unchanged: they still create worktrees and use
|
|
532
|
-
the full-permission worker launch described above.
|
|
533
|
-
|
|
534
|
-
## Worktrees And Merging
|
|
535
|
-
|
|
536
|
-
Every dashboard task runs in its own git worktree under
|
|
537
|
-
`~/.rudder-worktrees/...`, so parallel agents do not edit the same checkout.
|
|
538
|
-
Run records are saved under `.rudder/runs/`. If you exit Rudder, live worker
|
|
539
|
-
processes stop, but the agents remain listed next time you open Rudder in the
|
|
540
|
-
same repo.
|
|
541
|
-
|
|
542
|
-
Press `m` to merge the selected completed agent back into the original branch.
|
|
543
|
-
Press `M` to merge all completed agents. Rudder asks for confirmation before
|
|
544
|
-
merging. Clean merges become merge commits; if git reports conflicts, Rudder can
|
|
545
|
-
open an agent in the main checkout to help resolve them.
|
|
204
|
+
- `"merge"` (default): `git merge --no-ff`.
|
|
205
|
+
- `"rebase"`: rebase the worktree onto the latest base, then `git merge --ff-only`.
|
|
546
206
|
|
|
547
207
|
Command-line equivalents:
|
|
548
208
|
|
|
549
209
|
```bash
|
|
550
210
|
rudder merge <runId>
|
|
211
|
+
rudder sync <runId>
|
|
551
212
|
rudder cleanup
|
|
552
213
|
```
|
|
553
214
|
|
|
554
|
-
##
|
|
215
|
+
## Review
|
|
555
216
|
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
217
|
+
Press `v` on an agent to toggle a review of its worktree. Rudder uses
|
|
218
|
+
[Hunk](https://hunk.dev) when available (installing `hunkdiff` on first use) and
|
|
219
|
+
falls back to a live `git diff` otherwise. Press `v` or `Esc` to return to the
|
|
220
|
+
worker. Set `RUDDER_REVIEW_TOOL=git` to force the diff fallback, or
|
|
221
|
+
`RUDDER_HUNK_THEME=<name>` to change the review theme.
|
|
559
222
|
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
223
|
+
Press `R` to review all completed worktrees as one bundle: Rudder builds an
|
|
224
|
+
aggregate branch and starts a Codex review-all agent over the combined diff. When
|
|
225
|
+
that row is done, press `m` on it to merge the reviewed bundle into your checkout.
|
|
563
226
|
|
|
564
|
-
##
|
|
227
|
+
## Rudder Cloud
|
|
565
228
|
|
|
566
|
-
|
|
229
|
+
Rudder Cloud is an optional hosted worker mode. The local dashboard stays your
|
|
230
|
+
control surface; you decide whether a task runs locally or is handed to the cloud.
|
|
567
231
|
|
|
568
232
|
```bash
|
|
569
|
-
|
|
233
|
+
rudder login # connect this machine to Rudder Cloud
|
|
234
|
+
rudder cloud # onload the current workspace or start a worker
|
|
235
|
+
rudder cloud list # list cloud workers
|
|
236
|
+
rudder cloud logs <id> # worker status
|
|
237
|
+
rudder cloud onload [runId] # upload the current workspace (or one run)
|
|
238
|
+
rudder sail <name> # short alias for starting a cloud worker
|
|
570
239
|
```
|
|
571
240
|
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
241
|
+
Inside the dashboard, `/login` starts browser auth and `/cloud` opens a
|
|
242
|
+
confirmation pane: the default option onloads the current workspace (repo
|
|
243
|
+
snapshot plus selected auth/config) to a Fly worker; press Down to start a fresh
|
|
244
|
+
scratch worker instead. Completed cloud work returns through the same review and
|
|
245
|
+
merge path as local work.
|
|
577
246
|
|
|
578
|
-
|
|
579
|
-
aggregate worktree, commits pending source-worktree changes, merges the
|
|
580
|
-
completed agent branches into that aggregate branch, and starts a Codex
|
|
581
|
-
`gpt-5.5` review-all agent with a `/review` prompt. If the pre-merge hits a
|
|
582
|
-
conflict, that same review agent starts in the conflicted aggregate worktree and
|
|
583
|
-
is instructed to resolve it before continuing.
|
|
584
|
-
|
|
585
|
-
When the Codex review-all row is done, press `m` on that row to merge the
|
|
586
|
-
reviewed aggregate branch back into the main checkout. Rudder then marks the
|
|
587
|
-
source agent rows as merged too.
|
|
588
|
-
|
|
589
|
-
Rudder writes a per-worktree `.hunk/config.toml` in Hunk's light mode and
|
|
590
|
-
ignores that config through git's local info exclude, so it does not get merged.
|
|
591
|
-
Set `RUDDER_HUNK_THEME=paper` or another Hunk theme name to override it.
|
|
592
|
-
|
|
593
|
-
On dashboard startup, Rudder installs `hunkdiff@latest` automatically if neither
|
|
594
|
-
`hunk` nor `hunkdiff` is available. If the install fails, or if you set
|
|
595
|
-
`RUDDER_REVIEW_TOOL=git`, the review pane falls back to a live `git diff` view
|
|
596
|
-
instead of downloading anything when you first press `v`.
|
|
597
|
-
|
|
598
|
-
Rudder also injects Hunk review guidance into `RUDDER.md` and the worker prompt.
|
|
599
|
-
Agents are told to run `hunk skill path`, load the Hunk review skill, and use
|
|
600
|
-
`hunk session review --repo . --json` plus `hunk session comment ...` commands
|
|
601
|
-
against the live review.
|
|
602
|
-
|
|
603
|
-
## One-Shot Commands
|
|
247
|
+
Cloud workers use Fly Machines by default. To use your own server over SSH:
|
|
604
248
|
|
|
605
249
|
```bash
|
|
606
|
-
rudder
|
|
607
|
-
rudder
|
|
608
|
-
rudder
|
|
609
|
-
rudder run --worktree "try the alternate implementation"
|
|
250
|
+
rudder cloud byoc <ssh-host> # an entry from ~/.ssh/config, key auth + Docker
|
|
251
|
+
rudder cloud vm "task" # run on that host
|
|
252
|
+
rudder cloud runtime [fly|byoc]
|
|
610
253
|
```
|
|
611
254
|
|
|
612
|
-
|
|
255
|
+
The CLI points at the hosted control plane `https://rudder-cloud-control.fly.dev`.
|
|
256
|
+
Set `RUDDER_CLOUD_URL` to use your own deployment. Rudder Cloud login is separate
|
|
257
|
+
from Claude Code and Codex login; provider auth stays in the official CLIs.
|
|
258
|
+
|
|
259
|
+
## Run management
|
|
613
260
|
|
|
614
261
|
```bash
|
|
615
262
|
rudder status
|
|
@@ -619,30 +266,42 @@ rudder logs <runId> --follow
|
|
|
619
266
|
rudder stop <runId>
|
|
620
267
|
rudder delete <runId>
|
|
621
268
|
rudder merge <runId>
|
|
269
|
+
rudder sync <runId>
|
|
622
270
|
rudder cleanup
|
|
623
271
|
```
|
|
624
272
|
|
|
625
|
-
##
|
|
273
|
+
## Other interfaces
|
|
626
274
|
|
|
627
|
-
The native dashboard is the default. Older interfaces
|
|
275
|
+
The native dashboard is the default. Older interfaces remain available:
|
|
628
276
|
|
|
629
277
|
```bash
|
|
630
|
-
rudder tmux
|
|
631
|
-
rudder tui
|
|
632
|
-
rudder --no-native
|
|
278
|
+
rudder tmux # legacy tmux dashboard
|
|
279
|
+
rudder tui # Ink-based interactive TUI
|
|
280
|
+
rudder --no-native # skip the native binary
|
|
633
281
|
```
|
|
634
282
|
|
|
635
|
-
##
|
|
283
|
+
## Troubleshooting
|
|
284
|
+
|
|
285
|
+
- Stale behavior after an upgrade: check `rudder --version`, reinstall with
|
|
286
|
+
`npm install -g @viraatdas/rudder@latest`, and restart any running Rudder
|
|
287
|
+
dashboards so no old `rudder-native` process lingers.
|
|
288
|
+
- Trackpad scrolling: confirm your terminal sends scroll events with
|
|
289
|
+
`rudder mouse-test parsed`. Set `RUDDER_WHEEL_SCROLL_ROWS=<n>` to change the
|
|
290
|
+
scroll step, or `RUDDER_MOUSE_DEBUG=1` to inspect routing.
|
|
291
|
+
|
|
292
|
+
## Building from source
|
|
636
293
|
|
|
637
294
|
```bash
|
|
638
295
|
git clone https://github.com/viraatdas/rudder.git
|
|
639
296
|
cd rudder
|
|
640
|
-
|
|
641
|
-
cargo test --manifest-path native/Cargo.toml
|
|
642
|
-
npm run check
|
|
643
|
-
npm run build
|
|
297
|
+
./setup.sh
|
|
644
298
|
```
|
|
645
299
|
|
|
300
|
+
`setup.sh` checks prerequisites (Node >=20, git, npm, Rust/`cargo`), installs
|
|
301
|
+
dependencies, builds (`tsc` + `cargo build --release`), typechecks, and smoke
|
|
302
|
+
tests the CLI. It is safe to re-run after pulling. For architecture and
|
|
303
|
+
implementation details, see [`AGENTS.md`](./AGENTS.md).
|
|
304
|
+
|
|
646
305
|
## License
|
|
647
306
|
|
|
648
307
|
MIT
|