> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Computer Use

***Novita Desktop*** is a secure virtual desktop framework specifically engineered for developing Computer Use Agents. This solution provides a comprehensive, isolated desktop environment that enables AI agents to securely interact with desktop applications through controlled virtualization. This document will provide detailed instructions on how to run this on Novita Agent sandbox service.

***

### 1. Get Novita API Key

### 2. Environment Configuration

Before you start using the service, you need to configure the necessary environment variables:

```bash CLI icon="terminal" theme={"system"}
export NOVITA_API_KEY=<Your API key obtained in the previous step>
```

### 3. SDK Installation

Select the appropriate installation method corresponding to your development environment and programming language:

```bash CLI icon="terminal" theme={"system"}
npm i novita-sandbox
```

```bash CLI icon="terminal" theme={"system"}
pip install novita-sandbox
```

### 4. Implementation Examples

#### Get Virtual Desktop Stream VNC URL

The following implementation demonstrates the instantiation of a virtual desktop environment and the retrieval of VNC access endpoints for remote desktop interaction:

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  // demo.ts implementation
  import { Novita } from 'novita-sandbox'

  async function main() {
    const novita = new Novita()

    // Initialize virtual desktop sandbox instance
    const desktop = await novita.desktop.create()

    // Activate desktop streaming service
    await desktop.stream.start()

    // Retrieve interactive VNC endpoint URL
    const url = desktop.stream.getUrl()
    console.log(url)

    // Expected output format:
    // Browser-accessible URL for interactive virtual desktop session. Suitable for application integration.
    // https://6080-ik0n7lc3j0dvqd4jxy6g7.us-phx-1.sandbox.novita.ai/vnc.html?autoconnect=true&resize=scale

    // Retrieve read-only VNC endpoint URL (interaction disabled)
    const urlDisabledInteraction = desktop.stream.getUrl({ viewOnly: true })
    console.log(urlDisabledInteraction)
    // Expected output format:
    // Browser-accessible URL for view-only virtual desktop session (non-interactive mode). Suitable for monitoring applications.
    // https://6080-ik0n7lc3j0dvqd4jxy6g7.us-phx-1.sandbox.novita.ai/vnc.html?autoconnect=true&view_only=true&resize=scale

    // Keep the program running
    console.log('Desktop stream started, press Ctrl+C to stop the program...')
    const interval = setInterval(() => {}, 1000)

    // Register interrupt signal handlers for resource cleanup
    let isCleaning = false
    const cleanup = async () => {
      if (isCleaning) return
      isCleaning = true

      console.log('\nProgram interrupted, cleaning up resources...')
      clearInterval(interval)
      try {
        await desktop.stream.stop() // Terminate streaming service
        await desktop.kill() // Deallocate sandbox instance
      } catch (err) {
        console.error('Error cleaning up resources:', err)
      }
      process.exit(0)
    }

    process.on('SIGINT', cleanup)
    process.on('SIGTERM', cleanup)
  }

  main().catch(console.error)
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox import Novita

  novita = Novita()

  # Initialize virtual desktop sandbox instance
  desktop = novita.desktop.create()

  # Activate desktop streaming service
  desktop.stream.start()

  # Retrieve interactive VNC endpoint URL
  url = desktop.stream.get_url()
  print(url)
  # Expected output format:
  # Browser-accessible URL for interactive virtual desktop session. Suitable for application integration.
  # https://6080-ik0n7lc3j0dvqd4jxy6g7.us-phx-1.sandbox.novita.ai/vnc.html?autoconnect=true&resize=scale

  # Retrieve read-only VNC endpoint URL (interaction disabled)
  url_readonly = desktop.stream.get_url(view_only=True)
  print(url_readonly)
  # Expected output format:
  # Browser-accessible URL for view-only virtual desktop session (non-interactive mode). Suitable for monitoring applications.
  # https://6080-ik0n7lc3j0dvqd4jxy6g7.us-phx-1.sandbox.novita.ai/vnc.html?autoconnect=true&view_only=true&resize=scale

  # Implement keyboard interrupt handling for graceful shutdown
  try:
      print('Desktop stream started, press Ctrl+C to stop the program...')
      import time
      while True:
          time.sleep(0.1)
  except KeyboardInterrupt:
      print('\nProgram interrupted, cleaning up resources...')

  # Execute resource deallocation procedures
  desktop.stream.stop()  # Terminate streaming service
  desktop.kill()  # Deallocate sandbox instance
  ```
</CodeGroup>

Running example:

<img src="https://mintcdn.com/novitaai/ORWoyuj5p0OZaN1D/images/sandbox/sandbox-computer-use-1.png?fit=max&auto=format&n=ORWoyuj5p0OZaN1D&q=85&s=c42c1e31fae79dffcc4ff341ef9167f2" alt="Computer Use" width="3340" height="172" data-path="images/sandbox/sandbox-computer-use-1.png" />

Access virtual desktop stream VNC URL:

<img src="https://mintcdn.com/novitaai/ORWoyuj5p0OZaN1D/images/sandbox/sandbox-computer-use-2.png?fit=max&auto=format&n=ORWoyuj5p0OZaN1D&q=85&s=e660b832251f3941dc85592bf9fca60e" alt="Computer Use 2" width="5120" height="3824" data-path="images/sandbox/sandbox-computer-use-2.png" />
