Skip to main content

General computer-use agent.

Project description

Orbit logo

Autonomous agents are demos. Controlled agents are products.


Watch Orbit in action


The problem

AI agents can use computers now.

But in practice:

  • they loop
  • they click the wrong thing
  • they get stuck on simple steps
  • they're impossible to steer mid-task

Most frameworks either hide everything in a black box, or hand you raw tools with no structure.

Neither works in production.

Orbit

Natural language controls the screen.
Python controls the flow.

Instead of one monolithic agent, Orbit breaks execution into independent steps:

Do · Read · Check · Navigate · Fill · Bootstrap

Each step runs its own model, has its own budget, and returns typed output. All steps share context.

Why this matters

  • Use a cheap model for simple clicks, a powerful one for complex reasoning
  • Cap LLM calls per step , nothing runs forever
  • Inject guidance mid-execution when the agent is struggling
  • Extract structured data directly into Pydantic models
  • Toggle planner=False for low-latency direct execution

This turns agents from demos into usable systems.

Key difference

Most agents see pixels.

Orbit sees the UI.

It reads the OS accessibility tree and drives the browser via its live DOM. Screenshots only when needed. Works across desktop apps, browsers, and Electron apps — including Cloudflare-protected sites.

Quickstart

pip install orbit-cua
from dotenv import load_dotenv
load_dotenv()

from orbit import Agent
import asyncio

async def main():
    result = await Agent(
        task="Open Chrome and go to Wikipedia",
        llm="gemini-3-pro-preview",
        verbose=True,
    ).run()
    print(result.status)

asyncio.run(main())

Set your API key , Orbit supports any model via LiteLLM:

export GEMINI_API_KEY="your-key"   # or OPENAI_API_KEY / ANTHROPIC_API_KEY

Composable SDK

When you need precision, drop to the SDK:

from dotenv import load_dotenv
load_dotenv()


from orbit import Do, Read, Check, Navigate, session
from pydantic import BaseModel
import asyncio

class Product(BaseModel):
    name: str
    price: float
    in_stock: bool

class ProductList(BaseModel):
    products: list[Product]

async def main():
    action_model = "gemini-3-flash-preview"

    async with session() as s:
        await Navigate(
            "https://www.amazon.com/s?k=mechanical+keyboard",
            session=s, llm=action_model, max_steps=30, planner=False,
            extra_info="Avoid bookmark bar links; use direct navigation tools first.",
            verbose=True,
        ).run()

        if await Check(
            "The current page is a Captcha page and `Continue Shopping` button is visible",
            session=s, llm=action_model, max_steps=30, planner=False,
        ).check():
            await Do(
                "Click `Continue Shopping`, then solve the Captcha.",
                session=s, llm=action_model, max_steps=30,
            ).run()

        products = await Read(
            "All search results",
            schema=ProductList,
            session=s, llm=action_model, max_steps=30, verbose=True,
        ).run()

        cheapest = min(products.output.products, key=lambda p: p.price)

        await Do(f"click on '{cheapest.name}'", session=s, llm=action_model, max_steps=30).run()

        if await Check("Add to Cart button is visible", session=s, llm=action_model, max_steps=30).check():
            await Do("click Add to Cart", session=s, llm=action_model, max_steps=30).run()

asyncio.run(main())

Bootstrap — install packages before the workflow starts

from orbit import Bootstrap, Do, session
import asyncio

async def main():
    # Install system packages once — no LLM, pure subprocess
    await Bootstrap(["ffmpeg", "imagemagick"]).run()

    async with session() as s:
        await Do("Convert video.mp4 to a GIF using ffmpeg", session=s).run()

asyncio.run(main())

The idea

Agents shouldn't be one giant prompt.

They should be composable systems.

Orbit gives you:

  • verbs instead of prompts
  • steps instead of guesswork
  • control instead of hope

Custom actions

Build reusable, domain-specific actions by subclassing BaseActionAgent:

