Skip to main content

AI-Offboard

The AI tool audit + offboarding report you hand your insurance agent.

SMBs and MSPs have a loud, unfilled problem: no one can catalog the AI tools running in a tenant, see what data they touch, or prove on departure that access was revoked. Enterprise DLP vendors chase the big-org blocking market and skip the small-org audit-and-revoke-at-departure moment. ai-offboard closes that gap with a read-only scanner that produces the compliance artifact an insurer, SOC2, or renewal actually accepts.

Read-only by design. v1 makes zero writes: it never disables an account, never revokes a token, never changes anything. It audits and reports. The plan it produces is a dry-run checklist for a human to approve.

What it does

  • Enumerates users, app assignments, and service-principal grants in a Microsoft 365 tenant
  • Maps them to an AI-app catalog with DLP-risk tiers (high/medium/low)
  • Flags risky access: stale access on departure, MFA gaps, unused high-tier seats, broad high-privilege grants
  • Emits a dry-run revocation plan (execute nothing)
  • Renders a plain-English audit report (.md + .html) an auditor can read

Quick start

Try the demo now (no Azure required)

pip install -e ".[web]"
offboard web                 # local web UI, then click "Run demo scan"
offboard audit --tenant demo --mock  # or a terminal report

Connect your tenant (interactive, recommended)

One command — no App Registration, no tenant ID, no client secret. Sign in as a Global Administrator via Microsoft's device code flow; the tenant ID is automatically detected from the token:

offboard auth login         # copy the code → microsoft.com/devicelogin → done
offboard audit              # scan your tenant

On subsequent runs the cached token is reused silently.

Connect your tenant (CI / service account)

For automation, still supports client credentials via an Azure App Registration:

offboard setup                          # guides through App Registration + writes .env
offboard audit --tenant <id>            # scan to terminal
offboard audit --tenant <id> --report   # write report.md + report.html
offboard plan --user <upn>              # dry-run revocation steps (executes nothing)

Zero Trust policy engine (v3)

Turn the inventory into enforceable policy. Policies are declarative YAML using named checks only (no arbitrary expressions, so opening a policy file never executes code). The bundled baseline ships five policies:

offboard policy list            # see checks + bundled policies
offboard policy check           # scan tenant, evaluate policy, exit 0 on PASS / 2 on FAIL
offboard policy check --json    # machine-readable compliance report

Bundled policies:

  • ZT-001 No stale or orphaned access
  • ZT-002 MFA enforced on all principals
  • ZT-003 No high-privilege AI app assignments
  • ZT-004 No broad OAuth grants
  • ZT-005 Approved AI-app allowlist (default-deny Zero Trust)

Bring your own policies: drop a .yml file into offboard/policies/default/ (or pass a path to the loader) with the same policies: structure.

Power features

Execute remediation (v2 — writes to the tenant)

offboard execute turns the audit findings into real actions, behind an explicit approval gate. Every mutation is appended to the local audit log:

offboard plan --tenant <id>       # review what will change (read-only)
offboard execute --tenant <id>    # approve each step, then it applies:
                                  #   block sign-in, revoke tokens, remove app assignment

Use --yes to skip the interactive confirmation (CI/automation), and --target <upn-or-app> to limit execution to one subject.

Scheduled recurring audits

offboard schedule add <tenant-id> --interval weekly   # daily | weekly | monthly
offboard schedule list
offboard schedule run-due         # drive from cron / Task Scheduler (offboard schedule run-due)

Reports are written to reports/ and emailed when SMTP is configured (OFFBOARD_SMTP_HOST, OFFBOARD_SMTP_PORT, OFFBOARD_SMTP_USER/PASS, OFFBOARD_MAIL_FROM, OFFBOARD_MAIL_TO).

Multi-tenant (MSP mode)

offboard tenant add <tenant-id> --name "Acme Corp"
offboard tenant list
offboard audit --all              # sweep every registered tenant into a matrix

Trend comparison

offboard audit --tenant <id>      # scan + auto-save (twice for a trend)
offboard report --compare         # diff the last two scans: new vs resolved findings
offboard report --last            # re-render the last saved scan

