Skip to main content

Execution governor for AI-generated code — Guard, Run, and Repair in one package

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

Run — governed execution

Turn a brief into governed tickets and execute them with your AI coder.

saturnday plan --brief "Build a calculator skill" --repo . --backend codex-cli
saturnday run --plan plan.json --repo . --backend codex-cli
saturnday resume --plan plan.json --repo . --backend codex-cli

Repair — fix findings automatically

Scan, generate repair tickets, and execute fixes.

saturnday repair --skill . --dry-run
saturnday repair --skill . --backend codex-cli

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.3.1.tar.gz (361.3 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.3.1-py3-none-any.whl (265.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for saturnday-0.3.1.tar.gz
Algorithm Hash digest
SHA256 09463f68f08bfcedec5ad2eff2e5e22ed8c1837112a23d984049d7ec231f3967
MD5 f9b68577869bbdcbdfb230ccfbb9bb3f
BLAKE2b-256 11a92c37ea2001b1342e809d66da5799f1cfc8dd71b9745395b8ef8507115590

See more details on using hashes here.

File details

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

File metadata

  • Download URL: saturnday-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 265.5 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.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a048058ee671f0af8421625efac9187ecc4e165023a2657db50661283220a055
MD5 062fe6f1c78c04f92c089f0a88bc356d
BLAKE2b-256 75f0bd6b7503c7f49285e5dd845737fa96f944bee91b39d0db23c159f7247632

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