Metadata-Version: 2.5
Name: sengol
Version: 2.0.1a1
Summary: Sengol AI governance SDK
License: LicenseRef-Sengol-Commercial
License-File: LICENSE
Requires-Python: >=3.11
Requires-Dist: aiosqlite>=0.22.1
Requires-Dist: cryptography>=48.0.0
Requires-Dist: httpx>=0.27.0
Requires-Dist: jsonschema>=4.26.0
Requires-Dist: keyring>=24
Requires-Dist: prometheus-fastapi-instrumentator>=8.0.2
Requires-Dist: pydantic>=2.7.0
Requires-Dist: pyjwt>=2.13.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: rfc3161ng>=2.1.3
Requires-Dist: rfc8785<0.2,>=0.1.4
Requires-Dist: rich>=13.0
Requires-Dist: sqlalchemy[asyncio]>=2.0
Requires-Dist: structlog>=25.5.0
Requires-Dist: typer>=0.12.0
Requires-Dist: uuid6>=2024.1.12
Provides-Extra: all
Requires-Dist: alembic>=1.13.0; extra == 'all'
Requires-Dist: anthropic>=0.25; extra == 'all'
Requires-Dist: argon2-cffi>=25.1.0; extra == 'all'
Requires-Dist: asyncpg>=0.29.0; extra == 'all'
Requires-Dist: bcrypt>=5.0.0; extra == 'all'
Requires-Dist: boto3>=1.34; extra == 'all'
Requires-Dist: datasets>=4.8.5; extra == 'all'
Requires-Dist: fastapi>=0.137.2; extra == 'all'
Requires-Dist: garak>=0.9; extra == 'all'
Requires-Dist: mlflow>=2.12; extra == 'all'
Requires-Dist: numpy>=2; extra == 'all'
Requires-Dist: openai>=1.0; extra == 'all'
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.27.0; extra == 'all'
Requires-Dist: opentelemetry-proto>=1.27.0; extra == 'all'
Requires-Dist: opentelemetry-sdk>=1.27.0; extra == 'all'
Requires-Dist: pandas>=2.0; extra == 'all'
Requires-Dist: pyarrow>=24.0.0; extra == 'all'
Requires-Dist: pyjwt>=2.13.0; extra == 'all'
Requires-Dist: pyotp>=2.9; extra == 'all'
Requires-Dist: pyrit>=0.14; extra == 'all'
Requires-Dist: reportlab>=4.5.1; extra == 'all'
Requires-Dist: scikit-learn>=1.8.0; extra == 'all'
Requires-Dist: scipy>=1.17.1; extra == 'all'
Provides-Extra: anthropic-judge
Requires-Dist: anthropic>=0.25; extra == 'anthropic-judge'
Provides-Extra: datasets
Requires-Dist: datasets>=4.8.5; extra == 'datasets'
Requires-Dist: pandas>=2.0; extra == 'datasets'
Requires-Dist: pyarrow>=24.0.0; extra == 'datasets'
Provides-Extra: finetune
Requires-Dist: bitsandbytes>=0.43; extra == 'finetune'
Requires-Dist: peft>=0.11; extra == 'finetune'
Requires-Dist: transformers>=4.44; extra == 'finetune'
Requires-Dist: trl>=0.9; extra == 'finetune'
Provides-Extra: kms
Requires-Dist: boto3>=1.34; extra == 'kms'
Provides-Extra: litellm
Requires-Dist: litellm>=1.0; extra == 'litellm'
Provides-Extra: mcp
Requires-Dist: mcp<2,>=1.0; extra == 'mcp'
Provides-Extra: mlflow
Requires-Dist: mlflow>=2.12; extra == 'mlflow'
Provides-Extra: model
Requires-Dist: numpy>=2; extra == 'model'
Requires-Dist: scikit-learn>=1.8.0; extra == 'model'
Requires-Dist: scipy>=1.17.1; extra == 'model'
Provides-Extra: openai-judge
Requires-Dist: openai>=1.0; extra == 'openai-judge'
Provides-Extra: otlp
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.27.0; extra == 'otlp'
Requires-Dist: opentelemetry-proto>=1.27.0; extra == 'otlp'
Requires-Dist: opentelemetry-sdk>=1.27.0; extra == 'otlp'
Provides-Extra: portkey
Requires-Dist: portkey-ai>=1.0; extra == 'portkey'
Provides-Extra: redteam
Requires-Dist: garak>=0.9; extra == 'redteam'
Requires-Dist: pyrit>=0.14; extra == 'redteam'
Provides-Extra: reports
Requires-Dist: reportlab>=4.5.1; extra == 'reports'
Provides-Extra: s3
Requires-Dist: boto3>=1.34; extra == 's3'
Provides-Extra: saml
Requires-Dist: python3-saml>=1.16; extra == 'saml'
Provides-Extra: server
Requires-Dist: alembic>=1.13.0; extra == 'server'
Requires-Dist: argon2-cffi>=25.1.0; extra == 'server'
Requires-Dist: asyncpg>=0.29.0; extra == 'server'
Requires-Dist: bcrypt>=5.0.0; extra == 'server'
Requires-Dist: fastapi>=0.137.2; extra == 'server'
Requires-Dist: pyjwt>=2.13.0; extra == 'server'
Requires-Dist: pyotp>=2.9; extra == 'server'
Provides-Extra: sqs
Requires-Dist: boto3>=1.34; extra == 'sqs'
Description-Content-Type: text/markdown

