Skip to main content

overgrant v0.1

Find what your AI coding agents were granted that they should not have.

Scan local Claude Code, Codex, Cursor, and MCP configuration for risky settings. Python 3.12+, standard library only at runtime. No account or network is needed.

30-second quickstart

Run it without installing (needs uv):

uvx overgrant scan .            # this repo
uvx overgrant scan . --home     # plus your user config

Or install it: pipx install overgrant, then overgrant scan . --home. From a source checkout: python3.12 -m overgrant.cli scan . --format sarif > report.sarif.

An installed package also provides overgrant scan. PATH defaults to the current directory. --home explicitly adds user configuration. --format accepts text (default), json, or SARIF 2.1.0 (sarif). Exit status is 0 below the threshold, 1 for a finding at or above --fail-on (high by default), and 2 for invalid usage or an inaccessible repository directory. Thresholds: low, medium, high, critical. Parse errors, unreadable files, and oversized files appear as notes; they do not count as findings or change the exit status, so inspect notes before treating a report as complete.

Repo scope reads only .claude/settings.json, .claude/settings.local.json, .mcp.json, .codex/config.toml, .cursor/mcp.json, .cursor/permissions.json, and .cursor/sandbox.json. Root .env* filenames are checked using metadata. User scope adds ~/.claude/settings.json, ~/.claude.json, ~/.codex/config.toml, and those three Cursor files under ~/.cursor/. For ~/.claude.json, only mcpServers and projects.*.mcpServers are scanned.

Each finding includes a rule ID, severity, file, JSON pointer or TOML key path, one-sentence explanation, remediation, and source URL. MCP server commands/URLs and Cursor sandbox boundaries are displayed with secrets redacted. SARIF maps critical/high to error, medium to warning, low to note, preserving the original severity and key path in result properties.

Rules

ID Severity Detects
CC001 critical User permissions.defaultMode = bypassPermissions
CC002 low Repo defaultMode requests bypassPermissions or auto
CC003 high Bare Bash or broad shell/interpreter wildcard allow entries
CC004 high Repo hooks, which can run before trust in unattended/trusted-parent use
CC005 high Repo apiKeyHelper
CC006 high Repo _BASE_URL, proxy, or NODE_OPTIONS environment overrides
CC007 medium User enableAllProjectMcpServers: true
CC008 low Root .env* files without either documented Claude read denial
MCP001 high Literal secrets in MCP env, headers, or http_headers
MCP002 medium Unpinned npx, uvx, pipx run, bunx, or pnpm dlx packages
MCP003 medium Remote HTTP MCP URL, except localhost, 127.0.0.1, or ::1
MCP004 high Repo .mcp.json or .cursor/mcp.json servers and their launches
CX001 critical Codex sandbox_mode = "danger-full-access"
CX002 medium Codex approval_policy = "never"
CX003 high Codex shell inherits all environment variables
CX004 medium Codex default or per-tool MCP auto-approval
CX005 medium Codex workspace sandbox network access
CX006 low Codex trusts / or the home directory
CX007 high Repo .codex/config.toml, loaded once the project is trusted
CU001 high Repo Cursor sandbox settings, including read boundaries/paths
CU002 medium Repo Cursor permissions
SEC001 high Known token prefixes anywhere in scoped config values; deduped with MCP001
GEN001 medium Repo config path is a symlink

Rule definitions and vendor references are in SPEC.md. Detection is static: it cannot prove that a token is valid, a command is safe, or an agent will apply a setting in a particular session.

What it never does

  • Executes commands, hooks, helpers, imports, or package launchers from configs.
  • Fetches URLs, makes network calls, installs packages, or contacts a service.
  • Fixes files, changes permissions, writes reports itself, or modifies configs.
  • Opens .env* contents or recursively searches a repository or home directory.
  • Follows repo symlinks, including symlinked config directories.
  • Reads more than 5 MB plus one size-check byte per config; larger files are skipped with a note (known oversized files are skipped before reading).
  • Echoes malformed file contents or parser exception text.
  • Prints literal detected secrets: output shows the first four characters, …, and the value's length. Unrecognized secrets outside MCP secret fields are beyond these v0.1 rules; review reports before sharing them.

Development

The preinstalled development tools can run fully offline:

.venv/bin/pytest -q
.venv/bin/ruff check .

Fixtures are synthetic and created under pytest's tmp_path. Every test uses a fake HOME and patched Path.home; tests never scan the operator's home.

Metadata

Release files for overgrant 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for overgrant 0.1.0
File Size Uploaded Provenance Actions
overgrant-0.1.0.tar.gz 31.4 kB Without provenance Details for overgrant-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for overgrant 0.1.0
File Interpreter ABI Platform Actions
overgrant-0.1.0-py3-none-any.whl Python 3 none any Details for overgrant-0.1.0-py3-none-any.whl

Total release size: 48.3 kB

Release files / overgrant-0.1.0.tar.gz

Download URL overgrant-0.1.0.tar.gz
Size 31.4 kB
Tags Source
SHA-256 checksum
How to use checksums
896a98203fc58f0defa43f125a988f7cce128e8681a4ba37efca704179e78080
BLAKE2b-256 checksum
How to use checksums
f276928231d54049c02d16b15c8fe5d36891f534505fac247b9058b7a33c4624
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / overgrant-0.1.0-py3-none-any.whl

Download URL overgrant-0.1.0-py3-none-any.whl
Size 16.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4d73501d355096c254a2ad5d9b456c64e2f75dbd5be08625e715a58380efa1d2
BLAKE2b-256 checksum
How to use checksums
02428ba4e0b0c2ef13aa50b448ce539df5a960b1bd77a4b2e0728eaea42c42ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for overgrant 0.1.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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page