from dotenv import load_dotenv
load_dotenv()

from orbit import BaseActionAgent, Navigate, session
from pydantic import BaseModel
import asyncio

class ProductList(BaseModel):
    products: list[dict]

class ReadTopProducts(BaseActionAgent):
    def __init__(self, category: str, **kw):
        super().__init__(max_steps=12, planner=False, **kw)
        self.category = category

    def task_prompt(self) -> str:
        return (
            f"Read top products for '{self.category}' from the current page. "
            "Extract name, price, and stock status only. Do not click or navigate."
        )

    def output_schema(self):
        return ProductList

async def main():
    async with session() as s:
        await Navigate("https://www.amazon.com/s?k=mechanical+keyboard", session=s).run()
        result = await ReadTopProducts(
            category="mechanical keyboard",
            session=s, llm="gemini-3-flash-preview", verbose=True,
        ).run()
        print(result.output.products[:3])

asyncio.run(main())

Examples

See examples/ for full end-to-end scripts, including a LinkedIn Easy Apply bot that applies to jobs autonomously.

Installation

Install from source

Build from source (requires Rust)
git clone --recurse-submodules https://github.com/aadya940/orbit.git
cd orbit

cd oculos && cargo build --release && cd ..
mkdir -p orbit/_bin

# Linux/macOS
cp oculos/target/release/oculos orbit/_bin/oculos

# Windows
copy oculos\target\release\oculos.exe orbit\_bin\oculos.exe

pip install .

Also requires Tk GUI toolkit for tkinter python.

sudo apt install python3-tk

macOS users: grant accessibility permissions as described here.

Support matrix

OS Architectures
Windows x86-64 (win_amd64)
Linux x86-64 (manylinux)
macOS Intel + Apple Silicon (universal2)
Python 3.10 · 3.11 · 3.12 · 3.13

Safety

No permanent file deletion , destructive operations go to Trash/Recycle Bin. Disk writes require explicit human approval via a configurable callback.

License

Apache 2.0 , Special thanks to OculOS and the open-source packages that make this possible.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

orbit_cua-0.2.41-cp313-cp313-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.13Windows x86-64

orbit_cua-0.2.41-cp313-cp313-manylinux_2_39_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

