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

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 , screenshots only when needed, no DOM hacks. Works across desktop apps and browsers with lower token usage.

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())

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

Uploaded CPython 3.13Windows x86-64

orbit_cua-0.2.4-cp313-cp313-manylinux_2_39_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

orbit_cua-0.2.4-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.4-cp312-cp312-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.12Windows x86-64

orbit_cua-0.2.4-cp312-cp312-manylinux_2_39_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

orbit_cua-0.2.4-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.4-cp311-cp311-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.11Windows x86-64

orbit_cua-0.2.4-cp311-cp311-manylinux_2_39_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

orbit_cua-0.2.4-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.4-cp310-cp310-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.4-cp310-cp310-manylinux_2_39_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

orbit_cua-0.2.4-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.4-cp313-cp313-win_amd64.whl.

File metadata

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

File hashes

Hashes for orbit_cua-0.2.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 98a70319fbb819f043cb6e1022af9dce4ec360f1b4fe88f7ae6cd7bb18fdd5af
MD5 c4f31cdd7ab3e6943768b5a16311952a
BLAKE2b-256 1295736892f9aade68c5350228a516d13a3d5a89f317933b1bd34bac26bc5456

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.4-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 386853048bb8971579f92073070b8e3d1433a623179b1c77d23fccd565023aa7
MD5 9d8ce9b00cc4ee156e99352f9e49dbf1
BLAKE2b-256 68a46cb0a9a44ddcf6d7fcf0dd290762f5c4e7c05a20862bb98a69e351675d53

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.4-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 b8b9a652f202bb3565bc740e2db32d09b6b50735762b3fc4bb903c1e1c586fbf
MD5 7538443ba650730a081c350d5d569354
BLAKE2b-256 08486a37d871c960e5cfea42adb713d6ef877110af2ae90a70d5d609ec3db13e

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for orbit_cua-0.2.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a0bd962b6f3dbad2b2ef99502ecc176beb48ef058589e83aaa4cafb2928b21ea
MD5 4c05602034a655fd5e6e72f080e6d349
BLAKE2b-256 2540a8983af5300a65880402bc9a41cec1b518ddadad492bebb32b15e2e45c30

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.4-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 0e65421942d99a7b182fb863ebb27c4385fdc63d35f6fe94e5f08c7d0b2709ac
MD5 513830f6ce7134129ec44f80f7873e50
BLAKE2b-256 abc811b40743cedf84c5c158546a0dc3c1126554aec323038d252363020860ee

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.4-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 91378dfc7bcfdd03e57317cf9aad9c4e80bbf9407491b5c15050131c944bdba6
MD5 baeab01aa3c07de369df0706fe6778c8
BLAKE2b-256 84081c1f150c60b338f90a2fb36d92ac4810b89bfd1157e9559293fe326cdee5

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for orbit_cua-0.2.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d119f9448e8cdd334233659b3bc3cf81f87c336512350a8b382d119344b744f2
MD5 c8aa417c1996f9a4668ac1290352c849
BLAKE2b-256 a4ec2637d02281f720b3a44668048ebb1c32c5264f173e7f1d1fc47c55085ed2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.4-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 50c764e9ca04e100ffbc6ae5b956b437313fc9d591424e7c4984bc54efbda83c
MD5 2c78857324b0f8de572f05ceb39f4469
BLAKE2b-256 e0acb7670a67d03cfc69fe4bbc439b983f470668812688f4c3190db66314d644

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.4-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 aec6521fe2b88058ae2b13c4725256f77720367f2cd852fff84f6e5438be1bd4
MD5 8a93c9fe5ee4c54857c5f30fec714003
BLAKE2b-256 907212894f015435f2db82c60ee91449d027083a1070fcdaa033e8d153d0356e

See more details on using hashes here.

Provenance

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

File metadata

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

File hashes

Hashes for orbit_cua-0.2.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6497bfb71e6bcb134cbe03007a82c5d563bcca507759735a26bb415f6f5a6f3d
MD5 dd1b2c0061656f7d4cc311696afb434c
BLAKE2b-256 0ec4feefb5992553630d6b54186fe0c09dc9a7e618a0d078b1b21a06ddc4fb6e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.4-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 faa01b68a7c67f60dd819d226444fc497540fd994814fe662689a825cea7c3bc
MD5 79df8d63047692d201bedea4a03dfbb4
BLAKE2b-256 fbea0809c60219e953697545a15a1ecf74e7da70db5faa7f970994ea0e19dd16

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.4-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 9c6e335de2f9b823cc98a83800c5986430318b48c24a6991664cd214749144a2
MD5 48166e6120b25341cb6968bcc7d00df1
BLAKE2b-256 e0782e1cdfb54345b4187f19b122a16e4a228d64b6feaf62eed94fad5c70c695

See more details on using hashes here.

Provenance

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