Uncertainty-aware governed-delegation analytics and decision support.
Project description
minimal-oversight
A governed-delegation analytics and uncertainty-aware decision-support toolkit.
Companion package to "Minimal Oversight: Uncertainty-Aware Governance for Delegated AI Systems" (Azevedo, 2026).
Documentation | Notebooks | Changelog
What it does
Delegated AI systems route uncertain work through pipelines: one model proposes, another reviews, a tool checks, and a gate decides what ships. The design problem is no longer just accuracy; it is trust calibration under uncertainty: how much autonomy to grant, where to place oversight, what quality ceiling the system can sustain, and when intervention becomes necessary.
This package turns those questions into computable quantities:
| Question | What you get |
|---|---|
| Can this pipeline meet my quality target? | Feasibility check: $C_\text{op}$ vs $p_\text{min}$ |
| Where should I place review effort? | Water-filling allocation via the AMO |
| Which nodes are most dangerous? | Delegation centrality, masking index, SOTA score |
| How much autonomy can I safely grant? | Effective autonomy buffer $B_\text{eff}$ |
| When should humans intervene? | Autonomy time $T^*_\text{auto}$ and intervention schedule |
| What should stop being delegated? | Scope recommendations with coverage constraints |
Install
pip install minimal-oversight
With framework connectors and visualization:
pip install minimal-oversight[frameworks,viz]
Quick start
From scratch
from minimal_oversight import analyze_pipeline
from minimal_oversight.models import Node, PipelineGraph, AggregationType
gen = Node("generator", sigma_skill=0.55, catch_rate=0.65)
rev = Node("reviewer", sigma_skill=0.60, catch_rate=0.70)
merge = Node("merge", sigma_skill=0.55, aggregation=AggregationType.PRODUCT)
pipeline = PipelineGraph([gen, rev, merge])
pipeline.add_edge("generator", "reviewer")
pipeline.add_edge("reviewer", "merge")
report = analyze_pipeline(pipeline, p_min=0.80)
print(report)
From LangGraph
from langgraph.graph import StateGraph, END
graph = StateGraph(MyState)
graph.add_node("researcher", research_fn)
graph.add_node("writer", write_fn)
graph.add_edge("researcher", "writer")
graph.add_edge("writer", END)
graph.set_entry_point("researcher")
report = analyze_pipeline(graph.compile(), p_min=0.80)
From Google ADK
from google.adk import Agent
root = Agent(name="support", model="gemini-2.0-flash", sub_agents=[
Agent(name="billing", model="gemini-2.0-flash"),
Agent(name="tech", model="gemini-2.0-flash"),
])
report = analyze_pipeline(root, p_min=0.80)
From production logs
from minimal_oversight.connectors.traces import from_generic_events, to_workflow_traces
events = [
{"task_id": "t1", "node_id": "gen", "outcome": 1, "corrected": 1, "timestamp": 0},
{"task_id": "t1", "node_id": "rev", "outcome": 0, "corrected": 1, "timestamp": 1},
]
traces = to_workflow_traces(from_generic_events(events, corrected_field="corrected"))
report = analyze_pipeline(pipeline, p_min=0.80, traces=traces)
Architecture
analyze_pipeline() Practitioner interface
┌──────────────────────────────┐
│ estimation capacity │
│ topology allocation │ Decision modules
│ intervention viz │
├──────────────────────────────┤
│ _formulae.py │ Paper equations (private)
├──────────────────────────────┤
│ schema connectors/ │
│ langgraph adk traces │ Framework integration
└──────────────────────────────┘
Modules
| Module | Purpose |
|---|---|
models |
Node, PipelineGraph, GovernancePolicy, WorkflowTrace |
estimation |
Infer $\sigma_\text{raw}$, $\sigma_\text{corr}$, $M^*$, catch rate, drift from logs |
capacity |
$C_\text{op}$, $B_\text{eff}$, feasibility checks, $H_\text{crit}$ |
topology |
Motif detection, delegation centrality, conditional fragility |
allocation |
AMO solver, scope selection, governance recommendations |
intervention |
$T^*_\text{auto}$, intervention schedule, alerts, failure diagnosis |
viz |
Masking dashboard, autonomy buffer, risk ranking, scope frontier |
connectors |
LangGraph, Google ADK, LangSmith, generic trace parsers |
Notebooks
| # | Topic | Shows |
|---|---|---|
| 01 | SDLC pipeline | Fan-out/merge, SOTA placement, masking |
| 02 | Customer support | Chain depth, drift, diagnostic differential |
| 03 | Topology stress test | All 4 motifs compared |
| 04 | LangGraph import | Real StateGraph + conditional edges |
| 05 | ADK import | Real Agent objects + session logs |
| 06 | Paper validation | All 8 experiments from Section 3 |
What it is not
- Not an agent framework — it analyzes pipelines, not builds them
- Not a workflow orchestrator — it sits above LangGraph / ADK / CrewAI
- Not just the paper's reproduction code — that's one notebook
It is a governed-delegation analytics and decision-support library, backed by uncertainty-aware and information-theoretic foundations but presented through practitioner questions and one-call analysis.
Citation
@article{azevedo2026minimal,
title={Minimal Oversight: Uncertainty-Aware Governance for Delegated AI Systems},
author={Azevedo, Carlos R. B.},
year={2026}
}
Project details
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 minimal_oversight-0.1.1.tar.gz.
File metadata
- Download URL: minimal_oversight-0.1.1.tar.gz
- Upload date:
- Size: 96.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce0a5fceb0242d5c2f33070e849c4b048f89ce0f06b6cd9128df451a058d8f0e
|
|
| MD5 |
1c336541b45b13b617c985431c2eb996
|
|
| BLAKE2b-256 |
77bea6f19861bfd93bdc0bdb4d6bc1813c4bbfae4435b1e845fe81fd601b6f50
|
Provenance
The following attestation bundles were made for minimal_oversight-0.1.1.tar.gz:
Publisher:
publish.yml on crbazevedo/delegation-lab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
minimal_oversight-0.1.1.tar.gz -
Subject digest:
ce0a5fceb0242d5c2f33070e849c4b048f89ce0f06b6cd9128df451a058d8f0e - Sigstore transparency entry: 1723512742
- Sigstore integration time:
-
Permalink:
crbazevedo/delegation-lab@f22d895ca5f0a876d4c015e6cf735b0e7271ba53 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/crbazevedo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f22d895ca5f0a876d4c015e6cf735b0e7271ba53 -
Trigger Event:
release
-
Statement type:
File details
Details for the file minimal_oversight-0.1.1-py3-none-any.whl.
File metadata
- Download URL: minimal_oversight-0.1.1-py3-none-any.whl
- Upload date:
- Size: 47.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
088ca554ff53564ce58ef107ed552270ba3c3e704875508f0bba5d801e18d574
|
|
| MD5 |
3ff61574090f571c501e146aae7b9e20
|
|
| BLAKE2b-256 |
bdffd00bfe1bf7945f872faba61f65dec9fda501ca579c973ce0f812b8456877
|
Provenance
The following attestation bundles were made for minimal_oversight-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on crbazevedo/delegation-lab
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
minimal_oversight-0.1.1-py3-none-any.whl -
Subject digest:
088ca554ff53564ce58ef107ed552270ba3c3e704875508f0bba5d801e18d574 - Sigstore transparency entry: 1723512832
- Sigstore integration time:
-
Permalink:
crbazevedo/delegation-lab@f22d895ca5f0a876d4c015e6cf735b0e7271ba53 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/crbazevedo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f22d895ca5f0a876d4c015e6cf735b0e7271ba53 -
Trigger Event:
release
-
Statement type: