Skip to main content

Python Client Library

Python implementation of the agent-backend package. See the main README for an overview, quick start, and core usage.

Package Info

Field Value
Package agent-backend
Registry PyPI
Manager uv / pip
Test runner pytest
Build uv build
Linter ruff
Type checker ty
Source packages/agent-backend/python/agent_backend/
Tests packages/agent-backend/python/tests/

Advanced Features

Environment Variables

Scoped backends support custom environment variables that apply to all commands:

from agent_backend import ScopeConfig

scoped_backend = backend.scope("projects/my-app", ScopeConfig(
    env={
        "PYTHONPATH": "/workspace/lib",
        "API_KEY": "secret",
        "DATABASE_URL": "postgres://...",
    }
))

await scoped_backend.exec("python -m build")  # uses custom env

Operations Logging

from agent_backend import ConsoleOperationsLogger, ScopeConfig

scoped_backend = backend.scope("project", ScopeConfig(
    operations_logger=ConsoleOperationsLogger()
))

await scoped_backend.exec("pip install -r requirements.txt")
# Logs: [AgentBackend] exec: pip install -r requirements.txt

Binary Data

from agent_backend import ReadOptions

image_data = await backend.read("logo.png", ReadOptions(encoding="buffer"))
tarball = await backend.exec("tar -czf - .", ExecOptions(encoding="buffer"))

Timeouts

from agent_backend import RemoteFilesystemBackend, RemoteFilesystemBackendConfig

backend = RemoteFilesystemBackend(RemoteFilesystemBackendConfig(
    root_dir="/tmp/agentbe-workspace",
    host="server.com",
    auth_token="...",
    operation_timeout_ms=300_000,  # 5 minutes
    max_output_length=10 * 1024 * 1024,  # 10MB
))

Backend Connection Pooling

See docs/connection-pooling.md for BackendPoolManager usage, key-based pooling, idle cleanup, and graceful shutdown.

Examples

Code Execution Sandbox

from agent_backend import LocalFilesystemBackend, LocalFilesystemBackendConfig, IsolationMode

sandbox = LocalFilesystemBackend(LocalFilesystemBackendConfig(
    root_dir="/tmp/agentbe-workspace",
    isolation=IsolationMode.AUTO,
))

user_code_backend = sandbox.scope(f"users/{user_id}")
await user_code_backend.write("script.py", untrusted_code)
result = await user_code_backend.exec("python script.py")

Multi-tenant SaaS

from agent_backend import RemoteFilesystemBackend, RemoteFilesystemBackendConfig

# Separate backend per organization
org1_backend = RemoteFilesystemBackend(RemoteFilesystemBackendConfig(
    root_dir="/var/saas/org1",
    host="org1-server.example.com",
    auth_token="...",
))

org2_backend = RemoteFilesystemBackend(RemoteFilesystemBackendConfig(
    root_dir="/var/saas/org2",
    host="org2-server.example.com",
    auth_token="...",
))

# Scoped backends per user within each org
org1_user1 = org1_backend.scope("users/user1")
org1_user2 = org1_backend.scope("users/user2")

Agent State Management

from agent_backend import MemoryBackend

state = MemoryBackend()

await state.write("agents/agent1/current-task", "building")
await state.write("agents/agent1/progress", "50%")

all_agents = await state.list_keys("agents/")

Error Handling

from agent_backend import BackendError, DangerousOperationError, PathEscapeError

try:
    await backend.exec("rm -rf /")
except DangerousOperationError as e:
    # Command blocked by safety validation
    print("Blocked:", e.operation)
except PathEscapeError:
    # Path attempted to escape scope
    pass
except BackendError as e:
    # General backend error (check e.code)
    print("Error:", e.code, str(e))

Development

Commands

All commands can be run from the monorepo root via Make or from the packages/agent-backend/python/ directory via uv.

Task Make (root) uv (packages/agent-backend/python/)
Build make build-python uv build
Test make test-python uv run pytest
Test (cov) -- uv run pytest --cov=agent_backend --cov-fail-under=80
Lint make lint-python uv run ruff check .
Lint (fix) make lint-fix uv run ruff check --fix .
Typecheck make typecheck-python uv run ty check

