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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.44-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.44-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.44-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.44-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.44-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8582a6eff58473255a9a353aae6dc92a28e8576cde9590f50549827bf5cb9416
MD5 779cad02fce665c95b58f0d99b9eb2d4
BLAKE2b-256 cf5991be21a896a153324f0aee2d146632932156c1fbd5c65540529f121a0cf4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.44-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e8c8fc7a24b8e1799d44808044aacc6d8a962774af0f90d8213447b1419a849e
MD5 b89289b56e6abce1e352cc91eefc15a1
BLAKE2b-256 48fa8411f71419de496fc63bf498794b8c666be92aff92efbd92a55763e8c7b2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.44-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 7ccd576d7a0e6883ba295851cca2c9c77a3df4c431cee262015e2fd4049d4375
MD5 5d62286064f13400114c84d6ace7158a
BLAKE2b-256 f18c7420d68ad599e7a2d9eeca8e97fa62d0274d1e9b5b2d6957ebadade4804d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.44-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.44-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7f5f75d7879b67ee164da6e4fc727c25aa9129b1f04650f5ea4465a12fdc5051
MD5 969f3fc3cc3c454d10e3a0fb6e9a11c5
BLAKE2b-256 f476213816ee0c320e48e01c47f5ff10147769eed3fdc7b4eb7f8e0517052ddc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.44-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 0551f3674add1bc01d03a4ca235f97657e29d1eec9e500eaf098d2b6de9ca3fd
MD5 aa126c8e3e8867114b229a3d60a80e0f
BLAKE2b-256 94752b39838244f62506ebce1ae15c1fb5be700b1c13e5a1e61cdbf1907bf55e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.44-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 4cde2412d6926f86dc3207a6559b2c8ad2081fe16d58dc5d26afb3ec8a79c5da
MD5 123bfad8dda555b536e42f63df5625e2
BLAKE2b-256 84b776f99cf1b7eaa7576cb2f46ddf1001562b8970a7339e793aff0a921de810

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.44-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.44-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2ea4b5b570b6ab6868504e9a8a354b4c0b1412748bc70278c6e4eae421cdb68c
MD5 51c83be9d5997a3537928aec164fed1e
BLAKE2b-256 6d5652c31272e3b2b06281c040c4eb31affab7eae71606258ab3e96998d2646c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.44-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 4c3d2737bae11c20511a3c52efad43006aea8f15b94e39eeaeff55724624f9fe
MD5 1c991d54b1785491f9cafb583d66e6c8
BLAKE2b-256 47e9bda0f8f7b1eb29a0bbc77eeb8826648d07851cad5bc5df3d8a7c9f12018a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.44-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b259d6020ebd6940c6ade2ea372f10254b1a8f58eaf415d18851b740ad8da45a
MD5 43718a033310e1678829b049bc617ba5
BLAKE2b-256 574f1c18d583a6bb59637705fec7fce22a9afc2eb97dd98dad209912c296c275

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.44-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.44-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1f106bf333f3411225d1dc747a2ccbe99ef83cf1c0e801e5fad6aaef0a2c5f19
MD5 05baa06064a96611ac681cc731f1176c
BLAKE2b-256 5484119755047e6a70ffcd9ef71a8fad2133c97a83a9b5082a63b7520dbd7900

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.44-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7b22f626d9fa6ce6f61a4b96e8e8ff3e51a91e1305b3658d2b04910623e7dc1f
MD5 920cecdb1900f439e39bb0fe4f09e54d
BLAKE2b-256 52104d2df0df1703e0706d6c66d1ebd314bb1c1a8fe9514fcf25107d9f879fe6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.44-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 05f486b2af8a0f84a1864b84d624e024307fe8fb9788332aec2a3da25854bf74
MD5 972f595aad4e5e75ce22a7102495b957
BLAKE2b-256 8e14b042e0fc3761823987cb04ce0072d0ee27c81e23f05dc49277228f9f3854

See more details on using hashes here.

Provenance

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