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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nen_sdk_python-0.2.1.tar.gz.
File metadata
- Download URL: nen_sdk_python-0.2.1.tar.gz
- Upload date:
- Size: 16.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a801b27770f6e43a40f66563c96d6c8804da42736dd417e12607533cdb5a777
|
|
| MD5 |
674f5e5203abc056046e7a9b845ddf30
|
|
| BLAKE2b-256 |
f46debfcccca86d29e2985cce5558756895ecdedd256870e62a7ec6d3e47cc4c
|
File details
Details for the file nen_sdk_python-0.2.1-py3-none-any.whl.
File metadata
- Download URL: nen_sdk_python-0.2.1-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
179a4870c431c663141c877ef711715514b124d7089ef4c48909904c6e025d00
|
|
| MD5 |
2c8e20eb33dc522dd96dc5e9a106fff3
|
|
| BLAKE2b-256 |
f7453bdf634790352530daf6100693d8f72f2ac9e4ed74faa7d5a361ecefdc9b
|