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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.43-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.43-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.43-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.43-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.43-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 dd7e8017fee244a5af4813e53fc2fd451931c0111b5b24a86e66d16807cafdb9
MD5 12ca5cded2bcadede20fd09d912fb9fd
BLAKE2b-256 35630f1c876e3e7b6724bf151e9770e8792cb7a62e290395c85a93da0406edc6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.43-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b9d77544fa907d0b6bc41f62c9a36eff5d30377f74b9b133e1e6bd4fad1943eb
MD5 af55adf7432f63b8404747b14bc4c116
BLAKE2b-256 dcbf547de5c102ddafa35a7a4d144d0ca9f19aaf2fd6450d0c3373301a696dbf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.43-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 7f55a51d32dd63b277651849e146fd01c55006b713e19ad72e912cfc76adc815
MD5 da9f769e0ac9bd2e05beaeb47297d2f7
BLAKE2b-256 f7781bae845e7944f6e1e2c5ec2fb5a5114b95ec85109c033d4f6988abeef5b8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.43-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.43-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 21cfe4b5c699404d88104f208bceb15bc96c9befe8c36b2ccb190092e64bd9c8
MD5 b37a9edd1125c6d68d581d0d8a3d3075
BLAKE2b-256 2fd651741bb0ec4291569a6d02c31bdc78e5c749a47e57b34316d6f535d81fcc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.43-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7b2e05256fe4b49a53ce0ea5790f61f76c9c5b869224a3a4e4f5d3a538ddf48d
MD5 29fd9d50dc911df81c2d1aab1678f46c
BLAKE2b-256 5406eb07434194f4dc23482f333949ab574187b6b7a4d39144af83dc23663218

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.43-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 4e002d430bb26159f0b4800872d4afa51eb62c443d1bdfa72d8d11c37265a086
MD5 afe9f73334c290dc15a9de4a01307ee6
BLAKE2b-256 bf65d344587ea67e896f38df32fd3f97caf453f85324b47ea59b37be6b2823cd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.43-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.43-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6e254c7f04944937bd17408c40f7632b3b420d0d38b0f1fe5ba87d695642f317
MD5 a8c9e2a92fd2b69f398849a966ff92a3
BLAKE2b-256 5a9703c69967315e50142d61312dd3ddd0eee004b862c9b3f005054fd4d72dde

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.43-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 d37bff8f1bf1c9c1b1a0cb883d89b2fe63964a1060177b2dd9d970ab00f362af
MD5 437bf2b222a883f023c0e8aa603f955f
BLAKE2b-256 1b965f4688729e32142c197af7cc687a272d8b7db44211a9fb2cfd03d4991011

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.43-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e539f653c341dd8cf8416fd1bc42ae7722445f950b18dda195f43a7edac14bbf
MD5 4abc9f16f3d943a633a6c4f8c8232928
BLAKE2b-256 b336366a81330c509615f1c98723e0285c04b7a28322bfb0e11d329ce7339ad8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.43-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.43-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 84ad6f918ddc088a892952b07841e6a6babe73d3e69e6b112b433630b4426b72
MD5 c72d6f4e5b62ee23357963cb32312526
BLAKE2b-256 ecce7169e3b4729a945e03ab63837920a15959a02483eb022898c2f7c6795b74

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.43-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b32bb61acdab2aea7d7b744d65dcf4a3c9944aa9fa32f2349138bdbeb58306d1
MD5 1fb0a6a5e6bc5c9aa2845a3b03186300
BLAKE2b-256 61556cd3c9c82524c0a9186b2d7a6ab81bac376bc0d52979c296dab029bd8b0e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.43-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 60a61e77be0a539af02a9c1e666bb584df9d0427dd3248c693d699b840e2775f
MD5 ec8b45282c51b26b728432dfdf039141
BLAKE2b-256 4e4265990b6f16e116a6b94140865f6832efc31230a66cb1b63a7dc0d9420b47

See more details on using hashes here.

Provenance

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