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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.24-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.24-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.24-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.24-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.24-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a189443860ce002a9ab45442e5234270c50161f2fb37d97b5bd6863b2cbec1b4
MD5 94d40e9e477abf81404aa7d186984ee1
BLAKE2b-256 f9b5d0f89f7cc2dcc03d81ab48342758ee3c652cc0dd9897d0eda2811dee8a43

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.24-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 438e061b233ac8f1a437a9a10e54b6bc293589f653ad13be74ae7120af8d6db7
MD5 ffbea447d45cc49548ae49d3704b61d3
BLAKE2b-256 34f4010e6ef4d67734c9780deaf7b5d1ad992feecb98440c1b2f72a7a497aba4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.24-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 4e0b8aff167fd394174775f5fab863ec6c940e28e721249dcd57f74fdffae975
MD5 3e2da1e3f4391c475e1e14e7d30f2332
BLAKE2b-256 1aa3d939aac7d087d545b8a9435f15d0eea20c38c236a3f46a14ba005c00f987

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.24-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.24-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 935e3265ff46d0b96a4696699f125ff39c0fffc2182915686ae664744b77c493
MD5 b1317feb6bed2e093a4b5237b3d07ed6
BLAKE2b-256 502d18607947b9ce0ac04b76a3d85cefecc2a87cdb81ebf03afa69175afb6d38

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.24-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 5a8861551594d3318813dc5ca0c0035d2c5849123097c9b813d99b6d70226c91
MD5 29cfccaabd76052326124f585fe0bfa9
BLAKE2b-256 750d26ba473ea64eb0e511dd95b7ca678d1da07a99243d04378fd83e211c59d6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.24-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 58f3ea596b00014bb1c01d7254024eb1c9da9d03a0fa9054b845ccc8e12853dc
MD5 16540f4cd9b6223eb37faec810ece6a5
BLAKE2b-256 b6976bf01f5ee91a95369af22cf4bbb956c4be5624aa5ca3ffc3bd446759e90d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.24-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.24-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1a063cf54ecfa82366db9d7aa43f56f49bb42253d87e4cd0432d4fab6a1b13f1
MD5 63c4a608795b67af39dee2e39c6b40a6
BLAKE2b-256 2304f87e9a23b88eca2b9cbf403af875cded49f3e2560de28d92fac126df7ffc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.24-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ba822622210adaf01ff7e2eb3ccb841ab997f79dfc294b3cedaa38846795ec35
MD5 330b3c4ff2078259b64cef9db14c321b
BLAKE2b-256 ff22d030226855c63f6cac1d57086943e1b3198c54587e3515cb2bdd9a4e3e7f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.24-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 799fb054bda8ef8fd2c56315bc7a2e842d4db267f459a4a46ccd756e462580e9
MD5 0a254dc7651c8285a6532dde7d390963
BLAKE2b-256 188a7d6f1ca5f1f2cfc1be7597f12bc9dc6df6083aba7de39fbd6f8f667fe694

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.24-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.24-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1c39f217218ab2a38152888421d9aff19e2f3f28c156a8e7584f991da7fd060d
MD5 5993d37e1062f5e0f00f021393aa3fdb
BLAKE2b-256 18030ba930af9a8df9c8412efb78988d945ecb8a586d0669371fb7d6aff52f25

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.24-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 d4dedf613a86c6c5b4db3cf12c4c76fff2a749d03cb3097ff31fdbb637d79f38
MD5 3dc56c8de2bd6511f00900992e12a6ad
BLAKE2b-256 991284a779d0fe3a9ad1fa658295178daaa6a91772cfb7e7c9cf104d46655a4c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.24-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 958bd85eb29c7db79b0b1daccaf510f6785dabdf96ec5f1bd29dac9edd28c25e
MD5 6f3f3dfb2e72990d22fec8c3ed08d963
BLAKE2b-256 0e086822f26890c6eaac3dad5dffb87bd02202b9a618f1eb5fa15cfad7476bed

See more details on using hashes here.

Provenance

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