AI-driven cross-platform UI automation engine with test script generation
Project description
ScreenForge
中文 | English
Describe what to test. Watch it happen. Get a pytest script.
ScreenForge is an AI-driven UI automation engine that turns natural language into executable test scripts. Unlike record-and-replay tools, you don't perform the actions yourself — the AI does it for you.
Why ScreenForge?
| Playwright Codegen | Browser Use | Midscene.js | ScreenForge | |
|---|---|---|---|---|
| Need to perform actions yourself? | Yes | No | No | No |
| Generates replayable test scripts? | Yes | No | No | Yes (pytest) |
| Self-healing when UI changes? | No | No | No | Yes |
| Works as AI Agent tool (MCP)? | No | Yes | No | Yes |
Core architecture: Your AI Agent is the brain (understands requirements, makes decisions). ScreenForge is the hands (executes UI actions, generates code).
Quick Start
pip install screenforge
# See the magic without any API key:
screenforge --demo
# For real usage, set your LLM key:
export OPENAI_API_KEY=sk-...
# Inspect the current page (returns DOM tree for your Agent to analyze):
echo '{"operation":"inspect_ui","platform":"web"}' | screenforge --tool-stdin
# Execute a single action:
screenforge --action click --platform web --locator-type text --locator-value "Login"
How It Works
You (or your AI Agent) ScreenForge
│ │
├──── "Test the login" ─────►│
│ ├── inspect_ui (get DOM tree)
│◄── DOM tree ──────────────┤
│ │
├──── click #email ─────────►│
├──── input "user@..." ─────►│
├──── click "Sign In" ──────►│
│ │
│◄── pytest script ─────────┤
│◄── Allure report ─────────┤
Each step: inspect → decide → act → verify. The AI decides, ScreenForge executes.
Features
- Cross-platform: Android (uiautomator2), iOS (wda), Web (Playwright)
- Self-healing engine: When tests break due to UI changes, the engine auto-repairs locators with confidence scoring and AST validation
- L1/L2 semantic cache: Same page + same instruction = instant response, no LLM call needed
- Visual fallback: When DOM can't locate elements (Canvas, games), VLM parses screenshots
- MCP server: Any MCP-compatible Agent can drive ScreenForge natively
- Structured output: JSON Lines events +
report/runs/<id>/artifacts for CI integration - Live Mirror playground: Watch the generated pytest code grow line-by-line beside a live screenshot as the test runs —
screenforge --playground. See the Playground Guide
Agent Integration (Claude Code / Cursor / Codex)
ScreenForge exposes itself as a tool for AI Agents. The standard loop:
# 1. Get page structure (your Agent analyzes it)
echo '{"operation":"inspect_ui","platform":"web"}' | screenforge --tool-stdin
# 2. Your Agent decides what to do, sends precise actions
screenforge --action click --platform web --locator-type text --locator-value "Login"
# 3. Verify the result, repeat
echo '{"operation":"inspect_ui","platform":"web"}' | screenforge --tool-stdin
For batch operations, use workflows:
screenforge --workflow ./workflows/login.yaml --platform web --json
Or start the MCP server for native Agent integration:
screenforge --mcp-server
GitHub Actions
Add ScreenForge to your CI pipeline:
- uses: jhinzzz/ScreenForge@v1
with:
platform: web
workflow: ./workflows/login.yaml
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
Results are auto-uploaded as Allure artifacts. See action.yml for all inputs.
See Agent Integration Guide for the complete protocol.
Installation (from source)
git clone https://github.com/jhinzzz/ScreenForge.git
cd ScreenForge
python -m venv .venv && source .venv/bin/activate
pip install -e ".[all]"
Platform-specific extras:
- Web only:
pip install -e .(default, includes Playwright) - Android:
pip install -e ".[android]" - iOS:
pip install -e ".[ios]" - ML/cache:
pip install -e ".[ml]"(sentence-transformers for semantic cache)
Configuration
# Required: LLM API key (OpenAI-compatible endpoint)
export OPENAI_API_KEY=sk-...
# Optional: custom endpoint (defaults to api.openai.com)
export OPENAI_BASE_URL=https://api.openai.com/v1
# Optional: model (defaults to gpt-4o)
export MODEL_NAME=gpt-4o
Or create a .env file (copy from .env_template).
Badge
If ScreenForge generates tests for your project, add this badge to your README:
[](https://github.com/jhinzzz/ScreenForge)
Learn More
| Resource | Description |
|---|---|
| Mobile Setup | Android & iOS device connection guide |
| MCP Setup (3 min) | Connect to Claude Desktop / Cursor / Cline / Claude Code |
| Agent Guide | Integration protocol for AI Agents |
| Capability Matrix | Supported platforms, actions, and locators |
| Playground Guide | Live Mirror — watch code + screenshots grow as the test runs |
| Workflow Examples | YAML workflow templates |
| CHANGELOG | Version history |
Contributing
See CONTRIBUTING.md for guidelines. Issues and PRs welcome!
License
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file screenforge-0.6.0.tar.gz.
File metadata
- Download URL: screenforge-0.6.0.tar.gz
- Upload date:
- Size: 201.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07e8f619c214c878a481e86454b65b103fbc7cc38a5965e16520f1ab2bff2fa5
|
|
| MD5 |
aadbf78b74ff15bb82adb39a92cf6b01
|
|
| BLAKE2b-256 |
598fd1bf41ac108ae0fec1402e63f8d976b3979add7ffc42369d36b3245c5275
|
Provenance
The following attestation bundles were made for screenforge-0.6.0.tar.gz:
Publisher:
release.yml on jhinzzz/ScreenForge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
screenforge-0.6.0.tar.gz -
Subject digest:
07e8f619c214c878a481e86454b65b103fbc7cc38a5965e16520f1ab2bff2fa5 - Sigstore transparency entry: 1766279467
- Sigstore integration time:
-
Permalink:
jhinzzz/ScreenForge@14da895fc8be1a1b6b6ed805c2b985ab87d5ba25 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/jhinzzz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@14da895fc8be1a1b6b6ed805c2b985ab87d5ba25 -
Trigger Event:
push
-
Statement type:
File details
Details for the file screenforge-0.6.0-py3-none-any.whl.
File metadata
- Download URL: screenforge-0.6.0-py3-none-any.whl
- Upload date:
- Size: 143.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5dfa6b172936683c507db836e6b322f99806d1e0e45630021201eedbc848e39a
|
|
| MD5 |
115307bd39750865b61280bbaff3f6f5
|
|
| BLAKE2b-256 |
37218277afcad8edc4ceb2feef672ce15b8ce03faa9773488602b44339de41c8
|
Provenance
The following attestation bundles were made for screenforge-0.6.0-py3-none-any.whl:
Publisher:
release.yml on jhinzzz/ScreenForge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
screenforge-0.6.0-py3-none-any.whl -
Subject digest:
5dfa6b172936683c507db836e6b322f99806d1e0e45630021201eedbc848e39a - Sigstore transparency entry: 1766280185
- Sigstore integration time:
-
Permalink:
jhinzzz/ScreenForge@14da895fc8be1a1b6b6ed805c2b985ab87d5ba25 -
Branch / Tag:
refs/tags/v0.6.0 - Owner: https://github.com/jhinzzz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@14da895fc8be1a1b6b6ed805c2b985ab87d5ba25 -
Trigger Event:
push
-
Statement type: