agent-rag-governance
Retrieval access control and vector store policy enforcement for RAG pipelines.
Part of the Agent Governance Toolkit.
The Gap This Fills
AGT covers write-time memory protection (MemoryGuard) and output quality (ContentGovernance) — but nothing at retrieval time. Without retrieval-level governance:
- An agent can query any collection it wants — no access control
- No audit trail of which documents influenced an answer
- No rate limiting if an agent gets stuck in a retrieval loop
- No content scanning before retrieved chunks reach the LLM
agent-rag-governance closes that gap.
Quick Start
pip install agent-rag-governance
from agent_rag_governance import RAGGovernor, RAGPolicy
policy = RAGPolicy(
allowed_collections=["public_docs", "product_manuals"],
denied_collections=["hr_records", "financial_data"],
max_retrievals_per_minute=100,
content_policies=["block_pii", "block_injections"],
audit_enabled=True,
)
governor = RAGGovernor(policy=policy, agent_id="sales-agent-001")
governed_retriever = governor.wrap(your_langchain_retriever, collection="public_docs")
# Drop-in replacement — same API as the original retriever
docs = governed_retriever.invoke("what is our refund policy?")
What It Enforces
| Layer | What It Does |
|---|---|
| Collection access control | Allow/deny lists per agent — blocks cross-tenant data leaks |
| Rate limiting | Sliding-window cap on retrievals/min — stops runaway loops |
| Content scanning | PII and prompt-injection detection on chunks before LLM sees them |
| Audit logging | Structured JSON-lines record per call — enables EU AI Act traceability |
Governance Pipeline
Every governed_retriever.invoke(query) call runs this sequence:
1. check_collection() → CollectionDeniedError if blocked
2. check_rate() → RateLimitExceededError if exceeded
3. retrieve() → calls underlying retriever
4. scan_chunks() → filters blocked chunks, logs warnings
5. audit() → emits JSON-lines audit entry
Policy Reference
RAGPolicy(
# None = allow all (unless denied). List = explicit allow list.
allowed_collections=["public_docs"],
# Always blocked, even if in allowed_collections.
denied_collections=["hr_records", "financial_data"],
# 0 = unlimited. Per agent per 60-second sliding window.
max_retrievals_per_minute=100,
# "block_pii": block chunks with emails, phones, SSNs, credit cards
# "block_injections": block chunks with prompt-injection payloads
content_policies=["block_pii", "block_injections"],
# Write structured JSON-lines audit entries.
audit_enabled=True,
# None = stdout. Provide a path for file-based logging.
audit_log_path="/var/log/rag-audit.jsonl",
)
Audit Log Format
Each retrieval call emits one JSON line:
{
"timestamp": "2026-05-05T12:34:56.789012+00:00",
"agent_id": "sales-agent-001",
"collection": "public_docs",
"query_hash": "a3f1...",
"num_chunks_retrieved": 5,
"num_chunks_blocked": 1,
"decision": "allowed",
"policy_triggered": null
}
Raw query text is never logged — only a SHA-256 hash — to avoid leaking sensitive search terms.
Compatibility
Works with any retriever that implements .invoke() or .get_relevant_documents(). LangChain is an optional dependency — agent-rag-governance has no required framework dependencies.
# With LangChain integration
pip install "agent-rag-governance[langchain]"
Related Packages
| Package | Protects |
|---|---|
agent-os-kernel (MemoryGuard) |
Write-time memory poisoning |
agent-rag-governance |
Retrieval-time access control |
agent-os-kernel (ContentGovernance) |
Output-time quality enforcement |
Metadata
Release files for agent-rag-governance 5.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| agent_rag_governance-5.0.0.tar.gz | 32.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agent_rag_governance-5.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.6 kB
Release files / agent_rag_governance-5.0.0.tar.gz
| Download URL | agent_rag_governance-5.0.0.tar.gz |
|---|---|
| Size | 32.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bd9f7b12425d3249ebfad89735df9875674230364b1a70b36f3766d34329e37a
|
|
BLAKE2b-256 checksum How to use checksums |
972087cd105f0dbd171021e0e50cf2124c8db6d44b502daa8a28dd052d49b2a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Release files / agent_rag_governance-5.0.0-py3-none-any.whl
| Download URL | agent_rag_governance-5.0.0-py3-none-any.whl |
|---|---|
| Size | 24.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4486bb2b78884027522b6b71b8e6b67961a9518265c79abb2063e5b1d4bd3330
|
|
BLAKE2b-256 checksum How to use checksums |
f02397917d2594c5d71ec1b043d75b9bce2a72af9c86b0f5baf118efdc7114eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
RestSharp/106.13.0.0
|
Security for agent-rag-governance 5.0.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.