Skip to main content

aicomply (Python)

Inline PII, credential, and regulated-data classifier for AI agent I/O. Catch sensitive content before your agent forwards it to a hosted LLM.

Dual-layer by design: a deterministic regex layer (PII, credentials, controlled markings) that runs always, plus an optional semantic Guard layer when a local nanomind-daemon is reachable. The regex layer sees through common evasions — Unicode homoglyphs (NFKC), zero-width characters, intra-token whitespace, and bounded Base64 / URL-encoded payloads — by normalizing the input before matching.

This is the Python port of @opena2a/aicomply. It reproduces the TypeScript detection baseline against the same shared corpus (bench/corpus), so verdicts agree across languages.

Install

pip install aicomply

Try it (CLI)

No integration code required — point it at a file or pipe content in:

echo "My SSN is 123-45-6789" | aicomply scan
aicomply scan ./support-ticket.txt
cat transcript.log | aicomply scan --json

Exit codes make it a drop-in CI gate: 0 CLEAN, 1 findings present, 2 usage error.

Library API

from aicomply import comply

result = comply("Customer SSN is 516-81-3086, card 5544939082323438.")

print(result.verdict)                       # "VIOLATION"
for v in result.violations:
    print(v.type, v.value, v.confidence)     # SSN 516...86 0.95  (value is masked)

comply() returns a ComplyResult with:

  • verdict"CLEAN", "VIOLATION", or "DENY"
  • violations — each with type, masked value, confidence, classifier, view (which content view caught it), and best-effort original_start/end
  • original_content / normalized_content / normalizations — an audit trail (omitted on DENY, where the input is treated as untrusted bytes)
  • .to_dict() — camelCase JSON wire-compatible with the npm package

Empty string short-circuits to CLEAN; non-str input raises TypeError.

Guard an agent's output

Drop one decorator above any function that emits text bound for an LLM or a user:

from aicomply.integrations import guard_output, ComplianceViolation

@guard_output()                       # raise on any PII/credential egress
def answer(user_msg: str) -> str:
    return call_llm(user_msg)

@guard_output(on_violation="redact")  # or mask findings in place
def answer_redacted(user_msg: str) -> str:
    return call_llm(user_msg)

guard_io() additionally scans string inputs on the way in.

LangChain

pip install 'aicomply[langchain]'
from langchain_openai import ChatOpenAI
from aicomply.integrations.langchain import AIComplyCallbackHandler

llm = ChatOpenAI(callbacks=[AIComplyCallbackHandler()])
llm.invoke("Summarize this support ticket: ...")   # raises if the LLM emits PII

Semantic Guard layer (preview, not production-ready)

The regex layer is deterministic, always on, and is the production surface. The optional Guard layer targets prompt-injection / exfiltration patterns that regex cannot see, but the current model (nanomind-security-classifier tme-v0.5.0) over-flags benign text: measured 2026-06-25, 7 of 10 ordinary-benign sentences were flagged as an attack class at greater than 0.99 confidence at the default 0.8 threshold. Treat it as a preview, not for production gating, until a recalibrated model ships.

The daemon ships on npm, not PyPI (npm i -g @nanomind/daemon && nanomind-daemon start); it is a local HTTP server this Python client calls. When it is reachable on 127.0.0.1:47200 the dual-layer classifier consults it and merges the verdict (highest severity wins). Its absence never fails a request: the classifier falls back to regex-only.

Detection classes

SSN, PAN (Luhn + IIN), credentials (AWS keys, GitHub tokens, Bearer tokens, api_key= patterns), CUI / controlled markings, IBAN (mod-97), passport numbers, MRN, NPI (Luhn with 80840 prefix).

Scope

This port covers the deterministic detection layer (regex + normalization + dual-layer merge + verdict) plus the daemon Guard client. The TypeScript package's Registry-L2, ARP-signature, policy-pack, and session-vault features are not yet ported.

License

Apache-2.0.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aicomply-0.3.0.tar.gz (27.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aicomply-0.3.0-py3-none-any.whl (35.4 kB view details)

Uploaded Python 3

File details

Details for the file aicomply-0.3.0.tar.gz.

File metadata

  • Download URL: aicomply-0.3.0.tar.gz
  • Upload date:
  • Size: 27.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aicomply-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4a9ae05a21f2c898e7b4f2bc35c6523cf9dd31805269d92dd6b42bcf4f6b5386
MD5 32c16ef4ef613c4fcaf778cde1aba722
BLAKE2b-256 42f8e759f03c004974cecb19c3c23fdf52c6ea6db69c4ed9a5a3f1933e9ba7ef

See more details on using hashes here.

Provenance

The following attestation bundles were made for aicomply-0.3.0.tar.gz:

Publisher: release-python.yml on opena2a-org/aicomply

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aicomply-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: aicomply-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 35.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aicomply-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b960aa69a3ab45329d3dd7f66d550ac5c781f1417531761728b1fd03a2bf75b6
MD5 0f98e0b90372946c3e47c980497c63ab
BLAKE2b-256 2a0a3f18e6df4fee74117e8bbb05c8cdb20aade3bd66e1ab367bbdc40d37ff78

See more details on using hashes here.

Provenance

The following attestation bundles were made for aicomply-0.3.0-py3-none-any.whl:

Publisher: release-python.yml on opena2a-org/aicomply

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.3.1

2 files

This release

0.3.0 This release

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page