Skip to main content

Autonomous AI Testing Agent with multi-agent architecture

Project description

HAINDY

CI PyPI version License: MIT Python 3.10+

Computer-use for coding agents. HAINDY gives AI coding tools (Claude Code, Codex CLI, OpenCode, and others) the ability to see the screen, click, type, and test real applications across desktop, Android, and iOS.

pip install haindy
haindy setup

What it does

Your coding agent calls HAINDY to interact with a live UI. Every command returns structured JSON.

haindy session new --desktop                                       # start a session
haindy act "click the Login button" --session <ID>                 # execute an action
haindy test "sign in and verify the dashboard loads" --session <ID> # run a multi-step test
haindy screenshot --session <ID>                                   # capture current state
haindy session close --session <ID>                                # clean up

Under the hood, each action goes through a computer-use AI provider (OpenAI, Google Gemini, or Anthropic Claude) that takes a screenshot, reasons about the UI, and performs real OS-level input -- mouse, keyboard, scroll -- against the actual application. No DOM hooks, no selectors, no browser automation.

Supported platforms

Platform Automation method
Linux/X11 uinput + xdotool + ffmpeg
macOS pynput + mss
Android ADB
iOS idb
haindy session new --desktop
haindy session new --android --android-serial emulator-5554
haindy session new --ios --ios-udid <UDID>

Agent integration

HAINDY ships with bundled skills that haindy setup installs automatically for detected AI CLIs. Once installed, your coding agent can discover and use HAINDY directly.

Supported CLIs: Claude Code, Codex CLI, OpenCode.

act vs test

  • act -- execute a single action ("click the submit button", "type hello into the search field")
  • test -- plan and execute a multi-step scenario with outcome validation ("sign in, navigate to settings, verify the dark mode toggle works")

Use test whenever you care about verifying a result, not just performing an action.

Session variables

Store values your agent can reference across commands:

haindy session set USERNAME alice@example.com --session <ID>
haindy session set --value-file credentials.txt --secret --session <ID>
haindy session vars --session <ID>

Batch mode

HAINDY also includes a pipeline of specialized AI agents that can plan and execute tests autonomously from a requirements file -- no coding agent required:

Requirements ──> Scope Triage ──> Test Planner ──> Situational Agent ──> Test Runner ──> Report
haindy run --plan requirements.txt --context context.txt
haindy run --mobile --plan requirements.txt --context context.txt    # Android
haindy run --ios --plan requirements.txt --context context.txt       # iOS

This produces an HTML report with screenshots, pass/fail results, and a JSONL execution log.

Configuration

Credentials

haindy auth login openai      # stored in system keychain
haindy auth login google
haindy auth login anthropic
haindy auth status             # verify

Providers

HAINDY uses two providers independently: one for planning/analysis, one for computer-use actions.

haindy provider set openai                   # planning/analysis
haindy provider set-computer-use google      # computer-use

Settings file

Create ~/.haindy/settings.json for persistent non-secret configuration:

{
  "agent": { "provider": "openai" },
  "computer_use": { "provider": "google" },
  "openai": { "model": "gpt-5.4", "computer_use_model": "gpt-5.4" },
  "google": { "model": "gemini-3-flash-preview", "computer_use_model": "gemini-3-flash-preview" },
  "anthropic": { "model": "claude-sonnet-4-6", "computer_use_model": "claude-sonnet-4-6" },
  "execution": { "automation_backend": "desktop" },
  "logging": { "level": "INFO" }
}

Environment variables override all other sources. See .env.example for the full list.

Platform prerequisites

Platform Requirements
Linux/X11 ffmpeg, xdotool, xclip, /dev/uinput access
macOS Grant Accessibility + Screen Recording to your terminal (System Settings > Privacy & Security)
Android adb installed, device/emulator reachable
iOS (macOS) brew install idb-companion, device paired

haindy doctor checks all of these for you. See docs/RUNBOOK.md for detailed setup.

Development

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.lock
pip install -e ".[dev]"
ruff check .          # lint
ruff format --check . # format check
mypy haindy           # type check
pytest                # tests

Architecture

Directory Purpose
haindy/tool_call_mode/ Tool-call CLI, daemon, IPC, session state
haindy/agents/computer_use/ Multi-provider computer-use session orchestrator
haindy/agents/ Scope triage, test planner, situational, action, and test runner agents
haindy/desktop/ Linux/X11 automation (uinput, xdotool, ffmpeg)
haindy/macos/ macOS automation (pynput, mss)
haindy/mobile/ Android (ADB) and iOS (idb) automation
haindy/config/ Settings, env vars, settings file loader
haindy/orchestration/ Multi-agent workflow coordination
haindy/monitoring/ JSONL logging, HTML report generation

Contributing

See CONTRIBUTING.md for development guidelines and how to submit changes.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

haindy-0.1.0.tar.gz (456.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

haindy-0.1.0-py3-none-any.whl (410.7 kB view details)

Uploaded Python 3

File details

Details for the file haindy-0.1.0.tar.gz.

File metadata

  • Download URL: haindy-0.1.0.tar.gz
  • Upload date:
  • Size: 456.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for haindy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 639f00b742a7a844faed1dcb028404c2800e6f6099c810d517c19fd0982e8952
MD5 b8b8ff2597d122038861bde78419be8e
BLAKE2b-256 3a1956e7436ba3dde13208d96086fa425bdf9c40b20a6f2874e14b821c3c85a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for haindy-0.1.0.tar.gz:

Publisher: release.yml on Haindy/haindy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file haindy-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: haindy-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 410.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for haindy-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a262294db74a63b80e49c31cab69997569d1a4a38610e3a753edb297fc0d19be
MD5 bf6577f7a0131909e32ac2887bfb6602
BLAKE2b-256 d6dfee86eb60a01dfb02c2a7b55cf864805764b40dcd0cceb6a5dafc3f97ac3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for haindy-0.1.0-py3-none-any.whl:

Publisher: release.yml on Haindy/haindy

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