Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

FSQ — Fully Self Quality

An evidence-first agent harness for replayable, verifiable AI UI automation.

CI Python 3.11+ License: MIT

Quick StartWhy FSQPlatformsDocumentationContributing


FSQ Demo: goal → execution → evidence → verification → replay YAML


Why FSQ?

Evidence-First

Every step captures screenshots, UI snapshots, and action traces. You verify through evidence, not agent self-reports.

Replayable

Successful AI runs auto-generate strict YAML. Replay deterministically without LLM — same harness, same evidence, zero flakiness.

Verifiable

Results are judged by an evidence-based verifier, not the agent claiming success. Auditable, trustworthy, CI-ready.

Other AI agents say "I'm done." FSQ shows you the proof.


See It in Action

┌──────────────────────────────────────────────────────────────────────┐
│ $ cd /path/to/workspaces/web-demo                                   │
│ $ fsq case create --platform web                                    │
│     --goal "Search for FSQ on Bing"                                │
├──────────────────────────────────────────────────────────────────────┤
│  ► Planning: 3 key actions identified                                │
│  ► Step 1: startBrowser          📸 screenshot + UI snapshot         │
│  ► Step 2: navigateTo bing.com   📸 screenshot + UI snapshot         │
│  ► Step 3: typeText "FSQ"        📸 screenshot + UI snapshot         │
│  ► Step 4: pressKey Enter        📸 screenshot + UI snapshot         │
│  ► Verification: PASSED ✅ (evidence-based)                          │
│  ► Recording manifest → .fsq/runs/web/<run-id>/recording.json       │
│  ► Replayable YAML → .fsq/runs/web/<run-id>/recorded.fsq.yaml       │
└──────────────────────────────────────────────────────────────────────┘

What Can FSQ Do?

Dynamic Mode 🤖
AI-driven exploration
Strict Mode 🔁
Deterministic replay
AI explores and operates your app
Evidence captured on every step
Auto-generates replayable YAML
Deterministic regression execution
AI-powered visual assertions
Runs without LLM

The Dual Loop: AI explores → evidence proves it worked → strict YAML locks it down → replay catches regressions.


Quick Start

1. Install

pip install fsq-agent
Using uv (recommended for development)
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync --extra dev

The default installation includes the Python dependencies for Android, Web, Windows, and macOS. FSQ does not use platform extras. Applications, browsers, devices, and host services such as Appium remain system prerequisites.

2. Initialize a Workspace

mkdir web-demo && cd web-demo
fsq init --platform web --browser-channel chrome

init uses the exact current directory as the Workspace root and derives the Workspace name from that directory. It initializes one platform per invocation. To configure another platform in the same Workspace, run init again from the same directory:

cd /path/to/workspaces/web-demo

# Initialize Web. The executable path is optional when one matching browser is discoverable.
fsq init \
  --platform web \
  --browser-channel chrome

# Add Android to the same registered workspace.
fsq init \
  --platform android \
  --app-id com.example.app

Platform target options are:

Platform init target options
Android --app-id APP_ID (required)
Web --browser-channel CHANNEL (required), optional --browser-executable-path FILE
Windows --app-path PATH (required), plus optional --window-title-re and --launch-args
macOS --bundle-id or --app-path (at least one required)

Repeating an equal platform configuration returns unchanged. If its target or private environment mapping differs, pass --update-existing to replace only that platform's target and --env NAME=VALUE entries. Use fsq --output json init ... or --output jsonl for machine output. init checks readiness but never installs Driver/Runtime packages or system prerequisites.

Run fsq doctor from the exact Workspace root to inspect configured-platform readiness. Commands do not search parent directories or migrate legacy .fsq/config.yaml and .fsq-agent-workspace layouts.

3. Configure a Provider

Configure and inspect the user-level Provider from any directory:

fsq providers configure github_copilot
fsq providers status
Provider Setup
GitHub Copilot GPT Model name and GitHub device-code authentication
Azure GPT Azure OpenAI-compatible base URL, model/deployment name, and API key

Provider configuration is stored under ~/.fsq and shared with the Control Plane UI. Azure OpenAI can be configured with fsq providers configure azure_openai.

4. Create and Test Cases

cd /path/to/workspaces/web-demo

# AI-driven exploration with evidence and a Run-local candidate Case
fsq case create --platform web \
  --goal "Open https://www.bing.com, search for 'FSQ automation', verify results appear."
# Deterministic execution of an existing Case
fsq case test --platform web path/to/case.fsq.yaml

# Execute once, then ask AI to analyze the persisted execution facts
fsq case test --platform web --suggest path/to/case.fsq.yaml

Every execution writes evidence and reports under .fsq/runs/<platform>/<run-id>/. Suggestions and candidate Cases are Run-local and never overwrite the source Case or cases/<platform>. Inspect history with fsq runs list, fsq runs show RUN_ID, and fsq runs logs RUN_ID. fsq runs show RUN_ID --open builds and opens an offline static HTML report.

Control Plane

Launch the local browser Control Plane for multi-platform workspace management, platform readiness, target and case discovery, Explore runs, Strict Replay, and live evidence:

fsq ui

