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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.45-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.45-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.45-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.45-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.45-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 18b7ae29c252541d82579f02bddcd090cf0b268b4650990928180a50f0af9f38
MD5 19dfcd1810c7e71bdf28e1348a30b87a
BLAKE2b-256 d40a2598c4715ad93eaeb9a83ffdcbc3b62e317ecfa0f577a298846550288b40

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.45-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ddc453790fba05cd19ce35ab8c48605dd63983f13d702585dc4a076e66deeca6
MD5 630e13cd22aa3954c5fd22944201040d
BLAKE2b-256 25bf801f53700cfa3ca2560f54f69aa2542a58377f74956c3fb9200159d4e512

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.45-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 aa5b2a68c7705f46848d7f57ca337d2590d939d48c5a4bb109e3b5409dbc7e8d
MD5 9e74a4a769d9faa13f7906e4a8a3cc59
BLAKE2b-256 702032705c0426e869ebb01c366c0cc56e8d8757d7548e23e1204b6abba5d409

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.45-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.45-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e6e5384ccb1b442263d9f544ad25ebd4dc31f8de5c2252cd782c41d3eb468ec5
MD5 571a459d1c2bd18ba9bc39ee5d37ac77
BLAKE2b-256 15215dc6aa4d8eda09334fdf7bc481ae2a5699d69da56f4a1b1036498a25d7e4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.45-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1954454e10e9ae584aed6e3f0c4eeb0d7147f3dc8a1a6701f7a4b55c00c39ec9
MD5 3332a039c622a7d12f11300551e91675
BLAKE2b-256 c826d7360dd5939464c3cb388ea407ce51ac5af74e8e50fb9329896bd9a32d2c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.45-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 c6f779153e1bd6e57e099dbbb28f4c5f65da89235943e7a1b9330aad7c1c4bcf
MD5 c224758492acddcb86e55dedef39ba2b
BLAKE2b-256 25526d35bf9ceba7a9e0fa0e02c3a11f024e6762ef20bb4c8d654b9a95edcc0a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.45-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.45-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a48b459c4a5857aa83a64a6ad059a255c99cc692ee10d35ee363a9270adfc1cb
MD5 27366c2bcbe2cf3d6c0c3323cae27a7a
BLAKE2b-256 0953ea946ff5f98af844d8159a13bd442deed42f246e4c2114983bfd58daf8a1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.45-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b6f3430c53772476ad796b10a5c9dcff8600fc4f6fd9768dea15e19e9f11fec7
MD5 dc1ae32a33583390c8dd3d42252e78bf
BLAKE2b-256 5ea8563cc09b6c6cc9b684dc30df7ad142b64ffe84f2bae75d806ad2b5b0c33d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.45-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 46832004fac8a0d19c0fe086a9194546cab6d3500b20fa8a24af96c5979e1807
MD5 5a46d70c724322c65e63f5380690e93c
BLAKE2b-256 972feda553ad0edfea77e10ee31009c0ae511a0e5d5f021cbe92f5b2c22fe647

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.45-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.45-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 dec3ce8de4eb4bd7c7c620a320e5aabf5f4886e9564f8ea7ae178f2f72bd6117
MD5 080a339dcd55b8c9e88a8cf9de87455b
BLAKE2b-256 988b575f18feb507fc1120945c9038df5b7e795f2e1c255166edb08bb07928cb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.45-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 d42abe154e0afcc5c1a471acccddcb68ba12c296d4a03a4e23cc16481a0e7dc6
MD5 7e0665f613150610a6768e6fc33bad5e
BLAKE2b-256 22aaaa1886e48edcd332df1a26c058635ac8dea9b1982b31ba3c5bd56344ae4d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.45-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d6911782065f42d68e3878f59751c7e7f3b4d94bc758d502fbe54b4cea3b4f99
MD5 807802abda90bb08ee41c5de0ae56824
BLAKE2b-256 e365d98f07c7c706dd03d906d6ff96ac12d4114f30f1b525f1330f24b828020e

See more details on using hashes here.

Provenance

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