Skip to content

Quick Start

The decision engine runs in your own process and calls a vision model on your own Google Cloud Vertex AI endpoint. Authenticate to Google Cloud once, then hand the AI a task:

bash
gcloud auth application-default login   # once
qirabot browser "Search for SpaceX and get the first sentence of the article" --url wikipedia.org

The browser opens, the AI does the task, and the result — plus an HTML report — lands in your terminal. The rest of the commands and options are in the CLI Reference.

Runs default to gemini-vertex/gemini-3.8-flash on your credentials' own project. To change the model or project, or to authenticate with an API key instead of gcloud, see Configuration.

The same task in Python

bot.ai() is the same engine the CLI command runs: the AI looks at the screen, decides the next action, and loops until the task is done:

python
from qirabot import Qirabot

bot = Qirabot()
page = bot.open("https://www.wikipedia.org")

result = bot.ai(page, "Search for SpaceX and get the first sentence of the article")
print(f"Success: {result.success}")
print(f"Result: {result.output}")

bot.close()

Deterministic steps

When you want to drive each step yourself instead of delegating the whole task, the same natural-language targeting is available as single-step calls. These are fast, low-cost, and stay inside your own control flow:

python
from qirabot import Qirabot

bot = Qirabot()
page = bot.open("https://www.saucedemo.com")

# Describe each element in natural language (any language works);
# AI vision locates it, your code stays in control:
bot.type_text(page, "the Username field", "standard_user")
bot.type_text(page, "the Password field", "secret_sauce")
bot.click(page, "the Login button")

# Gate on visual state — wait_for polls until true, raises on timeout
bot.wait_for(page, "the Products page is shown")

# Pull structured data straight off the screen — no scraping, no selectors
count = bot.extract(page, "the number on the cart badge as an integer")

bot.close()

The core calls:

CallWhat it does
bot.ai(target, task)Autonomous multi-step task: see, decide, act, loop until done
bot.click(target, "desc")AI-located click (also double_click, type_text)
bot.extract(target, "desc")Pull structured data from the screen
bot.verify(target, "assertion")Visual assertion: truthy/falsy result, a failed check doesn't raise
bot.wait_for(target, "condition")Poll until a visual condition holds, else raise

target is whatever surface you're driving: the page returned by bot.open(), a Playwright/Selenium/Appium object of your own, or the pyautogui module for the desktop. The full call list and per-platform behavior is in the API reference.

How a run ends

result.success is the pass/fail verdict; result.status says why: "completed", "goal_failed" (login wall, captcha), "max_steps" (out of step budget), or "error". Details and the exception hierarchy are in Error Handling.

python
result = bot.ai(page, "Find the cheapest flight and hold it")
if result.status == "max_steps":
    # not a real failure — the budget was too small; retry with headroom
    result = bot.ai(page, "Find the cheapest flight and hold it", max_steps=50)

Reports

Every run writes a self-contained HTML report with per-step screenshots to ./qira_runs/<date>/<time-id>/, even on error or Ctrl+C, so you can see where the run stopped. Pass record=True (--record on the CLI) to also capture a video.

Next steps

Released under the MIT License.