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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.10-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.10-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.10-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.10-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.10-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2cf58a75a38eac7f2d1a3d8f4c19c7159441874bd42dfdb5cd25816d8792a4c8
MD5 59568acce18ba700255eb094ddaf3661
BLAKE2b-256 bc168bd48cbaeb5168d44a48b29d96b37e3c663e86cff1469cc476265fc38aeb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.10-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 a8ce16426fa84b06245346e61c6c93ab55b4d1dee91555c6f065d751ee4abdcc
MD5 6e7eace3e556ec45374d04dab4e6e21f
BLAKE2b-256 f5c9367eefff3d176a65dae0834068d7d7c7241177ceca4ccd2994fdac4d1629

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.10-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 c81cec06260ba0935428374a819e6c44471b2f17b9efe8a772592e200ce993fa
MD5 03e91b3e2f78d8f25ad2f1f5e2cece13
BLAKE2b-256 09788ec3554613bff6b483a5b6b350dc536258149c77f0ac4323890b19b09a8c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.10-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.10-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c3f096f74160f373587d185e29e5515468b3250c7dc9ebe3e835a36ec6f45372
MD5 d2eb21d84b498d241704d5a0b6147aa1
BLAKE2b-256 4fb7256c143cbde77b37acbb5e0cfe22d350bcf0779249dd2f8b8ef90a87f1e7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.10-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 c98656922add1729ebedcea8d62927f106ddbda817bc73fba30615a8e7999a78
MD5 2aa211862b486c886bfe923bf0bbc91a
BLAKE2b-256 030b281d9e8227510d941afb7f8b3e4b8f7824a0ac92e094cc07309c9ca7d7b3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.10-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 52ae66debd4473a1fc3eee6a85a6bca003fdd2a17afe6ce532992c4cc543c93b
MD5 313da85032f524e22f2ec48d2ffa9ca1
BLAKE2b-256 c021992a3450f716de4b37c6031167677b79c4e1c9cc62274050a661b731c651

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.10-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.10-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a4e532ab3a7b885faabd0e82673de0c531afe1a09a45a686fd3382a02f0e744b
MD5 0c4335e96e8901b93e7bec49384ac66e
BLAKE2b-256 848f86ba608376f3d589d17101e66f5abcc0aa0714e705bb00f7cfff7503d2ae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.10-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 230773cc1881532f1cb3dabdc659428eaa90ea4fe4b5d4277d741942f29a676c
MD5 30b2cccf3fc95aadf9b681bd15bf3168
BLAKE2b-256 c705ea44e7109518123d52968e8e1a4944d8a28bbcd9b69f02fbfb6bf8500476

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.10-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 ba6fa6a4084ad1b3208eea4e57235eb2066ec573907608e22382b897f2d973aa
MD5 f2c0ca077685a77b4bb1bb73965dd3a6
BLAKE2b-256 c3be555724f6103748ed2f244ecb0632b25bb98cd1cb53b6a340ece8b16d0775

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.10-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.10-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6ee25afa203a040accf0ed285ffb826d7a901f0227b16b8e4114cf5b5b0ac6ca
MD5 dfe4439b688a427d742b21fb0ec33fe2
BLAKE2b-256 4dd731fd87f8780ea8c82ef5bed94d6971c4f06fff0f93c7de6957e2f313f460

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.10-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 56f535bda5ad394128e336717210fb571fa5bb53780e7ba7637dbeedc401979f
MD5 e72952c2d19da0605a18769289f648bf
BLAKE2b-256 88ef31ca2febafe9bb719cfdd19ba2f361e701e40d510e85a353e9f8e4a09969

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.10-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d80f0cf24e1f1571b1a41cafdff58cce305488a2479c497b782e3c5af5aec565
MD5 3da0f8023bf8d7022f12439ecc8d6d2d
BLAKE2b-256 8f79b7bcb89d1557d6dddb35bcaeabc80e503359bcb988e80abd8acf1395a1fa

See more details on using hashes here.

Provenance

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