Skip to main content

Python SDK for the Nen Desktop API

Project description

nen-desktop

Python SDK for the Nen Desktop API. Create cloud desktops, execute computer-use tools, and manage RDP sessions programmatically.

Installation

pip install nen-sdk-python

Quick Start

from nen_sdk import NenDesktop

client = NenDesktop(api_key="sk_nen_...")

# Create a desktop
desktop = client.create_desktop()
print(f"Created: {desktop.desktop_id} (status: {desktop.status})")

# Check its status
desktop = client.get_desktop(desktop.desktop_id)
print(f"Status: {desktop.status}, IP: {desktop.public_ip}")

# Clean up
client.delete_desktop(desktop.desktop_id)

Configuration

client = NenDesktop(
    api_key="sk_nen_...",
    base_url="https://desktop.api.getnen.ai",  # default
    timeout=30.0,                                # default (seconds)
)

The execute() method uses a 120-second timeout regardless of the client timeout, since tool execution can be slow.

API Reference

Desktop CRUD

Method Description
create_desktop(desktop_type="sandbox") Create a new desktop. Returns Desktop.
list_desktops() List all active desktops. Returns list[Desktop].
get_desktop(desktop_id) Get a single desktop. Returns Desktop.
update_desktop(desktop_id, *, name) Update desktop name. Returns Desktop.
delete_desktop(desktop_id) Delete a desktop. Returns DeleteResponse.

Computer-use actions

Typed helpers that build the correct wire format automatically:

Method Description
screenshot(desktop_id) Capture a screenshot. Returns ExecuteResult with base64_image.
left_click(desktop_id, x, y) Left-click at (x, y).
right_click(desktop_id, x, y) Right-click at (x, y).
double_click(desktop_id, x, y) Double-click at (x, y).
middle_click(desktop_id, x, y) Middle-click at (x, y).
mouse_move(desktop_id, x, y) Move the cursor to (x, y) without clicking.
type_text(desktop_id, text) Type a string at the current cursor position.
key_press(desktop_id, key) Send a key or chord (e.g. "Return", "ctrl+c").
scroll(desktop_id, x, y, *, direction, amount=3) Scroll at (x, y). direction is "up" or "down".
cursor_position(desktop_id) Return the current cursor coordinates.
# Take a screenshot
result = client.screenshot(desktop.desktop_id)
# result.base64_image contains a PNG encoded as base64

# Click, type, scroll
client.left_click(desktop.desktop_id, 512, 384)
client.type_text(desktop.desktop_id, "hello world")
client.scroll(desktop.desktop_id, 512, 384, direction="down", amount=5)

# Key combos
client.key_press(desktop.desktop_id, "ctrl+c")
client.key_press(desktop.desktop_id, "Return")

Low-level execute

Method Description
execute(desktop_id, *, tool, action, params=None) Execute any tool action with a raw params dict. Returns ExecuteResult.
list_tools(desktop_id) List available tools and their schemas. Returns list[ToolSchema].
get_tool_logs(desktop_id) Get tool execution logs. Returns list[dict].

Sessions

Method Description
create_session(desktop_id) Create or reconnect an RDP session. Returns SessionInfo.
get_session(desktop_id) Get session status. Returns SessionInfo.
delete_session(desktop_id) Disconnect the session. Returns None.

Error Handling

All API errors raise a subclass of NenDesktopError, which carries status_code and response_body:

from nen_sdk import NenDesktop, NotFoundError, AuthenticationError

client = NenDesktop(api_key="sk_nen_...")

try:
    client.get_desktop("dsk_nonexistent")
except NotFoundError as e:
    print(f"Not found: {e.status_code}")
except AuthenticationError as e:
    print(f"Auth failed: {e.status_code}")
Exception Status Code
AuthenticationError 401
NotFoundError 404
ConflictError 409
ServerError 5xx
NenDesktopError anything else >= 400

Context Manager

The client supports context manager usage to automatically close the underlying HTTP connection:

with NenDesktop(api_key="sk_nen_...") as client:
    desktop = client.create_desktop()
    # ...

Examples

See the full agent example in the Nen documentation.

Project details


Download files

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

Source Distribution

nen_sdk_python-0.3.0.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

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

nen_sdk_python-0.3.0-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

Details for the file nen_sdk_python-0.3.0.tar.gz.

File metadata

  • Download URL: nen_sdk_python-0.3.0.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for nen_sdk_python-0.3.0.tar.gz
Algorithm Hash digest
SHA256 fa1dabe023f0f5f9d41d766340bd127be0fdca1198cb07c8647d17b613201e19
MD5 7b076a1f110831ac473e42b4137906c1
BLAKE2b-256 842eb6f396bf7fdfb58d2ec9feb5da8037e880789c2ad6cff6fbb0093bda7151

See more details on using hashes here.

Provenance

The following attestation bundles were made for nen_sdk_python-0.3.0.tar.gz:

Publisher: release.yml on getnenai/nen-sdk-python

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

File details

Details for the file nen_sdk_python-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: nen_sdk_python-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 6.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for nen_sdk_python-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a69c4463f23300028af1ad7053c54156718d8173bf8ea9a94cb79b8c6ac2d0e1
MD5 fdb89e84f59e996a2453984713331c41
BLAKE2b-256 75a7f69b824c1a2678d9ccf56a1cfdeb040e999c66c638aca56ab27e7afd65d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for nen_sdk_python-0.3.0-py3-none-any.whl:

Publisher: release.yml on getnenai/nen-sdk-python

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

Supported by

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