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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.19-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.19-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.19-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.19-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.19-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e10c1e261a898b2583de763a780756f89e304d5408eca3ad58440635747da14f
MD5 f6d05c20585d6c6eed8127ce236056fb
BLAKE2b-256 34f0e831b837d26234c4db583f06b6b44da57ec8290dc3e173a664363b7ad201

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.19-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f281c14f22c52fa698936c84eb5f592ed2f319cbbee857f8453ac2f96bbf8393
MD5 e0ba3948ae82ecde244c840702fcc5a0
BLAKE2b-256 f108b268c692726bee2a26a65ba9a2868bcb20d84014d8a151209b2ef0517fe5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.19-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 4b210867901663d39417a51f8aad5a454823178541ec13465332881802049a58
MD5 1464b36cfbade163ee57d507082ef302
BLAKE2b-256 3c6d9cec962cf4767ed4de80ee38b9004b210ca86d0d049461a90d31290b0991

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.19-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.19-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 eb2627b922277e05548311dfcb58d7a2f5a095ad5020f3c488384aaf07ab4b88
MD5 07057960275f72515071f42ad1093406
BLAKE2b-256 f1747ce8ad8177e96c8a547f75c550aa65642321066521e93c2560c54ffc3827

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.19-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 2a98074dd5f3b9b77d6939ec391b0e2173df47f5178cdbf95028efe617f877a2
MD5 ffa7fccfbb7bdcd75f85f0456bf71945
BLAKE2b-256 eb52907ac809314cc0cfc460e4bcbcf00e9656a878a976bd95fd62794ceebb3e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.19-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 7baf6b0cb88acd7b2fab00c77b289a0e114269a8c467ce27b578fe9cc45cf40d
MD5 857a0090b25c88a3c3b2b72823af0d89
BLAKE2b-256 f490d4b20389eaad1c12bc7ee53b6e1f2aff42f6fbd8b421a7a81a7e53f65448

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.19-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.19-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1eb51d0a8038bc06a21d459c1417c74edd5e0c8b00effac82620a2799d9ca68d
MD5 a386d360a9efca4dc0b1bb2e8f13a865
BLAKE2b-256 b08fe319e0fa6fff8c71843b2897423d92ae9e603cf8879c88c3f4a083ebf956

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.19-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 92aa3d4ca26de021495bf813538467cf5a3dbfc8517618a7af271406e654078d
MD5 675c74d59de28e75e790ba7ac61cbe55
BLAKE2b-256 7e451e7b5c130a49b9e4931b3f53938c44d0c180d3dd199504825c3f6804eb0a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.19-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 6c609ee0e051bf231c6b5fe060abc7b718aeefb1ac454dbe327e6a5f53163223
MD5 f5a0d4b2544d273c8d32c61de341c52b
BLAKE2b-256 0bf702329fce000cd5b15d8d11058a938f2db64643395118319e6a07bdce7b77

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.19-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.19-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4a796fee727350572bbfd35541b737dfaaa6e240a1ddc097ed9323d04009cd5f
MD5 67591de3bcf7e24b0fd44d27bc417b3c
BLAKE2b-256 9967fa1fbc5570a1cd65a473eb028cb6424e531790fc03f68de4a2dbe5e630f7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.19-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ee5f7687ecd4c236f2777345db8dd7f9f111d89d6f21ee12a41b97fb756664bb
MD5 18b920329847fa9421c8de152141d70d
BLAKE2b-256 891aebb3f0327b5d6711738a15cd6ef4b57061f8a834f73e4efb27693e803a8e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.19-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 4ec0fa6a459d76c7ed557bb77d280148dc5b072e57803d3b397715fba925335c
MD5 fe2d4f1437449693fd3e81fe5c3fccf2
BLAKE2b-256 73a873fac4d4f6b58c8f30e1a5ec49a577d3ceaa230e3478d0b3af14e1173f94

See more details on using hashes here.

Provenance

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