Skip to main content

SpacePilot 🚀

PyPI Python License Tests

You decide what to run. SpacePilot decides how and where.

SpacePilot runs AI models on the machine in front of you and tells you honestly what fits before you download it. One surface, every modality: text and chat, embeddings, speech and transcription, and image — with a per-run measurement record for each. Work the machine cannot hold goes to a rented box with the same honesty checks on both sides. A CLI, a FastMCP tool server, and a zero-build web UI are three windows onto one state.

Works today on Apple Silicon (Metal) and extends cleanly to CUDA and CPU. The /v1 surface is OpenAI-compatible, so anything that already speaks chat/completions or embeddings can point at it.


Why SpacePilot

Two things this project does not do:

  1. It does not guess. Every model card is either flown — a real, dated measurement on a named machine — on paper, with the cited source — or unflown, which the registry names as a rule applied to a parameter count. Most registries pretend the third category does not exist. This one puts a number on it.
  2. It does not hide behind an API. The /v1 OpenAI-compatible surface means other tools can use SpacePilot without learning a new format. The heterogeneity it manages (local Lance/CUDA/CPU, rented spot, remote box) is the point.

The narrow waist that makes this useful: SpacePilot is a decision layer and orchestration layer — not a model, not a serving framework. It reads your fleet, ranks what fits, and routes your work honestly. It never invents a number.


What works today

surface surface route
Text Apple Silicon spacepilot run text, pinned MLX-LM route
Text (OpenAI-compatible) Any POST /v1/chat/completions
Embeddings Apple Silicon POST /v1/embeddings, 1024-dim
Speech (TTS) Any In-process Kokoro-82M ONNX
Transcription Any whisper.cpp, measured, working
Image Apple Silicon mflux, own venv, subprocess-only
Video — Not yet — routes exist, refuse with 501. Mock test-pattern real render is gone.

The /v1 surface is specified in docs/design/INFERENCE-SURFACE.md.

Honest boundary

Video here is real in name and honest in report: the engine routes exist as specs, and the CLI tells you that. It is the longer-term aim, not a description of this repo today.


Install

uv tool install spacepilot            # from PyPI — the canonical install

Or with pip:

pip install spacepilot

Then:

spacepilot probe                      # what this machine can run
spacepilot models list                # which models run here, with the fit verdict
spacepilot doctor                     # check environment and dependencies

No account, no API key, no port opened. Full setup guide: docs/LOCAL-SETUP.md.


Quickstart

Start the combined web UI + API on localhost:

spacepilot serve

Then open:

  • Cockpit — http://localhost:8088/cockpit — live hardware telemetry, the model hub, and the save spot-billing path.
  • Create Studio — http://localhost:8088/create — the create surface.
  • Developer docs — http://localhost:8088/docs.

The Cockpit and other pages reflect whatever this machine actually is — including the honest "we don't know" state when a probe returns no answer.


Your first run

The CLI overlay of the first probe looks like the landing page's "fifteen seconds, start to measured": it asks permission before reading anything, it reports what it read, and it stays honest about gaps.

spacepilot probe

What this returns on a given machine is a records entry in registry/measurements/<your machine>/, timestamped, source-attributed, and reusable. Nothing in that flow phones home.


Architecture at a glance

┌─────────────────────────────────────────────────────────────────────┐
│                    SpacePilot Platform Topology                     │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  1. Compute Provider Modules (pluggable execution runtimes)          │
│     ├── Local Host Driver — Apple Metal MPS / CUDA / CPU             │
│     ├── Hardware Probe — auto-detects usable VRAM, names the source  │
│     └── Rented spots, docks, and managed APIs (cost-accounted)       │
│                                                                     │
│  2. Generative Model Modules                                         │
│     ├── LTX-Video 2.5, Wan2.1, HunyuanVideo — spec only; routes      │
│     │   refuse 501 until real inference exists                       │
│     ├── Speech & VO — In-process Kokoro-82M ONNX                     │
│     └── Narrative — GGUF screenplay deconstruction                   │
│                                                                     │
│  3. Agentic Protocol & Tool Modules                                  │
│     ├── FastMCP tool server (`spacepilot/mcp_server.py`)             │
│     ├── DocIR 2.0 Edit Protocol — byte-exact reversible patches      │
│     └── WebSocket PTY bridge — live shell & worker streaming         │
│                                                                     │
│  4. UI Component Modules (zero-build, no bundler)                    │
│     ├── Create Studio `/create`                                      │
│     ├── Cockpit `/cockpit`                                           │
│     ├── Oven Swarm Kanban `/oven.html`                               │
│     └── Director NLE `/studio`                                       │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

