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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

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

File metadata

  • Download URL: orbit_cua-0.2.34-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.34-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 73912c8bbd2bf1824876023550b75dfcb7178285b18ee6afc10307d74f466a91
MD5 8dc29bc729b96eace8e74b0642c6eca5
BLAKE2b-256 2866b6a32f6e30fa2f87278ad570ed3a6f26ca4d99cbe1c5694d7200dde69622

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.34-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 348a708548c3d6f304d3072a919ad313fcf2170fd5f85282be2a89c406f95125
MD5 8f2a2cb85c49a77061d10d55bda9affa
BLAKE2b-256 a152421af36d01157b12469b63a6331abc23108da2197e37750758ee4421f7af

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.34-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 3f119c16298aed76079062e5a1a7d38df09769e195b14ad0ac53215b35e0b7f3
MD5 fd26a1465f8e2b3b2b07a4c5df28d51b
BLAKE2b-256 2f2449ce26ca37aebf23ee60d6823a6693a3978677f67d9e84632339aec356c0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.34-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.34-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6171d5172e50bbd78989e57f90e6bb1e85b6377d870b96f67a16a7d9c6f1dfe6
MD5 0c808c00ebea2f77be4915c539e155ba
BLAKE2b-256 85ff930b25d0ee3053abf06df4d06becdd4ee6c222cd7f78010465d0eed6bf40

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.34-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 0450a7f2a194766cd875c8d2eec8158bd653facea99741ca414e78a63e162ec7
MD5 8810d4080cdf76b4d15446c99ca25b73
BLAKE2b-256 d83162f8a4633252403ebe13d25d129e49bede2efbbac954b383644c28948d51

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.34-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 f011f8f658ff4a7d978144f955ed4979efba72f11a8d3fa465ae4321c4c85638
MD5 3666f29f1c34403f2ad51583a0419936
BLAKE2b-256 4a1e1714c41ccbec24fc12f2eb4fa5e5e4c40e8aca8609cfed14b0f55636efbd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.34-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.34-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ee510522b53c83ac301089681f39633c79d5a6ea1ddcac6f60429a55cb3200ea
MD5 8a3ea24f69e4f4af25711f26852d110a
BLAKE2b-256 6c7b72f59563d569234f1f0775b72ed032e0762e75f816c46927659060e870c0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.34-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 88042bfb4d704aa20dd04b3c34a36d0400bb904840aa1da3cc8b96b966acd636
MD5 2f56cac7fda7e50e1f7c81521954daf2
BLAKE2b-256 ba454d8ab327f37b235fd2b475a129b1b25b806e0377087829eb7b6c7767c1c2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.34-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e519ae0b49ad98bc8419da7dc6695e38dd95b935f763aba297ee9827012ac57b
MD5 5380a96987bade024b85e8a1fbc17233
BLAKE2b-256 1b2a0134f2b198dda075a687bf398b3df09586b0d78209803819b48fa4fd6da3

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.34-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.34-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 db19a12a9dcb0174495206213055842ec4311fd40cdc5a0f7fd70308ecc35edb
MD5 8e655ce00901849c028673ac9fa7d810
BLAKE2b-256 de9d0c86ad83cf89d6891b9909590fb63f380a68c15448c7e645e626db368651

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.34-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 d0944c05b5d9b4354d8d4c1e5acff8c75c9db4de7ca04f9f0d6426fd73b198ae
MD5 df80a782a69d5aac217c329a22549d80
BLAKE2b-256 e8460ae46f59ac07b23e62674346e0e3953d1a822ca8a9d99a0dc6a02c10ca6c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.34-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 5a14a70707c2f4d281c24bc2b952c4e3820a04ca0010bf43e3dba4b3089d0436
MD5 5e389d51e2ebea825e88f8fea3f21875
BLAKE2b-256 5aff32988a2bffe6926da7d645f5b3b90699cb858bf323018df0e9126a585b0e

See more details on using hashes here.

Provenance

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