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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.16-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.16-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.16-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.16-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.12

File hashes

Hashes for orbit_cua-0.2.16-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 62db7b10f35d29d529767f1a9bd1cf16b5fb1bb18dee30c2c0ecbe34f48c3f53
MD5 6e66ae2f2e94c1f8c89ef0fca12cb290
BLAKE2b-256 7a563e2b2cc3a33a6506ef3851fd1894d8be21bbc7872434326d4e3026f835d0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.16-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 820ec8b59fae41dca8e697fdc191a361ec3c5c47f6e0d6a08dcd008e69ebc42f
MD5 705ab948cf396035680afb66d06a7010
BLAKE2b-256 32a405c4eb18ebea76ace5d1aeef5f29171bd7a73ef48d80cfe86b1124ac62a9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.16-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 2c1d8b2faf9825d7da7989be40e0a387ef2846c667606ab5148319f173f982ca
MD5 5d733b962fe0f02d279365a1432816b2
BLAKE2b-256 cab2bd1bcdcb3b3a9b06b17ba4aa5e6167a57780a9e1826d06b73612f29ef0c9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.16-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.12

File hashes

Hashes for orbit_cua-0.2.16-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 59b0115c738a96e9f58c243dec658389570665993565a7247bd09ef51cbdf2a8
MD5 e2f83e0504ea8ab8473cf1f52f19b3f9
BLAKE2b-256 9c035a876cd84e89f6d51ed996d8232357e2d8c0f4b911094e03c5f7d4fbbfc9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.16-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 647206c4819d0c5952a9bb687d6f93a2c6ad70dcebab5fea590c700624bd2346
MD5 0811166b5c52d0568453095ce7de69c9
BLAKE2b-256 28b384fe0551f2e9fef5b590bc4b5596946bac43baa0ecfe88cb9605df066cb1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.16-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 d59c18b1daf005f23d2e29b7065b281f751845fb4f739bef4b1c23fbe40a025f
MD5 79efe58a9260ee6d17874c5ce171089e
BLAKE2b-256 e58ab0d8d384d31a297e3c507039115e561979f6503338f7a8b2a19b7ac0dcbb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.16-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.12

File hashes

Hashes for orbit_cua-0.2.16-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 91c7ea90a0a36e587e18d9115cd84fad498bc97909beddcdff9c35d0e296700c
MD5 a87260e16255e62982f62bb02ebe9c35
BLAKE2b-256 746a0a89521c26ffbff4000bffe25b11bb9507c3a4ba61c56a2baca329d0002c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.16-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f546228d08ee090933abd9facd03164a9e2f5bc62026955b452ab7d142937cdb
MD5 587a2aeffbdcf57881d90191d689978e
BLAKE2b-256 53b5ce4e834bbfbe3eff6cf2773dca25a1da34be639d4a99cb6a91f29475cbc1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.16-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c9e5943f44acbac8c996362a955f41bafc7d49485c41047b34c3331330a844f3
MD5 004be25d39f32d9224d1996c4ffa6e2a
BLAKE2b-256 2c00eae95308fb06999ce9ca34fb99ec88e1c1b3e69142f9e0566448b9e752dd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.16-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.12

File hashes

Hashes for orbit_cua-0.2.16-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8e813504acf2fe1aab30b1f1c2aea95778bd1ac45b2152b6d11ab085fcd7524b
MD5 d596d6c8a10d5dfe4c096d9ef071ae4a
BLAKE2b-256 f8203865ba38f02def3679d41d14b7c8f8add698e7ce1488ca6fd3c012ca53d7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.16-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 cb473dfb3081eabe1a207da70c5bd1a391eaf1dd24f396e6765cb9903cab2850
MD5 4efacad04bd731859ff8c8abfda14dae
BLAKE2b-256 8bb3facec7f56e45b6be09db031c5e198c62881e8d4fdc75b1b8da2266ca5216

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.16-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e4338833899e5eb6b04ee0fbc549bb7d17e526a04a41d7ea2ab9c9284b28f12f
MD5 a191872f70b07e1aa26440e33dbbb059
BLAKE2b-256 75e32dfc272408f767f7c093f96eb354c2be4efb34023b82a30efce9e5bb6ab4

See more details on using hashes here.

Provenance

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