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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

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

File metadata

  • Download URL: orbit_cua-0.2.7-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.7

File hashes

Hashes for orbit_cua-0.2.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 aeff503f74b2cff7ce7118b88944016413a2f097a138586a2c8fe1548071aeb3
MD5 6cff0b9349389276f88abb7d80ee4237
BLAKE2b-256 47d65e0239fd994030a92e72fc9dcc69db1422f0d2db8c699d255e0f568a6081

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.7-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e2ef3015d3c244e19f64977f6c668185e466df75435f3dae7941e06085841e36
MD5 f58a2b2b33a21f6e0e5a2bc13c407b34
BLAKE2b-256 de64c7fe1b4305d565c1e101f75fba4908ad54b39a57b442570a625eaf3e9808

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.7-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 3eab71a509c5290392b51690e3458506d0c7db37211d0af0973faf650a10e167
MD5 047dab7660d3dec8d497595390cd7e9c
BLAKE2b-256 112a826025b74ecb91c757a41c44cde9a278281bdefe8dbe301bcc5cbeaa74f9

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.7-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.7

File hashes

Hashes for orbit_cua-0.2.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 97369f777133c1db29653fffd71ef356d65da3e2bfff1fe7c3a2aeab57b11c63
MD5 2787c7c530623561ff43b0d7b94a3171
BLAKE2b-256 412900be2dd60b996f79ca359bf71d4128a8eb197e9c09ad297246490ecca623

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.7-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 55771204afaf803561feb773330f6ee7b35c2d0e0c8ae59c39232db905a4206d
MD5 9d60dac971605140c40db0f9498398dc
BLAKE2b-256 b57dd1e32168b17fe107301c8d8647b34a3b1b0a58f631819eadb900a61f662b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.7-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 534987d0a2babe5eb498da0e5b4e3314e2b758845c3ac4fdb8c61a00df4bbaf4
MD5 e45bd992a888d67140297961c5fa27a6
BLAKE2b-256 d33aa552349a5f24870f899ba9d3e7727c4510d606784ca7d0b1987f26033633

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.7-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.7

File hashes

Hashes for orbit_cua-0.2.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0f237787600535bc5f2f2f74ca6b2858fceb73ecd793aa81c7c897df385b1436
MD5 185f6476040d997fc15f217de9e15fb9
BLAKE2b-256 a324c171d786152f3ca802b40a76cbf08512b23896fa54cf52c7e93247732e3a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.7-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 03bf13b66439aeb88580e9f1eb65ed3ffb37de9eeef6cef60e53b97f5de5ebf4
MD5 27f1a9c795d9a13d8914c6c833ba0fde
BLAKE2b-256 1b96182538325d0d5a75f9c513b4e499eaa27827afc285b55805177ecfbfb06d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.7-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 518551b6f9d25564910070dfb5ecfad8661b737140985c456f1bb7a61968768d
MD5 28a8724f8032ba1db26f2612efa18b37
BLAKE2b-256 549789281f753b9a2782bad2225a2d234ca03194abea7c973e4c52ebc6377165

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.7-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.7

File hashes

Hashes for orbit_cua-0.2.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 34c9fa225bcddcf1813268ec257e7d5a2ca7efecbe6d2ce29fd8d1ff84a76692
MD5 d4b8c069e4438168bf56a06d6fb1f77f
BLAKE2b-256 d7d76bca78f63b1fe2d6ba561b4fc81f642f1e99c8b8f85d742a101331613dba

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.7-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 c4f34252401e25fda99d26009a78e7318cb41602e76adf96e468c04466e96ded
MD5 cbd2815ff0d3f8de2f5adb97e87cc153
BLAKE2b-256 08306b8d34c6b48c8d0a360d2248d261656a11f0f2afcb716a812c41c0be1eaa

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.7-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 578e6e1bae695dc684bf9d2df20411b067dc57639f1f6cdd113848f1c22a8690
MD5 85772d8a17b001f26e8bab8d739847a4
BLAKE2b-256 370c5d562f54d6b8748eb270d7424ebba3eee5033e297e1a4a6ea72125e268e6

See more details on using hashes here.

Provenance

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