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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.22-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.22-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.22-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.22-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.22-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fb45edd7b9ee08257aaa0a7fbe3a003997dea8d8299d7ecf948b487498ea5994
MD5 1cfd01e05ebe87b2b49dc7642281854f
BLAKE2b-256 3d6159fdbb135ca5e20e196d7562b11fb0e393e51817f3597bc247ea643e7d6d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.22-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 aa38d16cb8e78df1d9aaf45b302018f2db65d3338ebd429101c6fa2b3e45e641
MD5 042c5b60ea39becec522ea4ed9b4cb86
BLAKE2b-256 e6396d5b25f654295a6e965814dd9c700c1d583f15378de28bf089ca752efff2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.22-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 ce07c497d62b15452e900b824f9c530c06422e742f3a06374f559e11e17dbfe2
MD5 d199c784c3a29f2b6fba07ab84a19e76
BLAKE2b-256 e2cbae9cf2bf86c7ee1ce1c190ea339835b3cb1996a96f30427189818d18ea63

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.22-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.22-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 9de24f49a231eff155e67ae6dbb030d7855daead8191d7de0279e28f626e6747
MD5 5893aee43b59c3285b97ee4580445099
BLAKE2b-256 117930fa1255ef5fb64e8185823b8fd97dd809098e97baf7d6f91a017878a09e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.22-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 44eb0b7b4ad6673ae52f1a4aceda2c80389eacc03356f0aff569588ee038c9cd
MD5 2a84c7e7e37c2c1149c384265864e4e2
BLAKE2b-256 d745cfe61279b90daeb5195dbd0edc15d226e5fb82259cfe532ee784185919f0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.22-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 4b82c283427f7bd4542ff6f0c6aef05544467d32743fbab10b77f137cd9e2bc2
MD5 db164cb9a69b452651ef7768820740bf
BLAKE2b-256 b1ea511dfddc7a66aba87f6ebe79f94cd11bec13557a2f4636dc35fb8acbdc09

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.22-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.22-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 59ab16e42a39f68488bfaa0692ab39c1209de740017d6a686e9c9f936cdda687
MD5 4eb16cc4c250d8c546ff5c3e9b434e25
BLAKE2b-256 3d46a373ce5bd1c0d7e707698e976efdd0e2bf0c5c1e4e6a7ca766a8ed3375cb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.22-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 beba3358a918c4a51b6d203ca5c394303064e5ea3ef3acf41e3a602ee673c514
MD5 72a881039ab99f4a9912f72132d9f4fa
BLAKE2b-256 0f3da921fb0a6420bf462b33f1ef5ef4ecff52ae70ed87a54f055420cc7e6fa6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.22-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 3bd72168588e2b736207919efe0f6b687ef1ed5a57b89d2795d4494788ffd97b
MD5 99c820c24cdce53a6f0a38d3f37446f2
BLAKE2b-256 86475488747b4ec1baa9db625aa9a12a775f9ee99f723ca0cd596ee5ffdae563

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.22-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.22-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 27c266d44d9ef6ed768e9315ff80ad99e4528a8abd74bfcb8901fb2237eabd90
MD5 0754b50374ca9da7cf3ca30d653b4a4d
BLAKE2b-256 5d1bc47aad685788e3119730eae316de180d33af5738e1f50842aecb6961766f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.22-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 df0b37a8cc442aa2ad45731bfcb11e5e55c9858d2dbbebba62706f503b4abb04
MD5 dd607fc725bf9b687aeb38d4d9d961f3
BLAKE2b-256 f8a85e914c45236b541d538412aca063282546e19d2feaf7f219e4aefbcc3d17

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.22-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e5a8b29c1e954b0c56a36ab6e813428c334ddcc184bafd4df0e1d0c727bc0855
MD5 e4057036b8b8f87b7841b24c6105cdfe
BLAKE2b-256 c0cb41684f6fb518baf71df82a28e0c5cef9d826b54358549fe4b9ec565b6453

See more details on using hashes here.

Provenance

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