Code Style

  • ruff enforces formatting (line-length = 100, target-version = "py311")
  • Type hints on all function signatures -- avoid Any
  • snake_case for functions and variables, PascalCase for classes
  • Dataclasses for all config objects (LocalFilesystemBackendConfig, ScopeConfig, etc.)
  • Custom error classes: BackendError, DangerousOperationError, PathEscapeError
  • Imports sorted with ruff (isort rules enabled)

Testing

Tests live in packages/agent-backend/python/tests/ and use pytest with pytest-asyncio.

asyncio_mode = "auto" is configured in pyproject.toml, so async test functions are detected automatically -- no @pytest.mark.asyncio decorator needed.

Shared fixtures in conftest.py provide pre-configured backends:

@pytest.fixture
def local_backend(tmp_workspace):
    config = LocalFilesystemBackendConfig(
        root_dir=tmp_workspace,
        prevent_dangerous=True,
    )
    return LocalFilesystemBackend(config)

Use unittest.mock.AsyncMock for mocking async methods. Use the shared fixtures (local_backend, memory_backend, tmp_workspace) rather than building backends from scratch.

Running tests:

uv run pytest                            # All tests, single run
uv run pytest -k "safety"               # Filter by pattern
uv run pytest --cov=agent_backend       # With coverage report
uv run pytest -m "not integration"      # Skip integration tests

Gotchas

  • All backend methods are async -- always await them, including read, write, readdir, and exists.
  • MemoryBackend.exec() raises NotImplementedBackendError -- memory backends do not support command execution.
  • Use list_keys(prefix) on MemoryBackend, not list().
  • IsolationMode.AUTO and IsolationMode.NONE are enum members, not string literals.
  • BackendType enum values are "local-filesystem", "remote-filesystem", "memory".
  • Config objects are dataclasses, not dicts -- use keyword arguments (e.g., LocalFilesystemBackendConfig(root_dir=...)).
  • Scoped backends delegate track_closeable() to their parent, so resources are closed when the parent is destroyed.
  • destroy() closes all tracked closeables (MCP clients, transports) before tearing down the backend.
  • Coverage threshold is 80% (--cov-fail-under=80). Remote backend and transport modules are excluded from coverage.
  • ExecOptions and ReadOptions use encoding: Literal["utf8", "buffer"], not Python's standard encoding names.

Download files

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

Source Distribution

agent_backend-0.11.2.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

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

agent_backend-0.11.2-py3-none-any.whl (33.4 kB view details)

Uploaded Python 3

File details

Details for the file agent_backend-0.11.2.tar.gz.

File metadata

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

File hashes

Hashes for agent_backend-0.11.2.tar.gz
Algorithm Hash digest
SHA256 98536fee1bec0b6f539bce65ffb30424c7688c203ccdb9dd20580f13ea577317
MD5 35e9bc1fd14a94494cebd88ed29301e4
BLAKE2b-256 eca563c465a4dc87301b659f4c7c0b83cb69581401479d9dcef7f6d9b61b64ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_backend-0.11.2.tar.gz:

Publisher: publish.yml on deepagents-ai/agent-backend

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

File details

Details for the file agent_backend-0.11.2-py3-none-any.whl.

File metadata

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

File hashes

Hashes for agent_backend-0.11.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ab9cc7ec08c1d93d6bafdac9121923440615c312e28f497b6b823586a49b70df
MD5 89545fa1057216048d5dc24ce14955f2
BLAKE2b-256 ab1c0656f7d10748b65d002cdd04e07c1136b04b4f43f3ed6533a4eb4bf2757f

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_backend-0.11.2-py3-none-any.whl:

Publisher: publish.yml on deepagents-ai/agent-backend

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

Release history Release notifications | RSS feed

0.12.0

2 files

This release

0.11.2 This release

2 files

0.11.1

2 files

0.11.0

2 files

0.10.0

2 files

0.9.8

2 files

0.9.7

2 files

0.9.6

2 files

0.9.5

2 files

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.9

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page