Open source · Apache-2.0 · Experimental
Know which security conclusions still hold after your AI system changes.
ThreatVeil is an open-source experimental assurance platform for tracking how changes to tools, permissions, models and configuration affect the security evidence behind autonomous AI systems.
The problem
A passing test describes the system you tested.
Autonomous agents issue refunds, update payment details and call tools through MCP servers. They are reviewed once, and then they keep changing, mostly outside code: a gateway stops requiring approval, a new tool appears, a permission rule is relaxed, the model is swapped.
ThreatVeil is built around the missing step.
TEST → PASS → SHIPTEST → PASS → MODEL / TOOL / PERMISSION / CONFIG CHANGES → ?CHANGE → IMPACT → EVIDENCE INVALIDATION → RE-VERIFY → CURRENT ASSURANCECore idea
Evidence can become stale without ever having been false.
A security conclusion may have been correct for an earlier version of a system while no longer supporting the system running now. ThreatVeil keeps those two facts apart.
How it works
From authority to current assurance.
- 01
System & authority
Import what an agent can do from real definitions: Claude Code settings,
.mcp.json, MCP catalogues, CrewAI, a manifest. - 02
Security claims
Business-language statements that must stay true. Declared claims stay
NOT_YET_VERIFIED. - 03
Evidence
Approved checks observed by signed collectors, bound to the exact state they ran on, with an expiry.
- 04
Change & impact
Each change is classified: authority expanded, restricted, equivalent or unknown.
- 05
Invalidation
Reviewed dependency mappings decide which claims lose evidence. Unmapped reach stays conservative.
- 06
Current assurance
Re-verification must prevent the bad outcome and keep useful work working.
Change impact
Only the claims a change reaches lose their evidence.
- Expanded, restricted, equivalent or unknown: direction is classified, never guessed.
- Affected versus still current: scoped by mappings a reviewer approved.
- Before shipping: the same analysis runs on proposed changes without touching current state.

Assurance Gate
Machines can ask whether a system is still cleared.
Pipelines and policy engines read a short-lived answer. ThreatVeil does not grant permissions: authorizes is always false, UNKNOWN is never cleared, and enforcement stays with the consumer.
GET /v1/systems/{id}/assurance/current
{
"status": "SUPERSEDED",
"cleared": false,
"authorizes": false,
"claims": { "total": 3, "supported": 2 },
"freshness": { "max_age_seconds": 60 }
}
Passport
Signed authenticity ≠ current assurance.
A Passport is an Ed25519-signed statement another organization can verify offline. Its signature stays valid forever; its status is recomputed on request. After a relevant change it is still authentic, and now superseded.

Current status
What works, and what does not yet.
Working today
- Append-only assurance records with PostgreSQL row-level security
- Agent-definition parsing: Claude Code, MCP, CrewAI, manifest
- Proposed-change impact via UI, CLI and PR check body
- State-bound evidence, expiry and per-claim invalidation
- Assurance Gate and signed, offline-verifiable Passports
- One-command local stack and end-to-end synthetic demo
Experimental or partial
- Restoring assurance after a change: synthetic fixture only
- Signed collectors: work, with heavy setup
- Observer contract: does not yet produce evidence
- Authority semantics: numeric limits stay unknown
- LangGraph and OpenAI Agents: structure or traces only
- No production deployment or real-customer validation
Roadmap
- P0: generic restoration and observer unification
- P1: scheduled watching of live sources
- P2: code-defined agents and deployment binding
- P3: adapters, observer packages, Gate consumers
- P4: research on evidence applicability
Details in KNOWN_LIMITATIONS.md and on the project status page.
Architecture
A modular monolith with a conservative core.
FastAPI control plane, Next.js workspace, PostgreSQL security memory, and a broker and worker for approved checks. Workers hold no database or secret access, and every conclusion is recomputed from signed, append-only records.
Open source
Run it, challenge it, extend it.
ThreatVeil is Apache-2.0 licensed and runs locally with Docker alone: no cloud account, API key or GPU. The demo is synthetic and clearly labelled.
Good places to start: generic restoration, observer unification, scheduled collection, framework adapters, numeric authority semantics, and research on evidence applicability.
git clone https://github.com/sandrexa1111/threatveil-oss.git
cd threatveil-oss
docker compose up --build
# open http://127.0.0.1:3000
make demo # synthetic end-to-end demonstration