Skip to main content

AI-specific governance for code generated by Claude, Cursor, Copilot, and other AI coding tools

Project description

Saturnday

AI-specific governance for code generated by Claude, Cursor, Copilot, and other AI coding tools.

Your team already uses AI coding tools. Saturnday makes sure what they produce is safe to ship.

What it does

Saturnday runs 18+ automated checks on every PR, catching the things AI gets wrong that humans miss:

  • Hallucinated imports — packages that don't exist on npm or PyPI
  • Fake testsassert True, empty test bodies, tests that test nothing
  • Leaked secrets — API keys, passwords, tokens hardcoded in generated code
  • Syntax errors — code that won't parse (Python and TypeScript/JavaScript)
  • Placeholder code — TODO stubs, pass-only functions, NotImplementedError bodies
  • Typosquat dependencies — suspicious package names that look like popular libraries
  • Prompt injection — system prompt leakage in generated code
  • Security vulnerabilities — via Bandit static analysis
  • Shell script issues — via ShellCheck integration
  • API version mismatches — calling methods that don't exist on the installed library version

Install

pip install saturnday

Usage

Check a PR diff

saturnday check --repo . --diff HEAD~1..HEAD

Scan an OpenClaw skill

saturnday scan --skill ./skills/my-skill/ --output ./results

Scan an entire skills corpus

saturnday scan --openclaw ./openclaw-skills/ --output ./results --format json

GitHub Action

Add this to .github/workflows/saturnday.yml in your repo:

name: Saturnday Governance
on:
  pull_request:
    branches: [main]

permissions:
  contents: read
  pull-requests: write

jobs:
  governance:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: actions/setup-python@v5
        with:
          python-version: '3.12'
      - uses: honouralexwill/saturnday/.github/actions/saturnday-check@master

Every PR gets scanned. Findings are posted as a PR comment. The check fails if the disposition is FAIL.

Policy configuration

Create a saturnday-policy.yaml in your repo root to customise check severity:

schema_version: "1.0.0"

checks:
  secrets: error
  hallucinated_imports: error
  fake_tests: warning
  placeholders: info
  syntax: error

scope:
  denied_paths:
    - "vendor/**"
    - "node_modules/**"

How it works

Saturnday treats AI-generated code as untrusted input. Every diff goes through deterministic verification — no LLM calls in the governance pipeline. The checks are fast, reproducible, and auditable.

Results are written to structured evidence packs that can be stored for compliance and audit purposes.

License

MIT

Project details


Download files

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

Source Distribution

saturnday-0.2.0.tar.gz (145.1 kB view details)

Uploaded Source

Built Distribution

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

saturnday-0.2.0-py3-none-any.whl (96.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: saturnday-0.2.0.tar.gz
  • Upload date:
  • Size: 145.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for saturnday-0.2.0.tar.gz
Algorithm Hash digest
SHA256 208ce3b43b25cf10ef755dc5bb51da9a17909c113f27524cbef12406f82c9dfb
MD5 1add6edc3ee69c950d356f1a704a806d
BLAKE2b-256 4c36205c0762bc5a001099ba6646c896043025fccf621294d7218f53ee8fbd24

See more details on using hashes here.

File details

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

File metadata

  • Download URL: saturnday-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 96.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for saturnday-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a7a29090228716b9f7cd2621f557fcca4c9f9f76eee25b3876b162b5620edc3f
MD5 61c12fe135d90d0cbc22d38b74b29c95
BLAKE2b-256 18ed92d1fd67f7f65417fab324f5e7d3573d449191a53220801f9f6feb03bb64

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 Pingdom Monitoring Sentry Error logging StatusPage Status page