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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.33-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.33-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.33-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.33-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.33-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 738d5e0a05b8312b7ce554d743e1eb6906e26cb158cfe551a97cab8910182c9c
MD5 7a43a5b744900ba69b3c7d8bac6bb80c
BLAKE2b-256 88dd01e328df73f158192c42a909cde5534e9b8e263c85993c329980d674d946

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.33-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 82bd126afd96ec63685ad9fc405fd9f367587f067fb0ad25d356d156c8a4b1cd
MD5 7605a3f2ce0f91238671576531fcc3e5
BLAKE2b-256 4bf31af33a182aeacaa38bdf6d946bcfd755b4a87c5dc1c78f38a4a8d40e7ec4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.33-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 fd74d726074e9143593d891d6785d380cc0c5345efb6aafb4a2dd097d4510b6d
MD5 a8009b22aef37ecf732bc4aef5a4db8b
BLAKE2b-256 a6b060453b2e52a8571361ba89c433ed0228ae8f73ce4a01eb945dfb7f971de7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.33-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.33-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3ba193d631ed632e66331b97ce714bbd8bee269357207ba49f65f27ab25abde4
MD5 7a345cfaefa5e0349aa9c9464eb79fd1
BLAKE2b-256 dca10427ced5f3c026bea231f96652fa230bade2b98c984c680c5ea251f1f5f0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.33-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 4618fedc4383afaaf2eb0d4937a4d0ac202f3a6726e773bb214611bb35ad9668
MD5 d0f62333674dd6385a6024395c9305ad
BLAKE2b-256 3dc715a2c44ca33710fadbd63ac334cb167909ae828e884fb740770f553acf6c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.33-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 df684fa5459fadfab331d1e3adf94da3e198704a49b4281b7521fc7cf788c812
MD5 6ffb649f1102757927e3b82225eacda2
BLAKE2b-256 fcad2b3d5b840553369fa45d4761922940e8bf08969e84440f044b74c6a5337e

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.33-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.33-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2aa0648d5e5a8142a0971e0fd73c76d1375e83240f1b5348d81f41667d477f7e
MD5 ac5bd3b61013b8aa4fa7c8d76f620229
BLAKE2b-256 2702c52ea2c8845ed0f78853abd3c9afd22ac064fefaeed6823e568c7ff81d14

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.33-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 eb475f1f5c8f8014604440e24a0f313891dd788b213482be780e30c705f9a946
MD5 d1aa75c9d756f67e5881862a80d48b26
BLAKE2b-256 0284b340220f7fd82352a4926abf86d1cf30b02dbfabeb187b5a672d6fb8406d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.33-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 04536d8e501b25848f72ade1a69cc32fa8763773df989927d0360361cd9130aa
MD5 44c2e2a43330b338079c301aa09bc174
BLAKE2b-256 dd77b3a98863d5daa8b24ac755a548de2f05763b8ff2d29cf1c4f0066633934c

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.33-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.33-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 60a6a5bdae6cd4da8365bb84e27d786b36c76c2bfe702459d729c9a2c81a2ef8
MD5 e417b2641a62ae2c7d14f53bdc963647
BLAKE2b-256 207834569c2cf38b15aaff037928a3d27e523a6ed36fb73bc5c46d9ac1ab152a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.33-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e127ec3c88d345b57591712639a89efa2baf23de2f929a06e1a1f0716e459b1a
MD5 03791f2b75d3b616f2f49f5441144ac5
BLAKE2b-256 91856f4fb5f99dc7d405e70fcd19dc3fb8b64006c1765d65c93523e0cac49f0b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.33-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 edca97b9c11c6ded928e216aec194732d362727479b8620eb0ddcd7090595982
MD5 71944e0206ad07c7eb06cd5269194e74
BLAKE2b-256 800610cb6703cd107a9f0c0604ba3f0e5199a5188c63eab43cd4aefdfcf1ddc9

See more details on using hashes here.

Provenance

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