Skip to content

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.

FlagShortTypeDefaultDescription
--accessibilityboolEnable accessibility mode (implies --no-emoji)
--accountstringExpected AWS account ID (optional guard)
--langstringLanguage for output (en, es, fr, de, ja, pt)
--no-colorboolDisable colorized output
--no-emojiboolDisable emoji in output
--output-ostringtableOutput format (table, json)
--profilestringAWS named profile (overrides SPORE_PROFILE/AWS_PROFILE and the shared config)
--regionstringDefault AWS region (overrides SPORE_REGION/AWS_REGION and the shared config)
--verbose-vboolEnable 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 alerts

spawn 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:

FlagShortTypeDefaultDescription
--cost-thresholdfloat64Alert when cost exceeds threshold (dollars)
--emailstringEmail address for notifications
--instance-failedboolAlert when any instance fails
--long-runningintAlert when sweep runs longer than N minutes
--on-completeboolAlert when sweep/schedule completes
--on-failureboolAlert when sweep/schedule fails
--schedule-idstringSchedule ID (alternative to sweep-id)
--slackstringSlack webhook URL for notifications
--snsstringSNS topic ARN for notifications
--webhookstringWebhook URL for notifications

spawn alerts delete โ€‹

Delete an alert configuration.

Example: spawn alerts delete alert-abc123

spawn alerts delete <alert-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--sweep-idstringFilter 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 ami

spawn ami create โ€‹

Create an AMI from a running instance

spawn ami create <instance-id-or-name> [flags]

Flags:

FlagShortTypeDefaultDescription
--descriptionstringDescription for the AMI
--namestringName for the AMI (required)
--rebootboolReboot instance before creating AMI (default: no-reboot)
--tagstringArrayTags in key=value format
--waitboolWait 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:

FlagShortTypeDefaultDescription
--regionstringAWS region (default: current region from AWS config)
--yes-yboolSkip the confirmation prompt

spawn ami list โ€‹

List spawn-managed AMIs

spawn ami list [flags]

Flags:

FlagShortTypeDefaultDescription
--archstringFilter by architecture (x86_64 or arm64)
--deprecatedboolShow deprecated AMIs
--gpustringFilter by GPU support (true or false)
--regionstringAWS region (default: current region from AWS config)
--stackstringFilter by stack (spawn:stack tag)
--versionstringFilter 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:

FlagShortTypeDefaultDescription
--regionstringAWS 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 app

Flags:

FlagShortTypeDefaultDescription
--catalogstringLocal 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:

FlagShortTypeDefaultDescription
--app-versionstringApp container image tag to launch (default: catalog default; see 'spawn app list')
--idle-timeoutstringStop when DCV has no clients for this duration (default: catalog default)
--imagestringLaunch 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-typestringOverride instance type (default: first catalog family + .xlarge)
--namestringSession name (default: <app>-<timestamp>)
--no-openboolWrite session file but do not open browser automatically
--regionstringAWS region (default: from AWS config)
--spotboolUse Spot pricing
--ttlstringHard termination deadline (e.g. 4h, 8h)

spawn app list โ€‹

List all streamable applications in the catalog

spawn app list

spawn autoscale โ€‹

Launch and manage auto-scaling job arrays that maintain target capacity

spawn autoscale

Flags:

FlagShortTypeDefaultDescription
--envstringproductionEnvironment (production or staging)
--tablestringspawn-autoscale-groupsDynamoDB 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:

FlagShortTypeDefaultDescription
--amistringAMI ID (required)
--desired-capacityintDesired instance count (required)
--iam-profilestringIAM instance profile
--instance-typestringEC2 instance type (required)
--job-array-idstringJob array ID (auto-generated if not specified)
--key-namestringSSH key name
--max-capacityintMaximum instance count (default: desired * 2)
--metric-namestringCloudWatch metric name (for custom metrics)
--metric-namespacestringCloudWatch namespace (for custom metrics)
--metric-periodint300Metric evaluation period in seconds
--metric-policystringMetric policy type: 'cpu', 'memory', or 'custom'
--metric-statisticstringAverageMetric statistic: Average, Maximum, or Minimum
--min-capacityintMinimum instance count (default: 0)
--namestringGroup name (required)
--queue-urlstringSQS queue URL for queue-depth policy (required if --scaling-policy=queue-depth)
--scale-down-cooldownint300Scale-down cooldown in seconds
--scale-up-cooldownint60Scale-up cooldown in seconds
--scaling-policystringScaling policy type: 'queue-depth' (empty = manual mode)
--security-group-idsstringSliceSecurity group IDs (comma-separated or repeated)
--spotboolUse spot instances
--subnet-idstringSubnet ID
--tagstringArrayAdditional tag key=value (repeatable)
--target-messages-per-instanceint10Target messages per instance for queue-depth scaling
--target-valuefloat64Target metric value (e.g., 70.0 for 70% CPU)
--user-datastringUser data script (base64 encoded)

