Lybic sdk for python
Project description
Lybic SDK for Python
Table of Contents
- How It Works
- ✨ Why Lybic?
- 🚀 Getting Started
- 🌒 Adapt LLM output pyautogui format
- 📔 Examples
- 📚 Full Documentation & API Reference
- 🤝 Contributing
- 📄 License
Developing, testing, and deploying GUI-based AI agents is complex. Developers waste precious time wrestling with cloud instances, VNC servers, and environment configurations instead of focusing on what matters: building intelligent agents.
Lybic is the infrastructure layer for your GUI agents.
Lybic (/ˈlaɪbɪk/) provides a robust, on-demand infrastructure platform designed specifically for the AI agent development lifecycle. This SDK for Python is your command center for programmatically controlling the entire Lybic ecosystem, empowering you to build, test, and scale your agents with unprecedented speed and simplicity.
How It Works
The Lybic ecosystem is designed for clarity and control. Your code, powered by the Lybic SDK, interacts with the Lybic Cloud Platform to manage your resources and run your agents in secure, isolated GUI sandboxes.
graph TD
A[Your Agent Code] --> B(Lybic Python SDK);
B -- Manages --> C{Projects, Members, Secrets};
B -- Controls --> D[GUI Sandbox];
C -- Organizes & Secures --> D;
E[Lybic Cloud Platform] -- Hosts & Provides --> D;
B -- API Calls --> E;
✨ Why Lybic?
Lybic is a complete ecosystem designed to eliminate infrastructure friction and accelerate your agent development workflow.
🚀 Focus on Your Agent, Not Infrastructure
Forget about managing virtual machines, display drivers, and remote desktop software. Lybic provides clean, on-demand GUI sandboxes in the cloud. Spin up a fresh environment in seconds and dedicate your time to your agent's core logic.
🔐 Securely Manage Your Secrets
Stop hardcoding API keys and other sensitive credentials. Lybic includes built-in Secret Management at the project level. Store your secrets securely in our vault and access them programmatically from your agents, without ever exposing them in your codebase.
👥 Built for Teams, Ready for Scale
Organize your work with Projects and manage team access with fine-grained Member Roles. Whether you're a solo developer or part of a large team, Lybic provides the structure and security you need to collaborate and scale effectively.
🤖 Observe and Interact in Real-Time
Every GUI sandbox includes a live, accessible desktop stream. This allows you to monitor your agent's actions in real-time for debugging, or to step in and provide guidance, making it perfect for developing complex tasks and implementing human-in-the-loop workflows.
🚀 Getting Started
1. Installation & Setup
Getting started is simple. First, install the package from PyPI:
pip install lybic
To use features like the Mcp client, you need to install the optional dependencies:
pip install 'lybic[mcp]'
Then, initialize the client in your Python application. For better security, we recommend using environment variables (LYBIC_ORG_ID, LYBIC_API_KEY).
import asyncio
from lybic import LybicClient, LybicAuth
# The LybicClient automatically picks up credentials from your environment
# def __init__(self,
# auth: LybicAuth | None = None,
# org_id: str = os.getenv("LYBIC_ORG_ID"),
# api_key: str = os.getenv("LYBIC_API_KEY"),
# endpoint: str = os.getenv("LYBIC_API_ENDPOINT", "https://api.lybic.cn"),
# timeout: int = 10,
# max_retries: int = 3,
# extra_headers: dict | None = None) -> None
async def main():
# Initialize with environment variables
async with LybicClient() as client:
pass
# Or, initialize with explicit credentials
async with LybicClient(
LybicAuth(
org_id="your_org_id", # Lybic organization ID
api_key="your_api_key", # Lybic API key
endpoint="https://api.lybic.cn", # Lybic API endpoint
extra_headers={"User-Agent": "MyAgent/1.0"}, # Custom headers
),
timeout=10, # Timeout for API requests
max_retries=3, # Maximum number of request retries
) as client:
pass
if __name__=='__main__':
asyncio.run(main())
Then, you can start using the client.
import asyncio
from lybic import LybicClient
async def main():
async with LybicClient() as client:
# The create method returns a GetSandboxResponseDto object
new_sandbox_response = await client.sandbox.create(name="my-sandbox", shape="xxx")
print(new_sandbox_response.sandbox)
if __name__ == '__main__':
asyncio.run(main())
Completed, you're ready to start building your agent!
2. Core Workflow
With the client initialized, the typical workflow follows these logical steps:
-
Register(Or be invited into) an Organization: Lybic allows you to register a new organization to manage your projects and resources.
-
Create a
Project: Projects are the primary way to organize your work. They act as containers for your sandboxes, team members, and secrets. -
Launch a
Sandbox: Within a project, you can launch a GUI sandbox. This is your agent's secure, cloud-based home. -
Automate and Interact: Once the sandbox is running, your agent can begin its work. The SDK provides all the necessary tools to interact with the sandbox, from executing commands to capturing screenshots.
3. Debug Request
You can set logging level to debug request.
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger('lybic')
4. Exception Handling
To ensure that each method in the SDK has valid and definite return content, we DO NOT handle any errors for exception requests.
For the robustness of the program code, all exceptions need to be handled by the user themselves.
Where will the exception occur?
-
init LybicClient()
If you do not pass in a valid
org_idandendpoint, an exception will occur. -
call all
httpandmcpmethodsIf the request fails(HTTPCode is 4xx or 5xx, or the request timeout), an exception will occur.
How to handle exceptions?
you can catch exceptions in the try block
import asyncio
from lybic import LybicClient
async def main():
# Use async with to ensure the client is properly managed.
async with LybicClient() as client:
try:
# `await` the asynchronous method call inside the async function.
preview_result = await client.sandbox.preview('sandbox_id')
print(preview_result)
except Exception as e:
# Handle potential exceptions from the API call.
print(f"An error occurred: {e}")
if __name__ == "__main__":
asyncio.run(main())
Sandbox File Transfer & Process Execution
Lybic supports sandbox file transfer and process execution APIs:
- copy_files(sandbox_id, files=[{localPath, putUrl, multipartUpload?}]):
- execute_process(sandbox_id, executable, args=[], workingDirectory=None, stdinBase64=None): Runs a process in the sandbox and returns stdoutBase64, stderrBase64, exitCode.
🌒 Adapt LLM output pyautogui format
To facilitate the execution of GUI automation scripts generated by Large Language Models (LLMs), which are often trained using the popular pyautogui library, the Lybic SDK provides a Pyautogui compatibility class. This class mirrors the pyautogui interface, allowing you to execute LLM-generated code with minimal changes.
Usage
First, initialize the LybicClient and then create a Pyautogui instance, binding it to a specific sandbox. You can then use this instance as if it were the pyautogui module.
import asyncio
from lybic import LybicClient, Pyautogui
sandbox_id = "your_sandbox_id"
client = LybicClient()
# Create a Pyautogui instance
pyautogui = Pyautogui(client, sandbox_id)
# Now you can execute pyautogui-style commands
# For example, if an LLM outputs the following string:
llm_output = "pyautogui.moveTo(100, 150)"
# You can execute it like this:
# Warning: Using eval() on untrusted input is a security risk.
# Always sanitize and validate LLM output.
eval(llm_output)
# Or call methods directly
pyautogui.click(x=200, y=200)
pyautogui.write("Hello from Lybic!")
pyautogui.press("enter")
# You need to manually manage `LybicClient` object lifecycles
pyautogui.close()
asyncio.run(client.close())
If you want to use automatic context management for Pyautogui, you can use the with statement:
import asyncio
from lybic import LybicClient, Pyautogui
client = LybicClient()
sandbox_id = "your_sandbox_id"
with Pyautogui(client, sandbox_id) as pyautogui:
# Now you can execute pyautogui-style commands
# For example, if an LLM outputs the following string:
llm_output = "pyautogui.moveTo(100, 150)"
# You can execute it like this:
# Warning: Using eval() on untrusted input is a security risk.
# Always sanitize and validate LLM output.
eval(llm_output)
# Or call methods directly
pyautogui.click(x=200, y=200)
pyautogui.write("Hello from Lybic!")
pyautogui.press("enter")
asyncio.run(client.close())
Special scenario: If you need to run asynchronously:
import asyncio
from lybic import LybicClient, Pyautogui
async def main():
async with LybicClient() as client:
# Assume you have a sandbox
sandbox_id = "your_sandbox_id"
# Create a Pyautogui instance
with Pyautogui(client, sandbox_id) as pyautogui:
# Now you can execute pyautogui-style commands
# For example, if an LLM outputs the following string:
llm_output = "pyautogui.moveTo(100, 150)"
# You can execute it like this:
# Warning: Using eval() on untrusted input is a security risk.
# Always sanitize and validate LLM output.
eval(llm_output)
# Or call methods directly
pyautogui.click(x=200, y=200)
pyautogui.write("Hello from Lybic!")
pyautogui.press("enter")
if __name__ == "__main__":
asyncio.run(main())
Supported Functions
The lybic.Pyautogui class supports a subset of the most common pyautogui mouse and keyboard functions.
| Function | Supported | Notes |
|---|---|---|
position() |
✅ | |
moveTo() |
✅ | |
move() |
✅ | |
click() |
✅ | |
rightClick() |
✅ | |
middleClick() |
✅ | |
doubleClick() |
✅ | |
tripleClick() |
✅ | |
dragTo() |
✅ | Only supports left-button dragging. |
scroll() |
✅ | |
write() |
✅ | A wrapper for typewrite(). |
typewrite() |
✅ | Supports both strings and lists of strings. |
press() |
✅ | Supports single key and list of keys. |
hotkey() |
✅ | |
keyDown() |
✅ | |
keyUp() |
✅ |
📔 Examples:
Please read our SDK example for full usage examples.
If you are using the Mcp client, you can read our Mcp Documentation.
📚 Full Documentation & API Reference
This README provides a high-level overview of Lybic's capabilities. For detailed, up-to-date code examples, tutorials, and a complete API reference, please visit our official documentation site.
🤝 Contributing
We welcome contributions from the community! Please see our Contributing Guidelines for more details on how to get involved.
📄 License
This project is licensed under the MIT License. See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
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 lybic-0.12.1.tar.gz.
File metadata
- Download URL: lybic-0.12.1.tar.gz
- Upload date:
- Size: 31.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e06d805d6bcf9643174f2bc0af5b93b3620e3ba9364937489fd037e18294f326
|
|
| MD5 |
a7f565ffc12e0d1aa0c83b1c917423a1
|
|
| BLAKE2b-256 |
967a8bda67f4408e47bbc5f5b62369d540952a28ef400b19d720b35d19550eba
|
File details
Details for the file lybic-0.12.1-py3-none-any.whl.
File metadata
- Download URL: lybic-0.12.1-py3-none-any.whl
- Upload date:
- Size: 39.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db5a85c17d9ce4bd09552d102676dcc1bce91ba8ae22ad910b533ad564b79f90
|
|
| MD5 |
658bcfcf12b01edf4bff769606386511
|
|
| BLAKE2b-256 |
4538a24254bd17633b63023e72fb1730eb31b020cea5c0c1a7286d16fdac64f0
|