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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

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

File metadata

  • Download URL: orbit_cua-0.2.13-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.13-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 892c8e32b48efc2e7e46c25afe54437c137fd4b8c841b3c5239c5f664a0018cd
MD5 76e7dd81a1a20b65cc8e351b58c4b140
BLAKE2b-256 fc107e63ce9c98aafa4a402d18dc3b36b70b5ba52c6b80523b10c2886a21c8d4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.13-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 21b84217cba673d47a1556750c7037a4f5cc0e87615d8a185000030d923f5f8d
MD5 b19da0d57002494a6edcf5d5eaae51e2
BLAKE2b-256 bad96da47d4aaf4b49fb98d13e3ccebb3bd68f99a8d75d038446bbd157ffbd76

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.13-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 c89b84b7b1fe25b0735e0ceb77df6aca4664d29f09c89c43231838a7b3385cb8
MD5 ebfd070be5a5d0c89f5272acf3b7334d
BLAKE2b-256 bb19d44c5090f1c22494a5d2fcf18d1ed1448690cd4987c893ce88cb2fba1bb7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.13-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.13-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 94373b26d75ed487993eb9a102b767f394dfa8656d41d25bab12d42e8a61543b
MD5 38b5c60d084632f64b25da82b32e9926
BLAKE2b-256 97df9d3e3b2a79811f9b61b6049b2290b8bb94ca454ebdc3f4a601d27cfc4d17

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.13-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 37337259149008f76bac720ea0a6cc15894a8e9edd9d1b56d7a239bb5e1db4d8
MD5 dae981f953a5c703e54c067b3ca61c7a
BLAKE2b-256 2d67431d0af87af9e2687b675bc9acd67261885487dd21e58e6f7aca50b55f50

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.13-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 4343c95457b98e6587aa39c39117c7b562f7392ff8865ec1dc09f05b3be92c5f
MD5 7a019800cda846f13d0705a92d422016
BLAKE2b-256 7e02319cccc2deec35663ce057842e8cff71ad596c38ae5937c8c641f54b6cd2

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.13-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.13-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2c4b3b4974068698dacac3bb7707e1ca1217262141e8f0eec1648bfd297440f1
MD5 c8839acb596352667e0afbc40b74a6f2
BLAKE2b-256 b99d7db47786ea7f5e47b0fae0a3634c617a900f4cfcdd1c081aefa35247effd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.13-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f118851e6d6435a1d6110296abe5e5dc05b58538d2f27499c6738a917fad5d27
MD5 6dc09d137b744b37781caa62ef78addc
BLAKE2b-256 d10135526cd8c88ab3a9b60ed10d0978d9ad1cdbb1dc6c22d91dafcd228fd953

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.13-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 3eeb6852919271b2c766a68e3f4d37d397228167ab18074176647fd7cfa3c673
MD5 8cc6f4285094e70f3740dfaa3e59b9fb
BLAKE2b-256 04fc9ecba0736b26260c7f453a84e0d6bd31385079f42bdcf406854c1e470915

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.13-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.13-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 97d18fba2bf98981e67eaa4244cd82c78ac10a988acf5cc17ce8e4332ee8bc8d
MD5 1b5721bafc2715d4f030adfd5cfe5860
BLAKE2b-256 36bdd6e5a8088132713fd12071dc92c991c1a9b13b8bc41d60cffdb8af42eb72

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.13-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 6649aec4d94f5e4d6f4317feb808077d314d8ba17eec8407cf551fadbd9c5013
MD5 5d72e3f91caabcfbd6d1d3722b33e7ac
BLAKE2b-256 211ad4ad8d1d44ad8c5928fc53aa0e6cd9f61f69d64fcccfd7b752b7d4aec590

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.13-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 aacbc21ec5d0fb41643f78e9bf7d2f23cf7490a00e439e91449f7c64ca43d201
MD5 831679784d55ca985dbd2f8119bc5567
BLAKE2b-256 5aecd0f4b2288757c20c7944bc1b733f71b263fb570f0dae4b18488ff41e0e3e

See more details on using hashes here.

Provenance

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