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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.11-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.11-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.11-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.11-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.11-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 fbc435b6f1044ae7b7c7ab92545befda57da9ee9967feff632980022844be592
MD5 595e45c962acd1d95518ad9364aef449
BLAKE2b-256 8a1b653a15bdd5f22bfe3c5ea1cc529bb0b1ee979c4b290b940883670644ec36

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.11-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f40c8fa33113e9fca3921d536a7df16c6e67fc0e1b933cb69d96f4d088f17b17
MD5 72df8d46ef3211fcc243ac6ed13fb287
BLAKE2b-256 0772dbc9907c8cd2af1bd2156c4b0b1e49843dcb5fff9a6d62ab8a6aa236cec4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.11-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 2eb8b960a142ed199df9e6f8a93163a3b4f0611558bd0b4c061e1df4392fbc13
MD5 179943f7c27d82d2a450d476102ff615
BLAKE2b-256 d898f51ada47f744641d8c1bd784f16788fd90235d43b9281ed82b32bc6353ed

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.11-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.11-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3f6dccbe9d8d21b7c6695905b00b96314870c0d4a1ebfa4bb1d1dadb0ab00068
MD5 299a5dc881a66b316516662f159d97c7
BLAKE2b-256 2ee0ef1edf9214c173f09ea6e7067a88cdb70763f823b15889a1985a260cb7c1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.11-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7fcb3a451a606d189453e470b47f3d623da8ffdbcc92bce7cad4c09890b4c902
MD5 a86fd8872515944579be9209adffe231
BLAKE2b-256 b20b01e500ebdae7c78670898faf6b456f20c024cd7b7171fa1bc84c30c04ddc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.11-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 6928877e286abfc084b6b660f5afd572a5807a1420f61258b175ee9d41aeb04b
MD5 da7d84e1ea19ec20ad741f9639416a5e
BLAKE2b-256 6400ebf09e8406c1c0ed3ee0bfa56f3f7df8565a20d3158fd5984e4ee15ccfb3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.11-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.11-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 897083ec834cea5f727fd2fce1ee77695eb409a149cc5cc91482e9ff2fc5b5d2
MD5 441f6cdb0bb0eb30d5a748b58f0259d3
BLAKE2b-256 28e51c876c21f431ec3adb8ccef0d413e743de07a2e1fe1b56eb3989d34fd1be

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.11-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7b1c40228948f2fac1abf9df4ca86d63fc9572631295b974f49fcd0601c55ec9
MD5 d9a7761fe425403346b43975ecf7532d
BLAKE2b-256 73cc3dca27798d384cb1cc43f47b7b7cde3e743716e51c0f81e4770bfe787da1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.11-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 1e0d4074e20bcbf548000ce85532f9e0d5f8d44cf9e97175e81f8759c8635586
MD5 3201b893ae3412fad49f8e08578d400f
BLAKE2b-256 f12942ef15874e8c672a1ae9c5815554ab1912d60d19076664cf950fc5d16552

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.11-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.11-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b9c38134511997562b43901c13e7b2393767e1d4c877760ad2b3f39792ebe72b
MD5 7839053d62fe3f5f287912703d7111d5
BLAKE2b-256 b688c9730b371ac25e07556b9821b74594514b2d500cc1adbb6f0104e452a3f9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.11-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 addadb5e0649ecf84a5c11d09ad1e3a7e9dd75cf130f6fff039b163fcebde5f0
MD5 0a1cacb713265643274c75a8f4bc8057
BLAKE2b-256 162f72f2419a3812468ba22eeb522f12de338870a2b055f104402d0d2f63272f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.11-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 0aa79a54af2aa19d943cb4ed32e655453de3c1623c62bf843cad5a2c580e2800
MD5 d5b72ab30e3c226665913a3adf904610
BLAKE2b-256 cf1616329f6429ab2a5f9204842999d239c460b02b229168f05d144f9ce8c5de

See more details on using hashes here.

Provenance

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