Metadata-Version: 2.4
Name: flowproof
Version: 0.14.0
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Rust
Classifier: Topic :: Software Development :: Testing
Requires-Dist: mcp>=1.2 ; python_full_version >= '3.10' and extra == 'mcp'
Provides-Extra: mcp
Summary: Test that a bot only ever does the job it was given — and never deletes, sends or approves the thing it must not. Record it doing the job once, then replay on every commit with zero LLM calls. For the agents and RPA already running real work in production: web, desktop, SAP, Citrix.
Author-email: Automators <hello@automators.com>
License-Expression: Apache-2.0
Requires-Python: >=3.9
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Homepage, https://github.com/automators-com/flowproof
Project-URL: Repository, https://github.com/automators-com/flowproof

# flowproof

Run your AI agent once, keep the recording, and assert against it from then
on. flowproof captures the run at the model boundary - every request and
every tool-call decision - and serves it back on later runs, so replay makes
**zero LLM calls**. You assert which tools were called, with which arguments,
in which order, and which were not. The same engine drives web, desktop and
Citrix.

**Agents author, a deterministic engine executes.** A flow is described in
YAML with natural-language steps, recorded once against the live app, and
replayed deterministically in CI with zero LLM calls. Built agent-native:
every operation returns structured results a program can reason over, and
agents can drive record/run/get_trace/heal over MCP
(`pip install flowproof[mcp]`, run `flowproof-mcp`).

```yaml
# calc.flow.yaml
name: Add two numbers
app: calc
steps:
  - Type 5
  - Press plus
  - Type 3
  - Press equals
  - assert: display shows 8
```

```python
from flowproof import Flow

flow = Flow("calc.flow.yaml")
flow.record()            # performs the flow live, writes the trace
result = flow.run()      # deterministic replay -> RunResult
assert result.passed
```

Or from the shell: `flowproof record calc.flow.yaml`, then
`flowproof run calc.flow.yaml` (add `--json` for the structured report).

The wheel bundles the Rust engine; no separate install. Targets: `web`
(headless Chromium, any OS), Windows desktop via UI Automation, `sap`
(SAP GUI Scripting), `vision` (pixels-only for Citrix/RDP), and `api`
(no UI — HTTP/SQL assertion flows, any OS).

**Status: pre-alpha, in active development.** Record→replay,
model-grounded authoring, healing with reviewable diffs, suites, run
recordings, and the MCP server all work and are tested in CI.

Docs and source: [github.com/automators-com/flowproof](https://github.com/automators-com/flowproof)

