Skip to main content

Podflare — Python SDK

Cloud sandbox for AI agents. Fork in 100 ms, persistent Python REPL, run_code, upload/download, merge_into, interactive PTY sessions (pty.create / attach / sendInput / resize / kill).

Install

pip install podflare

Quickstart

from podflare import Sandbox

# Create a sandbox (persistent Python REPL, preloaded libs on python-datasci)
sbx = Sandbox(template="python-datasci")

# Execute code — state persists across calls
sbx.run_code("x = 42")
print(sbx.run_code("print(x * 2)").stdout)  # "84"

# Fork — spawn N copies of the running sandbox
children = sbx.fork(n=5)
children[0].run_code("x = 100")   # isolated per branch

# Merge a branch back into the parent
sbx.merge_into(children[0])

# Upload + download files
sbx.upload("data.csv", open("local.csv", "rb").read())
sbx.run_code("import pandas as pd; df = pd.read_csv('data.csv')")

# Destroy
sbx.close()

Configuration

Env var Default What it does
PODFLARE_API_KEY (none — required) Bearer token from the dashboard (pf_live_...).
PODFLARE_HOSTD_URL https://api.podflare.ai Override for self-hosted or staging deployments.

You can also pass them as constructor arguments:

from podflare import Sandbox

sbx = Sandbox(
    host="https://api.podflare.ai",
    api_key="pf_live_...",
    template="default",
)

Streaming

with Sandbox() as s:
    for ev in s.run_code_stream("for i in range(3): print(i)"):
        if ev.type == "stdout":
            print(ev.data, flush=True)

Interactive PTY — sandbox.pty.*

When an LLM-generated command needs a real terminal (interactive installers, REPLs, npm init, apt install, or anything that checks isatty()), reach for the PTY namespace. It gives you a first-class pseudo-terminal inside the sandbox, with reconnect support for long-running sessions that outlive your process.

from podflare import Sandbox

with Sandbox(region="eu") as sbx:
    # Spawn a real tty. timeout_ms=0 keeps the session alive until
    # close() or the sandbox's max_lifetime.
    pty = sbx.pty.create(
        cmd="npm init",
        cols=120, rows=40,
        on_data=lambda chunk: print(chunk.decode(), end=""),
        timeout_ms=0,
    )

    # Send keystrokes — strings are UTF-8, bytes are raw
    pty.send_input("\r" * 9)              # accept every npm init default
    pty.send_input(b"\x03")               # Ctrl-C
    pty.resize(cols=200, rows=50)         # child receives SIGWINCH
    exit_code = pty.wait()                # blocks until the child exits

Reconnect across turns (survive network blips)

# Turn 1 — kick off a long build
pty = sbx.pty.create(cmd="bash", timeout_ms=0)
pty.send_input(b"./build.sh 2>&1 | tee /tmp/build.log\n")
pty_id = pty.id  # persist this across your agent's turns

# Turn 2 (different process, maybe hours later)
pty = sbx.pty.attach(pty_id, on_data=stream_to_user)
# Replays the last 1 MiB of buffered output, then tails live.
# Same running bash — pty.send_input still works.

Full API: https://docs.podflare.ai/concepts/pty

Framework adapters

First-class integrations:

  • OpenAI Agents SDK — podflare.adapters.openai_agents
  • Anthropic code_execution tool — podflare.adapters.anthropic
  • MCP server (podflare-mcp npm package) for Claude Desktop / Cursor / Cline / Zed

See the integrations docs for copy-paste examples.

Links

License

Proprietary.

Metadata

Release files for podflare 0.0.22

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

Source distribution (sdist)

Source distribution for podflare 0.0.22
File Size Uploaded
podflare-0.0.22.tar.gz 27.8 kB Details

Built distribution (wheel)

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

Total release size: 60.5 kB

Release files / podflare-0.0.22.tar.gz

Download URL podflare-0.0.22.tar.gz
Size 27.8 kB
Tags Source
SHA-256 checksum
How to use checksums
aaff39519e401a6ff9c36d36b7b7495a19a2f3170b211a90ebb55b5522246d2b
BLAKE2b-256 checksum
How to use checksums
97aeedabcbe2039de1af03489dfc084b9834b7eea5e542469cbd8889fe646440
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / podflare-0.0.22-py3-none-any.whl

Download URL podflare-0.0.22-py3-none-any.whl
Size 32.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
15096e68c8ce05eb8b7733326e3081b0704045792cbde31196a380a4ea09b176
BLAKE2b-256 checksum
How to use checksums
a36b6f6c04cdc1bbc9ec442104c6f810b2a3260cd3276cc405d208f7ccac9f3b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.0.22 This release

2 release files

0.0.21

2 release files

0.0.20

2 release files

0.0.19

2 release files

0.0.18

2 release files

0.0.17

2 release files

0.0.16

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.11

2 release files

0.0.10

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

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