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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.31-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.31-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.31-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.31-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.31-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3a390eb86caedebed80b627c0c45abba3000dacb07e3ce336d81b900b8ed0dcb
MD5 afc124c60405439cdec0dc0cc0c814b2
BLAKE2b-256 0a42d52b3d387fd82b4190478e78d2377468fa5e7ff89b3e066f8cd28cb151a2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.31-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 dd7727641a7747f7b8b300a3d72fd2be8886104874f3484a0e440cd41ddb1a00
MD5 b667f875f580cc300badde29279cc1ba
BLAKE2b-256 dec4c5f689c2b4c078f2249f453d26481bec97e852418b93a8eeca56150b8c9f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.31-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 61e967ed01c2896cc88a103c491ccbfc0a2d40d243dc09b2e1dedb34ca4ebfa9
MD5 4b5383fb1c694c44d58363380d4e9c6d
BLAKE2b-256 88abfff87a8bb89eddc60f2dd99b181539a751f5fb9ca394e958a666ba38783e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.31-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.31-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 232544d293baaade7cee194c4bd3d4da4ec73042c08aa66fc156fc3ec9d06200
MD5 9ab5279255df4031e4c140a4f64ce19e
BLAKE2b-256 5fc58a9b768af48786339a9a53d7abf0faa35fdfb4e02ee7fa433c6851fadab6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.31-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 bbd7b7521904790626f3ed7fc538c9cec5b8cafe716faa6786509ebed42f8ee8
MD5 27bff4335df50c40f06b24fc4a287f03
BLAKE2b-256 3ac6bf64872d60026d20fda99cc2028b80e52c37cf0df2c4e078f33370584543

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.31-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 e475fc3398abd01c785201646787a0c7d7cc0513bb4dea00af13978f39594040
MD5 aa9954e355a03adb5e48e4fc37f47e30
BLAKE2b-256 e5910c561efa1286f93e419cfdb902ef53779cdeb8da1c626f5ba44c942508d1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.31-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.31-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3350eab63a6e4dc06969758de797118b14f8f98db3c94bb801a711a2e0b8ba2a
MD5 27dba10d99c50adbe10711edca2b4bcb
BLAKE2b-256 00c5bb62c5212acbf84935e619e6570e8016421dfb2f024284762cc74a0a77eb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.31-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 67d9cebc1f4ce5576e20d4cad4a5391baa0b11e431bf8267810c67b3a409122c
MD5 cb3555927c93f3a3df9713c3ae512327
BLAKE2b-256 ae425ae5d375ecd7b74db44221ecd33051d308388e6c0a9f669867fe5c1153e1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.31-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e2aab9ceb4ef8d9a95e32b33659302e3a5fc55d3c8b0701f9f7cbaa72d697977
MD5 59750a718c04e86ccad5e2bdf642a131
BLAKE2b-256 d451fc9c8612454be200d62b5f6e1192d66e78feb4511c76a7c90753481d1afb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.31-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.31-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f9cc44f54fb9709c5d364a58b78cdaab5424bc99121301ba5696bc617e4ff5dc
MD5 39196ab4e2f5c1bcac68a47da8e2d4e9
BLAKE2b-256 5ac2c7078b675aa7409e7b6a6a483c39faadf14bd9bf9ebf759a2c2683d83f99

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.31-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 8af05b64e6b259af33a73c954127417aac10560f8bc3198e02d41e356f2a0639
MD5 f9a87f4d0a526bd7195183831a87ad37
BLAKE2b-256 fb933caf0a5090f8ca2b9fec5505c7a43345f7530e5616acf8c9cc12e9403674

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.31-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b38934a7e79825c1f3dad5e198e9e2942a13f474a4100549f800a826c08f1fe4
MD5 fc41fe727b57bdf4e600c03ce91bd401
BLAKE2b-256 90e9985ac7508d971d8a3a8eaf18747d3383122b629fdd10088799ba8b07e3b1

See more details on using hashes here.

Provenance

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