It listens on 127.0.0.1:8879 and opens a browser by default. Use --host, --port, and --no-open-browser to override those defaults. A wheel installation includes the compiled frontend and needs no Node.js runtime. From a source checkout, run npm ci && npm run build before starting the Control Plane.


Supported Platforms

Platform Backend Install
🌐 Web Playwright Included with fsq-agent
📱 Android uiautomator2 Included with fsq-agent
🖥️ Windows pywinauto Included with fsq-agent
🍎 macOS Appium Mac2 Included with fsq-agent

All platforms share the same HarnessInterface, evidence model, and FSQ YAML format. A registered workspace may configure one or more platforms independently:

<workspace-root>/
  .fsq/config/config.<platform>.yaml
  cases/<platform>/
  knowledge/<platform>/
  .fsq/runs/<platform>/

Workspace commands use the exact current directory as the registered Workspace root. fsq doctor checks all configured platforms; fsq case create/test select a platform; fsq runs queries Workspace history across all platforms unless filtered. fsq ui starts the browser Control Plane and uses its own Workspace selection.

Platform setup details

Web — Set the browser executable in .fsq/config/config.web.yaml:

target:
  browser_executable_path: /usr/bin/google-chrome

Android — Set the app ID in .fsq/config/config.android.yaml, then select a connected ADB device per run:

target:
  app_id: com.example.app
cd /path/to/workspaces/my-workspace
fsq case create --platform android --goal "Open the app"

Device selection and readiness are resolved from the initialized Workspace and connected-device state.

Windows — Keep backend_kind in the repository preset config.windows.yaml; set app-specific values in .fsq/config/config.windows.yaml:

target:
  app_path: C:\Program Files\MyApp\app.exe
  window_title_re: .*MyApp.*

macOS — Keep appium_server_url in the repository preset config.macos.yaml; set the app identity in .fsq/config/config.macos.yaml:

target:
  bundle_id: com.example.app

How It Works

FSQ Architecture: Dual Loop, Shared Harness, Knowledge System, and Debug System

The Dual Loop in a nutshell:

  • Dynamic (AI) → LLM agent explores → evidence captured at every step → replayable YAML generated
  • Strict (Replay) → replays YAML deterministically (no LLM) → evidence captured → pass/fail

Compared To...

FSQ Browser Use Midscene.js Playwright Appium
Evidence per step ✅ screenshots + UI snapshots + traces
AI → Replay YAML ✅ auto-generated strict cases Codegen (manual)
Verification Evidence-based verifier Agent self-report Vision assert Manual assertion Manual assertion
Cross-platform Web + Android + Windows + macOS Web only Web + Mobile Web only Multi (different APIs)
Runs without LLM ✅ Strict mode
Extensible harness Protocol-based plugin system Driver plugins

Documentation

Resource Description
Architecture Overview Dual Loop design and module structure
Platform Setup Detailed per-platform configuration
FSQ YAML Reference DSL syntax, lifecycle hooks, replay semantics
Harness Development Guide Build a new platform harness
Roadmap Product direction and planned phases
Governance Roles, decisions, and maintainer responsibilities

Contributing

We welcome contributions! FSQ is designed to be extended.

git clone https://github.com/microsoft/FSQ.git && cd FSQ
uv sync --extra dev
npm ci && npm run build
uv run python -m pytest

Ways to contribute:

Path For whom
🐛 Report bugs / suggest features Everyone
📝 Improve docs and examples Beginners welcome
🧪 Add FSQ YAML test cases QA engineers
🔌 Build a new platform harness Platform experts
⚡ Improve agent / verification AI engineers

See CONTRIBUTING.md for the full guide and contributor growth path. Project decisions and role progression follow GOVERNANCE.md.


License

MIT — Copyright (c) Microsoft Corporation.


Built with ❤️ by the FSQ team at Microsoft

Download files

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

Source Distribution

fsq_agent-0.1.0a1.tar.gz (692.9 kB view details)

Uploaded Source

Built Distribution

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

fsq_agent-0.1.0a1-py3-none-any.whl (815.7 kB view details)

Uploaded Python 3

File details

Details for the file fsq_agent-0.1.0a1.tar.gz.

File metadata

  • Download URL: fsq_agent-0.1.0a1.tar.gz
  • Upload date:
  • Size: 692.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fsq_agent-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 663b3c5b64daba5e3539d6c141a673046fe63c36fcf0c2e9e3adb908380b2eeb
MD5 88d298ae089754a245d2cdd470c62b39
BLAKE2b-256 6637828ce93c7b66ef646a2c138b9298540cfcf691239b30e07825945410bd31

See more details on using hashes here.

File details

Details for the file fsq_agent-0.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: fsq_agent-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 815.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.8 {"installer":{"name":"uv","version":"0.12.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fsq_agent-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 2e7e5d7f9dbd64948c1f2364a74ed0343fc9d4ab229033e684b2188cb005660a
MD5 33a4c9e90f2aaf91a9cad43296ac72a2
BLAKE2b-256 66c6d52e58573ff54457df47f0e386fd43b10a79a366b926ae80e766a5a95b66

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.0

2 files

This release

0.1.0a1 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page