OutputProof - infrastructure for trusting AI work product
Project description
OutputProof
AI Agent Output Verification Platform — Infrastructure for trusting AI work product.
Overview
OutputProof is a developer-first verification layer that sits between AI agents and their downstream consumers — asserting, scoring, and logging output correctness before results are trusted or acted upon.
Modern AI coding agents and task automation agents suffer from a documented reliability problem: they optimize for appearing helpful over being correct. OutputProof solves this by providing:
- Assertion-based verification — Developer-defined rules to validate agent output
- LLM-as-Judge scoring — Semantic verification using configurable judge models
- Retry orchestration — Automatic decorator retry with corrective prompts on failure
- Verification dashboard — Separate BSL 1.1 server package for history and team analytics
How OutputProof Is Used
OutputProof sits in the path where an AI agent produces work:
AI agent output -> OutputProof SDK assertions/judge -> VerificationResult -> local pass/fail gate -> optional dashboard sync
Common usage patterns:
- Local development — Run
python -m outputproof.cli.main verify ...against an agent output before accepting it. - CI or automation — Run
python -m outputproof.cli.main github-gateafter an agent writes files; the command exits non-zero when verification fails. - Application code — Wrap an agent function with
@outputproof.verify(...)so generated output is checked before downstream code receives it. - Team visibility — Run
outputproof-serverand setOUTPUTPROOF_SERVER_URLso CLI verification results are sent to the dashboard.
The dashboard is an aggregation surface. It does not inspect your project files or automatically read the SDK local history file. It populates when a producer sends verification results to the server API.
Features
- 🔍 Assertion Engine — Structural, behavioral, semantic, and contract assertions
- 🤖 LLM-as-Judge — Configurable secondary scoring with any OpenAI-compatible endpoint
- 🔄 Retry Orchestration — Automatic decorator retry with corrective prompts
- 🧱 GitHub Actions Gate — PR-blocking verification with GitHub job summaries
- 📊 Verification Dashboard — Separate BSL 1.1
outputproof-serverpackage - 🔌 Multiple Integrations — Claude Code MCP and LangChain today; OpenAI Agents, Cursor, and REST proxy planned
- 🛡️ Local-First — Zero required cloud dependency for core verification
- 📝 Structured Reports — Pass/fail, confidence score, failure reasons, corrective hints
Installation
OutputProof is not published to PyPI yet. Install it from this repository while the project is in pre-release development.
# From C:\workspace\ai-agent-output-verification
cd outputproof-sdk
python -m pip install -e .
# Optional: install the BSL dashboard server from the sibling package
cd ..\outputproof-server
python -m pip install -e .
The planned PyPI package names are outputproof and outputproof-server, but
those packages should not be installed from PyPI until the first public release
is published.
Quick Start
CLI Usage
The easiest way to get started is through the command-line interface. On
Windows PowerShell, use the python -m ... commands exactly as shown; the bare
outputproof executable may not be on PATH after a user install.
# Run verification on agent output
python -m outputproof.cli.main verify --prompt "Create a function" --output "def add(a, b): return a + b"
# Run verification with YAML assertion rules
@'
assertions:
- type: output_matches
pattern: authenticated
'@ | Set-Content assertions.yaml
python -m outputproof.cli.main verify --prompt "Create auth" --output "authenticated" -a assertions.yaml
# Start the dashboard server
# Requires the separate outputproof-server package.
python -m outputproof.cli.main dashboard --port 8080
# Then open http://127.0.0.1:8080
# Optional: choose a SQLite history database
python -m outputproof.cli.main dashboard --database ~/.outputproof/outputproof-server.db
# View available commands
python -m outputproof.cli.main --help
If PowerShell says outputproof is not recognized, keep using the python -m
form above.
GitHub Actions Gate
The github-gate command turns OutputProof into an enforcement step. It loads
YAML assertions, builds the verification output from changed PR files, writes a
GitHub job summary, and exits non-zero unless the verdict is PASS.
Add an assertion file:
# .outputproof/github-gate.yaml
assertions:
- type: command_succeeds
command: python -m pytest -q
timeout: 180
Then add a workflow step after checkout and install:
- name: OutputProof GitHub Actions gate
env:
OUTPUTPROOF_AGENT_ID: ${{ github.actor }}
OUTPUTPROOF_DEVELOPER_ID: ${{ github.actor }}
OUTPUTPROOF_TASK_TYPE: code_generation
OUTPUTPROOF_BASE_REF: origin/${{ github.base_ref || 'main' }}
run: python -m outputproof.cli.main github-gate --assertions .outputproof/github-gate.yaml
Use actions/checkout with fetch-depth: 0 so the gate can diff the PR against
the base branch. Set OUTPUTPROOF_SERVER_URL to also send CI results to the
dashboard and team leaderboard.
See The Dashboard Populate
The CLI stores verification history locally by default. The dashboard reads from
outputproof-server, so you need to point the CLI at the running server.
If the dashboard is empty, that means no verification records have been sent to the server yet. Use this copy/paste check to prove the full loop is working.
In one PowerShell window:
cd C:\workspace\ai-agent-output-verification\outputproof-server
python -m outputproof_server.cli --port 8080
Open http://127.0.0.1:8080. The dashboard may show zero records at first.
In a second PowerShell window:
cd C:\workspace\ai-agent-output-verification\outputproof-sdk
@'
assertions:
- type: output_matches
pattern: authenticated
'@ | Set-Content demo-assertions.yaml
$env:OUTPUTPROOF_SERVER_URL = "http://127.0.0.1:8080"
python -m outputproof.cli.main verify --agent-id demo-agent --prompt "Create auth" --output "authenticated" -a demo-assertions.yaml
Refresh http://127.0.0.1:8080. You should see the verification count,
pass rate, recent verification row, and demo-agent reliability entry update.
Behind the scenes, the CLI creates a VerificationResult and posts it to:
POST http://127.0.0.1:8080/api/verifications
Expected dashboard change:
Total Verifications: 1
Pass Rate: 100%
Recent Verifications: demo-agent / PASS
Agent Reliability: demo-agent
Python SDK Usage
You can also use OutputProof as a Python library in your own code:
# Save this as my_verification.py
import asyncio
from outputproof import verify, assertions as a
@verify(
assertions=[
a.file_exists("src/auth.py", within_output=True),
a.function_present("authenticate_user"),
a.contains_import("jwt"),
],
assertion_mode="all",
retry_on_fail=False,
)
async def generate_auth_module(prompt: str) -> str:
return """
# File: src/auth.py
import jwt
def authenticate_user(username: str, password: str) -> str:
return jwt.encode({"username": username}, "secret-key")
"""
async def main() -> None:
output = await generate_auth_module("Create JWT auth")
print(output)
if __name__ == "__main__":
asyncio.run(main())
Then run your script:
python my_verification.py
On verification failure, the SDK raises a VerificationError containing the full VerificationResult — which assertions failed, the judge's confidence score, retry history, and a corrective prompt ready for agent retry.
YAML assertion files can be either a top-level list or an assertions: mapping:
assertions:
- type: function_present
function_name: authenticate_user
- type: tests_pass
test_command: pytest
test_path: tests/test_auth.py
Running Examples
The package includes example scripts in the examples/ directory:
cd outputproof-sdk
python examples/basic_verification.py
Documentation
The docs site will live at outputproof.io/docs. Until the docs site is published, this README is the source of truth for setup and local development.
Planned documentation sections:
- Installation Guide
- Assertion Reference
- LLM-as-Judge Configuration
- Integration Guides
- Dashboard Setup
- API Reference
Supported Integrations
| Integration | Status | Description |
|---|---|---|
| Claude Code | 🧪 Beta | MCP protocol scaffolding and verification hooks |
| LangChain/LangGraph | 🧪 Beta | Drop-in callback handler |
| OpenAI Agents SDK | Planned | Output interceptor |
| Cursor | Planned | VS Code extension wrapper |
| Generic REST | Planned | Local HTTP proxy mode |
Architecture
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AI Agent │───▶│ OutputProof SDK │───▶│ Downstream │
│ (Claude, │ │ - Assertions │ │ Consumer │
│ LangChain, │ │ - Judge LLM │ │ │
│ etc.) │ │ - Retry Logic │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌──────────────────┐
│ outputproof-server│
│ BSL dashboard │
│ team API │
└──────────────────┘
Development
# Navigate to the SDK directory (already in your workspace)
cd outputproof-sdk
# Install development dependencies
python -m pip install -e ".[dev]"
# Run tests
python -m pytest -o addopts= -p no:cacheprovider
Project Structure
outputproof-sdk/
├── src/outputproof/
│ ├── __init__.py # Main package entry point
│ ├── core.py # Core verification logic
│ ├── models.py # Data models
│ ├── assertions/ # Assertion engine
│ │ ├── __init__.py
│ │ ├── base.py # Base assertion classes
│ │ ├── structural.py # File/function existence checks
│ │ ├── behavioral.py # Test execution assertions
│ │ └── semantic.py # LLM-based semantic matching
│ ├── judge/ # LLM-as-Judge scorer
│ │ ├── __init__.py
│ │ ├── scorer.py # Judge implementation
│ │ └── prompts.py # Judge prompt templates
│ ├── integrations/ # Agent integrations
│ │ ├── __init__.py
│ │ ├── claude_code.py # Claude Code MCP
│ │ └── langchain.py # LangChain callback
│ └── cli/ # Command-line interface
│ ├── __init__.py
│ └── main.py # CLI entry point
├── tests/ # Test suite
├── docs/ # Documentation
├── examples/ # Example usage
├── pyproject.toml # Project configuration
├── LICENSE # Apache 2.0 License
├── NOTICE # License boundary summary
├── LICENSE-HISTORY.md # Release and package license boundary
└── COMMERCIAL.md # Open-core monetization boundary
The dashboard server now lives in the sibling outputproof-server package under
BSL 1.1.
Roadmap
- Core SDK with assertion engine
- Assertion composition: all, any, threshold, weighted
- LLM-as-Judge scorer
- CLI interface
- Dashboard server split into BSL 1.1
outputproof-server - LangChain callback integration
- GitHub Actions gate (v1.1)
- Team reliability leaderboard (v1.1)
- Production Claude Code MCP server
- Policy engine (v1.1)
Open Core and Commercial Features
OutputProof uses an open-core model. The SDK, assertion engine, LLM-as-judge
module, CLI, MCP integration scaffolding, and local verification workflows are
Apache 2.0 open source. The dashboard server, team API, policy engine, team
aggregation, and cloud sync surface are distributed separately as
outputproof-server under BSL 1.1. Paid plans are intended to add hosted
convenience and governance features: cloud dashboard sync, longer hosted
history, alerts, team aggregate scoring, GitHub Actions gates, SSO, audit
export, SLA, BYO storage support, and onboarding.
See COMMERCIAL.md for the monetization boundary.
Contributing
Contributions are welcome! Please read our Contributing Guide for details on:
- Code of Conduct
- Development setup
- Submitting pull requests
- Reporting issues
License
Copyright 2026 StreamKernel LLC.
The outputproof package is licensed under the Apache License 2.0 — see the
LICENSE file for details. The server/dashboard package is licensed
separately under BSL 1.1; see LICENSE-HISTORY.md and
COMMERCIAL.md.
Author
OutputProof is developed by StreamKernel LLC.
- GitHub: IntuitiveDesigns/outputproof
- Maintainer contact: steven.lopez@streamkernel.io
Support
- 📧 Email: steven.lopez@streamkernel.io
- 💬 Discussions: GitHub Discussions
- 🐛 Issues: GitHub Issues
OutputProof — Infrastructure for trusting AI work product.
Project details
Release history Release notifications | RSS feed
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 outputproof-1.1.0.tar.gz.
File metadata
- Download URL: outputproof-1.1.0.tar.gz
- Upload date:
- Size: 64.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
083867f040e24988279da28fd87aa2a8f47663dd0b909333f5de0729d32b6e21
|
|
| MD5 |
52dc6a8d5ab3b8fa87b6306ad5a3a718
|
|
| BLAKE2b-256 |
bb83834a91c0281608d64463ca8152fbf9a93dc836a9b04f1aba39c5a864a52a
|
File details
Details for the file outputproof-1.1.0-py3-none-any.whl.
File metadata
- Download URL: outputproof-1.1.0-py3-none-any.whl
- Upload date:
- Size: 67.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ba2ed7cb8e851a549a9d6366be958234479378e1d40c253199937abaf369575
|
|
| MD5 |
b40f53f6a34e1f5b2738e01447b10452
|
|
| BLAKE2b-256 |
362cca07bb2c91c2c2cdf280047368addf343d281c917c6bd37016ae4f2504e3
|