Skip to content

See every verdict, from the real tool.

Everything on this page comes from one run of fourgate demo --pace 0 with limited beta fourgate 0.4.0b1, installed from PyPI with python -m pip install --pre "fourgate==0.4.0b1" into a fresh virtual environment. The output is split into its five scenes and otherwise unchanged, except that two local paths at the end were shortened.

Connector

Mode

Or jump to a recorded scene

S2: Fourgate enforce: broken connector. FAIL record_missing.

S2

Fourgate enforce: broken connector

FAILrecord_missing

The agent is told the write did not land, before it can report success.

What the agent receives

  • Agent receives, first:[FOURGATE] outcome_failed (reason: record_missing, recovery: stop)
  • then the original:"Created ISSUE-001"
  • isError=false

System of record

0 issues saved

Outcome log

FAIL record_missing (mode: enforce)

Raw terminal output for S2
FOURGATE DEMO - local only: no API keys, no network, nothing leaves this machine
Simulated connector; a local file stands in for the system of record.

An agent asks the demo-crm connector to create_issue "Q3 renewal follow-up".
Each scene is a real MCP session; scenes S2-S5 run through a real `fourgate guard` process,
which reads the system of record back after the connector reports success.

[2/5] S2  Fourgate enforce: broken connector
  Same broken connector, now behind `fourgate guard --mode enforce`.
  Agent receives, first:  [FOURGATE] outcome_failed (reason: record_missing, recovery: stop)
  then the original:      "Created ISSUE-001"
  isError=false
  System of record: 0 issues saved
  Outcome log:      FAIL record_missing  (mode: enforce)
  -> The agent is told the write did not land, before it can report success.
The complete output, start to finish
FOURGATE DEMO - local only: no API keys, no network, nothing leaves this machine
Simulated connector; a local file stands in for the system of record.

An agent asks the demo-crm connector to create_issue "Q3 renewal follow-up".
Each scene is a real MCP session; scenes S2-S5 run through a real `fourgate guard` process,
which reads the system of record back after the connector reports success.

[1/5] S1  Without Fourgate: broken connector, called directly
  The connector reports success but never saves the issue. No Fourgate in the path.
  Agent receives:  "Created ISSUE-001"  (isError=false)
  System of record: 0 issues saved
  Outcome log:      no record (Fourgate is not in the path)
  -> The agent believes the issue exists. It does not.

[2/5] S2  Fourgate enforce: broken connector
  Same broken connector, now behind `fourgate guard --mode enforce`.
  Agent receives, first:  [FOURGATE] outcome_failed (reason: record_missing, recovery: stop)
  then the original:      "Created ISSUE-001"
  isError=false
  System of record: 0 issues saved
  Outcome log:      FAIL record_missing  (mode: enforce)
  -> The agent is told the write did not land, before it can report success.

[3/5] S3  Fourgate enforce: healthy connector
  A healthy connector that really saves the issue, behind `fourgate guard --mode enforce`.
  Agent receives:  "Created ISSUE-001"  (isError=false)
  The response is identical to scene S1: no [FOURGATE] verdict
  System of record: 1 issue saved
  Outcome log:      PASS postcondition_satisfied  (mode: enforce)
  -> A real success passes through untouched.

[4/5] S4  Fourgate shadow: broken connector
  The broken connector behind `fourgate guard --mode shadow` (the default mode).
  Agent receives:  "Created ISSUE-001"  (isError=false)
  The response is identical to scene S1: no [FOURGATE] verdict
  System of record: 0 issues saved
  Outcome log:      FAIL record_missing  (mode: shadow)
  -> The agent is unaffected; you still learn the write did not land.

[5/5] S5  Fourgate enforce: broken connector, system of record unreachable
  The broken connector in enforce mode, but the read-back cannot reach the system of record.
  Agent receives:  "Created ISSUE-001"  (isError=false)
  The response is identical to scene S1: no [FOURGATE] verdict
  System of record: 0 issues saved
  Outcome log:      UNKNOWN verifier_error  (mode: enforce)
  -> Fourgate could not confirm either way: recorded UNKNOWN, never PASS, and the call is not blocked.

Summary
  Totals (from fourgate summary): PASS 1 / FAIL 2 / UNKNOWN 1
  Outcome log:  ./fourgate-demo/demo-outcomes.jsonl
  Summary page: ./fourgate-demo/fourgate-demo-summary.html

Self-check: every scene behaved as narrated.

Paths shortened: the last block originally printed absolute paths on the machine that ran it. Captured 2026-11-14 on Linux, Python 3.12.3; exit code 0. Fourgate is tested on Python 3.10–3.13.

Run it yourself.

Three commands in a fresh virtual environment. Python 3.10–3.13, Linux or Windows. The demo itself needs no API keys and no network.

  1. python3 -m venv fourgate-env
  2. fourgate-env/bin/python -m pip install --pre "fourgate==0.4.0b1"
  3. fourgate-env/bin/fourgate demo

If the fourgate command is not found on PATH, python -m fourgate demo works the same way. The run writes a local summary page to ./fourgate-demo/fourgate-demo-summary.html. Add --pace 2 to slow it down for a screen recording.

The real sample report

This is the fourgate-demo-summary.html page the run above produced, copied byte for byte. It has no JavaScript and makes no network requests, and contains structure only: no arguments, record values, response bodies or credentials. Its numbers come from the simulated demo, not customer traffic.

fourgate-demo-summary.htmlOpen full report

Ready to try it on a real workflow?

Start in shadow mode on a disposable account. Your agent sees nothing different.