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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.26-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.26-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.26-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.26-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.26-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2723ee7c02e7747c2daa86c01ba9530b109dbe9aa1cf5ffc3f7921dda72ccb5f
MD5 c1969c43676f5c53250c582f58da0fca
BLAKE2b-256 2d4712bda470d17eedf929490e47106fef0786d943667ecab83140ef6c9693e4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.26-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 82aa688c10ccc30c3bc2a449783f8ae9cc421c8bf07d231f0342560292b740bd
MD5 bc562255dcdc77895d7490cb23eb9943
BLAKE2b-256 bfc939539abc6d930756ac23f9b1a2b86d8d08a1a1d9c2ae3877effd59d2491b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.26-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 899d148bc4241ba1eda1ccd9c370dba3b057acb8ca89b310a4fe748336778fa7
MD5 943bd881dbd10264ee800954b8d85147
BLAKE2b-256 d914bfefff433cd2aaf3919b3a5612e8a163ef3021d1a72a07d75aad45e1ff39

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.26-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.26-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 b4502be6f5cbadce2de6569a990cb0fd493ffe7f40c50bd79c7e6b7bee8bad0d
MD5 ceaec573ef0b73b2493a32fbe19dcb4c
BLAKE2b-256 99d994491cfc9965020bfef8baf2511af0f8b6a93bf3747bcaaa2603a31b5088

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.26-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 224b7a53a77521a0919f6b7e2a755187bcc84d36beff447250eae9197657e54b
MD5 e8671275ebe23b2e7a4abc023b483848
BLAKE2b-256 0a9e6c3cc7ec6ebf1ef8832de9343f3ec9cfd2bb384c0381a3eabe3f23f62c0e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.26-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 e08d6f49dde4ed5f757ad91aa03c859f89722991af8045ede08cb0a1c290781d
MD5 cd6f462d4b4f2f57cad762d62c23725b
BLAKE2b-256 d4d231f8b0d8dc46b22090b0f06ae3646e74f2e5d905305236b22c650dbeadc1

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.26-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.26-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7bf0bc17dc1c348717d6ad5d587f3dccc5a5a32faf101a2d12de11a391dca27e
MD5 e235bcd8ae753bb97e5eb5e9cbe968be
BLAKE2b-256 e599edb37cbb4b0f46a4e2c2e893a68589b62d5a296f4056be41953501d259f2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.26-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ba3d1938040db4d02235d042d19c662b4dec5005a0c25377de862f9815270e34
MD5 6e1f4265c64887bf295c188376e0e55e
BLAKE2b-256 1b24ae7d5f690f0e208da53d9424e0a03aac28325492ca7f7138aa335cb4876d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.26-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 488f2ef16a5b370c906bff6453d3146de52d60766ab009d1a1d0648ceab9cf59
MD5 dfbaffb12ead5a076274179429f602dc
BLAKE2b-256 8c16070b435b074a8aced0a3acad66dea27112fea93a66ec29d866c4e17fd888

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.26-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.26-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 5732de3384b8a063939dbe38d3495c1141dd7ec1dc15b47ec5c26630847401fd
MD5 69fb088add4693d65fc7dc99bda4ac7d
BLAKE2b-256 223ea747c94f6f4bc3b44710aec9e1e66b6893ae1cf57f03dda3eede9480eab0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.26-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 c72ae2417e71b9bdb2770f9e55de66c022504f431611079dfb1525b1b7efded1
MD5 fce8dbce8fed1399cdb108ec5caf7704
BLAKE2b-256 c24566e51ae9811abc94326f864635700c8d5317494f33e39ff52dcfa8585c4d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.26-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 11a49ab5cef9c0f1f18e65ebe8095c370da1dea7deba294a0daf153a944c8971
MD5 61931a3e39a1d9e3d5f8c8f896c6fed0
BLAKE2b-256 fd57c2699f4189adbf7e1a37f3d6ae522b59effcce27286a4144def135ad0f13

See more details on using hashes here.

Provenance

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