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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.3-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.3-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.3-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.3-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.7

File hashes

Hashes for orbit_cua-0.2.3-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a54015a6078c21e7dc8a85690014b62401ecd3a2c5109c2cea633ba854decb85
MD5 2b8e57930bd511dcd1f8cfb5ddd1918d
BLAKE2b-256 6fa664a841cf66bd3b6a6adcc38539807d4b83f54b69d569cdf25ed708d0c091

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.3-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7a003972dfc6fa12621d311915e3d4b940104417ff0a88f28335eb289130667e
MD5 de34fb915643f6756a6d42a8afc9d98a
BLAKE2b-256 9c2ace540f0630bb15ba21b26fa05250b561b4bbcce90bfda997de6718c59098

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.3-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 5add13b97e9e81c9ee7417467cf1291253f6a4cabe264cd629b7d4e6c2f352c7
MD5 e7adbc0d5044de791a0ac5335187c4d1
BLAKE2b-256 6a9c8ac5d20f56a9fecac695312bde8b5a0ff9b8d0c329ba7a6a82e90f2c60ad

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.3-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.7

File hashes

Hashes for orbit_cua-0.2.3-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d5a1405423378f51d86eb1d0b9f1f75f0c907f7bec8a7a47b92a50f57039c596
MD5 edb909ff4a7d343620e4b1ffb3d9dc73
BLAKE2b-256 e286177c77797982ec414000a6c9a75f6cfbfec53fd77681908bc16c1a88b5d3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.3-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 2fdedd40440402a13ea6a51b6526d8e4f189f5702723272fe4db47b7fd7edb45
MD5 a1880cb8880c5ece7d29e3db502fdb86
BLAKE2b-256 150ed87b508cb2d223d2b7122ebc17379ee83cf151b2eb3358e279dcd4fac480

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.3-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 f39296e660d49798fe94383cd8985d5834a00c8197f696c76c643da5fe505bc1
MD5 a6e6aa3c04f8d2929ccc26c84a451b5a
BLAKE2b-256 5900ea33e109869e35274dba8a2367febc8d75c87be3ee166d42d7182c445aff

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.3-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.7

File hashes

Hashes for orbit_cua-0.2.3-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0ec0f04888a715a9ec6b4f568fbb3e70cea6aed935c74c051d4f1aad043171f0
MD5 3f60c47c35649b42c5efe6716435bd3c
BLAKE2b-256 9ad90e2290adba8bf6018c57ed970e915a0d6e2ee3ec915f8faa1cbb04ccf219

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.3-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1492b504a652cbf2a56a159b5c9e442d8965d2dbea8287ea2670116696f06c18
MD5 7b2bff1d590ffc0cee4d49660fc65e4d
BLAKE2b-256 f625e2ee9e3417c7d0c862da416a2139f2a7a827ffb1d7cda35d73d12da30317

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.3-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 986770c084314bfc8ea1f6a7e3372f0ddc0345ddcfecdb322ea0a318cbeba23b
MD5 364606263814759211dae2af716c591e
BLAKE2b-256 5d415b9382c3c8e86f54558af1617ae9fee9bc2dfc78140e05bcb804f29c1530

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.3-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.7

File hashes

Hashes for orbit_cua-0.2.3-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 833f5145198ea76edbe71ccb901784a99f895d6f079ae5ff27032ad8feac16fd
MD5 d14e2dde94581d091197649826542672
BLAKE2b-256 cab78cec633330eb72e28cf28f6995fab6be2201150f1ab19006a81f56ff17bd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.3-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 46a6c68aacfefe74ab25dacd5f06826fa7865bd4447452684efdceda0cf9e060
MD5 5d42e351f994211fb1ad8047e6c035c5
BLAKE2b-256 6470993bff104bdbaffac011be852a19d1cad7395a14aa8e0c3da8f6743a0d27

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.3-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 f5fb2327e98ab44179801dc2b12d08233640a04d78ca8485a304ad235d0f91db
MD5 2c8898721f91026ea9dbd117b25cdf9d
BLAKE2b-256 d91e06e73acd2a22192472995cd8d2f9a4331fd5cd698182c978d3a2ced1c902

See more details on using hashes here.

Provenance

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