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.42-cp313-cp313-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.13Windows x86-64

orbit_cua-0.2.42-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.42-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.42-cp312-cp312-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.12Windows x86-64

orbit_cua-0.2.42-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.42-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.42-cp311-cp311-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.11Windows x86-64

orbit_cua-0.2.42-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.42-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.42-cp310-cp310-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.42-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.42-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.42-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.42-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.42-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 03549389e4925c4639c358abb9dfb58d54b748e8b8e424456fca9da1b437d94a
MD5 6cdb908f6517c78d498c3059fb6bc684
BLAKE2b-256 0d9dea359b3518c517bd21ade68c108c2b8e8aba9bff69600a4b615a29ebeb1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.42-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f6105ce3e45938376b22d59f37c1d45fd7f24e8a5243a97f47c7b11a558ea048
MD5 7bab883eebbba5adee967cceca285063
BLAKE2b-256 74fb405b483cf1c749a0baf6f04daa101a89b27b1ecff0ac38e1d13ba077c2fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.42-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 e0a10a206f23b30a449cab9f7da1f4d879ef3b6a26dea6659f4d45d97a5b5cfa
MD5 90f9c32927804c2cbe421a748418d95b
BLAKE2b-256 631edde6950dec4116ededb8725dc74c9c0fcb579056c049e217caf8f0c7535c

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.42-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.42-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 16065dc1fe71e3bb65eba5ab3771416da7792f1f1f6caf40bc3de05482dcdfaf
MD5 145cabf5ca5bb0461c437c0098779b63
BLAKE2b-256 a7cd2727c3d1f6cf7831f9aacedd476de7223a27ab2e8922dedb784fa07bf871

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.42-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 0b5ea018150d7fb07f6265e7959a7ebc482625f162ae6e80002d54bf52800052
MD5 9e737889dd96804006ecd4833b6a8c70
BLAKE2b-256 a30fb34fa976b0fd99bb6d2e0d145e4e531a91440802d678ad9d7dd054ef23b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.42-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 1440031b17f461131f02cdff41f020fdb9d21613ecdc6227560b60c6e9c9e2cb
MD5 42ec536e57e53d0fb3945f8d751ac941
BLAKE2b-256 5fcedde7babcd0a4fd9deb7e8e1be4be2cd10982436e3400afde399370923fb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.42-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.42-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8115ba6362a9b3876f8636b4e75f2e267cfd2316885261517b38fa094c1af734
MD5 1c53dccc1ac5bbd13ae5d43b4d1661fb
BLAKE2b-256 f71908bd3ce405ef1892763f97d9a0f0ee463a56cf1ffdb9e2a0a5ad0c77a17b

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.42-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 062a38ab0ef640a12d17129cb169d530b37713efdd3fe56edd6348798d60c3a6
MD5 35562ab74968a438aa799e45858228f9
BLAKE2b-256 3ffa87679a90dc2d610f416a4acac6c0e2558bbaedf4911ff8d5a675254cedb4

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.42-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 29c6d4425a1980f29afc0088116408cd44d0b271ec2bb74a742596e43dd619d0
MD5 e62ebe605b9cd92152856937b0984e03
BLAKE2b-256 190c28f68a9a76a6f41def46ef03ee183211bdd201f8c6cc1b4404aae9dd77fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.42-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.42-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d6b2be7a9016a029c8f8dcf3969621b4a68b43d4e9e8194ee3350d419ffdcddf
MD5 7db9bd9b296197d0591d41c44174884b
BLAKE2b-256 502d380eadd0c57cade4bf4a9184cb36aa044f495253992d2b068fa1916ce93a

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.42-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 41c5819c2bbe215d0ebccad1cb4232093b49d6c5b10ceaff39a56dc2e7661a9b
MD5 85120f7221a05739776af40c73e76fc1
BLAKE2b-256 4278bcd770706fef1937cd33ab4e246bbee258f99f9eb32daa2023f9b74cb365

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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.42-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for orbit_cua-0.2.42-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b2205627eca518cf35448fa2b68dac6cbae2312fa4ad3e85f7713d823b4924fa
MD5 c26bc4c40f62a1fe1d4914a68a4b6678
BLAKE2b-256 845723f5a09330e3d692b217ac84871f573b79ef9b22298b955caeedd227103f

See more details on using hashes here.

Provenance

The following attestation bundles were made for orbit_cua-0.2.42-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