Skip to main content

Sprites Python SDK

Python SDK for Sprites, providing sprite management, remote command execution, filesystem access, checkpoints, services, and network policy controls.

Installation

pip install sprites-py

Quick Start

import os

from sprites import SpritesClient

client = SpritesClient(token=os.environ["SPRITE_TOKEN"])
sprite = client.create_sprite(os.environ["SPRITE_NAME"])

# Run a command
result = sprite.run("echo", "hello", capture_output=True)
print(result.stdout.decode())  # "hello\n"

# Or use the Go-style API
cmd = sprite.command("ls", "-la")
output = cmd.output()
print(output.decode())

sprite.destroy()

API Overview

SpritesClient

from sprites import ListOptions, SpritesClient, URLSettings

client = SpritesClient(
    token="your-token",
    base_url="https://api.sprites.dev",  # optional
    timeout=30.0,  # optional
    control_mode=False,  # optional multiplexed exec transport
)

# Create a sprite
sprite = client.create_sprite(
    "my-sprite",
    url_settings=URLSettings(auth="sprite", private_access="admins"),
    labels=["dev"],
    wait_for_capacity=True,
    runtime="dev",
)

# Get a sprite handle (doesn't create it)
sprite = client.sprite("my-sprite")

# Get a sprite with populated metadata
sprite = client.get_sprite("my-sprite")

# List sprites
page = client.list_sprites(ListOptions(prefix="my-", bulk_load=True))
for item in page.sprites:
    print(item.name, item.status, item.labels)

# Update URL settings and labels
updated = client.update_sprite(
    "my-sprite",
    url_settings=URLSettings(auth="public"),
    labels=["dev", "public-demo"],
)

# Omitted mutable fields are left unchanged by the API.
client.update_sprite("my-sprite", labels=["dev"])

# Destroy a sprite
client.destroy_sprite("my-sprite")

URLSettings.auth is "sprite" or "public". When auth="sprite", private_access may be "admins" or "org_users". update_url_settings(...) is kept as a compatibility convenience for updating only URL settings; prefer update_sprite(...) when changing mutable sprite fields.

Sprite

# Run a command (subprocess.run style)
result = sprite.run("echo", "hello", capture_output=True, timeout=30)
print(result.returncode)
print(result.stdout)

# Create a command (Go exec.Cmd style)
cmd = sprite.command("bash", "-c", "echo hello")
output = cmd.output()  # Returns stdout
combined = cmd.combined_output()  # Returns stdout + stderr

# TTY mode
cmd = sprite.command("bash", tty=True, tty_rows=24, tty_cols=80)
cmd.run()

# Attach to an existing session
sessions = sprite.list_sessions()
cmd = sprite.attach_session(sessions[0].id, timeout=2)
cmd.run()

Commands use WebSockets. If control_mode=True is passed to SpritesClient, new commands use the multiplexed control connection when the sprite supports it and fall back to the standard exec WebSocket otherwise. Use sprite.command(...) instead of sprite.run(...) when you need streaming stdin/stdout/stderr handles.

Filesystem

fs = sprite.filesystem("/app")

(fs / "config.json").write_text('{"debug": true}')
print((fs / "config.json").read_text())

for path in (fs / ".").iterdir():
    print(path.name)

Checkpoints

# List checkpoints
checkpoints = sprite.list_checkpoints()

# Create a checkpoint (five-minute network inactivity timeout by default)
stream = sprite.create_checkpoint("my checkpoint")
for msg in stream:
    print(msg.type, msg.data)

# Restore a checkpoint with a caller-selected timeout
stream = sprite.restore_checkpoint("checkpoint-id", timeout=600)
for msg in stream:
    print(msg.type, msg.data)

Services

# Create or update a service and stream startup events
stream = sprite.create_service(
    "web",
    cmd="python",
    args=["-m", "http.server", "8000"],
    http_port=8000,
    env={"APP_ENV": "production"},
    dir="/app",
)
for event in stream:
    print(event.type, event.data)

# Inspect and control services
services = sprite.list_services()
web = sprite.get_service("web")
sprite.stop_service("web")
sprite.start_service("web")

Network Policy

from sprites import NetworkPolicy, PolicyRule

# Get current policy
policy = sprite.get_network_policy()

# Update policy
new_policy = NetworkPolicy(rules=[
    PolicyRule(domain="example.com", action="allow"),
])
sprite.update_network_policy(new_policy)

Client signals

Requests carry coarse, privacy-safe client signals (Fly-Client-* headers + a User-Agent suffix) so Fly.io can estimate how much API traffic is human- vs. agent-driven. They're advisory only — never used for gating or rate-limiting.

To opt out, set SPRITES_CLIENT_SIGNALS=0 (also accepts off/false/no). When disabled, requests still send a plain sprites-py/<version> User-Agent and no Fly-Client-* headers — the SDK is otherwise unaffected.

Integrations

Framework-specific adapters are published separately so this SDK can remain generic. The OpenAI Agents integration provides a Sprites-backed implementation of the Agents SDK sandbox interface.

Requirements

  • Python 3.9+
  • websockets
  • httpx
  • client-signals

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sprites_py-0.6.0.tar.gz (54.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sprites_py-0.6.0-py3-none-any.whl (46.7 kB view details)

Uploaded Python 3

File details

Details for the file sprites_py-0.6.0.tar.gz.

File metadata

  • Download URL: sprites_py-0.6.0.tar.gz
  • Upload date:
  • Size: 54.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sprites_py-0.6.0.tar.gz
Algorithm Hash digest
SHA256 a48682faeaa39b8f635c1c18ac3d5a3709859050206c2977efdc5dd3fa886fc6
MD5 d492a34c86a69f2e6b8b31424f336739
BLAKE2b-256 751163fac634575f187541d2a4aba02a6996ea934672569de6ab44c214817775

See more details on using hashes here.

Provenance

The following attestation bundles were made for sprites_py-0.6.0.tar.gz:

Publisher: publish.yml on superfly/sprites-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sprites_py-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: sprites_py-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 46.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for sprites_py-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 26c8f038fd9c8e3cae39e254c04214ff7e4d6edaf46c9bb2806e2bc0d3752064
MD5 b7a868bba05199a23b1e031e7faeb17d
BLAKE2b-256 c362bf5fb2465921556c2739b1daeee290b5f7920993cc6b0c102b25497b8393

See more details on using hashes here.

Provenance

The following attestation bundles were made for sprites_py-0.6.0-py3-none-any.whl:

Publisher: publish.yml on superfly/sprites-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.6.0 This release

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 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