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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.46-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.46-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.46-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.46-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.46-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8e5bcb225df89e0279e93654838bc769f26769874f474e91002ad67c0a435ea4
MD5 0d7f69c12adab0ef2f68ddd6891998b6
BLAKE2b-256 d3e16fd39f678bba8e1ec0a568fb2bd98fef3b4ca6b0b71cb2a54731d14c3db3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.46-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 8fbc888b9649c5424bb82fcf50f4bdd4a79f4b5f3bf43c5e9acfc79332ff5506
MD5 afceba3d328367f41b40f30854381f99
BLAKE2b-256 f84eb9f418d423d49e56915931baf8758562b6f0e7fbac371ea42eb84c09147a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.46-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 103bea3188d9e485e2c4a802461f88e088b4d38b23113d13054561e15c2ced00
MD5 a056379ad5ca54ffb264fbddaab2afa2
BLAKE2b-256 73b0ea973ea90ac766589adf1a5f75ab66694b1b6b8ff28e586250e6e2d93324

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.46-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.46-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 becb9cc2e4e127fb241afe9975fec25f4ba859022a9030b65b603c34cf3a22eb
MD5 d2c52bd66829aca85f1cfd7e771f4729
BLAKE2b-256 75c315656beb34c64c55507ec168ba470c182219e39ae4f4f375afbdd597884f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.46-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 dfab63e8bfd416176e313b16dd7997bbbd344edbd083c707ab83597fd318ccd0
MD5 cad72244ce07cd8d67e59d9bf844e59e
BLAKE2b-256 9ce70939bf1761d7d4f627208ba1dba4f0ee392fb5a8517440d69c5d6f9eeeee

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.46-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 bfcad883048877e77d7f012a4fc1d60c627f8d5b3a0648e74a68eef24462eaa5
MD5 3f734bcda3993261465a9053dc628199
BLAKE2b-256 7d6c06c36aa9cad6382e3d9f07c4a5e81a8fcf5afea5a4dcd423514452422473

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.46-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.46-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a65f131aa85d28b3b4acd0a7f9486fef10a1a54dfe2acc4a721507c9ec192966
MD5 4d13885d5d486e14868a412a6b11fb43
BLAKE2b-256 0656a5502396586c86e1e60200c4cfb1b84d50e5672b814d1ac2754ebdbfd7b4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.46-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 297194d1b3000afdc7c5fbfbffaec56bd29640376469173292a69ba5d35b9504
MD5 099f6fbc22fe1422f39feed813e0f20a
BLAKE2b-256 93cb7a6649a89632e82f77a5d82ab0b667127392aad8b97687e0696a62251ae2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.46-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 5f65900702f74f2dfcbbeaaa21d0301f4fc66e4ad8511248ce6bfe667f0b10ec
MD5 2717cc6a8d646a0588c912024955e789
BLAKE2b-256 1242efa835271ee260e69d82b406a6d26b94a830a5ce2c1783d47b345a90f9ed

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.46-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.46-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 e44cddd12f63cda4675c0d4cab5b3cc8627181130f1818968403a52295dbd238
MD5 7079079699768c74edc152332961f64f
BLAKE2b-256 7d8065bc620cd9864f6c3327b437d210671dd56b0c837572d2271d7794908e3a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.46-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f1783b37cec6a5dbec9d1e1351b65f07491f3cb467bd853aacdb813de136bee6
MD5 5756a2156a984b06472e66e051e0e5af
BLAKE2b-256 24cbbe9d9f864026703ef951ce1e5c59ba06ac26c23fc87a6f1b2a52bc07aaa5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.46-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d052dd6637b3a1b6be16953972960809f28258698f691b68c56ddc1e8f648ed0
MD5 c1634bb34e80ed4c31f7c72922ac0e51
BLAKE2b-256 cfd830c7314467598e1d57747538eaca3b36b289fd4d8a259e15830a13f6f487

See more details on using hashes here.

Provenance

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