Connect to Vast.ai GPU instances -- sync SSH configs, set up your project, and open your IDE.
Project description
Vastly
Connect to Vast.ai GPU instances from your terminal: sync SSH configs, set up your project remotely, and open your IDE in one command.
Prerequisites
- Python 3.9+
- Vast.ai CLI (
pip install vastai) with API key configured - Git
- VS Code or Cursor with the Remote-SSH extension
Install
pip install vastly
Usage
cd your-project # any local git repo
vst # checks setup -> opens IDE (sets up on first run)
vst 1xRTX4090-TW # target a specific instance by name
vst --no-setup # open IDE on the remote without cloning or installing anything
vst --version # show version
How It Works
1. Sync
Calls the Vast.ai API and writes an SSH config for each running instance to ~/.ssh/vast.d/. On first run, adds Include vast.d/* to ~/.ssh/config.
Instances are named by GPU and region (e.g. 1xRTX4090-TW, 2xA100-US). Duplicates get the instance ID appended (1xRTX4090-TW-12345).
2. Select
One instance is selected automatically. Multiple instances prompt you to pick one or select all. You can also pass the name directly: vst 1xRTX4090-TW.
3. Setup (first run only)
For each selected instance, vst checks if the project has already been set up by looking for a marker file at ~/.vastly/setup/<repo>.json on the instance. If the marker exists, it skips straight to opening the IDE.
On first run (no marker), vst reads the remote URL from your local git repo, copies a setup script to the instance, and runs it.
The setup script (setup-remote.sh):
- Disables auto-tmux (on by default, configurable)
- Configures git identity from your local
git config - Adds
github.comto SSH known hosts - Clones your repo into the workspace
- Installs Python dependencies (auto-detected)
- Runs any configured post-install commands
- Writes VS Code settings and patches
.bashrc - Writes a setup marker (
~/.vastly/setup/<repo>.json) so setup is skipped next time
Dependency auto-detection (checked in order):
uv.lockor[tool.uv]in pyproject.toml --uv sync(installs uv if needed)[project]in pyproject.toml --pip install -e .requirements*.txt--pip install -rfor each filesetup.py--pip install -e .
Override with installCommand in your config.
4. Open
Launches your IDE via Remote-SSH at the project directory. If already open, focuses the existing window.
Configuration
On first run, vst creates ~/.vastly.json with defaults:
{
// "code" (VS Code) or "cursor"
"ide": "code",
// Path to SSH private key. null = use your SSH config or ssh-agent
"sshKeyPath": null,
// SSH user on remote instances
"sshUser": "root",
// Ports to forward to localhost. Set to [] to disable
// Local ports auto-increment when multiple instances are running
"portForwards": [
{ "local": 8080, "remote": 8080 }
],
// Remote directory where projects are cloned
"workspace": "/workspace",
// Creates ~/.no_auto_tmux to prevent auto-tmux on Vast images
"disableAutoTmux": true,
// Which git remote to read the repo URL from
"gitRemote": "origin",
// Commands to run after dependency install
// e.g. ["curl -fsSL https://claude.ai/install.sh | bash"]
"postInstall": [],
// Override auto-detected install method. null = auto-detect
// e.g. "uv sync", "pip install -e '.[dev]'", "conda env update -f environment.yml"
"installCommand": null
}
Troubleshooting
"Missing: vastai CLI" -- pip install vastai, then vastai set api-key <key>.
SSH connection timeout -- Instance may still be booting. Setup retries 3 times. Run vastai show instances to check status.
"Not in a git repo" -- vst reads the remote URL from your local repo. Run from inside a git repo, or use --no-setup.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vastly-0.2.3.tar.gz.
File metadata
- Download URL: vastly-0.2.3.tar.gz
- Upload date:
- Size: 23.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c1806c17ec6453a1c57e6f717de7593d57d56cdb6ad100f098cb9b47f18bb85
|
|
| MD5 |
954adb13d10b52cc8972b9da2f31c4a9
|
|
| BLAKE2b-256 |
fc217f872a799a7c7df42de4d1d8ba240841d0740821123a84c89d36e7e9bb31
|
File details
Details for the file vastly-0.2.3-py3-none-any.whl.
File metadata
- Download URL: vastly-0.2.3-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
004e740aeeb2e9b1c1b71f673361defb048a5a953b89581a8bd13a4a89e50c7d
|
|
| MD5 |
b3c26b37ddec7a2195512b1d45d974a5
|
|
| BLAKE2b-256 |
690b9f072150b8cbc9b9dfd04e905c4662c38029806f74ece592280331e99bfb
|