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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.17-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.17-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.17-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.17-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.17-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f63df877c811a9ee1f0fe40e4cd23933b2014a3ffbcf9c3cebf6e6b745b2d196
MD5 a1b0c37ef3328cfc6e99ef6a988a10e5
BLAKE2b-256 8711bcb58e7604ed31e4db56a90d251e51784b8e2c203b2976918f02a6f92009

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.17-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 367f98af6670f4944adc18b996cd67ab40b2863d38bb49b36a5908a4d6bafcc2
MD5 a0b49e73401ba944c9e9d9742c50207c
BLAKE2b-256 4f686be55efe2d5acc7d348439b504e4ef6d17c3dfba34190698fe275e53a4da

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.17-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 663a6ed8fe5d4776c7acef1af72cffe8accda74549a2eef95883eb3294811326
MD5 921291484bbb6c1a652cd07220132453
BLAKE2b-256 291a08cf7cea0dcf8f3fe06fa870bfb3f77a2b415b6b1a0c78885e2b85dec956

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.17-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.17-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 05033c89a03bc52ab5b30bad992665893d8e7f7f04f99d08387cbb1a93335299
MD5 2823f2a5afba1505f6493152f85c4b31
BLAKE2b-256 1ff24d5f1d7137f453113a2dc505faab5624bd5befe7d2d37e9233475ea3b301

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.17-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 cdc2687b37195e9fa89de4262cdec9aaa0001ecaef89c441105dc7f8f6bf6994
MD5 056aab9a0b4d5d3bb06584da5c6cd89d
BLAKE2b-256 83c9072b41bdd58027a0ae86b9c64185ec339a1db46e82dc65a515d604290828

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.17-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 a19c5a31902c0fe52d8386201d53e4bbd5b2dfcb6752986e1ae20ba3ced4ade3
MD5 faf02051a8330e3eb0b7a17524fba166
BLAKE2b-256 79208d293d7c07190fc4894772120a4ed11f25fa6f5e69ddf6fb9477d03b367c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.17-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.17-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4c9350b1d209b4382da84299b4314c729744736ce7f47e5ac413186c0dc09c9f
MD5 48b86557e07d988a11d9353973b874fc
BLAKE2b-256 63bf649b006a955a48a84bfbe2c75bb5c77950ed44472a4b8544becedba121d2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.17-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 af2242bfc760acbf7f5ac772aa2881057e9b52ec0170680e70be3238ed33ef11
MD5 1d813a4e194243dd633e8914a4d75825
BLAKE2b-256 443d082b3341e5938f9cb09e142d0d46556f8f563e5bd7334f7c7a0da212895c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.17-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 efab4988b3d848cd81b187537ad3911f8c0cd057398756ec8794409aafca36d4
MD5 bb3283a15b276874083a3908119c8df2
BLAKE2b-256 8238e6bc7d66ce7a09b31b4f2405e748a59e9e7779b11b15cd3669cc420ba6e8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.17-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.17-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 467481da1393a25005ac76fd0ec691c187fa92f8ed9361606443a334afd9e5bd
MD5 e3a6d14b0dce6000fce01e1fa033e0a9
BLAKE2b-256 681565d3e327ff5a48e9931afb4b70366ae66aae677fd08c8552b8b6fe81dc2b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.17-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 62dfc601becb1558fd447d97f4d18bc395f713866ce08b01ad66c6941785fd16
MD5 4f98a6e4fb3e69b026d7a56971d16f5f
BLAKE2b-256 3c67eaa830ceafc08739f93dea90338a136f6983a0d8d877da6001a30ec2066b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.17-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 932f28edfdde4076d5b428287720e270e62e9f0a972226f49fd8e2beaea27e56
MD5 e11c1945db66baeb0085c26da4301a44
BLAKE2b-256 0f6dacaa4e7043d1c94baab762d6f4be89f625d18a5165a7599639034dac4773

See more details on using hashes here.

Provenance

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