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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

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

File metadata

  • Download URL: orbit_cua-0.2.23-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.23-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 8e8c885c6a0ebb632c577731d98d77221c3423b70d261dba1ee62c29aec6d8cc
MD5 341645b7c0ec7128c0dac18355521972
BLAKE2b-256 a416d7e198cba9d97b3a43271df7fd81a2d710e6a5e8bb14f6737dc28c6e6550

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.23-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1a55c3b7905917982fcf7a19c6e009a45472231f5af51bf73ddd5db289356a36
MD5 ffaf86bb78258e530d38779dd71bf938
BLAKE2b-256 d2d68a4f374901b7bad5f09089eee2af8573a5e4609a5dfe7d220a4757e03a9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.23-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 6a3fc6baa7f5aa07cae0947bcea4c4ff8bc3260923aa8ee7e457ce8e5ae69191
MD5 0253db63aeb72f23b155bdb2aa1c40bf
BLAKE2b-256 4e4e090b1d428d3c0124d5c00b0267f23225dcda62b8acdca108bcea3d0ae75d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.23-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.23-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 525ce1c7e05037c597dd00eb0691c6820dd87c3b0c4de74e7b8de0dcb022503d
MD5 8022986086cb39b6b46f56bcd55a57de
BLAKE2b-256 ad16bb80f528b43b3b04e49a7266b5fb07d5c93ad808458d221c4fa1b5befac6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.23-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ee1052f5f4f901b04803d0553d3747109d80dbd5b5c636fb2d317fc3c8663bfc
MD5 99a4c94057784ad989a47de7aeed214e
BLAKE2b-256 3f22ff4e2db5777b93224fec50f3e460d312ba4655e30aa6531347fe9ffbce9a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.23-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 81c3269af37e10a9aa703cbf11da205778b194542bc87858816343bb04b644c3
MD5 1f23afd6bfcec1f820bb43f7cdae95a4
BLAKE2b-256 58f13c00ce55dba00d5ce180bf18488b3e5dc1bd9540d84fae2a6657933a0c17

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.23-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.23-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 417c7faaa24a5c7a583a25206f5cc6af854fadb9db34994e9e03235f9443e615
MD5 0bbfcc3bf56da302b30fe80fcb25cd6f
BLAKE2b-256 6b6b9f278eb5ca9742174dbdc72f113576b3da2cfe9d332f756d80e68bb141b1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.23-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ce63b9f14198a39e807ba8bc48eeb20f6041f9f78ab53f1dbe8d8e137996ddf6
MD5 bae3f873587b032f2c3df0cdf25b2f65
BLAKE2b-256 28d61ca39c266ecd7b0463d3e3f67047825e7ec5eb941779f0b2f969e70b78f0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.23-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7151aff616a3ec36684456d218c3e55fb9c754f7c0d31ea583c3d09bd6373d3b
MD5 3c2c0f1be4c89aa83c480d63466bace7
BLAKE2b-256 91c16266288cbf3bcea48bf6a3f923396aedca411fbe433f810d3cfd1708d84a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.23-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.23-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 bcf8f444c035f855559910f48bcf80f2d465d7b5bc36d693cd01246f8ea438aa
MD5 b6ceaa9c7375ca06c4f71b6f2d62bcfd
BLAKE2b-256 57d09dcbe1d65e060cb56fb328415e12822af74553a965d79b3fcd5c6dfa9895

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.23-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 bbbc04e371909b9b5823697e0daf75f4d7f1c77277ea24b69a6caef9a7302281
MD5 b0860f6baf32387fcec1a7ef1b553460
BLAKE2b-256 ff8977cfa2ee4c1aba69022ff1b6425461282967ce92ef471f6e57d7ae777fd1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.23-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7623ea9e96584632e6b8a46b0c2c62eb5c7b95f17c6b674b8e4accde8685a6f3
MD5 f331e65ed93297b24470ffb4bccbb304
BLAKE2b-256 00900c887eb384e82178461e919a98d445d198e932dcbddf34ea83c7daf11671

See more details on using hashes here.

Provenance

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