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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

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

File metadata

  • Download URL: orbit_cua-0.2.36-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.36-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a48bc356809dd6ba046e475fb1e372f69c5b12432c659fff5d6055f653c02965
MD5 d8c18ad98ca871aa10e911fed693071b
BLAKE2b-256 f6b7948ca8673a04e167eb859c5155b585f1e175fd8eda6084f80677153f21e6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.36-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 105c9c2d1abfbc2a2bd046ae3293e908886e41cb4760400d8b29a9f169f168bc
MD5 005c5f63b562d12c5c64b06b3291b11d
BLAKE2b-256 2bf1fc641f67437178dbb30ac8e3d2d22a093476ea6d49f8c9de753e05101113

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.36-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 5cd58ca542b74116f2b3d418b5da7ce74f11a30e05472aab89b55e5ae6f229ff
MD5 b3041573ccac880db4f804084184a6ba
BLAKE2b-256 5dd7f65e9db326f1f0843dd0a35808c30284f821fac62b1493752581d08e7c61

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.36-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.36-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7fdd50bfb0d8553f914a907e2e3d41535f11c6ff38269d8dfea4b5122ab33fec
MD5 f38f8db658f70644397f84865289caa5
BLAKE2b-256 56af3d7c1f0a23426b0c3fafe5f046616fae8891513210120487e19b6ba7516c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.36-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f02456dcf59c980f0de4ec8d3af30937d43213e8ea7a73dea47e7151c361db9d
MD5 b90f265e04f043a0ae48bc071a20a3db
BLAKE2b-256 adfc21cdef27baec0bae4e9f3870148c4f447a1aab4d9f9f3e86f9381f5633dd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.36-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 8c508df9dd0e3c00193fbaf87fdd20be0b9eb1c2ec60feab9f439644b9c45d2e
MD5 96f6d92f13b814169a29f7a3fe819b5b
BLAKE2b-256 b0f98ac6d35054d58d21dbf0dfc9a02f5198277a85e09e0a750b8a34caca8829

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.36-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.36-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 869351557e38c732c2d1456c6f4cbbf87d3ab0fbe165994228da8c6aa6832d51
MD5 b6c9a4a3b4a4cef77eb213e5ac82a041
BLAKE2b-256 bf6e3517d7ec1348c3d212d66e7d517b5294610f36593af6a052f49a445d70b4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.36-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 ea58a33444a74a23da6e36b61b25630e854e956d95ac7c6ca1a368bf2cefbecc
MD5 0684345efb2c09c5f1c715d5d6b3fc57
BLAKE2b-256 5aa5acd6c2fa5053d54a5ece51d6b8841502306358ced84f571dd4ced9d3e2ec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.36-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 647986eb37b1c8b78e5ecf187f326ca43dad7f62fec35dd78344708c4a3d8318
MD5 323a313da182149142ecc415f10779f7
BLAKE2b-256 712dbdbc0e0a86c3eca8f099952338d13be133fb664e4672139c6c0505dbc8d0

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.36-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.36-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 513c3dcb698d91696c9d65b0931000109a59f0ee66d10549d5c824d3347b8c0a
MD5 737b9645ebd1826f29d7e9df4f23ae82
BLAKE2b-256 6639049c7e653ec9a336748041fa0b43c8d5b158498a50852a9fb31005e6f9ca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.36-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 47eab225563dfda7caf2d2ba4f168a3f395471ed008ef7e2bdc06675d034dadf
MD5 1970f7811a65b5f63093ec41ffd51d3c
BLAKE2b-256 bc40ada3451b1a49869813a28cab01875bda27e066f286f027cfb539d908546c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.36-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 09a4c351df917f6107190a28f46b6441de6560ee311d836b044a5ec89ae8bc24
MD5 aca216def91c4c2209bf276bae5b2897
BLAKE2b-256 dd78dcc2f962c64b89ccf572128b0c2f94579f790895409de576b8eb399f1bba

See more details on using hashes here.

Provenance

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