Exports

offboard audit --json             # findings as JSON to stdout
offboard audit --csv              # findings to ai-offboard-findings.csv (MSP tooling friendly)
offboard audit --report           # markdown + html report files

Google Workspace

export GOOGLE_SERVICE_ACCOUNT_JSON=/path/to/service-account.json
export OFFBOARD_GOOGLE_ADMIN="admin@yourdomain.com"
offboard audit --workspace       # reads users + their OAuth-connected AI apps

The Workspace connector maps each user's granted third-party apps (ChatGPT, Fireflies, Zapier, …) into the same risk rules as the Entra connector.

Screenshots

Landing page — run a live scan or a one-click demo (no Azure required):

ai-offboard landing

Audit report — stat cards, AI app inventory with DLP-risk tiers, per-finding remediation steps, and .md / .html downloads:

ai-offboard report

Reproduce with offboard web then python scripts/capture_screenshots.py.

Sample output

Run offboard audit --tenant demo --mock (or the web UI) to see a live report. A representative report renders like this:

# AI-Offboard Audit Report

- **Tenant:** demo
- **Principals scanned:** 3
- **App assignments:** 2

| Severity | Rule | Subject | Evidence |
| --- | --- | --- | --- |
| medium | R1 | stale@example.com | Account is disabled in directory. |
| high   | R2 | nomfa@example.com | Account lacks enforced MFA registration. |
| high   | R4 | Microsoft 365 Copilot | High-privilege app has an active assignment. |

v1 scope

  • Two auth modes: interactive device-code login (offboard auth login, no tenant ID needed) or client credentials (CI/service accounts via App Registration).
  • Read-only Microsoft Entra ID connector (Graph, GET-only)
  • AI-app catalog (apps.json) with DLP-risk tiers
  • Risk rules → findings (stale access, MFA gaps, unused high-tier seats, broad grants)
  • Dry-run revocation plan + audit report (MD + HTML)
  • Local web UI (offboard web) with "Connect Microsoft 365" flow
  • Mock/demo mode (--mock) so anyone can evaluate with zero creds

Not in v1: write/execute revocation, Google Workspace connector, DB, multi-tenant SaaS. See SPEC.md for the roadmap.

Install

# Core CLI (no web UI)
pipx install .                        # or: pip install -e .

# With the local web UI
pip install -e ".[web]"

Requires Python 3.11+. The wheel ships the app catalog and web templates, so a normal pip install is whole (4 data files verified in the built wheel).

Contributing

The fastest way in is a one-PR apps.json catalog entry. See CONTRIBUTING.md.

Security

Read-only by design; v1 makes zero mutating Graph calls. See SECURITY.md.

License

Apache-2.0. See LICENSE.

Download files

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

Source Distribution

ai_offboard-0.2.0.tar.gz (56.8 kB view details)

Uploaded Source

Built Distribution

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

ai_offboard-0.2.0-py3-none-any.whl (63.0 kB view details)

Uploaded Python 3

File details

Details for the file ai_offboard-0.2.0.tar.gz.

File metadata

  • Download URL: ai_offboard-0.2.0.tar.gz
  • Upload date:
  • Size: 56.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for ai_offboard-0.2.0.tar.gz
Algorithm Hash digest
SHA256 bbc3728a2b83fe6125201546e6882733ce23e29f1d4fb69ff9eeb355dcf37843
MD5 e8efc99e236750341e9e8aef37966463
BLAKE2b-256 3219643789f382090f842defe708c3a3a147042b0e4df70e1987dd1a9b253a1b

See more details on using hashes here.

File details

Details for the file ai_offboard-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ai_offboard-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 63.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for ai_offboard-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 27657d92db04a88049b6be3c34a34fd64d23b5abf688969ab3f3287fc3b175dd
MD5 42215b86f079dec86acbe35386ec916b
BLAKE2b-256 975f2f8057e5f939090889dbba3ef6bffe005ebaefaf3bd90b720f957c6f8b61

See more details on using hashes here.

Supported by

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