Skip to main content

Computer Use Automation (CUA) client for remote function execution

Project description

CUA Client

Computer Use Automation (CUA) Client - A Python package for remote function execution and computer automation tasks via WebSocket connections.

Features

  • Remote Function Execution: Connect to remote servers and execute functions over WebSocket
  • Computer Use Automation: Automate mouse, keyboard, and screen interactions
  • Flexible Configuration: Environment-based configuration with validation
  • Async Support: Built with asyncio for high-performance concurrent operations
  • Extensible: Easy to add custom functions and routers

Installation

pip install cua-client

Quick Start

1. Set Environment Variables

export REMOTE_FUNCTION_URL="ws://your-server.com/ws"
export AGENT_ID="123"
export SECRET_KEY="your-secret-key"

2. Run the Client

# As a command-line tool
cua-client

# Or programmatically
python -m cua_client.main

3. Programmatic Usage

import asyncio
from cua_client import RemoteFunctionClient, RemoteFunctionRouter

# Create a custom router
my_router = RemoteFunctionRouter(tags=["custom"])

@my_router.function("greet")
def greet(name: str) -> str:
    return f"Hello, {name}!"

# Set up the client
async def main():
    client = RemoteFunctionClient(
        remote_function_url="ws://your-server.com/ws",
        agent_id=123,
        secret_key="your-secret-key"
    )
    
    # Add your custom router
    client.include_router(my_router)
    
    # Run the client
    await client.run()

if __name__ == "__main__":
    asyncio.run(main())

Configuration

The client requires three environment variables:

  • REMOTE_FUNCTION_URL: WebSocket server URL (e.g., ws://localhost:8000/ws)
  • AGENT_ID: Unique identifier for the client agent (integer)
  • SECRET_KEY: Authentication secret key

Built-in Functions

Computer Use Functions

The client comes with built-in computer automation capabilities:

  • Screen capture: Take screenshots and analyze screen content
  • Mouse control: Click, drag, and move mouse cursor
  • Keyboard input: Type text and send key combinations
  • Window management: Focus windows and manage applications

Basic Functions

  • print: Simple message printing function for testing

Advanced Usage

Custom Function Registration

from cua_client import RemoteFunctionClient

client = RemoteFunctionClient(url, agent_id, secret_key)

# Register a single function
def my_function(param: str) -> str:
    return f"Processed: {param}"

client.register_function("my_func", my_function)

# Or use a router for organized function groups
router = RemoteFunctionRouter(tags=["data"])

@router.function("process_data")
def process_data(data: dict) -> dict:
    # Your processing logic here
    return {"result": "processed", "original": data}

client.include_router(router)

Error Handling

try:
    await client.run()
except ConnectionError:
    print("Failed to connect to server")
except KeyboardInterrupt:
    print("Client stopped by user")
except Exception as e:
    print(f"Unexpected error: {e}")

Security Considerations

  • Always use secure WebSocket connections (wss://) in production
  • Keep your SECRET_KEY confidential and rotate it regularly
  • Validate all inputs in your custom functions
  • Run the client with minimal required permissions

Dependencies

  • pydantic>=1.8.0: Data validation and configuration
  • websockets>=10.0: WebSocket client implementation
  • pynput>=1.7.0: Mouse and keyboard control
  • Pillow>=8.0.0: Image processing for screenshots
  • pyautogui>=0.9.50: GUI automation utilities

Development

Installation for Development

# Clone the repository
git clone https://github.com/168x/cua-client.git
cd cua-client

# Install in development mode
pip install -e .[dev]

Building and Publishing

Use the provided script to build and publish the package:

# Make the script executable
chmod +x publish.sh

# Run the interactive publish script
./publish.sh

The script will:

  • Show current version and suggest increments
  • Update version in all necessary files
  • Build the package
  • Validate the build
  • Optionally publish to PyPI or Test PyPI

See PUBLISH_USAGE.md for detailed usage instructions.

Running Tests

pytest

Code Formatting

black src/
flake8 src/
mypy src/

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass
  6. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

Changelog

v0.1.0

  • Initial release
  • Basic remote function execution
  • Computer use automation features
  • WebSocket-based communication
  • Environment-based configuration

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

cua_client-0.2.13.tar.gz (28.7 kB view details)

Uploaded Source

Built Distribution

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

cua_client-0.2.13-py3-none-any.whl (32.3 kB view details)

Uploaded Python 3

File details

Details for the file cua_client-0.2.13.tar.gz.

File metadata

  • Download URL: cua_client-0.2.13.tar.gz
  • Upload date:
  • Size: 28.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for cua_client-0.2.13.tar.gz
Algorithm Hash digest
SHA256 9f5c7218d7788d2e61127ae062a46c43e969321168a52495debf5f258b587a61
MD5 6132145e01243c111871ce410b3af8d3
BLAKE2b-256 85860820cb221875e7e9f1b51b6079e496c57591536bc1e73c3ac02cf01208c3

See more details on using hashes here.

File details

Details for the file cua_client-0.2.13-py3-none-any.whl.

File metadata

  • Download URL: cua_client-0.2.13-py3-none-any.whl
  • Upload date:
  • Size: 32.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for cua_client-0.2.13-py3-none-any.whl
Algorithm Hash digest
SHA256 1e61ab2fc90e37d65cc2631719a1cf6a57cd59cc21d7e60bfbc76f7a026b6f11
MD5 2b0b01046c32f9466cd5602deb67ed74
BLAKE2b-256 ce7ef3523fcd789717d0bcc99fd06e083232ed60cd3bda6689540406fca01d43

See more details on using hashes here.

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