orbit_cua-0.2.41-cp313-cp313-macosx_10_13_universal2.whl (1.4 MB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

orbit_cua-0.2.41-cp312-cp312-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.12Windows x86-64

orbit_cua-0.2.41-cp312-cp312-manylinux_2_39_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

orbit_cua-0.2.41-cp312-cp312-macosx_10_13_universal2.whl (1.4 MB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

orbit_cua-0.2.41-cp311-cp311-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.11Windows x86-64

orbit_cua-0.2.41-cp311-cp311-manylinux_2_39_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

orbit_cua-0.2.41-cp311-cp311-macosx_10_9_universal2.whl (1.4 MB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

orbit_cua-0.2.41-cp310-cp310-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.41-cp310-cp310-manylinux_2_39_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

orbit_cua-0.2.41-cp310-cp310-macosx_10_9_universal2.whl (1.4 MB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file orbit_cua-0.2.41-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.41-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for orbit_cua-0.2.41-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0a3679cc8bb75845ec9ed16c6512a77e47cc465d97b68991f25009e41422bb79
MD5 96f1913a170291263c415f67b88e01c0
BLAKE2b-256 9e04c468cd958d2000b4cc2059303e43db62bb29c45d862345c185762a2858ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp313-cp313-win_amd64.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.41-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b056d8b1b361f773f445c95cab05bc68e62163e9a9a97fdb20d48ebeec2c4cf2
MD5 33addaa5fbc4040db50c16261b2f0db3
BLAKE2b-256 326961d64fd7710c104ef7fdac7753efecb77694b25a5730b9dec45f9b465208

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp313-cp313-manylinux_2_39_x86_64.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.41-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 1d286b1abf7341099cc34e394a73f6bcf782b7eb6bea1ca4029eec1f4c782ba8
MD5 09662964ae73b4326df5f38a8cb71683
BLAKE2b-256 da8280f32e40f421b4793fc03652d1e1a3d2438aaeda7e80af1028f9ee27f127

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp313-cp313-macosx_10_13_universal2.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.41-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for orbit_cua-0.2.41-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7f42051b7cf3416c49ac0e84f0c6e9ac5084fed498584d78159fb36a39ca3152
MD5 baa054e4611bbb495ba988bc4d1f0148
BLAKE2b-256 cd9ce4336207b44c760e28aa1aa81f1b00808fa9a6617958764c58be4b27ac7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp312-cp312-win_amd64.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.41-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 532915736d0428ff2d1fba39a44e3f2e1d5ee96e3b4f70481dcd3c4912c9479b
MD5 494a684f51f0464f03a7534c09f6231f
BLAKE2b-256 2d122cab9aa0e88599494fcf9b187665f28b0b5863e147f44e765b2f1774452f

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp312-cp312-manylinux_2_39_x86_64.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.41-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 25c5994219e9d4f82d392a8465f17d8636e79e85b00727e023e81479a527beee
MD5 6cf511d16aaf91caf46b331adb7f2b95
BLAKE2b-256 ef4b1f2af7f3c6bd73d73af6b0060576efa5726987a3204b8d38a8da6ec8d9ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp312-cp312-macosx_10_13_universal2.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.41-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for orbit_cua-0.2.41-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b613d4ea8356d072e9adcfe2a35a0bc372d970d6913339bf0795f31d34647423
MD5 69f7a66d22ec13a655030a6520e965f0
BLAKE2b-256 661b80f4e93e1c4617ee8e3f3f366d881b903584ec8fb79a9ef9e98fccb028aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp311-cp311-win_amd64.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.41-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 37f34d02fb4b384f80acfdce5517606f4531e66a2f79dadbb3cf7926d722f3bc
MD5 62a5f740d2a1caf6c37d18ce8390044d
BLAKE2b-256 39e56cd59047e811a7f6575a6af7bfb966ed7c2a1d1b2cb60509f29521687aae

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp311-cp311-manylinux_2_39_x86_64.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.41-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 fe9f08108ff5fef16dfa765690e3a8a83d3087c548183399fed8b8540253cab3
MD5 290b358b5cd4cb5222d18c82c6d67570
BLAKE2b-256 3e8e9beb76085b2ce45dd88ba2e3a6199e25da56cd1c3ec75ffc0109bad13694

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp311-cp311-macosx_10_9_universal2.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.41-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for orbit_cua-0.2.41-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6d40df711279c2443671076ec09032d8da1347bd6258ad2b4630d827f2712ca3
MD5 a1d98f535c8c8355f5c96235b7950c16
BLAKE2b-256 0ab3dbead9887175911de2ebc200704e5668de977cf5dda1f0cef933e875f0fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp310-cp310-win_amd64.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.41-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 d89821bda423598075235baf0a49b60896de240aeedd82207bd86ccef7ea2aee
MD5 b304352ec6cc77a12354f6ebc372dd48
BLAKE2b-256 ed886c4df7027221916789cf9811f95cd868fe21b4e88bdc51628a159b663b6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp310-cp310-manylinux_2_39_x86_64.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orbit_cua-0.2.41-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.41-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d68eaa9b3aab139030b6475bd6f3b2559d6b4839f6650d97e9a76714de53ae5b
MD5 ee0f2246cc7f3d8fd940c58d7ef9482b
BLAKE2b-256 8df5dbae3b45e7480fa305e23422e72e6d2c4924df5b64226ff252164725fd94

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.41-cp310-cp310-macosx_10_9_universal2.whl:

Publisher: release.yml on aadya940/orbit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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