spawn autoscale list โ€‹

Aliases: ls

List all active auto-scaling groups

spawn autoscale list

spawn 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 schedule

spawn autoscale schedule add โ€‹

Add a scheduled action to an autoscale group

spawn autoscale schedule add <group-name> [flags]

Flags:

FlagShortTypeDefaultDescription
--desired-capacityintDesired capacity (required)
--enabledbooltrueEnable the schedule immediately
--max-capacityintMaximum capacity override (optional)
--min-capacityintMinimum capacity override (optional)
--namestringSchedule name (required)
--schedulestringCron expression: 'second minute hour day month weekday' (required)
--timezonestringUTCTimezone (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:

FlagShortTypeDefaultDescription
--yes-yboolSkip the confirmation prompt

spawn autoscale set-metric-policy โ€‹

Set or update metric-based scaling policy

spawn autoscale set-metric-policy <group-name> [flags]

Flags:

FlagShortTypeDefaultDescription
--metric-namestringCloudWatch metric name (for custom metrics)
--metric-namespacestringCloudWatch namespace (for custom metrics)
--metric-periodint300Metric evaluation period in seconds
--metric-policystringMetric policy type: 'cpu', 'memory', or 'custom'
--metric-statisticstringAverageMetric statistic: Average, Maximum, or Minimum
--noneboolRemove metric policy
--target-valuefloat64Target 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:

FlagShortTypeDefaultDescription
--noneboolRemove scaling policy (revert to manual mode)
--queue-urlstringSQS queue URL for single-queue policy (deprecated: use --queue)
--queue-weightfloat64SliceQueue weight 0.0-1.0 (must match number of --queue flags)
--queuestringSliceSQS queue URL (can be specified multiple times for multi-queue)
--scale-down-cooldownint300Scale-down cooldown in seconds
--scale-up-cooldownint60Scale-up cooldown in seconds
--scaling-policystringScaling policy type: 'queue-depth'
--target-messages-per-instanceint10Target 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:

FlagShortTypeDefaultDescription
--yes-yboolSkip the confirmation prompt

spawn autoscale update โ€‹

Update auto-scaling group capacity

spawn autoscale update <group-name> [flags]

Flags:

FlagShortTypeDefaultDescription
--desired-capacityint-1New desired capacity
--max-capacityint-1New maximum capacity
--min-capacityint-1New 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:

FlagShortTypeDefaultDescription
--instance-typestringInstance type to check (required)
--regions-rstringSliceRegions 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:

sh
# 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 --spot

Flags:

FlagShortTypeDefaultDescription
--amistringAMI ID (auto-detect if not specified)
--countint1Number of instances to launch
--instance-typestringt3.microEC2 instance type
--job-array-idstringJob array ID to join (required)
--job-array-namestringJob array name (optional)
--key-namestringSSH key pair name
--security-group-idsstringSliceSecurity group IDs (comma-separated or repeated)
--spotboolUse Spot instances
--subnet-idstringSubnet 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:

FlagShortTypeDefaultDescription
--sweep-idstringSweep ID to cancel (required)
--yes-yboolSkip 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-block

spawn 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:

FlagShortTypeDefaultDescription
--countint321Number of instances in the block
--dry-runboolPreview the price and terms without purchasing (no charge, no write API call)
--duration-hoursint32Capacity Block duration in hours (required)
--instance-typestringInstance type of the offering, e.g. p5.48xlarge (required)
--platformstringLinux/UNIXInstance platform (Linux/UNIX, Windows, ...)
--regionstringAWS region of the offering (required)
--tagstringArrayTag 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:

FlagShortTypeDefaultDescription
--all-regionsboolClean up every enabled region
--allboolInclude resources created by other principals (default: only yours)
--dry-runboolPreview what would be removed without deleting anything
--regionstringAWS region (default: current region from AWS config)
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--bestintShow only top N results by metric (0 = all)
--formatstringjsonOutput format: json, csv, jsonl
--metricstringMetric to use for ranking results (e.g., accuracy, loss)
--output-ostringresults.jsonOutput file path
--regions-rstringSliceRegions to collect from (comma-separated or repeated; default: all)
--s3-prefixstringCustom S3 prefix for results (default: auto-detect)
--sweep-idstringSweep 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:

FlagShortTypeDefaultDescription
--keystringSSH private key path
--no-startboolDo not automatically start a stopped/hibernated instance
--portint22SSH port
--rdp-portint13389Windows --rdp --via-ssm: local port for the SSM RDP tunnel
--rdpboolWindows: open a Remote Desktop (RDP) connection (decrypts the Administrator password)
--session-managerboolUse AWS Session Manager instead of SSH
--sshboolWindows: SSH in (as Administrator, over OpenSSH) instead of opening a PowerShell-over-SSM session โ€” same SSH path as Linux
--userstringSSH username (default: ec2-user)
--via-ssmboolWindows --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:

FlagShortTypeDefaultDescription
--descriptionstringDescription for the AMI
--namestringName for the AMI (required)
--rebootboolReboot instance before creating AMI (default: no-reboot)
--tagstringArrayTags in key=value format (can be specified multiple times)
--waitboolWait 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 defaults

spawn defaults list โ€‹

List all default launch values

spawn defaults list

spawn 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 dns

Flags:

FlagShortTypeDefaultDescription
--domainstringDNS domain for record registration (default: spore.host)

spawn dns delete โ€‹

spawn dns delete <instance-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--yes-yboolSkip the confirmation prompt

spawn dns list โ€‹

spawn dns list [flags]

Flags:

FlagShortTypeDefaultDescription
--all-aboolShow 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:

FlagShortTypeDefaultDescription
--job-array-idstringExtend TTL for all instances in job array by ID
--job-array-namestringExtend TTL for all instances in job array by name

spawn fsx โ€‹

Manage FSx Lustre filesystems: list, info, export, delete

spawn fsx

spawn fsx delete โ€‹

Delete an FSx Lustre filesystem, optionally exporting to S3 first

spawn fsx delete <filesystem-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--export-firstboolExport data to S3 before deleting
--yes-yboolSkip confirmation prompt

spawn fsx list โ€‹

List all spawn-managed FSx Lustre filesystems across all regions

spawn fsx list

spawn 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:

FlagShortTypeDefaultDescription
--job-array-idstringHibernate all instances in job array by ID
--job-array-namestringHibernate 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 image

spawn 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:

FlagShortTypeDefaultDescription
--bucketstringS3 bucket to stage a local ISO in (default: managed spawn-iso-import-<account>-<region>, auto-created)
--execution-rolestringAWSServiceRoleForImageBuilderIAM execution role name or ARN
--image-indexint6411-based edition index in a multi-edition ISO
--infra-config-arnstringImage Builder infrastructure configuration ARN (optional; self-provisioned if omitted)
--instance-typestringm6i.largeBuild instance type (when self-provisioning infra)
--isostringWindows 11 ISO: local path or s3://bucket/key.ISO (required)
--keep-isoboolKeep the staged ISO (and managed bucket) after the AMI is built; by default they are deleted (only applies with --wait)
--namestringImage Builder image resource name (required)
--no-secure-bootboolDisable Secure Boot on the output AMI
--no-warmboolSkip building the warm (fast-boot) AMI; produce only the raw imported base AMI
--regionstringus-east-1AWS region for the import build
--s3-keystringS3 object key for the uploaded ISO (default: derived from filename, .ISO)
--security-group-idsstringSliceSecurity groups for the build instance (comma-separated or repeated; when self-provisioning infra)
--subnet-idstringSubnet for the build instance (when self-provisioning infra)
--versionstring1.0.0Semantic version for the output image (major.minor.patch)
--wait-timeoutint60Max minutes to wait when --wait is set before detaching (the build keeps running)
--waitboolWait for the AMI to finish building, then tag and clean up (warm mode implies this)
--warm-instance-typestringm7i.xlargeInstance type for the warm-build seed (non-burstable; Windows)
--warm-timeoutint30Safety-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:

FlagShortTypeDefaultDescription
--regionstringus-east-1AWS 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:

  1. Interactive wizard (default if no input)
  2. From truffle JSON via pipe
  3. 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:

FlagShortTypeDefaultDescription
--active-portsstringTCP ports to monitor for active connections, prevents idle termination (e.g. '8787' for RStudio, '8787,8888' for RStudio+Jupyter)
--active-processesstringProcess names to monitor, prevents idle termination while any are running (e.g. 'rsession' for RStudio, 'rsession,jupyter' for multiple)
--allow-cidrstringCIDR allowed to reach the managed Windows security group (RDP 3389 + SSH 22); default 0.0.0.0/0
--amistringAMI ID (ami-...); omit or use 'auto' to auto-detect the latest AL2023
--attach-volumestringArrayAttach 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-groupbooltrueAutomatically create placement group for MPI job arrays (default: true)
--azstringAvailability zone
--batch-queuestringBatch job queue file (JSON) for sequential execution
--budgetfloat64Budget limit in dollars for parameter sweeps (0 = no limit)
--capacity-blockboolThe --reservation-id is a Capacity Block for ML (sets MarketType=capacity-block); mutually exclusive with --spot (#216)
--cartesianboolGenerate cartesian product of parameter lists
--commandstringCommand to run on all instances (executed after spored setup)
--completion-delaystring30sGrace period after completion signal
--completion-filestring/tmp/SPAWN_COMPLETEFile to watch for completion signal
--compliance-strictboolStrict mode: fail on warnings (default: show warnings only)
--configstringLaunch config YAML file (supports plugins: list)
--cost-limitfloat64Terminate/stop when compute spend reaches this amount in USD (compute cost only; 0 = disabled)
--cost-tierstringPrefer cost tier: low, standard, premium
--countint1Number of instances to launch (job array)
--detachboolRun sweep orchestration in Lambda (auto-enabled for parameter sweeps)
--dns-api-endpointstringCustom DNS API endpoint (overrides default)
--dns-domainstringCustom DNS domain (overrides default)
--dnsstringOverride DNS name if different from --name (advanced)
--efaboolEnable Elastic Fabric Adapter for ultra-low latency MPI (requires supported instance types)
--efs-idstringEFS filesystem ID to mount (fs-xxx)
--efs-mount-optionsstringCustom EFS mount options (overrides profile)
--efs-mount-pointstring/efsEFS mount point (default: /efs)
--efs-profilestringgeneralEFS performance profile: general, max-io, max-throughput, burst
--estimate-onlyboolShow cost estimate and exit without launching
--fsx-createboolCreate new FSx Lustre filesystem with S3 backing (requires --fsx-lifecycle)
--fsx-export-pathstringS3 path to export to (e.g., s3://bucket/prefix)
--fsx-idstringExisting FSx Lustre filesystem ID to mount (fs-xxx)
--fsx-import-pathstringS3 path to import from (e.g., s3://bucket/prefix)
--fsx-lifecyclestringFSx lifetime (REQUIRED with --fsx-create): 'ephemeral' (reaped when this instance terminates) or 'durable' (persists; requires --fsx-ttl)
--fsx-mount-pointstring/fsxFSx mount point (default: /fsx)
--fsx-recallstringRecall FSx filesystem by stack name (recreate from S3)
--fsx-s3-bucketstringS3 bucket for FSx import/export (required with --fsx-create)
--fsx-skip-validateboolSkip FSx filesystem validation (for testing)
--fsx-storage-capacityint321200FSx storage capacity in GB (1200, 2400, or increments of 2400)
--fsx-throughputint32125FSx PERSISTENT_2 throughput in MB/s/TiB (125, 250, 500, or 1000; default: 125)
--fsx-ttlstringFSx 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
--hibernateboolEnable hibernation
--iam-allow-full-accessboolPermit wildcard :FullAccess --iam-policy templates (s3:/dynamodb:/sqs: on all resources) on the instance role; off by default โ€” prefer scoped ReadOnly/WriteOnly
--iam-managed-policiesstringSliceAWS managed policy ARNs
--iam-policy-filestringCustom IAM policy JSON file
--iam-policystringSliceService-level policies (e.g., s3:ReadOnly,dynamodb:WriteOnly). Wildcard *:FullAccess templates require --iam-allow-full-access
--iam-role-tagsstringSliceTags for IAM role (key=value format)
--iam-rolestringIAM role name (creates if doesn't exist)
--iam-trust-servicesstringSlice[ec2]Services that can assume role
--idle-timeoutstringAuto-terminate if idle (defaults to 1h if neither --ttl nor --idle-timeout set)
--instance-namesstringInstance name template (e.g., 'worker-{index}', default: '{job-array-name}-{index}')
--instance-typestringInstance type
--interactiveboolForce interactive wizard
--job-array-namestringJob array group name (required if --count > 1)
--key-namestringSSH key pair name (EC2 KeyName)
--launch-delaystring0sDelay between instance launches (e.g., 5s)
--max-concurrent-per-regionintMax instances running simultaneously per region (0 = unlimited)
--max-concurrentintMax instances running simultaneously (0 = unlimited)
--min-viableint1Job array: minimum members that must launch for success (default 1; ignored for --mpi)
--modestringbalancedDistribution mode: balanced (fair share) or opportunistic (prioritize available regions)
--mpi-commandstringCommand to run via mpirun (alternative to --command)
--mpi-processes-per-nodeintMPI processes per node (default: vCPU count)
--mpiboolEnable MPI cluster setup (requires --count > 1)
--namestringName your spore, required (sets Name tag, DNS, and hostname)
--nested-virtualizationboolEnable nested virtualization (run KVM/Hyper-V inside the instance). Requires a C8i/M8i/R8i instance type.
--nist-800-171boolEnable NIST 800-171 Rev 3 compliance mode
--nist-800-53stringEnable NIST 800-53 compliance (low, moderate, high)
--no-detachboolDisable auto-detach for parameter sweeps (requires --ttl or --idle-timeout)
--no-timeoutboolDisable automatic timeout (NOT RECOMMENDED: creates zombie risk)
--notify-platformstringChat platform for lifecycle notifications: slack (default), teams, or discord
--on-completestringAction 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-idlestringAction 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
--osstringTarget 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-idstringWrite sweep/instance ID to file for scripting
--param-filestringPath to parameter sweep file (JSON/YAML/CSV)
--paramsstringInline JSON parameters for sweep
--placement-groupstringAWS Placement Group for MPI instances (auto-created if not specified)
--pluginstringArrayPlugin to install at launch (ref[@version], repeatable)
--pre-stop-timeoutstringMax time to wait for --pre-stop command (default: 5m, spot: 90s)
--pre-stopstringShell command to run on the instance before any lifecycle-triggered stop/terminate (e.g., "aws s3 sync /results s3://bucket/")
--proximity-fromstringPrefer regions close to this region (e.g., us-east-1)
--queue-templatestringQueue template name (use 'spawn queue template list' to see options)
--quietboolMinimal output
--regionstringAWS region
--regions-excludestringSliceExclude these regions (supports wildcards: us-, eu-)
--regions-geographicstringSliceGeographic constraints: us, eu, ap, north-america, europe, asia-pacific
--regions-includestringSliceOnly use these regions (supports wildcards: us-, eu-)
--reservation-idstringCapacity Reservation / Capacity Block ID to launch into (fs-/cr-...) โ€” instance must be in the reservation's AZ (#216)
--security-group-idsstringSliceSecurity group IDs (comma-separated or repeated)
--session-timeoutstring30mAuto-logout idle shells (0 to disable)
--skip-mpi-installboolSkip MPI installation (use with custom AMIs that have MPI pre-installed)
--skip-region-checkboolSkip data locality region mismatch warnings
--slack-workspacestringSlack workspace ID for lifecycle notifications (e.g. T03NE3GTY)
--spot-max-pricestringMax Spot price
--spot-webhook-urlstringOn spot interruption, spored POSTs a fire-once, best-effort notice to this URL within the ~2-min window (off-node consumers; empty = disabled)
--spotboolLaunch as Spot instance
--strata-formationstringStrata formation to activate (e.g. r-research@2024.03)
--strata-profilestringPath to a Strata profile YAML file
--strata-registrystrings3://strata-registryStrata registry S3 URL
--subnet-idstringSubnet ID
--sweep-namestringHuman-readable sweep identifier (auto-generated if empty)
--tagstringArrayCustom tag key=value on the instance and its created volumes (repeatable). The spawn: prefix is reserved.
--teamstringTeam ID: tag instance with spawn:team-id for team-shared access
--template-varstringToStringTemplate variables (key=value)
--terminate-on-errorboolIf post-launch verification fails (e.g. spored didn't come up), terminate the instance instead of leaving it running
--ttlstringAuto-terminate after duration (e.g., 8h, defaults to 1h idle if not set)
--use-reservationboolUse capacity reservation
--user-data-filestringUser data file
--user-datastringUser data (@file or inline)
--volume-sizeint32Root EBS volume size in GiB (0 = use AMI default)
--vpcstringVPC ID
--wait-for-runningbooltrueWait until running
--wait-for-sshbooltrueWait until SSH is ready
--wait-timeoutstringTimeout for --wait (e.g., 2h, 30m, 0=no timeout)
--waitboolWait for sweep/launch to complete (requires --detach)
--webhook-correlationstringOpaque blob echoed verbatim in the spot-webhook payload so a consumer can correlate the event to its own record (never parsed by spawn)
--webhook-timeoutstringHard cap on the spot-webhook POST so it can't eat the reclamation window (default: 2s)
--yes-yboolAuto-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:

FlagShortTypeDefaultDescription
--archstringFilter by architecture (x86_64 or arm64)
--deprecatedboolShow deprecated AMIs (default: hide deprecated)
--gpustringFilter by GPU support (true or false)
--regionstringAWS region (default: current region from AWS config)
--stackstringFilter by stack (spawn:stack tag)
--versionstringFilter 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:

FlagShortTypeDefaultDescription
--lastint20Show last N sweeps
--regionstringFilter by region
--sincestringShow sweeps created after date (YYYY-MM-DD)
--statusstringFilter 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:

FlagShortTypeDefaultDescription
--azstringFilter by availability zone
--instance-familystringFilter by instance family (e.g., m7i, t3)
--instance-typestringFilter by exact instance type (e.g., t3.micro)
--job-array-idstringFilter by job array ID
--job-array-namestringFilter by job array name
--regionstringFilter by AWS region (default: all regions)
--regions-rstringSliceFilter by regions (comma-separated, e.g. us-east-1,us-west-2)
--statestringFilter by instance state (running, stopped, etc.)
--sweep-idstringFilter by parameter sweep ID
--sweep-namestringFilter by parameter sweep name
--tagstringArrayFilter 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 notify

spawn notify deregister โ€‹

Remove a chat bot registration

spawn notify deregister [flags]

Flags:

FlagShortTypeDefaultDescription
--nicknamestringNickname to deregister
--platformstringChat platform: slack, teams, or discord
--tablestringOverride DynamoDB registry table name
--user-idstringPlatform user ID
--workspace-idstringPlatform 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:

FlagShortTypeDefaultDescription
--nicknamestringNickname of the registration to enable/disable
--platformstringChat platform: slack, teams, or discord
--tablestringOverride DynamoDB registry table name
--user-idstringPlatform user ID
--workspace-idstringPlatform 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:

FlagShortTypeDefaultDescription
--nicknamestringNickname of the registration to enable/disable
--platformstringChat platform: slack, teams, or discord
--tablestringOverride DynamoDB registry table name
--user-idstringPlatform user ID
--workspace-idstringPlatform workspace ID

spawn notify list โ€‹

List chat bot registrations for a workspace

spawn notify list [flags]

Flags:

FlagShortTypeDefaultDescription
--platformstringChat platform: slack, teams, or discord
--tablestringOverride DynamoDB registry table name
--workspace-idstringPlatform 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:

FlagShortTypeDefaultDescription
--allowstringSliceAllowed actions (default: start,stop,status,hibernate,url)
--connect-codestringOne-time code from /spore connect (alternative to --user-id)
--instancestringInstance ID (i-...) or name
--nicknamestringFriendly name for slash commands (default: 'default')
--platformstringChat platform: slack, teams, or discord
--role-arnstringCross-account IAM role ARN for this instance's account (created automatically if omitted)
--tablestringOverride DynamoDB registry table name
--tag-prefixstringTag prefix: spawn or prism (default: auto-detected)
--user-idstringPlatform-native user ID (e.g. Slack U04KZABCD)
--userstringUser email address (resolved to platform user ID)
--workspace-idstringPlatform workspace ID (e.g. Slack T03NE3GTY)

spawn notify workspace โ€‹

Manage chat-platform workspace registrations

spawn notify workspace

spawn 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:

FlagShortTypeDefaultDescription
--allowed-channelsstringSliceRestrict commands to specific channel IDs (e.g. C12345,C67890). Empty = all channels.
--bot-tokenstringBot token (Slack xoxb-..., or Discord bot token)
--connect-ttlintMax /spore connect code lifetime in hours (0 = use platform default, typically 24h). Can only lower the platform default.
--platformstringChat platform: slack, teams, or discord
--public-keystringDiscord application public key (Ed25519, hex; required for discord)
--signing-secretstringSlack/Teams signing secret (required for slack/teams)
--tablestringOverride DynamoDB workspaces table name
--webhook-urlstringChannel webhook URL for notifications (Discord channel webhook, or manual Slack incoming webhook)
--workspace-idstringPlatform workspace ID
--workspace-namestringHuman-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:

FlagShortTypeDefaultDescription
--dry-runboolPreview what would be removed without deleting anything
--platformstringChat platform: slack, teams, or discord
--registry-tablestringOverride DynamoDB registry table name
--workspace-idstringPlatform workspace ID (required)
--workspaces-tablestringOverride DynamoDB workspaces table name
--yes-yboolSkip the confirmation prompt

spawn notify workspace list โ€‹

List registered workspaces

spawn notify workspace list [flags]

Flags:

FlagShortTypeDefaultDescription
--platformstringChat platform: slack, teams, or discord
--tablestringOverride DynamoDB workspaces table name

spawn notify workspace remove โ€‹

Remove a workspace registration

spawn notify workspace remove [flags]

Flags:

FlagShortTypeDefaultDescription
--platformstringChat platform: slack, teams, or discord
--tablestringOverride DynamoDB workspaces table name
--workspace-idstringPlatform workspace ID
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--all-regionsboolSearch every enabled region
--allboolInclude resources created by other principals (default: only yours)
--regionstringAWS 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 pipeline

spawn 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:

FlagShortTypeDefaultDescription
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--output-dirstring./resultsOutput directory for downloaded files
--stagestringDownload 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:

FlagShortTypeDefaultDescription
--simpleboolShow simplified graph
--statsboolShow 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:

FlagShortTypeDefaultDescription
--regionstringAWS region (default: from AWS config)
--waitboolWait 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:

FlagShortTypeDefaultDescription
--statusstringFilter 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 plugin

spawn 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:

FlagShortTypeDefaultDescription
--generated-atstringRFC3339 generation timestamp (default: now)
--output-ostringWrite index to this file instead of stdout
--sourcestringspore-host/spore-pluginsowner/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:

FlagShortTypeDefaultDescription
--refreshboolBypass 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:

FlagShortTypeDefaultDescription
--insecureboolSkip 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:

FlagShortTypeDefaultDescription
--configstringArrayConfig as key=value (repeatable)
--dry-runboolPreview the plan without installing (contacts no instance)
--insecureboolSkip signature/checksum verification for official plugin releases (unsafe)
--instance-istringInstance ID or hostname (required)
--keystringPath to SSH private key
--userstringSSH username for the instance (default: ec2-user)

spawn plugin list โ€‹

List plugins installed on an instance

spawn plugin list [flags]

Flags:

FlagShortTypeDefaultDescription
--instance-istringInstance ID or hostname (required)
--keystringPath to SSH private key
--userstringSSH 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:

FlagShortTypeDefaultDescription
--output-ostringWrite manifest to this file instead of stdout

spawn plugin remove โ€‹

Remove a plugin from an instance

spawn plugin remove <name> [flags]

Flags:

FlagShortTypeDefaultDescription
--instance-istringInstance ID or hostname (required)
--keystringPath to SSH private key
--userstringSSH username for the instance (default: ec2-user)
--yes-yboolSkip the confirmation prompt

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:

FlagShortTypeDefaultDescription
--refreshboolBypass 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:

FlagShortTypeDefaultDescription
--instance-istringInstance ID or hostname (required)
--keystringPath to SSH private key
--userstringSSH 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:

FlagShortTypeDefaultDescription
--strictboolAlso 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 queue

spawn 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:

FlagShortTypeDefaultDescription
--output-dirstring.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 template

spawn 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:

FlagShortTypeDefaultDescription
--output-filestringOutput file (default: stdout)
--varstringToStringTemplate 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:

FlagShortTypeDefaultDescription
--output-filestringOutput 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 list

spawn 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:

FlagShortTypeDefaultDescription
--all-regionsboolSearch every enabled region
--allboolInclude resources created by other principals (default: only yours)
--regionstringAWS 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:

FlagShortTypeDefaultDescription
--detachboolRun sweep orchestration in Lambda
--max-concurrentintOverride max concurrent instances (0 = use original)
--sweep-idstringSweep 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 schedule

spawn 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:

FlagShortTypeDefaultDescription
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--atstringOne-time execution time (ISO 8601 format)
--cronstringCron expression for recurring execution
--end-afterstringStop executing after this time (ISO 8601 format)
--max-executionsintMaximum number of executions (0 = unlimited)
--namestringFriendly name for this schedule
--regionstringus-east-1AWS region for sweep execution
--timezonestringUTCIANA 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:

FlagShortTypeDefaultDescription
--statusstringFilter 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 slurm

spawn 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:

FlagShortTypeDefaultDescription
--output-filestringOutput 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:

FlagShortTypeDefaultDescription
--regionstringRegion 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:

FlagShortTypeDefaultDescription
--regionstringRegion to price the estimate in (default: #SPAWN --region, else your AWS config region)
--yes-yboolSkip 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 snapshot

spawn 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:

FlagShortTypeDefaultDescription
--descriptionstringSnapshot description
--encryptedboolCreate an encrypted snapshot
--fromstringSource: a directory, a .tar/.tar.gz/.tgz, or a raw disk image โ€” local path or s3://bucket/key (required)
--kms-keystringCustomer-managed KMS key ARN for encryption (implies --encrypted)
--namestringName tag for the snapshot (also sets spawn:snapshot-name)
--regionstringAWS region (default: the configured region)
--sizeint64Volume size in GiB the snapshot is built for; the image must fit (required)
--tagstringArrayCustom tag key=value to set on the snapshot (repeatable). Merged with the spawn:* baseline; cannot override a spawn: tag.
--temp-dirstringDirectory 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:

FlagShortTypeDefaultDescription
--rwboolMount 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 stage

spawn stage delete โ€‹

Delete staged data from all regions and remove metadata.

spawn stage delete <staging-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--data-size-gbint100Dataset size in GB
--instancesint10Number of instances per region
--regions-rstringSlice[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 list

spawn stage upload โ€‹

Upload a file or directory to spawn data staging buckets across regions.

The data will be:

  1. Uploaded to the primary region
  2. Replicated to additional regions
  3. Tracked in DynamoDB for lifecycle management
  4. 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:

FlagShortTypeDefaultDescription
--deststringDestination path on instances (default: /mnt/data/<filename>)
--regions-rstringSlice[us-east-1,us-west-2]Regions to replicate to (comma-separated or repeated)
--sweep-idstringAssociate with sweep ID for tracking

spawn start โ€‹

Start a stopped or hibernated instance

spawn start [instance-id-or-name] [flags]

Flags:

FlagShortTypeDefaultDescription
--job-array-idstringStart all instances in job array by ID
--job-array-namestringStart all instances in job array by name

spawn status โ€‹

spawn status <instance-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--check-completeboolCheck 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:

FlagShortTypeDefaultDescription
--job-array-idstringStop all instances in job array by ID
--job-array-namestringStop all instances in job array by name
--yes-yboolSkip 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 sweep

spawn sweep cancel โ€‹

Cancel a running parameter sweep and terminate its instances

spawn sweep cancel <sweep-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--yes-yboolSkip the confirmation prompt

spawn sweep collect โ€‹

Download and aggregate results from a completed sweep

spawn sweep collect <sweep-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--bestintShow only top N results by metric (0 = all)
--formatstringjsonOutput format: json, csv, jsonl
--metricstringMetric to rank results by (e.g. accuracy, loss)
--output-file-fstringresults.jsonOutput file path
--regions-rstringSliceRegions to collect from (comma-separated or repeated)
--s3-prefixstringCustom S3 prefix for results (default: auto-detect)

spawn sweep list โ€‹

List parameter sweeps

spawn sweep list [flags]

Flags:

FlagShortTypeDefaultDescription
--lastint20Show last N sweeps
--regionstringFilter by region
--sincestringShow sweeps created after date (YYYY-MM-DD)
--statusstringFilter by status (RUNNING, COMPLETED, FAILED, CANCELLED)

spawn sweep resume โ€‹

Resume an interrupted parameter sweep from checkpoint

spawn sweep resume <sweep-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--detachboolRun sweep orchestration in Lambda
--max-concurrentintOverride max concurrent instances (0 = use original)

spawn sweep status โ€‹

Show parameter sweep status and progress

spawn sweep status <sweep-id> [flags]

Flags:

FlagShortTypeDefaultDescription
--check-completeboolExit 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 team

spawn 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:

FlagShortTypeDefaultDescription
--descriptionstringTeam description
--namestringTeam name (required)

spawn team delete โ€‹

Delete a team and all memberships (owner only)

spawn team delete <team_id> [flags]

Flags:

FlagShortTypeDefaultDescription
--yes-yboolSkip the confirmation prompt

spawn team list โ€‹

List teams you own or belong to

spawn team list

spawn team remove โ€‹

Remove a member from a team (owner only)

spawn team remove <team_id> <iam_arn> [flags]

Flags:

FlagShortTypeDefaultDescription
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--job-array-idstringTerminate all instances in job array by ID
--job-array-namestringTerminate all instances in job array by name
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--allow-downgradeboolAllow a downgrade (target older than the running version)
--timeoutduration5m0sHow long to wait for the on-instance upgrade to complete
--versionstringTarget spored version (e.g. 0.64.0); default: latest release
--yes-yboolSkip 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:

FlagShortTypeDefaultDescription
--infrastructureboolValidate infrastructure resources (DynamoDB, S3, Lambda)
--instance-idstringSpecific instance ID to validate
--nist-800-171stringValidate NIST 800-171 compliance
--nist-800-53stringValidate NIST 800-53 compliance (low, moderate, high)
--regionstringAWS region to validate (default: all regions)

spawn version โ€‹

Display version, build date, and git commit information for spawn.

spawn version