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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.10Windows x86-64

orbit_cua-0.2.21-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.21-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.21-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: orbit_cua-0.2.21-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.21-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a94afb0eb6f20d072c8024ec971e70edf90f5fe90cc271b421a706d9313414a8
MD5 0ce12e35c822bd6d5120203df4a788c8
BLAKE2b-256 8bb6b4667472d32d9a04589f7040ac8b1a3067bb3c96eaa0b0a097e7ba9173a4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.21-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7b35f906bab4843cc1757542f6b67363412709da1b6bbc3afbac6bb2946efc92
MD5 65712a668e9b8fe670b018bf6ce63849
BLAKE2b-256 6a9ef8b6258da70f7ff33debed78c29a440704a21d873bfa52c72d92a57a91c7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.21-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 fb3ea0c5094479e7f6ee85514a55a0c12c50c1b07eac436879da8a5621db11cd
MD5 4ee255a4b7da77184ab91d7d992e329c
BLAKE2b-256 534b64ef94d354cde26ddab5fa4a68c54189c80c27490e3a0014fec300b9d86a

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.21-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.21-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 82543a5ced80d32da4dd6be6dd56082ee20ab3238dbb3a24c81099749cb93014
MD5 f4b1e5bcf3b2a674f37b3bb18691df5e
BLAKE2b-256 4f65c0ee6cff96ae49cdd7ac5a1cc2476603e8d257cb04b65ef6a8e29d29ae0a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.21-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 69cb0bc0f5cf317027df606d59796e8dea0fd2bc11df9bd42b4e9d0b9bf21d2d
MD5 fef3e7108c8b58dc22be4c1cc481a163
BLAKE2b-256 9ff264e74d42baa1b6bc092dd94fc6554342665948f9eb8dfb9b096652edd61f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.21-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 f175beebdc86dfd48da18de73e71d4701d1f898b901bd7f92744d8dfa43a69b2
MD5 78572229816b1ae17220c4451ae53b68
BLAKE2b-256 6e7053276cbe1d2b5d0190dc9bd4d4e64347a3f60d3adb01231827763d9f82e7

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.21-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.21-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 61cc5f969edd29d0d371cb86e0930db7937b05171044713cc9a27f5df9e9342b
MD5 b83ca11fa075958f034b3089836b7bff
BLAKE2b-256 7d1b20ab964a0c2de409e3c975c395e69873b7970644c75e521c4c735487abb6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.21-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 d0ac5ece414cef39c1151053bcff3d67698178a0850dd7661ef9450704feb945
MD5 9ce85addba6407661dcde4c2662e4267
BLAKE2b-256 3496c91d79c80a7f2213aa50ba33886205dffb7192d1e2859e5615a32fd0da41

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.21-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 7f53b8cb092199c995a056c7b7ad1a859d1d211d00a3d89667d3746b38dd218b
MD5 bb8a008e16af2745079e22bc9db62b1d
BLAKE2b-256 2790de0e2bb39a32c5dcc5bed6adef1102029281724542543fbefe61b3eb19b6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: orbit_cua-0.2.21-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.21-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d819667ae4b3faeb44e922d768979433db922fa156da3bfb894b5e3c18302c96
MD5 29bbaee18c0fdf4082b29496ea18d2d5
BLAKE2b-256 5c550807c700cd34de670023f1b26778a93e567b561be9cb3e7c3f0ef44ac79c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.21-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 8f0872a143611eff51b37875f17c0de44fe5203977d4765ddfc17c19367409bf
MD5 633c7c8fe789190bf4ab31c810dbeee8
BLAKE2b-256 1586cb1fb9e5e64adeb51b168aee34b33fc9529b2552c804dc8e792786655360

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for orbit_cua-0.2.21-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 2ffb6cfd1b20da39f50f58187eb6c424331fec8a47acf7923579150ffaae38fd
MD5 89cb36e8c2b623b9907fcd118bde7d49
BLAKE2b-256 b26f3b63d08a914d15b4d2afcbbefeb78935cd3d5ede0fb7d1c5d7f463937810

See more details on using hashes here.

Provenance

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