{"skill":{"slug":"orgo-desktop-control","displayName":"Orgo Desktop Control","summary":"Provision and control Orgo cloud computers using the orgo_client Python SDK. Use when launching remote desktops, automating browsers, running bash/python rem...","description":"---\nname: orgo-desktop-control\ndescription: Provision and control Orgo cloud computers using the orgo_client Python SDK. Use when launching remote desktops, automating browsers, running bash/python remotely, interacting with UI, managing files, or controlling streaming.\ncompatibility: Requires internet access and ORGO_API_KEY.\nmetadata:\n  author: custom\n  version: \"1.0.0\"\n---\n\n# Orgo Desktop Control Skill (Python SDK)\n\nThis skill uses `orgo_client.py` to create and control Orgo cloud computers safely.\n\nAlways use the SDK — do NOT manually construct HTTP requests.\n\n---\n\n# When to Use This Skill\n\nActivate when user requests:\n\n- Launch a remote desktop\n- Automate browser or UI\n- Click, drag, type, scroll\n- Execute bash or Python remotely\n- Take screenshots\n- Upload/export files\n- Start/stop/restart environments\n- Stream desktop output\n- Access VNC credentials\n- Build a computer-use agent\n\nDo NOT activate for local-only code.\n\n---\n\n# High-Level Workflow\n\n1. Instantiate client\n2. Ensure workspace exists\n3. Create computer\n4. `wait_until_ready()`\n5. Perform actions\n6. Export results\n7. Stop computer\n\n---\n\n# Initialization\n\n```python\nfrom orgo_client import OrgoClient\n\nclient = OrgoClient(api_key=os.environ[\"ORGO_API_KEY\"])\n```\n\n---\n\n# Workspace Management\n\nCreate:\n```python\nws = client.create_workspace(\"browser-agent\")\n```\n\nList:\n```python\nclient.list_workspaces()\n```\n\nDelete (requires force):\n```python\nclient.delete_workspace(ws.id, force=True)\n```\n\nNever delete without explicit user confirmation.\n\n---\n\n# Computer Lifecycle\n\nCreate:\n```python\ncomputer = client.create_computer(\n    workspace_id=ws.id,\n    name=\"agent-1\",\n    ram=4,\n    cpu=2,\n    wait_until_ready=True\n)\n```\n\nManual wait:\n```python\ncomputer.start()\ncomputer.stop()\ncomputer.restart()\n```\n\nStart / Stop / Restart:\n```python\ncomputer.start()\ncomputer.stop()\ncomputer.restart()\n```\n\nDelete (irreversible):\n```python\ncomputer.delete(force=True)\n```\n\nAlways stop computers when idle.\n\n---\n\n# UI Interaction\n\nClick:\n```python\ncomputer.click(100, 200)\n```\n\nRight-click:\n```python\ncomputer.right_click(100, 200)\n```\n\nDouble-click:\n```python\ncomputer.double_click(100, 200)\n```\n\nDrag:\n```python\ncomputer.drag(100, 200, 400, 500)\n```\n\nScroll:\n```python\ncomputer.scroll(\"down\", amount=3)\n```\n\nType:\n```python\ncomputer.type(\"Hello world\")\n```\n\nKey:\n```python\ncomputer.key(\"Enter\")\ncomputer.key(\"ctrl+c\")\n```\n\nWait:\n```python\ncomputer.wait(2.0)\n```\n\n---\n\n# Screenshots\n\n```python\nimg_b64 = computer.screenshot()\n```\n\nSave to file:\n```python\ncomputer.save_screenshot(\"screen.png\")\n```\n\n---\n\n# Execution\n\nBash:\n```python\nresult = computer.run_bash(\"ls -la\")\nprint(result.output)\n```\n\nPython:\n```python\nresult = computer.run_python(\"print('hi')\")\n```\n\nErrors raise OrgoError subclasses automatically.\n\n---\n\n# Streaming\n\nStart:\n```python\ncomputer.stream_start(\"my-rtmp-connection\")\n```\n\nStatus:\n```python\ncomputer.stream_status()\n```\n\nStop:\n```python\ncomputer.stream_stop()\n```\n\n---\n\n# VNC\n\n```python\npassword = computer.vnc_password()\n```\n\n---\n\n# Files\n\nUpload:\n```python\nclient.upload_file(\"local.txt\", ws.id, computer_id=computer.id)\n```\n\nExport from VM:\n```python\nfile_record, url = computer.export_file(\"Desktop/output.txt\")\n```\n\nList:\n```python\ncomputer.list_files(ws.id)\n```\n\nDelete:\n```python\nclient.delete_file(file_id)\n```\n\n---\n\n# Error Handling\n\nAll errors raise typed exceptions:\n* OrgoAuthError\n*\tOrgoForbiddenError\n*\tOrgoNotFoundError\n*\tOrgoBadRequestError\n*\tOrgoServerError\n*\tOrgoTimeoutError\n*\tOrgoConfirmationError\n\nAlways handle destructive confirmations explicitly.\n\n# Recommended Automation Loop\n\nFor UI tasks:\n1. screenshot()\n2. analyze state\n3. click / type / drag\n4. wait()\n5. screenshot()\n6. repeat\n\nNever assume UI state.\n\n---\n\n# Efficiency Rules\n\n* Use minimal RAM/CPU\n* Stop instead of delete if continuing later\n* Use wait_until_ready() instead of manual polling\n* Avoid unnecessary screenshots\n* Prefer run_bash over UI when possible\n\n---\n\n# End of Skill\n\n","topics":["Sdk"],"tags":{"latest":"1.0.2"},"stats":{"comments":0,"downloads":1175,"installsAllTime":44,"installsCurrent":2,"stars":0,"versions":3},"createdAt":1771735573760,"updatedAt":1778992233477},"latestVersion":{"version":"1.0.2","createdAt":1771740314586,"changelog":"No user-facing changes; internal metadata update only.\n\n- Updated metadata in _meta.json.\n- No changes to functionality or documentation.","license":null},"metadata":null,"owner":{"handle":"cohenyehonatan","userId":"s179jzn136j5zbrmzrcjgn3mqx884hfm","displayName":"Jonathan Cohen","image":"https://avatars.githubusercontent.com/u/74473990?v=4"},"moderation":null}