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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.32-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.32-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.32-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.32-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.32-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 69cfde706c3ca846eea4845a0712d09d73f0c30fc3ba1eca93b515cc29d69e28
MD5 dca0310caa6aab2ab4e82558d64fd766
BLAKE2b-256 6f718adb2c331af47cea6a1b233e85a5958a24c6a0d46f985e31070ef01e60b5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.32-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 aadd55a3bd1cbb4aa4de5defae836a34bbf269aadf8614c89389fe84fdfcdf48
MD5 0d0ed292699b3842462c0ddc89a76bc4
BLAKE2b-256 fa59cf325d25125ebb051f79e3876e037d1237a86e8b8700fa9f8fe3cdac1a0a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.32-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 65de566cf509716230dc23b2727d08bf5743c3598a662809715c452634d9c1e6
MD5 8f0e139f638d5d47fa1a94d089ff4196
BLAKE2b-256 ac3cb2a4e6bf99a2502a1b18e3fdb9cd845fe3929a6d3e2b11c8ccdcbd5cddeb

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.32-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.32-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4eb401f81553892799910b1215c5dd1826623e755bf5cb9213d9393306fc631c
MD5 6f87d8fa0d97c85ef1fd03c026888e70
BLAKE2b-256 208c592372f65d129826b881dbb6e571aec56faf31253baa5715eee4d3b8dac5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.32-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ef722157c27c1957236cfc86baa81485f1a3cd28cacf8c8ba0148a90ee3fb411
MD5 f3b77b6550dd2c4c56d294414e575553
BLAKE2b-256 d0b55ede58a2a9c0bd8d1967f642adfed9f114a9c88715ad578359ef55906cb8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.32-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 53217bf45c560e10f4a5ff0ffeaeee66d06005ba708208080cd5e5e6e8ba1c43
MD5 f2f0794aa9f1541f30ac7924467b1e14
BLAKE2b-256 161a80965b5040557722b775401b3d8c89d01d921012a6c30f4c4d583ff15f99

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.32-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.32-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7e30ce5184834af52d733d9bbb62088525123c6cd6df82c2be352847d2963ccd
MD5 f5c63a7ce6d94ad33e98301b0aa54acd
BLAKE2b-256 eb02e6d649023ac274c9ff39e46b1ba20f5a8a5891481a3961650ef79cb824fd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.32-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 07062dc00736c720bd2e508341c16cc0a6b80b1536adf8df59cf4707cabc14dd
MD5 6e9770f5f1fc395274b4e789bbdc7b2a
BLAKE2b-256 4a7dacca056c3d57f3b611a355a6387cb550754a18b6ff0514609030c8a4c8ca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.32-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 8d260b6647d0c8d93d0e48189edc8d7768e18274fa66c8b8ea391ae0d3446450
MD5 4c4d011830e337bedc21ad85871f4c60
BLAKE2b-256 f151667952860d7b2ac7a26fd8effc058ddc86cf8b781eef1edd65eb6827e5f6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.32-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.32-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 aa2e048ffbfe95dd9cd0ecaeba6370b81b883dfaa1f5ac5559b848bb09d4f728
MD5 8aa1b136fd6df344ea718941908834c1
BLAKE2b-256 be5493907b806c4dd5b2f72839057e0ab25aa04ae5de3beb0a4dfc76ceeb31bc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.32-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f346263c38779cf9a407d516f78039581597d3c72dd6cfbbde77f3c180800c1a
MD5 a9989ffc5b15bc32c082642a4d9d4640
BLAKE2b-256 ebaa6afe7718882682964b6f1d111f978721b2b2576b6e6bb0cbf4ba729ad2f9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.32-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4432375469efd2ec91af6dbe53d29c2e69be54c477000a1765e8254b00def23c
MD5 ca947154b6cef9736a0508ca7fac7214
BLAKE2b-256 a301e29fa7ca64daf2d6f262ed678da51f83b6c4179165951a6e910ab1dd7e56

See more details on using hashes here.

Provenance

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