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.19.tar.gz (28.2 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.19-py3-none-any.whl (33.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cua_client-0.2.19.tar.gz
  • Upload date:
  • Size: 28.2 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.19.tar.gz
Algorithm Hash digest
SHA256 0664e93204584178c5d5a87ececcf84944bf2bad9ab1854b27167ce799508dee
MD5 12f2655ff819f236c443a437ef517dea
BLAKE2b-256 1339920905dc717721f7f257bf6d5d567ebd15f95ddebbbacaf160521cbb4c00

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cua_client-0.2.19-py3-none-any.whl
  • Upload date:
  • Size: 33.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.19-py3-none-any.whl
Algorithm Hash digest
SHA256 607c54f12e16038eab0cdb5bd776dfd3426ba1766e6f0912ea247993d2efff9a
MD5 4a30f9b42415a50cffd242788e4bab9b
BLAKE2b-256 b499b6090fc4c6dea30014a43762b10230fbb86228e0311106b01359b999ed47

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