# Sengol

Signed, offline-verifiable evidence for AI agents in regulated institutions.

Sengol evaluates every agent response against a ControlBook (a regulation
expressed as configuration), gates deployments in CI, and writes each verdict
as an HMAC-signed, hash-chained, Ed25519-countersigned record. An auditor
verifies the exported evidence pack months later, on a laptop, without Sengol:
the gate verdict and the audit record are the same signed object.

Sengol is self-hosted and single-tenant: one install is one tenant, inside
your own network. Nothing leaves it.

Regulations arrive as configuration: OSFI E-23, FINTRAC, PIPEDA, SR 11-7,
EU AI Act, GDPR, HIPAA, NIST AI RMF, ISO 42001 and more, 29 cataloged total in
`sengol/policies/catalog.yaml`; a custom internal policy is one more entry.

## Fifteen-minute quickstart

```bash
make keys          # Ed25519 evidence signing key into .env
make demo          # Postgres + API + Console, seeded with the reference agent
open http://localhost:8000
sengol gate --config sengol.yaml                      # verdict = signed record
sengol export --agent rag-advisor-001 --out pack.zip
pip install sengol-verify && sengol-verify pack.zip   # verify without Sengol
```

The full walk-through, Entra ID and SCIM setup, and the operator references
are in [`docs/`](docs/) (`quickstart.mdx` first). Product scope is in
[`PRODUCT.md`](PRODUCT.md); current state in [`STATUS.md`](STATUS.md).

## Licence

Sengol 2.0 is proprietary software. A signed licence file
(`SENGOL_LICENSE_FILE`) is verified offline at boot against the public keys in
`sengol/governance/trusted_keys/`; the API and `sengol worker run` refuse to
start without one. The `sengol` CLI is otherwise an API client and needs no
local licence. There is no free
tier. A lapsed licence never costs access to evidence: export and
verification keep working, including with the separate `sengol-verify`. Fourteen-day trials and
licences are issued at <https://sengol.io/signup.html>.

> **A build trusts only the anchors it ships.** From the first release carrying
> the `2026-09-prod` anchor, production licences verify; releases cut before it
> have an empty `trusted_keys/MANIFEST.json` and verify nothing. Check
> `STATUS.md` for the release you are installing.

The verifier, [`sengol-verify`](https://github.com/sengol-io/sengol-verify),
is Apache-2.0 and has no dependency on this package.

## Development

`uv sync --all-extras`, then `uv run pytest --timeout=60`. Tests marked
`postgres` need a live database (`docker compose up postgres`). Invariants and
review rules are in [`AGENTS.md`](AGENTS.md); session rules in
[`CLAUDE.md`](CLAUDE.md).
