Skip to content

Commit 0595796

Browse files
committed
Improve docs for Claude
1 parent a53a275 commit 0595796

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

AGENTS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ Run the smallest set of checks possible for efficiency while maintaining confide
5757
- Run all: `./scripts/check.sh`. Runs all tests, linters, and formatters (with auto fixing) for all apps.
5858
- **E2E testing**: Docker E2E, Playwright smoke tests, VNC debugging, fixture system — see the colocated
5959
CLAUDE.md files in `apps/desktop/test/e2e-linux/` and `apps/desktop/test/e2e-macos/`
60+
- **Ubuntu test VM**: SSH access, toolchain, and agent one-liners are in
61+
`apps/desktop/test/e2e-linux/CLAUDE.md` § "Ubuntu test VM".
6062
- See also `./scripts/check.sh --help`
6163
- **CI**: Runs automatically on PRs and pushes to main, but only for changed files. To run all checks regardless of
6264
changes: Actions → CI → "Run workflow" → select branch → Run workflow.

apps/desktop/test/e2e-linux/CLAUDE.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,28 @@ Managed by [mise](https://mise.jdx.dev/) — versions from `.mise.toml`. Always
187187
Rust via rustup (`rust-toolchain.toml`), Node/pnpm/Go via mise. System packages (Tauri prereqs, WebKitGTK dev libs) via
188188
apt.
189189

190+
### Running commands via SSH (for agents)
191+
192+
`mise activate` doesn't work in non-interactive SSH one-liners. Use explicit PATH setup instead. Also, `DISPLAY=:0` must
193+
be set — without it, `@wdio/xvfb` (bundled with `@wdio/local-runner`) auto-wraps worker processes with `xvfb-run`, which
194+
breaks Node.js IPC channels (`Error: write EINVAL` on `process.send()`).
195+
196+
**Always run `pnpm install` first** — the VM bind-mounts its own `node_modules` over the shared macOS ones, so they need
197+
to be kept in sync with the lockfile separately.
198+
199+
```bash
200+
# SSH one-liner setup (paste this prefix before any command)
201+
MISE_PATH="/home/veszelovszki/.local/share/mise/installs"
202+
export PATH="$MISE_PATH/node/25.6.0/bin:$MISE_PATH/pnpm/10.29.2:$MISE_PATH/go/1.25.7/bin:$PATH"
203+
export DISPLAY=:0
204+
205+
# Run E2E tests via SSH (full one-liner)
206+
ssh veszelovszki@192.168.1.97 'MISE_PATH="/home/veszelovszki/.local/share/mise/installs" && export PATH="$MISE_PATH/node/25.6.0/bin:$MISE_PATH/pnpm/10.29.2:$MISE_PATH/go/1.25.7/bin:$PATH" && export DISPLAY=:0 && cd ~/cmdr && pnpm install && cd apps/desktop && pnpm test:e2e:linux:native'
207+
```
208+
209+
If mise tool versions change (check `.mise.toml`), update the paths above. Find installed paths with `mise where node`,
210+
`mise where pnpm`, etc.
211+
190212
### Common tasks
191213

192214
```bash
@@ -204,7 +226,8 @@ software-emulated GPU). Real Linux machines with a GPU don't need this.
204226
- **Shared folder not mounted**: `sudo mount -a`
205227
- **node_modules bind mounts not active**: `mountpoint -q ~/cmdr/node_modules || sudo mount -a`
206228
- **VM IP changed**: Check inside VM: `ip addr show | grep 'inet ' | grep -v 127.0.0.1`
207-
- **pnpm/node not found**: `eval "$(mise activate bash)"`
229+
- **pnpm/node not found**: `eval "$(mise activate bash)"` (interactive) or use the explicit PATH from "Running commands
230+
via SSH" above (non-interactive)
208231

209232
## Files
210233

0 commit comments

Comments
 (0)