Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
fae62ec
feat: add structured output, shell completion, ssh, describe, and wait
Apr 2, 2026
d24fe63
docs: update README with new commands and global flags
Apr 2, 2026
6e53fea
feat: add images, availability, and cost commands
Apr 2, 2026
3236f47
fix(cost): use list-all endpoint instead of single-type lookup
Apr 2, 2026
7c20a0b
fix(cost): use lowercase currency to match API expectations
Apr 2, 2026
3543569
fix(cost): remove price-history subcommand
Apr 2, 2026
ebcdd50
feat: add verda locations command
Apr 2, 2026
61c348b
test+docs: add locations tests and update README
Apr 2, 2026
6c947e2
feat(cost): add running subcommand and live test script
Apr 2, 2026
8f8116a
test+docs: add running cost tests and update README
Apr 2, 2026
28a5a14
fix: suppress spinners for structured output
Apr 2, 2026
f982029
feat: add instance-types command and non-interactive vm list
Apr 2, 2026
9939cc8
fix(instance-types): clean GPU descriptions and improve formatting
Apr 2, 2026
0a8d42c
fix(vm list): dynamic hostname column width in table mode
Apr 2, 2026
7e1d111
docs: add instance-types to README
Apr 2, 2026
76413fc
refactor: move renderVolumeSummary to dedicated view.go
hi-lei Apr 3, 2026
adab606
refactor: extract UniqueVolumeIDs to shared util
hi-lei Apr 3, 2026
9fc431e
feat: code review fixes, interactive pickers, and test infrastructure
hi-lei Apr 3, 2026
a1ab051
fix: version output and instance card display issues
hi-lei Apr 3, 2026
8a6d545
fix(version): show only version and platform by default
hi-lei Apr 3, 2026
7eff764
feat(vm): add availability command showing instance specs and pricing
hi-lei Apr 3, 2026
f035a98
fix: resolve gosec G204 and G602 lint warnings
hi-lei Apr 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Build artifacts
bin/
_output/
verda

# Local smoke-test output (see test/run.sh)
tmp/
Expand Down Expand Up @@ -360,3 +361,15 @@ tmp-test-*/

# VHS demo recordings
vhs/

# Live test script (contains local testing logic)
scripts/live-test.sh

# Claude Code local config (absolute paths, machine-specific)
.claude/settings.json
.claude/commands/
.claude/topic-switch.json

# AI working notes and implementation plans (not shipped)
.ai/notes/
docs/plans/
135 changes: 118 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,22 @@ Auth Commands:

VM Commands:
vm Manage VM instances
ssh SSH into a running VM instance

Resource Commands:
availability Check instance type availability
images List available OS images
instance-types List instance types with specs and pricing
locations List datacenter locations
ssh-key Manage SSH keys
startup-script Manage startup scripts
volume Manage volumes

Info Commands:
cost Cost estimation, pricing, and billing

Other Commands:
completion Generate shell completion scripts
settings Manage CLI settings
update Update Verda CLI to latest or specific version
version Print version information
Expand All @@ -125,23 +134,76 @@ Other Commands:
### VM


| Command | Description |
| ----------------- | ------------------------------------------ |
| `verda vm create` | Create a VM (interactive wizard or flags) |
| `verda vm list` | List and inspect VM instances |
| `verda vm action` | Start, shutdown, hibernate, or delete a VM |
| Command | Description |
| -------------------- | ------------------------------------------ |
| `verda vm create` | Create a VM (interactive wizard or flags) |
| `verda vm list` | List and inspect VM instances |
| `verda vm describe` | Show detailed info about a single VM |
| `verda vm action` | Start, shutdown, hibernate, or delete a VM |


### SSH

```bash
# Connect by hostname
verda ssh gpu-runner

# Connect with options
verda ssh gpu-runner --user ubuntu --key ~/.ssh/id_ed25519

# Port forwarding and other ssh args
verda ssh gpu-runner -- -L 8080:localhost:8080
```

### Volume


