diff --git a/skill/SKILL.md b/skill/SKILL.md index 5c3018342..d83a828f3 100644 --- a/skill/SKILL.md +++ b/skill/SKILL.md @@ -28,6 +28,10 @@ scp file.txt .exe.xyz:~/ # transfer file Every VM gets `https://.exe.xyz/` with automatic TLS. +## Naming + +VM names are globally unique across all exe.dev customers. If `new --name=` errors with `"this VM name is not available"`, the slug is taken (by you or someone else) — pick another. Generic names like `app`, `staging`, `demo` are mostly gone; add a suffix (`-` or a short random) for any new VM you intend to keep. + ## A tale of two SSH destinations - **`ssh exe.dev `** — the exe.dev lobby. A REPL for VM lifecycle, sharing, and configuration. Does not support scp, sftp, or arbitrary shell commands. @@ -48,3 +52,17 @@ Host exe.dev *.exe.xyz IdentitiesOnly yes IdentityFile ~/.ssh/id_ed25519 ``` + +**Multi-line commands**: Heredocs and embedded newlines collapse when passed inside a quoted argument to `ssh .exe.xyz ""` from many shells (`\n` flattens to spaces, breaking scripts). Feed multi-line scripts via `bash -s` over stdin instead: + +``` +ssh .exe.xyz 'bash -s' <<'EOF' +set -e +sudo apt-get update +# ... +EOF +``` + +For non-text content (binaries, anything sensitive to whitespace), base64-encode locally and decode on the VM. + +**Lobby-routed VM shell**: `ssh exe.dev ssh ""` runs a shell command on the VM via the lobby. Convenient in non-interactive scripts — the lobby's host key is already trusted, so there's no per-VM `known_hosts` setup or `accept-new` prompt. (No scp/sftp through this path; use direct `.exe.xyz` for transfers.)