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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.14-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.14-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.14-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.14-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.14-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 09240e5bdaef398623808df599d0daf3c8b91f653fc92593d6001326b1833d95
MD5 5c0d3f44465a4301406354bc9bf97fa7
BLAKE2b-256 d22354eddc73287d8450197724978e6b279881e0175ced8036f3a9a4f5de6109

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.14-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 15b2fac51646d108386ead39bb86badf432a2ae9d01c0aac810a3a20f8a7b1e5
MD5 1de7d6c773f828d2e368f0a640367fdf
BLAKE2b-256 ca740a485747db6aecb0b0abb47df2d10e2a56397b16acc74e176df366b28ae2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.14-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 a2d00921125929214b5e677267f403a2f5c1d834391c657da063f15e18ffdef9
MD5 a38c076f4b7ff126b09004e6b128fce4
BLAKE2b-256 1679917c9e3a0eafe40bfd6f963b73712ae6ea4d6e6063b1fba58160a1e79031

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.14-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.14-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8fb2b6cee78e88f7bd13ccde955659b2887cff718e45de352e7a05008cc102e9
MD5 35b95d95458be2320743434c8c57ef0c
BLAKE2b-256 c9be806cd0dccf5e57f5bd5edbeb70c3359e39cdbe92d77531277fb0f10e879f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.14-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 d7415de39d52672f3da6f1c649a87d11c92d4b2a880d9ed7c43cf65238c9d841
MD5 cbad4a8ca05b19d0916bb36e26028cd6
BLAKE2b-256 666386a7ae20807e154d353a90a7d53d4ccd738ccd59b1e9f49efab8c4b6ceef

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.14-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 c70001255fca78f1735c9115a8d49b2c5ff6560810ba302c4687ef740cd1ce1b
MD5 70078fc80357c28b593ade8b909735ec
BLAKE2b-256 7d204e6b26796ced82aeea4054e9337e8f00c03065fe7c7173b59dca92932a54

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.14-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.14-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 dc0b73fcefa41bffd2d893febc93d4f4bfaf3c0b9173cb69217588e56c8f8061
MD5 32cd2a0113b700f5d069f353f42c2579
BLAKE2b-256 a23d061d8e2fdcd13aaa3205075cc3a5eaad9f772b82aed3f25502afbbf8d2cf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.14-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e79d378c0e680cfcaf7748bb3e47b22e244b70356c7c9c3dc270be030257a5dd
MD5 6ec9693f4010579da6e3b1aebdc1bed3
BLAKE2b-256 1f88e96a7bd9bf5e4509999d55b4b6f648439cff723bc3d676b1022a84d1f2ae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.14-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 5137eaed8e48d6e609cc2c60a90795374e6fe6ecf06f9e71801c379e3225a245
MD5 c59834abcd5247dfea9d1ab42402de82
BLAKE2b-256 363bed3427743e684847a29840f8ab49b3142bd93dc20cf2638f87cbe2b3ff16

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.14-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.14-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8b643369021db62fff3c1451ad8f9147fd040d86e4dd07c7a160ca79177c537f
MD5 b8a547a5528d8f845f24e0088f20fda9
BLAKE2b-256 8a24719f1f897dfc48e64dcccba6b78888f19081e0c8159ce2716fe38d913e1d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.14-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 fc5e133081035c6b21a9c9ded2aaf750673ab653e98f9085f0dfc0ceeaa738a1
MD5 31698a9617d4c3002a9e95cd17f15dae
BLAKE2b-256 f835280026836f9ed14f1bc833f53374dc555fe2dd0d433f88b484d09e0b0ce8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.14-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b959d0b3803743407d7893ba0247ec28b1567fdf43085affe94ad084f8e29afe
MD5 6420f3431983e8f7d49c737686096fe2
BLAKE2b-256 2af4f10c83100d8ef2df63464d6103d075cc04f8267270324e1ba804e951339b

See more details on using hashes here.

Provenance

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