| Command | Description |
| --------------------- | -------------------------------------------- |
| `verda volume create` | Create a block storage volume |
| `verda volume list` | List volumes |
| `verda volume action` | Detach, rename, resize, clone, or delete |
| `verda volume trash` | List deleted volumes (restorable within 96h) |
| Command | Description |
| ----------------------- | -------------------------------------------- |
| `verda volume create` | Create a block storage volume |
| `verda volume list` | List volumes |
| `verda volume describe` | Show detailed info about a single volume |
| `verda volume action` | Detach, rename, resize, clone, or delete |
| `verda volume trash` | List deleted volumes (restorable within 96h) |


### Instance Types, Images, Locations & Availability

```bash
# Browse instance types with specs and pricing
verda instance-types
verda instance-types --gpu # GPU only
verda instance-types --cpu # CPU only
verda instance-types --spot # spot pricing

# List all OS images
verda images
verda images --type 1V100.6V # compatible with instance type
verda images --category ubuntu # filter by category

# List datacenter locations
verda locations

# Check capacity
verda availability # full matrix
verda availability --location FIN-01 # specific location
verda availability --type 1V100.6V # specific type
verda availability --spot # spot only
```

### Cost & Billing

```bash
# Estimate costs before creating
verda cost estimate --type 1V100.6V --os-volume 100 --storage 500
verda cost estimate --type 1V100.6V --spot

# See what your running instances are costing you
verda cost running

# Account balance
verda cost balance
```

### SSH Keys & Startup Scripts

Expand Down Expand Up @@ -183,15 +245,54 @@ Available themes: `default`, `dracula`, `catppuccin`, `catppuccin-latte`, `nord`
| `verda auth use PROFILE` | Switch active auth profile |


### Shell Completion

```bash
# Bash
source <(verda completion bash)

# Zsh (add to ~/.zshrc or run once)
verda completion zsh > "${fpath[1]}/_verda"

# Fish
verda completion fish | source
```

## Global Flags


| Flag | Description |
| ------------ | ----------------------------------------------------- |
| `--debug` | Enable debug output (API request/response details) |
| `--timeout` | HTTP request timeout (default: 30s) |
| `--base-url` | Override API base URL |
| `--config` | Path to config file (default: `~/.verda/config.yaml`) |
| Flag | Description |
| ----------------- | ----------------------------------------------------- |
| `--output, -o` | Output format: `table`, `json`, `yaml` (default: table) |
| `--debug` | Enable debug output (API request/response details) |
| `--timeout` | HTTP request timeout (default: 30s) |
| `--base-url` | Override API base URL |
| `--config` | Path to config file (default: `~/.verda/config.yaml`) |

### Structured Output

All list and describe commands support `--output json` and `--output yaml` for scripting:

```bash
# Pipe to jq
verda vm list -o json | jq '.[].hostname'

# YAML output
verda volume describe vol-123 -o yaml

# Use in CI/CD scripts
INSTANCE_ID=$(verda vm list -o json | jq -r '.[0].id')
```

### Wait for Operations

Async commands support `--wait` to poll until completion:

```bash
verda vm create --hostname gpu-runner --wait --wait-timeout 10m
verda vm action --id abc-123 --wait
verda volume create --name data --size 500 --wait
```


## Configuration
Expand Down
6 changes: 4 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ require (
go.yaml.in/yaml/v3 v3.0.4
)

require gopkg.in/ini.v1 v1.67.1
require (
github.com/charmbracelet/x/term v0.2.2
gopkg.in/ini.v1 v1.67.1
)

require (
charm.land/bubbles/v2 v2.1.0 // indirect
Expand All @@ -23,7 +26,6 @@ require (
github.com/charmbracelet/harmonica v0.2.0 // indirect
github.com/charmbracelet/ultraviolet v0.0.0-20260205113103-524a6607adb8 // indirect
github.com/charmbracelet/x/ansi v0.11.6 // indirect
github.com/charmbracelet/x/term v0.2.2 // indirect
github.com/charmbracelet/x/termios v0.1.1 // indirect
github.com/charmbracelet/x/windows v0.2.2 // indirect
github.com/clipperhouse/displaywidth v0.11.0 // indirect
Expand Down
Loading
Loading