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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

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

File metadata

  • Download URL: orbit_cua-0.2.35-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.35-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 eee84bf42ae57154fe6643e9664598eea3ad110b75e0c88d077df28a5f0b750b
MD5 24d3d513b63c351c7352815d4d6a4b99
BLAKE2b-256 55b9727d6e2caa66612603bc9fe513587c3a49b5c0504a1d4691012931abad04

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.35-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 31a702d9f5d292fd40e47d38f2eff12708cc1134460684aa8a97d88f8bebc5ee
MD5 bab6269c87073578edb9fb60c6e970df
BLAKE2b-256 4c04a6935049c2c4fded062adf8769332750ad3a5f9fe7e231e93f179d37229c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.35-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 e064c8e41b4f57bfb5e18a5f5acb70230c173e5762fe81d3cfad2706a69478e7
MD5 396c269ef433e6b817ce51eeab5ee384
BLAKE2b-256 04d9e9b56b231dbb7ba8e1fbedb4ae20a8175fdceb1e27f66bb19a4bf8294dad

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.35-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.35-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 8692c6e6d64b9ce6f8acbc9ccb0d3b79e54849cb0b0a3536564e2d8ef84f2a97
MD5 bbebc245d7a51df5c67464f7d8e34917
BLAKE2b-256 20b4980e59103ec12dfd579d7ade64be5b293f024cf9ac37c8863b07b6ff8cd4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.35-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 9b9815c75fb56bbef1778177b4c113567f8588e1fa68478ec23c2ae7d53362a7
MD5 d9ff95d446c2bc56955b585eb13833d5
BLAKE2b-256 0ce8e3bead18dfbe56fde4b731dceace1b0c0a6e14351e6859cc746f8d0d02ca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.35-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 7f0350072161e89f88c89e67af40fb851990aa8eb8b89702bcffb41a06801b1e
MD5 704d75f013ba76dff98632acff5bed5e
BLAKE2b-256 a6b1a060c44a1d17041e3c7bd7e25d32de6b00679986d74fb87cb40bd96bf6db

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.35-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.35-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4dfd05a02d298ae63d7f2008c11d5823e9a517a378d925e8249c0616db64b0e8
MD5 0bc7e0ff304d46ea6668d8d28392ec55
BLAKE2b-256 c9dfac47d58d609396d5487d215faa9d7fc306a9ee50f7af9fd4ff95950484c8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.35-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 8646daf0638ae2bf1f5c44da8650fde921b354b23c97842711730c9fa2a1f056
MD5 00f390bd173226f198e72210d77da95d
BLAKE2b-256 f64adc25ce4059e3373aec5370f80789edfd06eaf03f9e11e8403668f9848fd2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.35-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d836918cc34c56466e7752cd038d8583031dfa5995f2a1c769c8172de417b1b5
MD5 cbe7b3a5a73c1fe35fc5c5a64ad9b17d
BLAKE2b-256 78fa86f60ce2d97e1675e9f8e8887cb473fe4af63997d2360ef7521b59021ed8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.35-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.35-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0b61a1d289af9cc0150d16e510c23249aa956fee49dccca7ce3879e405645d81
MD5 1ee19421a1d500d28a5287236ebd81b7
BLAKE2b-256 c029fa4ce32862e83225820177c8c7ecb979b37a9328ba0646f8190fdf287c30

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.35-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 805b190393678a20fc2e46b2110448313802d494fdae099a0756a965f4d21653
MD5 4c762b1ca1434a3874cad8b93779239c
BLAKE2b-256 8afb35972291b1607dd63ed3162b63b12a1c733bf342c65941f0a716ba3cd015

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.35-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 774b022140f39c0a46f34649ca747b6f6e66e8ac5ec730b5908d4ee445cc00ca
MD5 1491a99715e3da238fd8e0ce76f049f1
BLAKE2b-256 24c69d7d90d2d4f799fbfe3719cf5ea8c73238c31f79aa69568b7fe1d253dde5

See more details on using hashes here.

Provenance

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