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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.29-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.29-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.29-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.29-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.29-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0e687a2d86f875a1d0cb405566410e38c10c260993e43a0305ad19f62c2878a3
MD5 2d9f73f1aa96a7288012743a83cdf8c6
BLAKE2b-256 0a6f69dda9ccf986483e16f07b00455de05d25b5edb84e2c75c67d881f74f6f1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.29-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 9f0e0a9cbd6c88cbc8bf6ed0df92c43051a8159e26ba1b4719e8bb5f1b8323ce
MD5 60eabf7ba1156a8c370ae78cf6a4d03d
BLAKE2b-256 103a21905a22b84b6410bd2603fe6a4d4b71adceaf3d8e29b0edb5c8233d2979

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.29-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 1b0386def6efe15a06b8135f74d4750f3563f06dca444fced5576a702fee106f
MD5 1674b2a4ee14c01a2a3b291af72c4ad0
BLAKE2b-256 fb758330af4acfbf5086073b049bfa485e63b729bc3c6566a65cdbb7c6551031

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.29-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.29-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3b128cf6bc9c201e420491d9c93fbb5979d386485c0061334559e6832b938fc3
MD5 d8a3fc9a530096f44838507d04c2b7b8
BLAKE2b-256 d0e47da3c9665332a607ba1c6a375f512c0b6184e6e812f22f077ce9d8e8d6e1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.29-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f958893c0bb5c321ac8496ce9e81dac7fa801ffb3182ba5443e51ac0742c9c53
MD5 0619d285eab54210d28aa6c4d28c29ce
BLAKE2b-256 793ade6855efdc9d2b202291176ab592501d09cc70d5304273cf04dcbb1d3e05

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.29-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 adb120f5846e1231c5b4328686dc5464321ea1d1e6704f0a642fe338e5048286
MD5 49ccf42e5cda46301669fa01c94a5a34
BLAKE2b-256 064c1ba41b7bdc48875ccae4e443605fef074eeb0105f8bf086bd66ab579b057

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.29-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.29-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b147bce18cc8d651c7dc644a47e4252e0f8097ec4261d80ad4e2634bc10aa41c
MD5 f254af105ed7dc42f1ce80e1add56658
BLAKE2b-256 52ae4a4a34f1e231aa7c0060b0b7acd4ad117bf7f5ead33b1cf9d03cdc43ea4c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.29-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 fb828f0d5bd5f8dc018017237d3035af9211ac192f2e2c44d9c031dcd4eb01fb
MD5 246c1a750450a91180f52c651bc07985
BLAKE2b-256 8407e644f421bcb77d90ff0889a87f1a285d459bcdb6e4d6c1a74944235de4c1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.29-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e50545fe2f17a844f3202aec4e701d0bb36437d23377d8936ca2ec4b463d8f50
MD5 44586f6cc1ec85bb4f398370d6e5a8b0
BLAKE2b-256 a382a284295fd2a16afa80082299dd094ed8c84953a57c61561063530b315f35

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.29-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.29-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 1ea38cc3a93f0f0007290366f8c5a1831aa0c34d054abdd94f64c61f5df49bd3
MD5 8fd0b70836895ba51d9b7c09ab0cc24b
BLAKE2b-256 c1e51176033a9a12941e7c5e92d1bc4cc47e7b7e7849a1ca294ab7e66b32b988

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.29-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 05a63373fbcf48b4ac1b7b3f29a86232c6e4652d0f9f54cf31b14a45e7cbaa8e
MD5 e2f636f1cc00beab80f10cb329ab3ae2
BLAKE2b-256 2bf7e28e501cc25919bba07388115ccec93b3135676b78f220dd534193e94d50

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.29-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 227d44ecaa477939abafb81a93bb7103ce477c577e0b138b9fedb1079f130b0d
MD5 153763a7a0445aaa9eade14906945ca4
BLAKE2b-256 1039d4e50b7524214606ad26a26129cc3764fd3b2d70651f3f1aa296cc9ba4d2

See more details on using hashes here.

Provenance

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