mts1b-cloudburst, mts1b-deploy, mts1b-pluginsdk — public API surface
mts1b-cloudburst
from mts1b_cloudburst import burst, JobSpec
job = await burst(
JobSpec(
name="ladder-sweep-momentum",
image="ghcr.io/mts1b/mts1b-gpubacktester:0.1.0",
gpus=1,
gpu_model="RTX_4090", # or "H100" or "ANY"
memory_gb=24,
max_duration_minutes=120,
max_cost_usd=10.0,
command=["mts1b-backtest", "batch", "--config", "/data/sweep.yaml"],
mount_local=[("./configs", "/data/configs:ro"),
("./results", "/data/results:rw")],
provider="auto", # picks cheapest available
result_sink=None, # or "s3://bucket/path"
)
)
async for event in job.stream_events():
print(event)
# JobEvent(type=..., at=..., details=...)
await job.sync_results()
CLI:
mts1b-burst submit --image X --gpus 1 --gpu-model RTX_4090 --max-cost-usd 10 \
--command "mts1b-backtest batch ..."
mts1b-burst list
mts1b-burst show <job_id>
mts1b-burst kill <job_id>
mts1b-burst budget show
mts1b-burst providers status
mts1b-burst image build --image gpubacktester --tag 0.1.0
mts1b-burst image push --image gpubacktester --tag 0.1.0
Providers: vast_ai, runpod, thunder, ssh (your own boxes).
mts1b-deploy
# Configure
mts1b-deploy menuconfig
# Validate
mts1b-deploy config validate
# Lifecycle
mts1b-deploy install --config mts1b.config
mts1b-deploy status
mts1b-deploy logs <service>
mts1b-deploy restart <service>
mts1b-deploy stop / start / down
mts1b-deploy destroy # ⚠️ deletes data
# Upgrade
mts1b-deploy upgrade --dry-run
mts1b-deploy upgrade
mts1b-deploy rollback --to <commit_sha>
# Backup
mts1b-deploy backup configure --target nfs://... --schedule "0 3 * * *"
mts1b-deploy backup now
mts1b-deploy restore --to-staging
# Vault
mts1b-deploy vault bootstrap --target proxmox-lxc --hostname vault.local
# Demos
mts1b-deploy demo backtest-equities
mts1b-deploy demo paper-trade
# Open dashboards
mts1b-deploy open grafana
mts1b-deploy open prometheus
Programmatic
from mts1b_deploy import Deployer, Config
cfg = Config.from_file("mts1b.config")
deployer = Deployer(cfg)
await deployer.validate()
await deployer.install()
status = await deployer.status()
# {"mts1b-foundation": "loaded", "mts1b-platform": "healthy", ...}
mts1b-pluginsdk
Create a plugin
mts1b-plugin new \
--type broker \
--name robinhood-crypto \
--author "Jane Q. Hacker" \
--output ./my-plugin
cd my-plugin
pip install -e ".[dev]"
pytest # protocol conformance pre-included
Types: broker, marketdata, factor, execalgo, risk_gate, sizer.
Register via entry points
# pyproject.toml
[project.entry-points."mts1b.brokers"]
robinhood-crypto = "mts1b_plugin_robinhood_crypto:RobinhoodCryptoClient"
[project.entry-points."mts1b.factors"]
f_my_mean_rev = "my_plugin.factors:f_my_mean_rev"
[project.entry-points."mts1b.execalgos"]
my-vwap-variant = "my_plugin.execalgos:execute"
Host repos auto-discover via Python entry-points at startup. No code changes needed in the host.
Showcase registry
mts1b-plugin list # what's installed
mts1b-plugin search broker # public registry
mts1b-plugin install mts1b-plugin-robinhood-crypto
mts1b-plugin info <plugin>
Submit to showcase: PR to mts1b-pluginsdk adding to showcase/index.yaml. Criteria:
- Apache 2.0 / MIT / BSD licensed
- Protocol conformance tests pass
- README + docs
- No pinned vulnerable deps
- Maintainer co-sign
Plugin SDK helpers
from mts1b_pluginsdk.sdk import (
register_broker, register_factor, register_execalgo,
plugin_vault_path, plugin_log,
)
# Scoped Vault path for plugin secrets (auto-namespaced)
secret = plugin_vault_path("my-broker") # → secret/mts1b/plugins/my-broker