Plato Python SDK
Python SDK for the Plato platform.
Installation
pip install plato-sdk-v2
Or with uv:
uv add plato-sdk-v2
Agent support is in the base package — there is no [agents] extra. The declared
extras are dev, segmentation, worlds and db-cleanup (see pyproject.toml).
Configuration
Create a .env file in your project root:
PLATO_API_KEY=your-api-key
PLATO_BASE_URL=https://plato.so # optional, defaults to https://plato.so
Or set environment variables directly:
export PLATO_API_KEY=your-api-key
Agents
Agents run inside Plato VMs. The first-party agent is computer-use (browser
automation, install: pip install plato-agent-computer-use); custom agents
subclass plato.agents.BaseAgent — see plato/agents/base.py for the interface
and the module docstring in plato/agents/__init__.py for the exported API and
worked examples.
CLI Usage
# List available agents
plato agent list
# Get agent config schema
plato agent schema computer-use
# Publish a custom agent to Plato PyPI
plato agent publish ./my-agent
Sessions & Environments
Flow 1: Create Session from Environments
Use this when you want to spin up environments for development, testing, or custom automation.
import asyncio
from plato.v2 import AsyncPlato, Env
async def main():
plato = AsyncPlato()
# Create session with one or more environments
# (heartbeat starts automatically to keep session alive)
session = await plato.sessions.create(
envs=[
Env.simulator("gitea", dataset="blank", alias="gitea"),
Env.simulator("kanboard", alias="kanboard"),
],
timeout=600,
)
# Reset environments to initial state
await session.reset()
# Get public URLs for browser access
public_urls = await session.get_public_url()
for alias, url in public_urls.items():
print(f"{alias}: {url}")
# Get state mutations from all environments
state = await session.get_state()
print(state)
# Cleanup
await session.close()
await plato.close()
asyncio.run(main())
Flow 2: Create Session from Test Case
Use this when running evaluations against predefined test cases. This flow includes evaluation at the end.
import asyncio
from plato.v2 import AsyncPlato
async def main():
plato = AsyncPlato()
# Create session from a test case public ID.
# Unlike `envs=`/`artifacts=`, this auto-resets for mutation logging,
# so no explicit session.reset() is needed.
session = await plato.sessions.create(testcase="tc_abc123", timeout=600)
# Get public URLs for browser access
public_urls = await session.get_public_url()
for alias, url in public_urls.items():
print(f"{alias}: {url}")
# Evaluate task completion
evaluation = await session.evaluate()
print(f"Task completed: {evaluation}")
# Cleanup
await session.close()
await plato.close()
asyncio.run(main())
Environment Configuration
Two ways to specify environments:
from plato.v2 import Env
# 1. From simulator (most common)
Env.simulator("gitea") # default tag
Env.simulator("gitea", tag="staging") # specific tag
Env.simulator("gitea", dataset="blank") # specific dataset
Env.simulator("gitea", alias="my-git") # custom alias
# 2. From artifact ID
Env.artifact("artifact-abc123")
Env.artifact("artifact-abc123", alias="my-env")
Per-Environment Operations
Access individual environments within a session:
# Get all environments
for env in session.envs:
print(f"{env.alias}: {env.job_id}")
# Get specific environment by alias
gitea = session.get_env("gitea")
if gitea:
# Execute shell command
result = await gitea.execute("whoami", timeout=30)
print(result)
# Get state for this environment only
state = await gitea.get_state()
# Reset this environment only
await gitea.reset()
Sync Client
A synchronous client is also available:
from plato.v2 import Plato, Env
plato = Plato()
session = plato.sessions.create(
envs=[Env.simulator("gitea", alias="gitea")],
timeout=600,
)
session.reset()
public_urls = session.get_public_url()
state = session.get_state()
session.close()
plato.close()
Documentation
- Generating Simulator SDKs - How to create API clients for simulators
- Building Simulators - Internal docs for snapshotting simulators
Part of the useplato/plato-client monorepo.
Release files for plato-sdk-v2 2.154.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| plato_sdk_v2-2.154.2.tar.gz | 1.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| plato_sdk_v2-2.154.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.4 MB
Release files / plato_sdk_v2-2.154.2.tar.gz
| Download URL | plato_sdk_v2-2.154.2.tar.gz |
|---|---|
| Size | 1.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
85d28fe28bf01abe4e7724248cb12031b5a6cdbda332c258366052552d65593c
|
|
BLAKE2b-256 checksum How to use checksums |
1020b50167a454a884998726cb7350c36abe2666a9bd6ce5173ad34ae0e75f33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / plato_sdk_v2-2.154.2-py3-none-any.whl
| Download URL | plato_sdk_v2-2.154.2-py3-none-any.whl |
|---|---|
| Size | 1.8 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c1a7f07fa63b7aef37080d162c49be1e84ceff609be927dbd11fdfdc357203ec
|
|
BLAKE2b-256 checksum How to use checksums |
7e4651fed668a1d849f86d35b7ebca40e565c3958ccc25f3553ede2145bb37bd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|