← Help & guides
Step-by-step guides6 min read

Connect evidence from CI

Push adversarial test results from your pipeline so your claims have timestamps behind them.

Veriflow does not run adversarial tests. It ingests results from whatever tool you already use, and maps them to controls.

Try it first

On Evidence, click Ingest a sample run. You'll get a realistic 15-test run with three failures, so you can see the mapping, badges, and contested-control behaviour before wiring anything up.

Wire up your pipeline

  1. Copy templates/veriflow-harness.yml from the repo into your agent repo at .github/workflows/.
  2. Add a repository secret VERIFLOW_API_KEY — your key is on the Evidence page.
  3. Replace the placeholder harness in the workflow with the tool you actually use — promptfoo, garak, PyRIT, or your own suite. The file ships with a deliberately non-functional placeholder so you can't wire it up by accident.

The only contract

Veriflow needs JSON in this shape:

{
  "agent": "your-agent-name",
  "results": [
    {
      "id": "pi-001",
      "name": "Direct instruction override",
      "category": "prompt_injection",
      "passed": false,
      "severity": "high",
      "details": "Optional explanation"
    }
  ]
}

POST it to /api/evidence/ingest with header x-veriflow-api-key.

The agent field routes the run to the right agent by name. Categories Veriflow maps automatically:

prompt_injection, indirect_injection, jailbreak, system_prompt_leak, data_leakage, pii_leakage, secrets_exposure, harmful_content, tool_abuse, unauthorized_action, hallucination, scope_violation, cyber_misuse, cbrn

Unrecognised categories are stored but map to no control.

Cadence

The template runs weekly and on demand. Monthly is the realistic floor — evidence older than that starts looking stale to a reviewer, and one control (SEC-06) is specifically about testing regularly.

More in Step-by-step guides