Athena SAST CLI
Client for the Athena engine plus a local OWASP CI/CD gate. The engine stays separate; this repo is the public install surface (PyPI, GitHub Releases, GHCR, GitHub Action).
Auth is environment-only. Never pass ATHENA_API_KEY as a flag. Never commit .env.
Install
pip (PyPI)
pip install athena-sast
export ATHENA_API_URL="https://YOUR_ENGINE"
export ATHENA_API_KEY="..." # never a flag
athena scan --repo https://github.com/ORG/APP.git --branch main --fail-on high
ATHENA_API_URL is required for engine scans. Set it in the environment (or a secret store). It is not hardcoded in the CLI. Do not put the engine hostname in this repo, issues, or examples.
GitHub Release binary
Download athena-<version>-linux-x64 (or macos-arm64 / windows-x64.exe) and SHA256SUMS from Releases.
chmod +x athena-*-linux-x64
export ATHENA_API_URL="https://YOUR_ENGINE"
export ATHENA_API_KEY="..."
./athena-*-linux-x64 scan --repo https://github.com/ORG/APP.git --branch main --fail-on high
Docker (GHCR)
Runtime env only. The image does not contain keys.
docker run --rm \
-e ATHENA_API_URL \
-e ATHENA_API_KEY \
-v "$PWD":/src -w /src \
ghcr.io/axiler-sec/athena-sast-cli \
scan --repo https://github.com/ORG/APP.git --branch main --fail-on high
GitHub Action (any app repo)
Pin a 40-character commit SHA. Do not use @main. Composite actions cannot read secrets.*; put them on the job env:.
name: Athena SAST
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
security-events: write
jobs:
scan:
runs-on: ubuntu-latest
env:
ATHENA_API_URL: ${{ secrets.ATHENA_API_URL }}
ATHENA_API_KEY: ${{ secrets.ATHENA_API_KEY }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: Axiler-Sec/athena_sast_cli@<40-char-sha>
with:
repo: https://github.com/${{ github.repository }}.git
branch: ${{ github.ref_name }}
fail-on: high
Replace the Action SHA with a real 40-character SHA from this repository (example shape only above). Use pull_request, never pull_request_target with a checkout of the PR head. See SECURITY.md.
Local gate only (no engine secrets): omit repo / unset ATHENA_API_KEY and use modes: pipeline. Do not put localhost in a GitHub secret.
Two modes
Local OWASP CI/CD gate (no API key):
athena scan tests/targets/bad_pipeline.yml
athena owasp
This regex gate scans pipeline YAML, IaC, and source for OWASP CI/CD Security Cheat Sheet risks (CICD-SEC-1 through CICD-SEC-10). It is not as deep as the engine's OpenGrep / Trivy / KICS / Syft analysis. Findings are tagged source: local_owasp.
Engine client (requires env):
export ATHENA_API_URL="https://YOUR_ENGINE"
export ATHENA_API_KEY="..." # never a CLI flag
export ATHENA_REPO_TOKEN="..." # private repos
athena scan --repo https://github.com/ORG/APP.git --branch main \
--modes code-review,secrets,iac,sca,pipeline \
--format sarif --output athena-results.sarif --fail-on high --quiet
Engine findings are tagged source: engine. Identifiers (CVE/CWE/CVSS) are passed through when the engine sends them and omitted when it does not.
Honesty
- The engine product agents do not return SARIF. Athena builds SARIF 2.1.0 and labels it
sarif_source: cli_normalized. athena complianceprints mapped controls, not a certification.- Exit codes are a frozen contract:
0clean,1findings at/above--fail-on,2tool/auth/config error. athena monitorrecords a snapshot: same scan, never exit 1. Without Mongo,snapshot: local_only.
Develop from source
cd athena-sast-cli
python3 -m pip install pytest
python3 athena.py version
python3 -m unittest discover -s tests -v
Cursor MCP (this machine only)
Copy examples/mcp.json.example into a local MCP config. athena mcp is stdio — not a network service. Tool text is redacted.
Product documentation
- SECURITY.md — reporting and secret handling
License
Apache-2.0
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file athena_sast-1.1.1.tar.gz.
File metadata
- Download URL: athena_sast-1.1.1.tar.gz
- Upload date:
- Size: 37.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b284f4d013c6bc62e30698067bff00f99da3a17113e450e0be63683dea63f21
|
|
| MD5 |
7ccfcbaa7e6ee291cf0efc7ad2c6a0bf
|
|
| BLAKE2b-256 |
365a95bb4dff9417ac6e1a714ad2340b3c0a7e85f0247a7aa37b978343534d3e
|
Provenance
The following attestation bundles were made for athena_sast-1.1.1.tar.gz:
Publisher:
release.yml on Axiler-Sec/athena_sast_cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
athena_sast-1.1.1.tar.gz -
Subject digest:
1b284f4d013c6bc62e30698067bff00f99da3a17113e450e0be63683dea63f21 - Sigstore transparency entry: 2781852552
- Sigstore integration time:
-
Permalink:
Axiler-Sec/athena_sast_cli@b232a71b897f5cbce94cae160463433c213a7cc9 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/Axiler-Sec
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b232a71b897f5cbce94cae160463433c213a7cc9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file athena_sast-1.1.1-py3-none-any.whl.
File metadata
- Download URL: athena_sast-1.1.1-py3-none-any.whl
- Upload date:
- Size: 39.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90752d6cf4ee9e460af4d9da83b80d17df2e35d8b80a81695895fb359c473a5d
|
|
| MD5 |
a0747b89d50eb8ef1568f1ae5047174e
|
|
| BLAKE2b-256 |
de614538e7b3526ab4dfa5c7773cfc8f8bebe9adf085667996594b06f0d3ba2a
|
Provenance
The following attestation bundles were made for athena_sast-1.1.1-py3-none-any.whl:
Publisher:
release.yml on Axiler-Sec/athena_sast_cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
athena_sast-1.1.1-py3-none-any.whl -
Subject digest:
90752d6cf4ee9e460af4d9da83b80d17df2e35d8b80a81695895fb359c473a5d - Sigstore transparency entry: 2781852591
- Sigstore integration time:
-
Permalink:
Axiler-Sec/athena_sast_cli@b232a71b897f5cbce94cae160463433c213a7cc9 -
Branch / Tag:
refs/tags/v1.1.1 - Owner: https://github.com/Axiler-Sec
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b232a71b897f5cbce94cae160463433c213a7cc9 -
Trigger Event:
push
-
Statement type: