AIActGuard
Drop-in EU AI Act compliance for any agent framework — audit trails, risk classification, and human-approval gates in one decorator.
AIActGuard is a lightweight middleware layer that any existing agent stack can adopt without ripping out its framework. It is not another agent orchestrator — it makes the one you already use (LangChain, CrewAI, AutoGen, ...) compliant.
Each module logs, drafts, tests, or flags something concrete. None of them certify compliance on their own — that's a legal determination. See Scope below.
Install
pip install aiactguard[langchain]
Other extras: crewai, claude-agent-sdk, langgraph, autogen, openai-agents, postgres (for PostgresAuditStore) — mix and match, e.g. pip install aiactguard[langgraph,postgres].
Quickstart
from aiactguard.adapters.langchain_adapter import AIActGuardCallbackHandler
from aiactguard.core.approval import ApprovalContext, ApprovalDecision
def compliance_officer(ctx: ApprovalContext) -> ApprovalDecision:
approved = input(f"Approve {ctx.action} ({ctx.risk_tier.value})? [y/N] ").lower() == "y"
return ApprovalDecision(approved=approved, approver_id="compliance_officer")
guard = AIActGuardCallbackHandler(
category="essential_services",
approvers=[compliance_officer], # an escalation chain — add more to route to a fallback
)
agent_executor.invoke({"input": "..."}, config={"callbacks": [guard]})
See examples/ for full runnable examples: LangChain, CrewAI, Claude Agent SDK, LangGraph (using LangGraph's own interrupt() for human-in-the-loop), AutoGen, OpenAI Agents SDK, the framework-agnostic @watch decorator with an escalation chain + override, generating all five Phase 2 compliance reports from an audit trail, running the red-team scenario harness, a fairness scan, drafting an incident report + GPAI transparency card, composite-system risk aggregation, NIST/ISO mappings, using the Postgres storage backend, and a worked community plugin.
Module roadmap
All 19 modules from the original project plan are built — see Scope for what's deliberately excluded.
Core (Phase 1)
| # | Module | Article(s) | What it does | Status |
|---|---|---|---|---|
| 1 | Risk classification engine | Art. 6, Annex III | Tags each agent action/tool call against EU AI Act risk tiers using a configurable taxonomy across all eight Annex III high-risk categories | ✅ |
| 2 | Immutable audit trail | Art. 12 | Every decision, tool call, input/output, model version, and timestamp logged to an append-only store — SQLite by default, Postgres for production | ✅ |
| 3 | Human-in-the-loop approval gates | Art. 14 | Configurable interrupt points that pause execution before a high-risk action fires, with an escalation chain of approvers and reasoned-override logging | ✅ |
| 4 | Explainability capture | Art. 13 | Structures the agent's chain-of-thought/tool-selection rationale into an auditor-readable format | ✅ |
| 5 | Framework adapters | — | LangChain, CrewAI, Claude Agent SDK, LangGraph, AutoGen, OpenAI Agents SDK — all 6 | ✅ |
| 6 | Policy-as-code | — | YAML rules defining what counts as high-risk for a given org and what triggers a human gate | ✅ |
Documentation & assessment tooling (Phase 2)
| # | Module | Article(s) | What it does | Status |
|---|---|---|---|---|
| 7 | Technical documentation generator | Art. 11, Annex IV | Auto-drafts the Annex IV technical file from audit logs + a guided questionnaire | ✅ |
| 8 | Conformity readiness checklist | Art. 43 | Gap-analysis against Annex IV/VI requirements — a pre-assessment aid, not the assessment itself | ✅ |
| 9 | FRIA template generator | Art. 27 | Pre-fills a Fundamental Rights Impact Assessment draft from risk classification and deployment context | ✅ |
| 10 | Post-market monitoring plan generator | Art. 72 | Monitoring plan template scaffolded from risk tier and logged incident categories | ✅ |
| 11 | EU database registration data prep | Art. 71 | Auto-compiles the metadata the Art. 71 registration form requires — filing stays manual | ✅ |
Robustness & incident tooling (Phase 3)
| # | Module | Article(s) | What it does | Status |
|---|---|---|---|---|
| 12 | Adversarial/red-team test harness | Art. 15 | Runs prompt-injection, jailbreak, and edge-case scenarios against your agent — heuristic detection, not semantic judgment | ✅ |
| 13 | Bias & fairness scan | Art. 10 | Statistical checks on agent decisions across a caller-supplied protected-characteristic proxy, at runtime | ✅ |
| 14 | Serious incident report drafter | Art. 73 | Turns a flagged incident into a structured draft for human review before filing | ✅ |
| 15 | GPAI transparency card generator | Art. 53 | Auto-generates a model transparency summary from config + usage patterns | ✅ |
Multi-agent & multi-standard extensions (Phase 4 — differentiators)
| # | Module | What it does | Status |
|---|---|---|---|
| 16 | Composite-system risk aggregation | Flags when multiple individually low-risk agents, composed into a pipeline, cross into high-risk territory as a system | ✅ |
| 17 | NIST AI RMF mapping layer | Maps audit/risk data to NIST AI RMF's Govern/Map/Measure/Manage functions | ✅ |
| 18 | ISO/IEC 42001 mapping layer | Maps the same data to ISO 42001 AI management system clauses | ✅ |
| 19 | Plugin architecture for community modules | Defined interface for jurisdiction- or industry-specific community modules | ✅ |
Scope
Explicitly out of scope, and why:
- Prohibited-practice determination (Title II) — legal judgment call, not a runtime check
- Conformity assessment / CE marking itself — requires formal procedures, sometimes a notified body; the toolkit preps evidence, it doesn't perform the assessment
- Quality management system (Art. 17) — an organizational process, not code
- GPAI systemic-risk evaluation (Art. 55) — applies to frontier model providers, not agent builders
- Actual legal filing/registration submission — data prep is automated, submission is not
Contributing
Contributions are welcome, especially jurisdiction- or industry-specific modules. Open an issue to discuss before submitting a large PR.
Writing a plugin: implement aiactguard.plugins.Plugin — a name, a description, and a generate(logger, *, questionnaire=None, **kwargs) -> str method (the same shape every built-in report/mapping already has). See examples/plugins/example_gxp_plugin.py for a worked example. To publish one for others to auto-discover, register it under the aiactguard.plugins entry-point group in your own package's pyproject.toml:
[project.entry-points."aiactguard.plugins"]
gxp = "aiactguard_gxp_plugin:plugin"
Callers pick it up with aiactguard.plugins.discover_entry_points().
License
MIT — see LICENSE.
Metadata
Release files for aiactguard 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aiactguard-0.1.3.tar.gz | 53.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aiactguard-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.9 kB
Release files / aiactguard-0.1.3.tar.gz
| Download URL | aiactguard-0.1.3.tar.gz |
|---|---|
| Size | 53.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1962030cba2e5bd8f9b2369605f3c5cd96dc1e4bad07ef6d380c17a764fcc567
|
|
BLAKE2b-256 checksum How to use checksums |
71ba92fbc9e68121ac86f9b88d5ed353bc13156f38acba0c1dc2d4a0b11a2fa5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.
Transparency logRelease files / aiactguard-0.1.3-py3-none-any.whl
| Download URL | aiactguard-0.1.3-py3-none-any.whl |
|---|---|
| Size | 51.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
db74e278a09188c7d8927f843e761ffbb5d07f7cd80ae195c64c0c7ae2fc2db9
|
|
BLAKE2b-256 checksum How to use checksums |
98a46f1579c320bc6b1bc537abe991c1f2e349fbcbc53eff8e76b4dd8da4d1e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.
Transparency log