Observed since 20 Oct, 20:19 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Private, explainable release-security scanner and self-hosted workbench
Private, explainable security gates for small engineering teams.
Aegis scans source code, dependencies, secrets, containers, and running test targets; turns the results into an allow, block, or operational-error decision; and keeps the evidence in a self-hosted project workspace.
Use it as:
[!IMPORTANT] Aegis is ready for local evaluation and controlled single-customer pilots. Production deployment still requires an operator to provision secrets, backups, monitoring, and—if Deep scans are enabled—an isolated Docker-capable worker. This release is not presented as a public shared multi-tenant service.
Many small teams want a dependable release-security check without sending private source code to another hosted platform or assembling five unrelated scanner reports by hand.
Aegis provides one workflow:
| Goal | Start here | Requirements |
|---|---|---|
| Try the scanner | CLI evaluation | Python 3.11+ |
| Run the complete workbench locally | Local workbench | Source checkout, Docker, Compose v2 |
| Gate a repository in CI | GitHub Action | A GitHub workflow |
| Operate an internal pilot | Production pilot | DNS, TLS, PostgreSQL, Redis, workers, backups |
Install a published Aegis release in an isolated environment:
pipx install aegis-security-console
For Standard scans with Semgrep included, install the scanner extra:
pipx install "aegis-security-console[scanner]"
If PyPI reports that no matching distribution exists before the first tagged release is published, install the current repository revision instead:
pipx install "git+https://github.com/huslenine999/aegis.git#egg=aegis-security-console[scanner]"
Check the available scanner dependencies, then run the built-in demonstration:
aegis doctor
aegis demo --open
The demo creates a tiny intentionally vulnerable application. A blocked verdict is expected.
Scan your own repository:
cd your-project
aegis scan . --fast
For a release or CI gate, use strict mode so missing scanner evidence is never treated as a clean result:
aegis scan . \
--strict \
--fail-on medium,high,critical \
--output .aegis/reports \
--sarif .aegis/reports/aegis.sarif
Exit codes are stable and intended for automation:
| Code | Decision |
|---|---|
0 | Allowed by policy |
1 | Blocked by security findings |
2 | Scanner, configuration, or operational failure |
Other useful commands:
aegis scan . --no-docker # Skip Docker, Trivy, and DAST
aegis scan . --json --quiet # Machine-readable result
aegis report --open # Open the latest HTML report
aegis install-hook # Add a Git pre-push gate
aegis verify-evidence ./scan-manifest.json --public-key YOUR_PINNED_KEY
The full workbench is started from a source checkout because the scanner-only Python package does not include the Compose topology and deployment configuration.
git clone https://github.com/huslenine999/aegis.git
cd aegis
python3 -m venv venv
./venv/bin/python -m pip install -e ".[dev,scanner]"
./venv/bin/aegis start
aegis start checks Docker and local ports, generates owner-only development
secrets in .env.aegis, starts the stack, waits for readiness, and opens the
one-time setup wizard at http://localhost.
To leave the browser closed or inspect startup directly:
./venv/bin/aegis start --no-open
./venv/bin/aegis logs --follow
After signing in:
Stop the stack without deleting its data:
./venv/bin/aegis stop
The web application turns one-off scanner output into an operational workflow:
| Preset | Intended use | Runtime expectation |
|---|---|---|
| Quick | Developer feedback | Fast local checks; expensive and external scanners are skipped |
| Standard | Pull requests and branch gates | Static analysis, dependencies, secrets, and signature checks |
| Deep | Controlled release audit | Standard checks plus sandbox execution, DAST, and container analysis |
Deep scans are deliberately not enabled by the default local topology. They are sent to a dedicated queue and require a worker that advertises the isolated capability and has access to a reviewed Docker runtime and Trivy. Provision that worker on infrastructure intended for hostile source code; do not mount a production host Docker socket into the dashboard.
| Area | Implementation |
|---|---|
| Python security analysis | Ruff security rules |
| Pattern analysis | Semgrep and Aegis rules |
| Dependency vulnerabilities | OSV; optional licensed Safety integration |
| Secrets | detect-secrets |
| Malware and signatures | YARA and ClamAV-compatible checks |
| Containers and filesystems | Trivy when the approved Docker runtime is available |
| Dynamic behavior | Isolated sandbox and Aegis DAST probes |
| Correlation and gating | Versioned severity policy and audited suppressions |
Requested scanner failures are recorded as operational failures. Use strict mode for any release decision.
Aegis discovers aegis.yml, aegis.yaml, .aegis.yml, or .aegis.yaml from
the scan target upward. Command-line options override file configuration.
scan:
no_docker: true
fail_on: medium,high,critical
timeout: 120
sarif: .aegis/reports/aegis.sarif
exclude_paths:
- tests/fixtures
suppressions:
- tool: Ruff
rule: S103
path: app/cli.py
reason: Required executable permission for the generated Git hook.
approved_by: application-security
ticket: SEC-123
expires_at: 2027-07-20
A suppression is active only when it includes a meaningful reason, approver,
tracking ticket, and future ISO-8601 expiry. Applied, invalid, and expired
exceptions are written to suppressions-report.json; malformed exceptions never
hide findings.
Use the repository Action as a fail-closed pull-request gate:
name: security
on:
pull_request:
jobs:
aegis:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@<reviewed-commit-sha>
- name: Aegis security gate
uses: huslenine999/aegis@<reviewed-commit-sha>
with:
scan-target: .
no-docker: "true"
fail-on: medium,high,critical
Pin Aegis and every third-party Action to reviewed immutable commit SHAs in a protected production workflow.
For repository import, exact-head pull-request checks, and remediation tickets, follow the GitHub integration guide.
The supported production shape is one isolated Aegis deployment per customer or trust boundary.
Start with the environment template:
cp .env.production.example .env
Replace every placeholder, point AEGIS_DOMAIN at the host, and validate the
configuration before exposing the service:
docker compose config
docker compose up --build -d
curl https://aegis.example.com/health
curl https://aegis.example.com/ready
Production mode fails closed when required authentication, PostgreSQL, Redis, workers, notifier, host/origin allowlists, or secrets are missing.
Before giving a team access, complete all of the following:
scripts/pilot_readiness.py and a canary repository scan;AEGIS_ALLOW_DEEP_SCANS.S3 and OIDC adapters are included, but Aegis does not provision the provider, bucket, KMS policy, DNS, TLS, Docker isolation, or disaster-recovery environment for you. Those controls must be configured and reviewed in the deployment where Aegis runs.
See the production guide, operations and recovery runbook, and controlled pilot runbook.
flowchart LR
User["Browser / API"] --> Proxy["Caddy TLS proxy"]
GitHub["GitHub App / OAuth"] --> Proxy
Proxy --> API["FastAPI dashboard"]
API --> DB["PostgreSQL"]
API --> Redis["Redis queues and live state"]
Redis --> Worker["Standard scan worker"]
Redis --> Deep["Isolated deep worker"]
Redis --> Notifier["Notifier worker"]
Worker --> Evidence["Local or S3 evidence"]
Deep --> Evidence
API --> Evidence
Notifier --> Channels["Slack / Teams / Email / Webhooks"]
The dashboard authorizes users and projects. Scanner workers process untrusted source. The notifier owns outbound notification credentials. PostgreSQL stores identity, project, policy, finding, audit, and scan metadata. Redis contains bounded transient job state rather than authoritative evidence.
Important controls include:
Aegis still executes security tooling against untrusted source. Treat worker compromise as a realistic threat, keep production credentials out of workers, and review the threat model before deployment.
Common stack commands:
aegis logs --follow
aegis backup --output backups/aegis.zip
aegis restore backups/aegis.zip --yes
aegis upgrade
aegis stop
Health and monitoring endpoints:
| Endpoint | Purpose |
|---|---|
/health | Process liveness |
/ready | Database, Redis, standard worker, notifier, and enabled deep-worker readiness |
/metrics | Bearer-protected Prometheus metrics |
Open /admin for users, roles, API tokens, audit verification, diagnostics, and
recent request telemetry. Redis events are transient and are not included in
backups.
Install development and browser dependencies:
python3 -m venv venv
./venv/bin/python -m pip install -e ".[dev,scanner]"
npm ci
npx playwright install chromium
Run the complete repository readiness gate with one command:
make verify
For a quick local loop without browser tests or mypy, run make verify-fast.
Before a controlled pilot, also generate the operator-facing readiness artifact:
./venv/bin/python scripts/pilot_readiness.py \
--output .aegis/pilot-readiness.json
The current baseline is:
The benchmark is useful regression evidence, not an independent certification or a substitute for testing Aegis against representative repositories.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 2.4.0 | 22 Jul 2026 | 27 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 20:19 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:682cc891623b85f9007114453e693f427d722a3ca2ed0b272c83e24dd7f6c1dc