spawn command reference โ
spawn launches, connects to, and manages ephemeral EC2 instances. This is the exhaustive command and flag reference. New to spawn? Start with Your first instance and the MPI/cohort guide.
Generated reference
This page is generated from the spawn CLI itself and kept in sync by a release-gated drift check, so every command and flag below matches the shipped binary. For task-oriented walkthroughs see the guides.
Global flags โ
These apply to every spawn command.
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--accessibility | bool | Enable accessibility mode (implies --no-emoji) | ||
--account | string | Expected AWS account ID (optional guard) | ||
--lang | string | Language for output (en, es, fr, de, ja, pt) | ||
--no-color | bool | Disable colorized output | ||
--no-emoji | bool | Disable emoji in output | ||
--output | -o | string | table | Output format (table, json) |
--profile | string | AWS named profile (overrides SPORE_PROFILE/AWS_PROFILE and the shared config) | ||
--region | string | Default AWS region (overrides SPORE_REGION/AWS_REGION and the shared config) | ||
--verbose | -v | bool | Enable verbose output |
spawn alerts โ
Create, list, and manage alert notifications for parameter sweeps and schedules.
Get notified via email, Slack, SNS, or webhooks when sweeps complete, fail, exceed cost thresholds, or encounter issues.
Examples:
Create alert for sweep completion โ
spawn alerts create <sweep-id> --on-complete --email user@example.com
Create alert for failures with Slack โ
spawn alerts create <sweep-id> --on-failure --slack https://hooks.slack.com/...
Create cost threshold alert โ
spawn alerts create <sweep-id> --cost-threshold 100 --email user@example.com
List all alerts โ
spawn alerts list
Delete alert โ
spawn alerts delete <alert-id>
spawn alertsspawn alerts create โ
Create a new alert for a parameter sweep or schedule.
At least one trigger (--on-complete, --on-failure, etc.) and one destination (--email, --slack, --sns, --webhook) must be specified.
Examples:
Sweep completion via email โ
spawn alerts create sweep-123 --on-complete --email user@example.com
Multiple triggers and destinations โ
spawn alerts create sweep-123 \ --on-complete \ --on-failure \ --email user@example.com \ --slack https://hooks.slack.com/services/...
Cost threshold alert โ
spawn alerts create sweep-123 \ --cost-threshold 100 \ --email finance@example.com
Long-running sweep alert (trigger after 2 hours) โ
spawn alerts create sweep-123 \ --long-running 120 \ --email user@example.com
Schedule execution failure alert โ
spawn alerts create --schedule-id sched-123 \ --on-failure \ --slack https://hooks.slack.com/...
spawn alerts create <sweep-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--cost-threshold | float64 | Alert when cost exceeds threshold (dollars) | ||
--email | string | Email address for notifications | ||
--instance-failed | bool | Alert when any instance fails | ||
--long-running | int | Alert when sweep runs longer than N minutes | ||
--on-complete | bool | Alert when sweep/schedule completes | ||
--on-failure | bool | Alert when sweep/schedule fails | ||
--schedule-id | string | Schedule ID (alternative to sweep-id) | ||
--slack | string | Slack webhook URL for notifications | ||
--sns | string | SNS topic ARN for notifications | ||
--webhook | string | Webhook URL for notifications |
spawn alerts delete โ
Delete an alert configuration.
Example: spawn alerts delete alert-abc123
spawn alerts delete <alert-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn alerts history โ
Show the history of notifications sent for an alert.
Example: spawn alerts history alert-abc123
spawn alerts history <alert-id>spawn alerts list โ
List all alert configurations for the current user.
Optionally filter by sweep ID.
Examples:
List all alerts โ
spawn alerts list
List alerts for specific sweep โ
spawn alerts list --sweep-id sweep-123
spawn alerts list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--sweep-id | string | Filter by sweep ID |
spawn ami โ
Create and list AMIs created by spawn.
Examples: spawn ami list spawn ami list --stack pytorch --arch arm64 spawn ami create my-instance --name pytorch-2.4-cuda12
spawn amispawn ami create โ
Create an AMI from a running instance
spawn ami create <instance-id-or-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--description | string | Description for the AMI | ||
--name | string | Name for the AMI (required) | ||
--reboot | bool | Reboot instance before creating AMI (default: no-reboot) | ||
--tag | stringArray | Tags in key=value format | ||
--wait | bool | Wait for AMI to become available |
spawn ami delete โ
Deregister a spawn-managed AMI and delete its backing EBS snapshots in one step. If the AMI was produced by EC2 Image Builder (e.g. 'spawn image import'), the corresponding Image Builder image resource is also deleted so its name/version is freed.
This is irreversible. Use 'spawn ami list' to find AMIs.
Examples: spawn ami delete ami-0123456789abcdef0 spawn ami delete ami-0123456789abcdef0 --region us-east-1 --yes
spawn ami delete <ami-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--region | string | AWS region (default: current region from AWS config) | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn ami list โ
List spawn-managed AMIs
spawn ami list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--arch | string | Filter by architecture (x86_64 or arm64) | ||
--deprecated | bool | Show deprecated AMIs | ||
--gpu | string | Filter by GPU support (true or false) | ||
--region | string | AWS region (default: current region from AWS config) | ||
--stack | string | Filter by stack (spawn:stack tag) | ||
--version | string | Filter by version (spawn:version tag) |
spawn ami snapshots โ
Show the EBS snapshots that back an AMI, with size, state, and whether each snapshot is shared with other AMIs (which is why 'spawn ami delete' keeps shared snapshots instead of deleting them).
Examples: spawn ami snapshots ami-0123456789abcdef0 spawn ami snapshots ami-0123456789abcdef0 -o json
spawn ami snapshots <ami-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--region | string | AWS region (default: current region from AWS config) |
spawn app โ
Launch streamable research applications in the cloud.
Each application is pre-configured with the right instance type, NICE DCV for browser-based streaming, and automatic idle termination.
Apps you can launch depend on your account: public images are available to everyone; private images appear only if your account can pull them. Bring your own image with --image, or add bindings in ~/.spawn/catalog.yaml (--catalog).
Examples: spawn app list # show apps launchable from your account spawn app launch paraview # launch ParaView on a GPU instance spawn app launch igv --region us-west-2 spawn app launch paraview --spot --ttl 4h spawn app launch paraview --image 123456789012.dkr.ecr.us-east-1.amazonaws.com/paraview:5.13.2
spawn appFlags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--catalog | string | Local catalog overlay file (default: $SPAWN_CATALOG or ~/.spawn/catalog.yaml) |
spawn app launch โ
Launch a catalog application via NICE DCV
spawn app launch <app-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--app-version | string | App container image tag to launch (default: catalog default; see 'spawn app list') | ||
--idle-timeout | string | Stop when DCV has no clients for this duration (default: catalog default) | ||
--image | string | Launch a BYO container image for this app (overrides the catalog binding), e.g. 123456789012.dkr.ecr.us-east-1.amazonaws.com/paraview:5.13.2 | ||
--instance-type | string | Override instance type (default: first catalog family + .xlarge) | ||
--name | string | Session name (default: <app>-<timestamp>) | ||
--no-open | bool | Write session file but do not open browser automatically | ||
--region | string | AWS region (default: from AWS config) | ||
--spot | bool | Use Spot pricing | ||
--ttl | string | Hard termination deadline (e.g. 4h, 8h) |
spawn app list โ
List all streamable applications in the catalog
spawn app listspawn autoscale โ
Launch and manage auto-scaling job arrays that maintain target capacity
spawn autoscaleFlags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--env | string | production | Environment (production or staging) | |
--table | string | spawn-autoscale-groups | DynamoDB table name |
spawn autoscale health โ
Show instance health for auto-scaling group
spawn autoscale health <group-name>spawn autoscale launch โ
Launch a new auto-scaling job array with specified capacity and launch template
spawn autoscale launch [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--ami | string | AMI ID (required) | ||
--desired-capacity | int | Desired instance count (required) | ||
--iam-profile | string | IAM instance profile | ||
--instance-type | string | EC2 instance type (required) | ||
--job-array-id | string | Job array ID (auto-generated if not specified) | ||
--key-name | string | SSH key name | ||
--max-capacity | int | Maximum instance count (default: desired * 2) | ||
--metric-name | string | CloudWatch metric name (for custom metrics) | ||
--metric-namespace | string | CloudWatch namespace (for custom metrics) | ||
--metric-period | int | 300 | Metric evaluation period in seconds | |
--metric-policy | string | Metric policy type: 'cpu', 'memory', or 'custom' | ||
--metric-statistic | string | Average | Metric statistic: Average, Maximum, or Minimum | |
--min-capacity | int | Minimum instance count (default: 0) | ||
--name | string | Group name (required) | ||
--queue-url | string | SQS queue URL for queue-depth policy (required if --scaling-policy=queue-depth) | ||
--scale-down-cooldown | int | 300 | Scale-down cooldown in seconds | |
--scale-up-cooldown | int | 60 | Scale-up cooldown in seconds | |
--scaling-policy | string | Scaling policy type: 'queue-depth' (empty = manual mode) | ||
--security-group-ids | stringSlice | Security group IDs (comma-separated or repeated) | ||
--spot | bool | Use spot instances | ||
--subnet-id | string | Subnet ID | ||
--tag | stringArray | Additional tag key=value (repeatable) | ||
--target-messages-per-instance | int | 10 | Target messages per instance for queue-depth scaling | |
--target-value | float64 | Target metric value (e.g., 70.0 for 70% CPU) | ||
--user-data | string | User data script (base64 encoded) |
spawn autoscale list โ
Aliases: ls
List all active auto-scaling groups
spawn autoscale listspawn autoscale metric-activity โ
Show recent metric-based scaling activity
spawn autoscale metric-activity <group-name>spawn autoscale pause โ
Pause auto-scaling (stop reconciliation)
spawn autoscale pause <group-name>spawn autoscale resume โ
Resume auto-scaling
spawn autoscale resume <group-name>spawn autoscale scaling-activity โ
Show recent scaling activity for an autoscale group
spawn autoscale scaling-activity <group-name>spawn autoscale schedule โ
Manage scheduled scaling actions for an autoscale group
spawn autoscale schedulespawn autoscale schedule add โ
Add a scheduled action to an autoscale group
spawn autoscale schedule add <group-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--desired-capacity | int | Desired capacity (required) | ||
--enabled | bool | true | Enable the schedule immediately | |
--max-capacity | int | Maximum capacity override (optional) | ||
--min-capacity | int | Minimum capacity override (optional) | ||
--name | string | Schedule name (required) | ||
--schedule | string | Cron expression: 'second minute hour day month weekday' (required) | ||
--timezone | string | UTC | Timezone (e.g., America/New_York) |
spawn autoscale schedule list โ
List all scheduled actions for an autoscale group
spawn autoscale schedule list <group-name>spawn autoscale schedule remove โ
Remove a scheduled action from an autoscale group
spawn autoscale schedule remove <group-name> <schedule-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn autoscale set-metric-policy โ
Set or update metric-based scaling policy
spawn autoscale set-metric-policy <group-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--metric-name | string | CloudWatch metric name (for custom metrics) | ||
--metric-namespace | string | CloudWatch namespace (for custom metrics) | ||
--metric-period | int | 300 | Metric evaluation period in seconds | |
--metric-policy | string | Metric policy type: 'cpu', 'memory', or 'custom' | ||
--metric-statistic | string | Average | Metric statistic: Average, Maximum, or Minimum | |
--none | bool | Remove metric policy | ||
--target-value | float64 | Target metric value (e.g., 70.0 for 70% CPU) |
spawn autoscale set-scaling-policy โ
Aliases: set-policy
Set or update scaling policy for an autoscale group
spawn autoscale set-scaling-policy <group-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--none | bool | Remove scaling policy (revert to manual mode) | ||
--queue-url | string | SQS queue URL for single-queue policy (deprecated: use --queue) | ||
--queue-weight | float64Slice | Queue weight 0.0-1.0 (must match number of --queue flags) | ||
--queue | stringSlice | SQS queue URL (can be specified multiple times for multi-queue) | ||
--scale-down-cooldown | int | 300 | Scale-down cooldown in seconds | |
--scale-up-cooldown | int | 60 | Scale-up cooldown in seconds | |
--scaling-policy | string | Scaling policy type: 'queue-depth' | ||
--target-messages-per-instance | int | 10 | Target messages per instance for queue-depth scaling |
spawn autoscale status โ
Show auto-scaling group status
spawn autoscale status [group-name]spawn autoscale terminate โ
Terminate auto-scaling group and all instances
spawn autoscale terminate <group-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn autoscale update โ
Update auto-scaling group capacity
spawn autoscale update <group-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--desired-capacity | int | -1 | New desired capacity | |
--max-capacity | int | -1 | New maximum capacity | |
--min-capacity | int | -1 | New minimum capacity |
spawn availability โ
Display availability statistics based on historical launch success/failure data.
This helps identify regions with proven capacity for specific instance types. Statistics are passively collected from actual launch attempts.
spawn availability [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--instance-type | string | Instance type to check (required) | ||
--regions | -r | stringSlice | Regions to check (comma-separated or repeated; default: common regions) |
spawn burst โ
Launch EC2 instances that will register with the hybrid registry and coordinate with local instances to process workloads.
This enables "cloud bursting" where local compute capacity can be extended with on-demand cloud resources.
spawn burst [flags]Examples:
# Launch 10 instances to help process a job array
spawn burst --count 10 --job-array-id my-array --instance-type c5.4xlarge
# Launch with specific AMI
spawn burst --count 5 --job-array-id genomics --ami ami-abc123
# Launch Spot instances for cost savings
spawn burst --count 20 --job-array-id simulation --spotFlags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--ami | string | AMI ID (auto-detect if not specified) | ||
--count | int | 1 | Number of instances to launch | |
--instance-type | string | t3.micro | EC2 instance type | |
--job-array-id | string | Job array ID to join (required) | ||
--job-array-name | string | Job array name (optional) | ||
--key-name | string | SSH key pair name | ||
--security-group-ids | stringSlice | Security group IDs (comma-separated or repeated) | ||
--spot | bool | Use Spot instances | ||
--subnet-id | string | Subnet ID |
spawn cancel โ
Deprecated: use 'spawn sweep cancel <sweep-id>' instead
Cancel a running parameter sweep and terminate all instances.
Queries DynamoDB for the sweep state, terminates all running/pending instances via cross-account access, and updates the sweep status to CANCELLED.
Examples:
Cancel a running sweep โ
spawn cancel --sweep-id sweep-20260116-abc123
spawn cancel [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--sweep-id | string | Sweep ID to cancel (required) | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn capacity-block โ
Purchase and manage EC2 Capacity Blocks for ML.
Discover purchasable offerings with 'truffle capacity-blocks', then purchase one here. After purchase, launch into it with: spawn launch <name> --reservation-id <id> --capacity-block --az <reservation-az>
spawn capacity-blockspawn capacity-block purchase โ
Purchase a Capacity Block for ML from an offering id (from 'truffle capacity-blocks').
โ ๏ธ A Capacity Block is billed UP FRONT and is NON-REFUNDABLE โ the full block duration is charged at purchase. This is the single most expensive action spawn can take. The purchase requires you to TYPE three confirmations (the exact price, 'purchase <offering-id>', and an acknowledgement phrase) and refuses to run on a non-interactive terminal. Use --dry-run first to preview the price and terms without buying anything.
The offering's instance type, count, and duration must be supplied so the exact offering can be re-validated (and its current price re-confirmed) immediately before purchase.
spawn capacity-block purchase <offering-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--count | int32 | 1 | Number of instances in the block | |
--dry-run | bool | Preview the price and terms without purchasing (no charge, no write API call) | ||
--duration-hours | int32 | Capacity Block duration in hours (required) | ||
--instance-type | string | Instance type of the offering, e.g. p5.48xlarge (required) | ||
--platform | string | Linux/UNIX | Instance platform (Linux/UNIX, Windows, ...) | |
--region | string | AWS region of the offering (required) | ||
--tag | stringArray | Tag to apply to the reservation (key=value; repeatable) |
spawn cleanup โ
Remove the shared AWS resources spore.host created (tagged spawn:managed), in dependency order. Running instances are NEVER removed โ stop or terminate them first.
Preview what would be removed with --dry-run; otherwise cleanup prompts for confirmation (skip with --yes) and then deletes. By default it acts only on resources you created; --all widens to every principal in the account.
A log of everything removed is written to ~/.spawn/cleanup-<timestamp>.log.
spawn cleanup [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--all-regions | bool | Clean up every enabled region | ||
--all | bool | Include resources created by other principals (default: only yours) | ||
--dry-run | bool | Preview what would be removed without deleting anything | ||
--region | string | AWS region (default: current region from AWS config) | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn collect-results โ
Deprecated: use 'spawn sweep collect <sweep-id>' instead
Collect results from all instances in a parameter sweep.
This command downloads result files from S3 (uploaded by sweep instances), aggregates them into a single output file, and optionally identifies the best performing parameters based on a metric.
Result File Convention: Instances should upload results to: s3://spawn-results-<account>-<region>/sweeps/<sweep-id>/<index>/results.json
The result file should be a JSON object with metrics, e.g.: { "accuracy": 0.95, "loss": 0.12, "duration": 120.5, "params": {...} }
Examples:
Collect all results to JSON โ
spawn collect-results --sweep-id sweep-123 --output results.json
Collect to CSV format โ
spawn collect-results --sweep-id sweep-123 --output results.csv --format csv
Find top 5 runs by accuracy (descending) โ
spawn collect-results --sweep-id sweep-123 --metric accuracy --best 5
Custom S3 prefix (if instances uploaded to different location) โ
spawn collect-results --sweep-id sweep-123 --s3-prefix s3://my-bucket/results/
spawn collect-results [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--best | int | Show only top N results by metric (0 = all) | ||
--format | string | json | Output format: json, csv, jsonl | |
--metric | string | Metric to use for ranking results (e.g., accuracy, loss) | ||
--output | -o | string | results.json | Output file path |
--regions | -r | stringSlice | Regions to collect from (comma-separated or repeated; default: all) | |
--s3-prefix | string | Custom S3 prefix for results (default: auto-detect) | ||
--sweep-id | string | Sweep ID to collect results from (required) |
spawn connect โ
Aliases: ssh
Connect to a spawn-managed instance via SSH.
Automatically finds your SSH key and connects. Falls back to AWS Session Manager if SSH is unavailable.
Examples:
Connect by instance ID โ
spawn connect i-1234567890abcdef0
Connect by name โ
spawn connect my-instance
spawn connect <instance-id> [-- <command>...] [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--key | string | SSH private key path | ||
--no-start | bool | Do not automatically start a stopped/hibernated instance | ||
--port | int | 22 | SSH port | |
--rdp-port | int | 13389 | Windows --rdp --via-ssm: local port for the SSM RDP tunnel | |
--rdp | bool | Windows: open a Remote Desktop (RDP) connection (decrypts the Administrator password) | ||
--session-manager | bool | Use AWS Session Manager instead of SSH | ||
--ssh | bool | Windows: SSH in (as Administrator, over OpenSSH) instead of opening a PowerShell-over-SSM session โ same SSH path as Linux | ||
--user | string | SSH username (default: ec2-user) | ||
--via-ssm | bool | Windows --rdp: tunnel RDP over an SSM port-forwarding session instead of connecting to the public IP |
spawn cost โ
Display detailed cost breakdown by region and instance type.
Shows:
- Resource costs (compute, storage, network)
- Cloud economics (effective cost/hr, utilization, savings)
- Time breakdown (running vs stopped hours)
- Budget status (if budget was set)
- Cost by region and instance type
Examples: spawn cost sweep-20260124-140530
spawn cost <sweep-id>spawn create-ami โ
Deprecated: use 'spawn ami create' instead
Create an AMI from a running instance with automatic tagging.
The AMI will be tagged with spawn metadata for easy discovery and management.
Examples:
Create AMI from instance โ
spawn create-ami my-instance --name pytorch-2.2-cuda12
With custom tags โ
spawn create-ami i-abc123
--name my-stack-v1.0
--description "My custom software stack"
--tag stack=myapp
--tag version=1.0
--tag gpu=true
Wait for AMI to be available โ
spawn create-ami my-instance --name my-ami --wait
Allow reboot (default is no-reboot) โ
spawn create-ami my-instance --name my-ami --reboot
spawn create-ami <instance-id-or-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--description | string | Description for the AMI | ||
--name | string | Name for the AMI (required) | ||
--reboot | bool | Reboot instance before creating AMI (default: no-reboot) | ||
--tag | stringArray | Tags in key=value format (can be specified multiple times) | ||
--wait | bool | Wait for AMI to become available |
spawn defaults โ
Manage default values for spawn launch flags.
Defaults are stored in ~/.spawn/config.yaml and applied whenever the corresponding flag is not explicitly provided on the command line.
Valid keys: slack-workspace Slack workspace ID for lifecycle notifications (e.g. T03NE3GTY) active-processes Process names to monitor for idle detection (e.g. rsession) active-ports TCP ports to monitor for active connections (e.g. 8787) idle-timeout Default idle timeout duration (e.g. 30m, 1h) hibernate-on-idle Hibernate instead of terminating on idle (true/false)
Examples: spawn defaults set slack-workspace T03NE3GTY spawn defaults set active-processes rsession spawn defaults set idle-timeout 1h spawn defaults list spawn defaults unset active-processes
spawn defaultsspawn defaults list โ
List all default launch values
spawn defaults listspawn defaults set โ
Set a default launch value
spawn defaults set <key> <value>spawn defaults unset โ
Remove a default launch value
spawn defaults unset <key>spawn dns โ
Manage DNS records for spawn instances.
DNS names are automatically registered when launching with --dns flag. Format: <name>.<account-base36>.spore.host
Examples:
List DNS-enabled instances โ
spawn dns list
Register DNS name โ
spawn dns register i-1234567890abcdef0 my-server
Delete DNS record โ
spawn dns delete my-server
spawn dnsFlags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--domain | string | DNS domain for record registration (default: spore.host) |
spawn dns delete โ
spawn dns delete <instance-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn dns list โ
spawn dns list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--all | -a | bool | Show all instances (including those without DNS) |
spawn dns register โ
spawn dns register <instance-id> <dns-name>spawn extend โ
Extend the TTL (time-to-live) for a spawn-managed instance.
Prevents automatic termination by extending the TTL duration.
Duration format: 1h, 2h30m, 24h, etc.
Examples:
Extend by 2 hours โ
spawn extend i-1234567890abcdef0 2h
Extend by name โ
spawn extend my-instance 8h
spawn extend <instance-id-or-name> <duration> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--job-array-id | string | Extend TTL for all instances in job array by ID | ||
--job-array-name | string | Extend TTL for all instances in job array by name |
spawn fsx โ
Manage FSx Lustre filesystems: list, info, export, delete
spawn fsxspawn fsx delete โ
Delete an FSx Lustre filesystem, optionally exporting to S3 first
spawn fsx delete <filesystem-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--export-first | bool | Export data to S3 before deleting | ||
--yes | -y | bool | Skip confirmation prompt |
spawn fsx list โ
List all spawn-managed FSx Lustre filesystems across all regions
spawn fsx listspawn fsx show โ
Aliases: info
Show detailed information about an FSx Lustre filesystem
spawn fsx show <filesystem-id>spawn hibernate โ
Hibernate an instance to disk (saves RAM state)
spawn hibernate [instance-id-or-name] [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--job-array-id | string | Hibernate all instances in job array by ID | ||
--job-array-name | string | Hibernate all instances in job array by name |
spawn image โ
Create custom AMIs that spawn can launch.
Currently supports importing a Windows 11 ISO into an AMI via AWS EC2 Image Builder's managed import-disk-image workflow (drivers, EC2Launch, SSM agent and Defender are pre-staged automatically). See infra/amis/windows/README.md.
spawn imagespawn image import โ
Convert a Windows 11 ISO into an AMI using EC2 Image Builder's managed import-disk-image workflow, then tag it so 'spawn launch --os windows' can use it.
The ISO must be a SUPPORTED, NON-evaluation Windows 11 Enterprise image (23H2 / 24H2 / 25H2 x64) obtained from the Microsoft 365 admin center. Evaluation, Media-Creation-Tool, and LTSC ISOs are rejected by the service. Bring your own Microsoft license (BYOL).
The command self-provisions the IAM roles and Image Builder infrastructure configuration it needs (idempotent); pass --infra-config-arn only to reuse an existing/custom one. See infra/amis/windows/README.md.
Examples:
Local ISO โ staging bucket + infra auto-provisioned, nothing to pre-create: โ
spawn image import --iso ./Win11_25H2_Enterprise.iso
--name win11-25h2 --image-index 3
ISO already in S3 (uppercase .ISO key required by the service): โ
spawn image import --iso s3://my-bucket/Win11_25H2_Enterprise.ISO
--name win11-25h2
spawn image import [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--bucket | string | S3 bucket to stage a local ISO in (default: managed spawn-iso-import-<account>-<region>, auto-created) | ||
--execution-role | string | AWSServiceRoleForImageBuilder | IAM execution role name or ARN | |
--image-index | int64 | 1 | 1-based edition index in a multi-edition ISO | |
--infra-config-arn | string | Image Builder infrastructure configuration ARN (optional; self-provisioned if omitted) | ||
--instance-type | string | m6i.large | Build instance type (when self-provisioning infra) | |
--iso | string | Windows 11 ISO: local path or s3://bucket/key.ISO (required) | ||
--keep-iso | bool | Keep the staged ISO (and managed bucket) after the AMI is built; by default they are deleted (only applies with --wait) | ||
--name | string | Image Builder image resource name (required) | ||
--no-secure-boot | bool | Disable Secure Boot on the output AMI | ||
--no-warm | bool | Skip building the warm (fast-boot) AMI; produce only the raw imported base AMI | ||
--region | string | us-east-1 | AWS region for the import build | |
--s3-key | string | S3 object key for the uploaded ISO (default: derived from filename, .ISO) | ||
--security-group-ids | stringSlice | Security groups for the build instance (comma-separated or repeated; when self-provisioning infra) | ||
--subnet-id | string | Subnet for the build instance (when self-provisioning infra) | ||
--version | string | 1.0.0 | Semantic version for the output image (major.minor.patch) | |
--wait-timeout | int | 60 | Max minutes to wait when --wait is set before detaching (the build keeps running) | |
--wait | bool | Wait for the AMI to finish building, then tag and clean up (warm mode implies this) | ||
--warm-instance-type | string | m7i.xlarge | Instance type for the warm-build seed (non-burstable; Windows) | |
--warm-timeout | int | 30 | Safety-net minutes to wait for the warm seed's first boot (Administrator password) before giving up |
spawn image status โ
Report the current state of an EC2 Image Builder image build started by 'spawn image import' (without --wait). Prints PENDING/BUILDING/.../AVAILABLE/FAILED and, once available, the output AMI id.
Example: spawn image status arn:aws:imagebuilder:us-east-1:123456789012:image/win11-25h2/1.0.0/1
spawn image status <image-build-version-arn> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--region | string | us-east-1 | AWS region of the image build |
spawn image verify โ
Inspect a local Windows installation ISO and report which editions it contains and whether 'spawn image import' (EC2 Image Builder import-disk-image) will accept it โ before you spend a real, paid build.
import-disk-image accepts only Windows 11 Enterprise (23H2/24H2/25H2, x64), non-Evaluation. This reads the ISO's install.wim metadata directly (no mount, no external tools) and prints each edition with its image index, flags the one to use, and gives a clear ACCEPTED/REJECTED verdict.
Examples: spawn image verify "/Volumes/External HD/Win11_Enterprise_25H2.iso" spawn image verify win11.iso -o json
spawn image verify <path-to.iso>spawn instance-config โ
Aliases: config
Read or write runtime config on a running instance via SSH
spawn instance-config <instance-id> <action> [key] [value]spawn launch โ
Aliases: , run, create
Launch an EC2 instance with smart defaults.
Three ways to use:
- Interactive wizard (default if no input)
- From truffle JSON via pipe
- Direct with flags
Examples:
Interactive wizard โ
spawn launch
From truffle โ
truffle search m7i.large | spawn launch
Direct โ
spawn launch --instance-type m7i.large --region us-east-1
spawn launch <name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--active-ports | string | TCP ports to monitor for active connections, prevents idle termination (e.g. '8787' for RStudio, '8787,8888' for RStudio+Jupyter) | ||
--active-processes | string | Process names to monitor, prevents idle termination while any are running (e.g. 'rsession' for RStudio, 'rsession,jupyter' for multiple) | ||
--allow-cidr | string | CIDR allowed to reach the managed Windows security group (RDP 3389 + SSH 22); default 0.0.0.0/0 | ||
--ami | string | AMI ID (ami-...); omit or use 'auto' to auto-detect the latest AL2023 | ||
--attach-volume | stringArray | Attach an EBS volume from a snapshot, mounted at a path: snap-xxx:/mount/point[:ro]. Repeatable. Read-only is the common case for shared reference data. | ||
--auto-placement-group | bool | true | Automatically create placement group for MPI job arrays (default: true) | |
--az | string | Availability zone | ||
--batch-queue | string | Batch job queue file (JSON) for sequential execution | ||
--budget | float64 | Budget limit in dollars for parameter sweeps (0 = no limit) | ||
--capacity-block | bool | The --reservation-id is a Capacity Block for ML (sets MarketType=capacity-block); mutually exclusive with --spot (#216) | ||
--cartesian | bool | Generate cartesian product of parameter lists | ||
--command | string | Command to run on all instances (executed after spored setup) | ||
--completion-delay | string | 30s | Grace period after completion signal | |
--completion-file | string | /tmp/SPAWN_COMPLETE | File to watch for completion signal | |
--compliance-strict | bool | Strict mode: fail on warnings (default: show warnings only) | ||
--config | string | Launch config YAML file (supports plugins: list) | ||
--cost-limit | float64 | Terminate/stop when compute spend reaches this amount in USD (compute cost only; 0 = disabled) | ||
--cost-tier | string | Prefer cost tier: low, standard, premium | ||
--count | int | 1 | Number of instances to launch (job array) | |
--detach | bool | Run sweep orchestration in Lambda (auto-enabled for parameter sweeps) | ||
--dns-api-endpoint | string | Custom DNS API endpoint (overrides default) | ||
--dns-domain | string | Custom DNS domain (overrides default) | ||
--dns | string | Override DNS name if different from --name (advanced) | ||
--efa | bool | Enable Elastic Fabric Adapter for ultra-low latency MPI (requires supported instance types) | ||
--efs-id | string | EFS filesystem ID to mount (fs-xxx) | ||
--efs-mount-options | string | Custom EFS mount options (overrides profile) | ||
--efs-mount-point | string | /efs | EFS mount point (default: /efs) | |
--efs-profile | string | general | EFS performance profile: general, max-io, max-throughput, burst | |
--estimate-only | bool | Show cost estimate and exit without launching | ||
--fsx-create | bool | Create new FSx Lustre filesystem with S3 backing (requires --fsx-lifecycle) | ||
--fsx-export-path | string | S3 path to export to (e.g., s3://bucket/prefix) | ||
--fsx-id | string | Existing FSx Lustre filesystem ID to mount (fs-xxx) | ||
--fsx-import-path | string | S3 path to import from (e.g., s3://bucket/prefix) | ||
--fsx-lifecycle | string | FSx lifetime (REQUIRED with --fsx-create): 'ephemeral' (reaped when this instance terminates) or 'durable' (persists; requires --fsx-ttl) | ||
--fsx-mount-point | string | /fsx | FSx mount point (default: /fsx) | |
--fsx-recall | string | Recall FSx filesystem by stack name (recreate from S3) | ||
--fsx-s3-bucket | string | S3 bucket for FSx import/export (required with --fsx-create) | ||
--fsx-skip-validate | bool | Skip FSx filesystem validation (for testing) | ||
--fsx-storage-capacity | int32 | 1200 | FSx storage capacity in GB (1200, 2400, or increments of 2400) | |
--fsx-throughput | int32 | 125 | FSx PERSISTENT_2 throughput in MB/s/TiB (125, 250, 500, or 1000; default: 125) | |
--fsx-ttl | string | FSx time-to-live, required for --fsx-lifecycle=durable (e.g. 7d, 720h) โ the filesystem is reaped this long after creation once no instance is using it | ||
--hibernate | bool | Enable hibernation | ||
--iam-allow-full-access | bool | Permit wildcard :FullAccess --iam-policy templates (s3:/dynamodb:/sqs: on all resources) on the instance role; off by default โ prefer scoped ReadOnly/WriteOnly | ||
--iam-managed-policies | stringSlice | AWS managed policy ARNs | ||
--iam-policy-file | string | Custom IAM policy JSON file | ||
--iam-policy | stringSlice | Service-level policies (e.g., s3:ReadOnly,dynamodb:WriteOnly). Wildcard *:FullAccess templates require --iam-allow-full-access | ||
--iam-role-tags | stringSlice | Tags for IAM role (key=value format) | ||
--iam-role | string | IAM role name (creates if doesn't exist) | ||
--iam-trust-services | stringSlice | [ec2] | Services that can assume role | |
--idle-timeout | string | Auto-terminate if idle (defaults to 1h if neither --ttl nor --idle-timeout set) | ||
--instance-names | string | Instance name template (e.g., 'worker-{index}', default: '{job-array-name}-{index}') | ||
--instance-type | string | Instance type | ||
--interactive | bool | Force interactive wizard | ||
--job-array-name | string | Job array group name (required if --count > 1) | ||
--key-name | string | SSH key pair name (EC2 KeyName) | ||
--launch-delay | string | 0s | Delay between instance launches (e.g., 5s) | |
--max-concurrent-per-region | int | Max instances running simultaneously per region (0 = unlimited) | ||
--max-concurrent | int | Max instances running simultaneously (0 = unlimited) | ||
--min-viable | int | 1 | Job array: minimum members that must launch for success (default 1; ignored for --mpi) | |
--mode | string | balanced | Distribution mode: balanced (fair share) or opportunistic (prioritize available regions) | |
--mpi-command | string | Command to run via mpirun (alternative to --command) | ||
--mpi-processes-per-node | int | MPI processes per node (default: vCPU count) | ||
--mpi | bool | Enable MPI cluster setup (requires --count > 1) | ||
--name | string | Name your spore, required (sets Name tag, DNS, and hostname) | ||
--nested-virtualization | bool | Enable nested virtualization (run KVM/Hyper-V inside the instance). Requires a C8i/M8i/R8i instance type. | ||
--nist-800-171 | bool | Enable NIST 800-171 Rev 3 compliance mode | ||
--nist-800-53 | string | Enable NIST 800-53 compliance (low, moderate, high) | ||
--no-detach | bool | Disable auto-detach for parameter sweeps (requires --ttl or --idle-timeout) | ||
--no-timeout | bool | Disable automatic timeout (NOT RECOMMENDED: creates zombie risk) | ||
--notify-platform | string | Chat platform for lifecycle notifications: slack (default), teams, or discord | ||
--on-complete | string | Action when workload signals completion: terminate, stop, hibernate. Use 'terminate' for batch/headless workloads โ 'stop' leaves EBS (and any attached EIP) billing indefinitely, which is easy to forget in accounts without a hosted reaper | ||
--on-idle | string | Action when the instance goes idle: stop (default) or hibernate. Mirrors --on-complete. NOTE: a stopped/hibernated instance keeps billing for its EBS volumes (and any attached Elastic IP) โ for batch/headless work prefer --on-complete terminate so cost is fully bounded | ||
--os | string | Target OS: windows or linux. Omit to auto-detect from the AMI. Use to force the OS for a custom AMI whose platform metadata is unset. | ||
--output-id | string | Write sweep/instance ID to file for scripting | ||
--param-file | string | Path to parameter sweep file (JSON/YAML/CSV) | ||
--params | string | Inline JSON parameters for sweep | ||
--placement-group | string | AWS Placement Group for MPI instances (auto-created if not specified) | ||
--plugin | stringArray | Plugin to install at launch (ref[@version], repeatable) | ||
--pre-stop-timeout | string | Max time to wait for --pre-stop command (default: 5m, spot: 90s) | ||
--pre-stop | string | Shell command to run on the instance before any lifecycle-triggered stop/terminate (e.g., "aws s3 sync /results s3://bucket/") | ||
--proximity-from | string | Prefer regions close to this region (e.g., us-east-1) | ||
--queue-template | string | Queue template name (use 'spawn queue template list' to see options) | ||
--quiet | bool | Minimal output | ||
--region | string | AWS region | ||
--regions-exclude | stringSlice | Exclude these regions (supports wildcards: us-, eu-) | ||
--regions-geographic | stringSlice | Geographic constraints: us, eu, ap, north-america, europe, asia-pacific | ||
--regions-include | stringSlice | Only use these regions (supports wildcards: us-, eu-) | ||
--reservation-id | string | Capacity Reservation / Capacity Block ID to launch into (fs-/cr-...) โ instance must be in the reservation's AZ (#216) | ||
--security-group-ids | stringSlice | Security group IDs (comma-separated or repeated) | ||
--session-timeout | string | 30m | Auto-logout idle shells (0 to disable) | |
--skip-mpi-install | bool | Skip MPI installation (use with custom AMIs that have MPI pre-installed) | ||
--skip-region-check | bool | Skip data locality region mismatch warnings | ||
--slack-workspace | string | Slack workspace ID for lifecycle notifications (e.g. T03NE3GTY) | ||
--spot-max-price | string | Max Spot price | ||
--spot-webhook-url | string | On spot interruption, spored POSTs a fire-once, best-effort notice to this URL within the ~2-min window (off-node consumers; empty = disabled) | ||
--spot | bool | Launch as Spot instance | ||
--strata-formation | string | Strata formation to activate (e.g. r-research@2024.03) | ||
--strata-profile | string | Path to a Strata profile YAML file | ||
--strata-registry | string | s3://strata-registry | Strata registry S3 URL | |
--subnet-id | string | Subnet ID | ||
--sweep-name | string | Human-readable sweep identifier (auto-generated if empty) | ||
--tag | stringArray | Custom tag key=value on the instance and its created volumes (repeatable). The spawn: prefix is reserved. | ||
--team | string | Team ID: tag instance with spawn:team-id for team-shared access | ||
--template-var | stringToString | Template variables (key=value) | ||
--terminate-on-error | bool | If post-launch verification fails (e.g. spored didn't come up), terminate the instance instead of leaving it running | ||
--ttl | string | Auto-terminate after duration (e.g., 8h, defaults to 1h idle if not set) | ||
--use-reservation | bool | Use capacity reservation | ||
--user-data-file | string | User data file | ||
--user-data | string | User data (@file or inline) | ||
--volume-size | int32 | Root EBS volume size in GiB (0 = use AMI default) | ||
--vpc | string | VPC ID | ||
--wait-for-running | bool | true | Wait until running | |
--wait-for-ssh | bool | true | Wait until SSH is ready | |
--wait-timeout | string | Timeout for --wait (e.g., 2h, 30m, 0=no timeout) | ||
--wait | bool | Wait for sweep/launch to complete (requires --detach) | ||
--webhook-correlation | string | Opaque blob echoed verbatim in the spot-webhook payload so a consumer can correlate the event to its own record (never parsed by spawn) | ||
--webhook-timeout | string | Hard cap on the spot-webhook POST so it can't eat the reclamation window (default: 2s) | ||
--yes | -y | bool | Auto-approve cost estimate (skip confirmation) |
spawn list-amis โ
Deprecated: use 'spawn ami list' instead
List AMIs created and managed by spawn.
Filters AMIs by spawn tags to show only those created by spawn. You can filter by stack, version, architecture, and other attributes.
Examples:
List all spawn AMIs โ
spawn list-amis
Filter by stack โ
spawn list-amis --stack pytorch
Filter by stack and version โ
spawn list-amis --stack pytorch --version 2.2
Filter by architecture โ
spawn list-amis --arch arm64
Show only GPU AMIs โ
spawn list-amis --gpu true
Show deprecated AMIs โ
spawn list-amis --deprecated
JSON output โ
spawn list-amis --json
spawn list-amis [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--arch | string | Filter by architecture (x86_64 or arm64) | ||
--deprecated | bool | Show deprecated AMIs (default: hide deprecated) | ||
--gpu | string | Filter by GPU support (true or false) | ||
--region | string | AWS region (default: current region from AWS config) | ||
--stack | string | Filter by stack (spawn:stack tag) | ||
--version | string | Filter by version (spawn:version tag) |
spawn list-sweeps โ
Deprecated: use 'spawn sweep list' instead
List parameter sweeps from DynamoDB orchestration table.
Shows recent sweeps with their status, progress, and creation time.
Examples:
List recent sweeps โ
spawn list-sweeps
Filter by status โ
spawn list-sweeps --status RUNNING
Show last 5 sweeps โ
spawn list-sweeps --last 5
Show sweeps since a date โ
spawn list-sweeps --since 2026-01-15
JSON output โ
spawn list-sweeps --json
spawn list-sweeps [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--last | int | 20 | Show last N sweeps | |
--region | string | Filter by region | ||
--since | string | Show sweeps created after date (YYYY-MM-DD) | ||
--status | string | Filter by status (RUNNING, COMPLETED, FAILED, CANCELLED) |
spawn list โ
Aliases: ls
List spawn-managed EC2 instances across regions.
Shows all instances with the spawn:managed tag.
Examples:
List all instances โ
spawn list
Filter by region โ
spawn list --region us-east-1
Filter by state โ
spawn list --state running
JSON output โ
spawn list --output json
spawn list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--az | string | Filter by availability zone | ||
--instance-family | string | Filter by instance family (e.g., m7i, t3) | ||
--instance-type | string | Filter by exact instance type (e.g., t3.micro) | ||
--job-array-id | string | Filter by job array ID | ||
--job-array-name | string | Filter by job array name | ||
--region | string | Filter by AWS region (default: all regions) | ||
--regions | -r | stringSlice | Filter by regions (comma-separated, e.g. us-east-1,us-west-2) | |
--state | string | Filter by instance state (running, stopped, etc.) | ||
--sweep-id | string | Filter by parameter sweep ID | ||
--sweep-name | string | Filter by parameter sweep name | ||
--tag | stringArray | Filter by tag (key=value format, can be specified multiple times) |
spawn notify โ
Aliases: bot
Register and manage Slack/Teams/SMS notifications for instances.
Lets authorized users receive lifecycle events (launch, idle stop, TTL warn, termination) and control instances via chat slash commands without CLI access.
Examples: spawn notify register --platform slack --user professor@example.com
--instance i-0abc123 --nickname rstudio --allow start,stop,status spawn notify deregister --platform slack --user professor@example.com --nickname rstudio spawn notify list --platform slack --workspace T03NE3GTY
spawn notifyspawn notify deregister โ
Remove a chat bot registration
spawn notify deregister [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--nickname | string | Nickname to deregister | ||
--platform | string | Chat platform: slack, teams, or discord | ||
--table | string | Override DynamoDB registry table name | ||
--user-id | string | Platform user ID | ||
--workspace-id | string | Platform workspace ID |
spawn notify disable โ
Suspend bot access without removing the registration. Use during sensitive computation runs or maintenance. Re-enable with 'spawn notify enable'.
spawn notify disable [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--nickname | string | Nickname of the registration to enable/disable | ||
--platform | string | Chat platform: slack, teams, or discord | ||
--table | string | Override DynamoDB registry table name | ||
--user-id | string | Platform user ID | ||
--workspace-id | string | Platform workspace ID |
spawn notify enable โ
Grant bot access to a registered instance. Registrations are created disabled by default โ this command must be run before a chat user can control the instance via slash commands.
spawn notify enable [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--nickname | string | Nickname of the registration to enable/disable | ||
--platform | string | Chat platform: slack, teams, or discord | ||
--table | string | Override DynamoDB registry table name | ||
--user-id | string | Platform user ID | ||
--workspace-id | string | Platform workspace ID |
spawn notify list โ
List chat bot registrations for a workspace
spawn notify list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--platform | string | Chat platform: slack, teams, or discord | ||
--table | string | Override DynamoDB registry table name | ||
--workspace-id | string | Platform workspace ID |
spawn notify register โ
Register an EC2 instance so a chat user can control it via slash commands.
Supports specifying the user by email (--user) which resolves to a platform user ID, or directly by platform ID (--user-id + --workspace-id).
The --nickname is the friendly name used in slash commands, e.g.: /prism stop rstudio /prism status jupyter
Both the instance ID and instance name (DNS name or spawn:name tag) are accepted as the target in slash commands once registered.
spawn notify register [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--allow | stringSlice | Allowed actions (default: start,stop,status,hibernate,url) | ||
--connect-code | string | One-time code from /spore connect (alternative to --user-id) | ||
--instance | string | Instance ID (i-...) or name | ||
--nickname | string | Friendly name for slash commands (default: 'default') | ||
--platform | string | Chat platform: slack, teams, or discord | ||
--role-arn | string | Cross-account IAM role ARN for this instance's account (created automatically if omitted) | ||
--table | string | Override DynamoDB registry table name | ||
--tag-prefix | string | Tag prefix: spawn or prism (default: auto-detected) | ||
--user-id | string | Platform-native user ID (e.g. Slack U04KZABCD) | ||
--user | string | User email address (resolved to platform user ID) | ||
--workspace-id | string | Platform workspace ID (e.g. Slack T03NE3GTY) |
spawn notify workspace โ
Manage chat-platform workspace registrations
spawn notify workspacespawn notify workspace add โ
Store the Slack bot token and signing secret for a workspace so the spore-bot Lambda can verify incoming slash command requests.
Run this once after installing the Slack app in a workspace:
spawn notify workspace-add
--platform slack
--workspace-id T03NE3GTY
--workspace-name "My Workspace"
--bot-token xoxb-...
--signing-secret abc123...
spawn notify workspace add [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--allowed-channels | stringSlice | Restrict commands to specific channel IDs (e.g. C12345,C67890). Empty = all channels. | ||
--bot-token | string | Bot token (Slack xoxb-..., or Discord bot token) | ||
--connect-ttl | int | Max /spore connect code lifetime in hours (0 = use platform default, typically 24h). Can only lower the platform default. | ||
--platform | string | Chat platform: slack, teams, or discord | ||
--public-key | string | Discord application public key (Ed25519, hex; required for discord) | ||
--signing-secret | string | Slack/Teams signing secret (required for slack/teams) | ||
--table | string | Override DynamoDB workspaces table name | ||
--webhook-url | string | Channel webhook URL for notifications (Discord channel webhook, or manual Slack incoming webhook) | ||
--workspace-id | string | Platform workspace ID | ||
--workspace-name | string | Human-friendly workspace name |
spawn notify workspace destroy โ
Permanently delete all instance registrations across all users in a workspace, and remove the workspace's bot token and signing secret.
Preview with --dry-run; otherwise it prompts for confirmation (skip with --yes) and then executes the full teardown.
Note: The SpawnBotCrossAccount IAM role in customer accounts is not deleted automatically. Remove it separately with: aws cloudformation delete-stack --stack-name spawn-bot-cross-account
spawn notify workspace destroy [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dry-run | bool | Preview what would be removed without deleting anything | ||
--platform | string | Chat platform: slack, teams, or discord | ||
--registry-table | string | Override DynamoDB registry table name | ||
--workspace-id | string | Platform workspace ID (required) | ||
--workspaces-table | string | Override DynamoDB workspaces table name | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn notify workspace list โ
List registered workspaces
spawn notify workspace list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--platform | string | Chat platform: slack, teams, or discord | ||
--table | string | Override DynamoDB workspaces table name |
spawn notify workspace remove โ
Remove a workspace registration
spawn notify workspace remove [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--platform | string | Chat platform: slack, teams, or discord | ||
--table | string | Override DynamoDB workspaces table name | ||
--workspace-id | string | Platform workspace ID | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn orphans โ
Report spawn-managed resources that appear orphaned โ present but with no running instance using them:
- EBS volumes in the 'available' state
- security groups not attached to any instance
- the shared infrastructure (key pair, IAM role) when no instances remain
- Elastic IPs that are unassociated, or attached to a stopped instance (an EIP keeps billing even while the instance is stopped)
This is a read-only report. Use 'spawn cleanup' to remove anything โ except Elastic IPs: spawn never allocates them, so it never releases them. Any EIP listed is yours to release with 'aws ec2 release-address'.
spawn orphans [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--all-regions | bool | Search every enabled region | ||
--all | bool | Include resources created by other principals (default: only yours) | ||
--region | string | AWS region (default: current region from AWS config) |
spawn pipeline โ
Manage multi-stage pipelines with DAG dependencies.
Pipelines allow you to orchestrate complex workflows where each stage runs on separate instances with different instance types. Stages can depend on each other, forming a directed acyclic graph (DAG).
Data can be passed between stages via:
- S3 (batch mode): Stage outputs uploaded to S3, downloaded by next stage
- Network streaming (real-time): Direct TCP/gRPC connections between stages
spawn pipelinespawn pipeline cancel โ
Cancel a running pipeline and terminate all instances.
Sets the cancellation flag in DynamoDB. The orchestrator Lambda will terminate all running instances and mark the pipeline as CANCELLED.
spawn pipeline cancel <pipeline-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn pipeline collect โ
Download all results from a completed pipeline.
Downloads outputs from all stages to a local directory.
spawn pipeline collect <pipeline-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--output-dir | string | ./results | Output directory for downloaded files | |
--stage | string | Download results from specific stage only |
spawn pipeline graph โ
Display the pipeline dependency graph as ASCII art.
Shows:
- Stage names and instance types
- Dependencies between stages
- Fan-out and fan-in patterns
- Data passing modes (S3 or streaming)
spawn pipeline graph <file> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--simple | bool | Show simplified graph | ||
--stats | bool | Show graph statistics |
spawn pipeline launch โ
Launch a multi-stage pipeline.
The pipeline definition will be uploaded to S3 and a Lambda orchestrator will be invoked to manage the pipeline execution.
spawn pipeline launch <file> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--region | string | AWS region (default: from AWS config) | ||
--wait | bool | Wait for pipeline to complete |
spawn pipeline list โ
List all pipelines for the current user.
Shows pipeline ID, name, status, and cost.
spawn pipeline list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--status | string | Filter by status (INITIALIZING, RUNNING, COMPLETED, FAILED, CANCELLED) |
spawn pipeline status โ
Show the current status of a running or completed pipeline.
Displays:
- Overall pipeline status
- Per-stage progress
- Instance information
- Cost tracking
spawn pipeline status <pipeline-id>spawn pipeline validate โ
Validate a pipeline definition file.
Checks:
- JSON syntax and structure
- Required fields present
- Stage dependencies valid (no circular dependencies)
- Instance types, regions, and other configuration valid
spawn pipeline validate <file>spawn plugin โ
Install, inspect, and remove service plugins on running instances.
Plugins are composable service units (Jupyter, Globus, Tailscale, etc.) defined by YAML specs with install/start/stop/health lifecycles.
Examples: spawn plugin list --instance i-0abc123 spawn plugin install globus-personal-endpoint --instance i-0abc123
--config endpoint_name=my-endpoint spawn plugin status globus-personal-endpoint --instance i-0abc123 spawn plugin remove globus-personal-endpoint --instance i-0abc123
spawn pluginspawn plugin gen-index โ
Generate index.json for a plugin registry from its plugins/ directory.
This is the generator side of plugin discovery, in the same arrangement as 'spawn plugin manifest': it lives here, and the registry's CI invokes it, so the index is always derived by the same parser that installs plugins and can never describe a spec differently from the spec itself.
--generated-at takes an RFC3339 timestamp (CI passes the commit time) so regenerating an unchanged registry produces a byte-identical file. It defaults to now, which makes every run differ โ fine locally, churn in CI.
Examples: spawn plugin gen-index ./plugins -o index.json spawn plugin gen-index ./plugins --generated-at 2026-07-29T00:00:00Z
spawn plugin gen-index <plugins-dir> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--generated-at | string | RFC3339 generation timestamp (default: now) | ||
--output | -o | string | Write index to this file instead of stdout | |
--source | string | spore-host/spore-plugins | owner/repo the index describes |
spawn plugin info โ
Show what the registry knows about a plugin: version, description, config parameters, and declared capability surface.
This reads the registry index and contacts no instance. It describes the plugin as PUBLISHED โ for the full spec of what installing would run, including every step, use 'spawn plugin inspect <ref>'.
Examples: spawn plugin info tailscale spawn plugin info jupyterlab --output json
spawn plugin info <name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--refresh | bool | Bypass the local cache and refetch the registry index |
spawn plugin inspect โ
Resolve a plugin reference and render its plan โ resolved source and version, local (controller) vs remote (instance) steps, requested controller environment, root vs login-user execution, downloads, health checks, cleanup, and its declared permissions block โ WITHOUT executing anything or contacting an instance.
Installing a plugin runs its author's code on your machine and, on the instance, as root. Inspect it first, especially for third-party (github:) plugins.
Plugin ref formats are the same as 'spawn plugin install': name official registry (spore-host/spore-plugins) name@v1.2.0 pinned to git tag github:user/repo/name custom GitHub repository ./path/to/plugin.yaml local file
spawn plugin inspect <plugin-ref> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--insecure | bool | Skip signature/checksum verification for official plugin releases (unsafe) |
spawn plugin install โ
Install a plugin on a running spore instance.
Runs the plugin's full lifecycle: local provision steps on this controller (e.g. creating a mutagen sync or a Globus endpoint), then the remote install/configure/start steps on the instance via spored. Values captured and pushed by local steps are delivered before the remote configure phase runs.
Requires SSH access to the instance (the same key used by 'spawn plugin status').
Plugin ref formats: name official registry (spore-host/spore-plugins) name@v1.2.0 pinned to git tag github:user/repo/name custom GitHub repository ./path/to/plugin.yaml local file
spawn plugin install <plugin-ref> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--config | stringArray | Config as key=value (repeatable) | ||
--dry-run | bool | Preview the plan without installing (contacts no instance) | ||
--insecure | bool | Skip signature/checksum verification for official plugin releases (unsafe) | ||
--instance | -i | string | Instance ID or hostname (required) | |
--key | string | Path to SSH private key | ||
--user | string | SSH username for the instance (default: ec2-user) |
spawn plugin list โ
List plugins installed on an instance
spawn plugin list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--instance | -i | string | Instance ID or hostname (required) | |
--key | string | Path to SSH private key | ||
--user | string | SSH username for the instance (default: ec2-user) |
spawn plugin manifest โ
Generate the checksum manifest (manifest.json) for a plugin directory. The manifest records the sha256 of the plugin's plugin.yaml so that spawn can verify a fetched official plugin matches the released bytes. This is the generator side of the registry supply-chain story: the registry's release workflow runs it and publishes the output as a GitHub Release asset; spawn verifies against it at install time. Contacts nothing.
Examples: spawn plugin manifest ./plugins/tailscale spawn plugin manifest ./plugins/tailscale -o manifest.json
spawn plugin manifest <plugin-dir> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--output | -o | string | Write manifest to this file instead of stdout |
spawn plugin remove โ
Remove a plugin from an instance
spawn plugin remove <name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--instance | -i | string | Instance ID or hostname (required) | |
--key | string | Path to SSH private key | ||
--user | string | SSH username for the instance (default: ec2-user) | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn plugin search โ
Search the official plugin registry (spore-host/spore-plugins) for plugins available to install. With no query, lists everything.
Reads a generated index published by the registry, cached locally so this works offline; the age of what you're seeing is always shown. This lists what EXISTS โ use 'spawn plugin list --instance <id>' for what is installed on an instance.
Examples: spawn plugin search spawn plugin search jupyter spawn plugin search --refresh
spawn plugin search [query] [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--refresh | bool | Bypass the local cache and refetch the registry index |
spawn plugin status โ
Show status of a plugin on an instance
spawn plugin status <name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--instance | -i | string | Instance ID or hostname (required) | |
--key | string | Path to SSH private key | ||
--user | string | SSH username for the instance (default: ec2-user) |
spawn plugin validate โ
Statically validate one or more plugin.yaml files without contacting any instance. Checks schema, semver, known step/condition/config types, that the containing directory matches the plugin name, and that every {{ config.X }} template reference points at a declared config parameter.
With --strict, also enforce that the declared permissions: block is consistent with the plugin's steps (e.g. instance.root=false must have no remote step that runs as root). --strict requires a permissions: block. The official registry's CI runs --strict so a published plugin's declared capability surface is enforced.
Examples: spawn plugin validate ./plugins/tailscale/plugin.yaml spawn plugin validate --strict ./plugins/*/plugin.yaml
spawn plugin validate <path>... [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--strict | bool | Also enforce permissions/step consistency (requires a permissions: block) |
spawn queue โ
Commands for managing and monitoring batch job queues.
Batch queues execute jobs sequentially on a single instance, with dependency management and automatic result collection.
Examples:
Check queue status on instance โ
spawn queue status i-1234567890abcdef0
Download queue results โ
spawn queue results queue-20260122-140530 --output ./results/
spawn queuespawn queue results โ
Download all job results from S3 for a completed or running queue.
Results include job outputs, logs, and the final queue state.
Examples:
Download to current directory โ
spawn queue results queue-20260122-140530
Download to specific directory โ
spawn queue results queue-20260122-140530 --output ./my-results/
spawn queue results <queue-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--output-dir | string | . | Output directory for results |
spawn queue status โ
Show the execution status of a batch queue running on an instance.
Connects to the instance via SSH and reads the queue state file.
Examples: spawn queue status i-1234567890abcdef0
spawn queue status <instance-id>spawn queue template โ
Manage pre-built queue configuration templates.
Templates provide ready-to-use queue configurations for common workflows with variable substitution for customization.
Available commands: list - List available templates show - Show template details generate - Generate queue config from template
spawn queue templatespawn queue template generate โ
Generate a queue configuration file from a template with variable substitution.
Variables can be provided via --var flags or use template defaults.
Examples:
Generate with defaults, output to file โ
spawn queue template generate ml-pipeline --output pipeline.json
Provide required variables โ
spawn queue template generate ml-pipeline
--var INPUT=/data/train.csv
--var S3_BUCKET=my-results
--output pipeline.json
Output to stdout (for piping) โ
spawn queue template generate simple-sequential
--var S3_BUCKET=results
spawn queue template generate <template-name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--output-file | string | Output file (default: stdout) | ||
--var | stringToString | Template variables (key=value) |
spawn queue template init โ
Launch an interactive wizard to create a custom queue configuration.
Guides you through creating a queue by asking questions about:
- Workflow type and name
- Number of jobs and commands
- Job dependencies
- Timeouts and retry policies
- Result collection
- S3 bucket configuration
Examples: spawn queue template init spawn queue template init --output my-queue.json
spawn queue template init [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--output-file | string | Output file (default: queue.json) |
spawn queue template list โ
List all available queue configuration templates.
Shows template names, descriptions, and required/optional variables.
Examples: spawn queue template list
spawn queue template listspawn queue template show โ
Show detailed information about a queue template.
Displays template description, jobs, and all variables with their defaults.
Examples: spawn queue template show ml-pipeline spawn queue template show etl
spawn queue template show <template-name>spawn resources โ
List every AWS resource spore.host created in an account/region, found by the spawn:managed=true tag via the Resource Groups Tagging API.
By default it lists resources created by you (your IAM principal). Use --all to include resources created by other principals in the account.
spawn resources [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--all-regions | bool | Search every enabled region | ||
--all | bool | Include resources created by other principals (default: only yours) | ||
--region | string | AWS region (default: current region from AWS config) |
spawn resume โ
Deprecated: use 'spawn sweep resume <sweep-id>' instead
Resume an interrupted parameter sweep from checkpoint.
Reads the sweep state from ~/.spawn/sweeps/<sweep-id>.json, queries EC2 for current instance states, and continues launching pending parameter sets with rolling queue orchestration.
Examples:
Resume sweep with original settings โ
spawn resume --sweep-id hyperparam-20260115-abc123
Resume with different max-concurrent โ
spawn resume --sweep-id <id> --max-concurrent 5
Resume in detached mode (Lambda) โ
spawn resume --sweep-id <id> --detach
spawn resume [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--detach | bool | Run sweep orchestration in Lambda | ||
--max-concurrent | int | Override max concurrent instances (0 = use original) | ||
--sweep-id | string | Sweep ID to resume (required) |
spawn schedule โ
Create, list, and manage scheduled executions of parameter sweeps.
Schedules run parameter sweeps at specified times via EventBridge Scheduler. No CLI running required - sweeps launch automatically at scheduled times.
Examples:
One-time execution โ
spawn schedule create params.yaml --at "2026-01-23T02:00:00" --timezone "America/New_York"
Recurring daily at 2 AM โ
spawn schedule create params.yaml --cron "0 2 * * *" --name "nightly-training"
Recurring with execution limit โ
spawn schedule create params.yaml --cron "0 */4 * * *" --max-executions 100
List all schedules โ
spawn schedule list
Cancel a schedule โ
spawn schedule cancel <schedule-id>
spawn schedulespawn schedule cancel โ
Cancel a scheduled execution. This will delete the EventBridge schedule and update the DynamoDB record. No further executions will occur.
Examples: spawn schedule cancel sched-20260122-140530
spawn schedule cancel <schedule-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn schedule create โ
Create a new scheduled execution of a parameter sweep.
Either --at (one-time) or --cron (recurring) is required.
Time formats: --at: ISO 8601 format (2026-01-23T02:00:00) --cron: Standard cron expression (minute hour day month weekday)
Examples:
One-time at specific time โ
spawn schedule create params.yaml --at "2026-01-23T14:30:00"
Every day at 2 AM Eastern โ
spawn schedule create params.yaml --cron "0 2 * * *" --timezone "America/New_York"
Every 6 hours for 30 days โ
spawn schedule create params.yaml --cron "0 */6 * * *" --max-executions 120
Weekdays only at 9 AM โ
spawn schedule create params.yaml --cron "0 9 * * 1-5"
spawn schedule create <params-file> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--at | string | One-time execution time (ISO 8601 format) | ||
--cron | string | Cron expression for recurring execution | ||
--end-after | string | Stop executing after this time (ISO 8601 format) | ||
--max-executions | int | Maximum number of executions (0 = unlimited) | ||
--name | string | Friendly name for this schedule | ||
--region | string | us-east-1 | AWS region for sweep execution | |
--timezone | string | UTC | IANA timezone (e.g., America/New_York) |
spawn schedule list โ
List all scheduled executions for the current user.
Examples:
List all schedules โ
spawn schedule list
List only active schedules โ
spawn schedule list --status active
spawn schedule list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--status | string | Filter by status (active|paused|cancelled) |
spawn schedule pause โ
Pause a scheduled execution temporarily. The schedule remains but executions are disabled. Use 'resume' to re-enable.
Examples: spawn schedule pause sched-20260122-140530
spawn schedule pause <schedule-id>spawn schedule resume โ
Resume a paused scheduled execution. Executions will continue according to the schedule.
Examples: spawn schedule resume sched-20260122-140530
spawn schedule resume <schedule-id>spawn schedule show โ
Aliases: describe
Show detailed information about a scheduled execution including configuration, execution history, and next run time.
Examples: spawn schedule show sched-20260122-140530
spawn schedule show <schedule-id>spawn slurm โ
Parse and convert Slurm batch scripts to spawn parameter files.
This enables HPC users to migrate existing Slurm workflows to the cloud with minimal changes. Supports array jobs, MPI jobs, and GPU jobs.
Examples:
Convert Slurm script to spawn parameters โ
spawn slurm convert job.sbatch --output params.yaml
Estimate cost before running โ
spawn slurm estimate job.sbatch
Convert and submit in one step โ
spawn slurm submit job.sbatch --spot
spawn slurmspawn slurm convert โ
Parse a Slurm batch script and convert it to spawn parameter format.
The generated parameter file can be reviewed and edited before launching.
Supported Slurm directives: --array=N-M โ Parameter sweep with M-N+1 tasks --time=HH:MM:SS โ TTL for each instance --mem=XGB โ Memory requirement for instance selection --cpus-per-task=N โ CPU requirement for instance selection --gres=gpu:N โ GPU requirement and instance selection --nodes=N โ Multi-node MPI job (requires --mpi flag) --job-name=NAME โ Instance name prefix
Custom #SPAWN directives (optional): #SPAWN --instance-type=TYPE โ Override instance type selection #SPAWN --region=REGION โ Override region #SPAWN --spot=true โ Enable spot instances #SPAWN --ami=AMI_ID โ Override AMI
Example: spawn slurm convert train.sbatch --output params.yaml spawn launch --params params.yaml
spawn slurm convert <script.sbatch> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--output-file | string | Output parameter file (default: stdout) |
spawn slurm estimate โ
Parse a Slurm batch script and estimate the cloud cost.
Provides a cost comparison between institutional cluster (free but queued) and cloud (paid but immediate).
Example: spawn slurm estimate train.sbatch
spawn slurm estimate <script.sbatch> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--region | string | Region to price the estimate in (default: #SPAWN --region, else your AWS config region) |
spawn slurm submit โ
Parse a Slurm batch script, convert to spawn parameters, and launch immediately.
This is a convenience command that combines 'convert' and 'launch' in one step. For complex jobs, consider using 'convert' first to review the generated parameters.
Example: spawn slurm submit train.sbatch --spot --yes
spawn slurm submit <script.sbatch> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--region | string | Region to price the estimate in (default: #SPAWN --region, else your AWS config region) | ||
--yes | -y | bool | Skip confirmation prompt |
spawn snapshot โ
Create EBS snapshots from raw disk images without launching an EC2 instance, so large reference data (a Kraken2 DB, BLAST index, ML weights) can be attached to spores via 'spawn launch --attach-volume' instead of being baked into a custom AMI.
spawn snapshotspawn snapshot create โ
Populate a new EBS snapshot directly using the EBS direct APIs โ no EC2 instance and no attached volume. The result is a snapshot you can attach with 'spawn launch --attach-volume snap-xxx:/mount'.
--from accepts any of:
- a directory โ its contents are packed into an ext4 filesystem image
- a .tar/.tar.gz/.tgz archive โ unpacked into an ext4 filesystem image
- a raw disk image โ streamed verbatim (its bytes ARE the block device)
Directories and tarballs are converted to ext4 in-process (pure Go โ no mkfs and no builder instance), so this works the same from macOS, Linux, or Windows. The ext4 filesystem is sized to the data and capped at --size.
For a directory or tarball source, the ext4 image is built in a local temp file first (~the uncompressed data size โ e.g. ~16 GB for a 16 GB DB) and removed when done; ensure that much free space, or use --temp-dir to point at a roomier disk. A raw image needs no scratch (it streams source โ snapshot directly). Memory stays low regardless of size (the upload streams blocks concurrently, never buffering the whole image).
The upload sends the uncompressed image to AWS over your connection; for a large DB over a slow uplink, run this from AWS CloudShell or a small in-region EC2 instance so the upload is AWS-internal.
Examples:
From a directory: โ
spawn snapshot create --from ./kraken2-db/ --size 20 --name kraken2-k2pluspf
From a tarball (local or in S3): โ
spawn snapshot create --from ./k2_pluspf.tar.gz --size 20 --name kraken2 spawn snapshot create --from s3://genome-idx/k2_pluspf.tar.gz --size 20
--name kraken2 --region us-east-1
From a raw filesystem image you already built: โ
spawn snapshot create --from ./kraken2.raw --size 20 --name kraken2
spawn snapshot create [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--description | string | Snapshot description | ||
--encrypted | bool | Create an encrypted snapshot | ||
--from | string | Source: a directory, a .tar/.tar.gz/.tgz, or a raw disk image โ local path or s3://bucket/key (required) | ||
--kms-key | string | Customer-managed KMS key ARN for encryption (implies --encrypted) | ||
--name | string | Name tag for the snapshot (also sets spawn:snapshot-name) | ||
--region | string | AWS region (default: the configured region) | ||
--size | int64 | Volume size in GiB the snapshot is built for; the image must fit (required) | ||
--tag | stringArray | Custom tag key=value to set on the snapshot (repeatable). Merged with the spawn:* baseline; cannot override a spawn: tag. | ||
--temp-dir | string | Directory for the temporary ext4 image built from a dir/tarball source (default: system temp). Point at a roomy disk for large data. |
spawn snapshot mount โ
Convenience for the head-node side of the reference-data-volume recipe: create an EBS volume from a snapshot, attach it to the instance this command runs on, and mount it (read-only by default) at <mount-point>.
This only works when run ON an EC2 instance (it identifies itself via IMDS). It's the one-command equivalent of: aws ec2 create-volume --snapshot-id โฆ && aws ec2 attach-volume โฆ && sudo mount -o ro โฆ. Use it on a spawn head node (or any EC2 box running 'nextflow run') so an nf-core pipeline's head-side db_path validation finds the DB. Tasks don't need this โ 'spawn launch --attach-volume' mounts the volume on each task automatically.
Example: sudo spawn snapshot mount snap-0abc123 /opt/databases/kraken2
spawn snapshot mount <snapshot-id> <mount-point> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--rw | bool | Mount read-write (default: read-only โ the right choice for shared reference data) |
spawn stage โ
Stage data to regional S3 buckets for efficient multi-region parameter sweeps.
Data staging enables cost-optimized data movement by:
- Replicating data once to regional buckets
- Allowing instances to download from local region (free)
- Avoiding repeated cross-region transfers ($0.09/GB)
Cost savings example: 100GB dataset, 2 regions, 10 instances each:
- Without staging: $90.00 (cross-region transfers)
- With staging: $6.60 (one-time replication)
- Savings: $85.70 (93% reduction)
Commands: spawn stage upload <path> Stage data to regional buckets spawn stage list List staged data spawn stage estimate Estimate staging cost savings spawn stage delete <id> Delete staged data
spawn stagespawn stage delete โ
Delete staged data from all regions and remove metadata.
spawn stage delete <staging-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn stage estimate โ
Estimate the cost difference between: A) Single-region storage with cross-region transfers B) Regional replication with local transfers
This helps determine if staging is cost-effective for your workload.
Example: spawn stage estimate
--data-size-gb 100
--instances 10
--regions us-east-1,us-west-2
spawn stage estimate [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--data-size-gb | int | 100 | Dataset size in GB | |
--instances | int | 10 | Number of instances per region | |
--regions | -r | stringSlice | [us-east-1,us-west-2] | Regions to estimate for (comma-separated or repeated) |
spawn stage list โ
List all data currently staged in regional buckets.
spawn stage listspawn stage upload โ
Upload a file or directory to spawn data staging buckets across regions.
The data will be:
- Uploaded to the primary region
- Replicated to additional regions
- Tracked in DynamoDB for lifecycle management
- Automatically deleted after 7 days
Example: spawn stage upload ./reference-genome.fasta
--regions us-east-1,us-west-2
--dest /mnt/data/reference.fasta
--sweep-id sweep-abc123
spawn stage upload <local-path> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--dest | string | Destination path on instances (default: /mnt/data/<filename>) | ||
--regions | -r | stringSlice | [us-east-1,us-west-2] | Regions to replicate to (comma-separated or repeated) |
--sweep-id | string | Associate with sweep ID for tracking |
spawn start โ
Start a stopped or hibernated instance
spawn start [instance-id-or-name] [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--job-array-id | string | Start all instances in job array by ID | ||
--job-array-name | string | Start all instances in job array by name |
spawn status โ
spawn status <instance-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--check-complete | bool | Check completion status and exit with standardized codes (0=complete, 1=failed, 2=running, 3=error) |
spawn stop โ
Stop a running instance (preserves EBS volumes)
spawn stop [instance-id-or-name] [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--job-array-id | string | Stop all instances in job array by ID | ||
--job-array-name | string | Stop all instances in job array by name | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn sweep โ
Manage parameter sweeps: list, check status, cancel, resume, and collect results.
Examples: spawn sweep list spawn sweep status sweep-20260116-abc123 spawn sweep cancel sweep-20260116-abc123 spawn sweep resume sweep-20260116-abc123 --max-concurrent 5 spawn sweep collect sweep-20260116-abc123 --output results.json
spawn sweepspawn sweep cancel โ
Cancel a running parameter sweep and terminate its instances
spawn sweep cancel <sweep-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn sweep collect โ
Download and aggregate results from a completed sweep
spawn sweep collect <sweep-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--best | int | Show only top N results by metric (0 = all) | ||
--format | string | json | Output format: json, csv, jsonl | |
--metric | string | Metric to rank results by (e.g. accuracy, loss) | ||
--output-file | -f | string | results.json | Output file path |
--regions | -r | stringSlice | Regions to collect from (comma-separated or repeated) | |
--s3-prefix | string | Custom S3 prefix for results (default: auto-detect) |
spawn sweep list โ
List parameter sweeps
spawn sweep list [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--last | int | 20 | Show last N sweeps | |
--region | string | Filter by region | ||
--since | string | Show sweeps created after date (YYYY-MM-DD) | ||
--status | string | Filter by status (RUNNING, COMPLETED, FAILED, CANCELLED) |
spawn sweep resume โ
Resume an interrupted parameter sweep from checkpoint
spawn sweep resume <sweep-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--detach | bool | Run sweep orchestration in Lambda | ||
--max-concurrent | int | Override max concurrent instances (0 = use original) |
spawn sweep status โ
Show parameter sweep status and progress
spawn sweep status <sweep-id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--check-complete | bool | Exit with standardized codes: 0=complete 1=failed 2=running 3=error |
spawn team โ
Create and manage teams for sharing spawn instances, sweeps, and autoscale groups
spawn teamspawn team add โ
Add a member to a team (owner only)
spawn team add <team_id> <iam_arn>spawn team create โ
Create a new team
spawn team create [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--description | string | Team description | ||
--name | string | Team name (required) |
spawn team delete โ
Delete a team and all memberships (owner only)
spawn team delete <team_id> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn team list โ
List teams you own or belong to
spawn team listspawn team remove โ
Remove a member from a team (owner only)
spawn team remove <team_id> <iam_arn> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--yes | -y | bool | Skip the confirmation prompt |
spawn team show โ
Show team details and member list
spawn team show <team_id>spawn terminate โ
Permanently terminate an instance. This is irreversible: the instance is destroyed and any non-persisted volumes are deleted. Use stop or hibernate to keep EBS volumes.
Terminate a single instance by ID or name, or an entire job array:
spawn terminate i-0abc123 spawn terminate my-instance --yes spawn terminate --job-array-name training
spawn terminate [instance-id-or-name] [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--job-array-id | string | Terminate all instances in job array by ID | ||
--job-array-name | string | Terminate all instances in job array by name | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn upgrade-spored โ
Replace the spored lifecycle agent on a running instance with a newer release WITHOUT terminating/relaunching the instance and without losing spored's lifecycle state (the TTL deadline, accumulated compute-seconds, and the completion / pre-stop / idle / FSx config all live in EC2 tags that the new spored re-reads on boot).
The default target is the latest released version; pin one with --version. A downgrade is refused unless --force is given. The swap is driven over SSM (keyless โ works on private-subnet / no-public-IP instances), so the instance must have the SSM agent online and an instance profile (the spored role attaches AmazonSSMManagedInstanceCore, so spawn-launched instances already qualify).
The TTL deadline is absolute and tag-stored, so it is NOT reset by the restart โ an instance mid-life keeps its original termination time. Linux only for now (Windows spored upgrade is a follow-up, #234).
spawn upgrade-spored <instance-id|name> [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--allow-downgrade | bool | Allow a downgrade (target older than the running version) | ||
--timeout | duration | 5m0s | How long to wait for the on-instance upgrade to complete | |
--version | string | Target spored version (e.g. 0.64.0); default: latest release | ||
--yes | -y | bool | Skip the confirmation prompt |
spawn validate โ
Validate spawn instances and configuration against compliance controls.
This command can validate:
- Running instances against compliance controls (NIST 800-171, NIST 800-53)
- Infrastructure resources (DynamoDB, S3, Lambda, CloudWatch)
- Launch configuration before launching instances
Examples:
Validate all running instances against NIST 800-171 โ
spawn validate --nist-800-171
Validate specific instance โ
spawn validate --instance-id i-0abc123 --nist-800-171
Validate infrastructure resources โ
spawn validate --infrastructure
Output as JSON for automation โ
spawn validate --nist-800-171 -o json
spawn validate [flags]Flags:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--infrastructure | bool | Validate infrastructure resources (DynamoDB, S3, Lambda) | ||
--instance-id | string | Specific instance ID to validate | ||
--nist-800-171 | string | Validate NIST 800-171 compliance | ||
--nist-800-53 | string | Validate NIST 800-53 compliance (low, moderate, high) | ||
--region | string | AWS region to validate (default: all regions) |
spawn version โ
Display version, build date, and git commit information for spawn.
spawn version