Where the code lives

spacepilot/               The package — CLI, FastAPI app factory, drivers,
                          daemon, registry, measurement store
├── drivers/              Per-runtime execution drivers — MLX-LM (text),
│                         mflux (image), whisper.cpp (transcribe),
│                         Kokoro (speech), GGUF (narrative)
├── api/routes/           16 route modules; mutating routes go through
│                         require_token; read-only stays open
├── engines/              Video DiT engine specs — none run inference yet
├── web/                  Zero-build UI actually served by app.py (ships
│                         in the wheel — a uv tool install used to 500)
├── registry/             The model registry: variants, provenance,
│                         measurements, systems
│                         registry/models + systems + measurements
├── docs/design/          The architecture and inference-surface docs
tests/                    Pytest suite — do not trust a hardcoded count
                          in any doc, check CI for the current number
landing/                  The spacepilot.dev landing (deploys to Vercel)
native/SpaceBar/          macOS menu-bar app (Swift), separate cadence.
                          Moved to motionvector-dev/spacebar (carve-out
                          landed 2026-09-24); this directory will be
                          removed once the extraction settles.

Configuration & secrets

Environment variables are the interface, or any secrets manager. Never commit secrets; .env.example is the reference of what a deployment needs.

export LOCAL_WORKER_TOKEN="your-token"        # gated worker endpoints

API & MCP

HTTP API

Every endpoint that spends compute or creates assets is gated by X-SpacePilot-Token. Read-only and telemetry routes stay open.

Surfaces worth knowing:

  • /v1/chat/completions — OpenAI-compatible chat
  • /v1/embeddings — embeddings
  • /api/compute/local-profile — hardware capability telemetry (usable VRAM with its source)
  • /api/compute/models/recommended — task-based fit verdicts for this machine
  • /healthz — dependency-free liveness
  • /docs — the developer portal

MCP

spacepilot-mcp is a stdio MCP server for Cursor, Claude Code, and Antigravity. The Studio process also hosts a loopback-only Streamable HTTP transport at /mcp/v1/.


Tests

python -m pytest tests/ -q

Do not trust a hardcoded test count in any doc — CI on the current main is the number that counts. The suite covers the DiT engine specs (mock renders only, honestly labelled), the working TTS/transcription/embedding drivers, device probing, the /v1 surface, and the FastMCP tools.


Roadmap

Honest about what's in and what is not:

  • Works now: hardware probing with named sources, model fit verdicts, compatibility across 88 variants, runtime installs that show what they will move before they move it, speech locally, OpenAI-compatible /v1.
  • Not yet: video on your own silicon, scheduling across more than one ship at a time, a daemon that runs persistently outside the CLI.
  • Adjacent, separate package later: SpaceBar (macOS menu bar app) ships its own release. A CLI install should not pull in a macOS tray app.

Contributing

Issues and PRs welcome. Two rules from AGENTS.md that keep this honest:

  • Execution over ceremony. Skip bureaucratic process. Bias toward working code with receipts.
  • Strict tests before implementation on production paths: reproduce red → fix green → refactor. Exploratory spikes are exempt until they land in production paths.

Run the tests locally before opening a PR. CI runs on a self-hosted lenovo runner and is the gate.


License

Apache 2.0 — same license as the registry's Apache-family model weights so everything under this roof stays redistributable.


Release files for spacepilot 2.9.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spacepilot 2.9.0
File Size Uploaded
spacepilot-2.9.0.tar.gz 769.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for spacepilot 2.9.0
File Interpreter ABI Platform
spacepilot-2.9.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.5 MB

Release files / spacepilot-2.9.0.tar.gz

Download URL spacepilot-2.9.0.tar.gz
Size 769.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d6848f13f206f30560bbcb5ea9622c1759df6f174003eb16f0f917b295a059ba
BLAKE2b-256 checksum
How to use checksums
6494af8e6d7687b4e6c00bbc8123eba888a008e4be2b923ce84d71d931dce0ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / spacepilot-2.9.0-py3-none-any.whl

Download URL spacepilot-2.9.0-py3-none-any.whl
Size 689.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bc60ce001c516defacb83c42591e896c81fba4a1967e275fbe90a683bc212dc9
BLAKE2b-256 checksum
How to use checksums
00b754bc2e71dbac9b906038212247b1ac7877fd8d632bafda7af24ec9105871
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.2 {"installer":{"name":"uv","version":"0.12.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

2.9.0 This release

2 release files

2.8.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page