How It Works β
spore.host is an open-source toolkit for temporary AWS compute. Use truffle to find an EC2 instance that fits your workload and budget, use spawn to launch it with a hard time limit, idle shutdown, and completion rules, and let spored β a small agent on the instance β keep enforcing those rules after you disconnect. When scarce capacity is unavailable, lagotto can keep checking and notify you or launch automatically when it appears.
The tools use your existing AWS account and credentials. There's no new compute provider to sign up for, and you pay AWS only for the resources you use. spore.host is not itself the host β despite the name, it never holds your credentials or runs your compute for you. See Security, credentials & data flow for exactly what runs where.
This page explains how the six tools fit together.
The core idea β
The biggest problem with cloud compute isn't launching instances β it's managing them. Instances get forgotten over weekends. Researchers SSH in, run a job, close the laptop, and come back on Monday to a bill. Someone accidentally leaves a p4d.24xlarge running for three days.
spore.host solves this with a simple contract: every instance has a lifecycle that manages itself. When you launch with spore.host, the instance knows when it should stop. You don't have to remember.
The six tools β
Truffle β Find β
Before you launch anything, you need to know what's available and what it costs. Truffle searches EC2 instance types across regions using plain language or filters, compares Spot prices in real time, and checks your service quotas so you don't get a launch failure after waiting for capacity.
truffle find "nvidia h100 8gpu" --regions us-east-1
truffle spot g5.2xlarge --regions us-east-1,us-west-2
truffle quotas --regions us-east-1 --family PTruffle doesn't launch anything β it's read-only. Think of it as the search and research tool.
Spawn β Launch and manage β
Spawn is the launcher. It takes truffle's output (or your own flags) and provisions an EC2 instance with everything spore.host needs to manage its lifecycle: the spored daemon, TTL tags, idle detection configuration, and notification hooks.
truffle find "t3.medium" | spawn --ttl 8h
spawn launch --name training --instance-type g5.2xlarge --ttl 24hSpored is the daemon that runs on the instance itself. It's small, it runs in the background, and it handles:
- TTL enforcement β the instance terminates at the configured deadline
- Idle detection β CPU, network, process names, and SSH sessions are all monitored; if the instance has been idle too long, it stops or hibernates
- Lifecycle notifications β sends events (TTL warning, idle warning, completion) to the spore-bot Lambda so you get Slack/Teams messages
- DNS registration β registers a DNS name at launch and cleans it up on termination
- Pre-stop hooks β runs a shell command before any shutdown to save work, sync files, or send a completion signal
Lagotto β Watch for capacity β
Some instance types β particularly high-demand GPU families β aren't always available. Lagotto runs as a serverless Lambda function that polls for capacity on a schedule and acts when something appears. You configure what to watch for, and Lagotto handles the rest.
lagotto watch "p5.48xlarge" --regions us-east-1 --action notify
lagotto list # see active watchesLagotto is useful when you have a job queued but can't launch it yet β you want to be notified the moment capacity opens up, or you want the launch to happen automatically.
It triggers on two things: capacity (lagotto watch) and time (lagotto launch --at/--after/--cron). The time-based mode exists so you can launch into an EC2 Capacity Block for ML at its reserved start time β the block becomes usable at a fixed hour, and the launch fires automatically with no one awake to run it.
Spore-bot β Control from anywhere β
Once an instance is running, you might not want to open a terminal to manage it. Spore-bot connects your Slack or Teams workspace to your running instances. Any team member you've authorized can type /spore status, /spore stop, or /spore extend 4h and it just works β from any device, any location.
Lifecycle events from spored are routed through spore-bot to your Slack DMs:
- β±οΈ training will terminate in 5 minutes β with time to extend if you need more
- β training has completed β your job finished and the instance is terminating
- *βΉοΈ training has stopped β idle timeout reached β nothing was happening, so compute was paused
MCP Server β Control from AI assistants β
The spore.host MCP server exposes spore.host's read and manage operations as tools for AI assistants that support the Model Context Protocol β Claude Desktop, Cursor, and others. It can discover instance types with truffle and inspect or manage instances you already have running (status, stop, terminate, extend) β but it deliberately cannot launch instances, so an assistant can never spin up billable compute on your behalf. Instead of running CLI commands, you describe what you need in plain language and the assistant handles it.
"What instances do I have running and how long until they terminate?"
"Find me the cheapest A100 instance in us-east-1 and tell me the Spot savings."
The typical workflow β
truffle find "nvidia a100" # 1. Find the right instance type
β
spawn launch # 2. Launch with TTL and idle config
β
spored (on instance) # 3. Daemon monitors, enforces TTL,
β detects idle, fires notifications
β
spore-bot β Slack DM # 4. You hear about events without
polling or checking terminals
β
Instance terminates automatically # 5. No forgotten instancesConfiguration layers β
spore.host has three layers of configuration:
- CLI flags β highest priority, overrides everything (
--ttl 24h) - Defaults file β
~/.spawn/config.yamlβ for settings you always want (spawn defaults set idle-timeout 1h) - EC2 tags β spored reads its configuration from tags on the instance at startup
This means you can set global defaults once and override per-launch without re-specifying everything every time.
What spore.host doesn't do β
- It doesn't take over SSH-key management: spawn imports your existing default public key (
~/.ssh/id_ed25519or~/.ssh/id_rsa) and only generates a managed key under~/.spawn/keys/if you have none β it never touches or uploads your private keys - It doesn't modify your AWS account structure, VPCs, or security groups (beyond what's needed to launch)
- It doesn't store your AWS credentials β everything uses your existing credential chain
- It doesn't require any always-on infrastructure in your account (spored runs on the instance; the Lambda functions run in the spore.host-infra account)
Next steps β
- Installation guide β get set up properly
- GPU Training β a complete worked example
- spawn launch reference β every flag and EC2 tag explained