Developer security platform — write-time, commit-time, and runtime protection
Project description
ekmire
Developer security platform — write-time, commit-time, and runtime protection.
pip install ekmire
ekmire init
Features
| Feature | Flag / Command | What it does |
|---|---|---|
| Build Guard (SAST) | ekmire scan |
Detects secrets, injection, AI security risks in source code |
| SCA — dependency CVEs | --deps |
Scans lockfiles against the OSV database for known CVEs |
| Reachability analysis | --reachability |
Tags AST findings as reachable or not via call-graph analysis |
| CycloneDX SBOM | --output cyclonedx |
Emits a CycloneDX 1.5 SBOM (SAST + SCA combined) |
| SARIF | --output sarif |
Uploads findings to GitHub Code Scanning |
| Dev Audit | ekmire dev-audit |
AI-powered security review of a file, dir, or staged diff |
| MCP Audit | ekmire mcp audit |
Scans all IDE MCP server configs for exposure and poisoning risks |
| Pre-commit hook | ekmire hook install |
Blocks commits with critical findings |
Quick start
# Install
pip install ekmire
# First-run wizard: auth → scan → hook install
ekmire init
# Scan current directory
ekmire scan --deep .
# Also scan lockfiles for CVEs (SCA)
ekmire scan --deep . --deps
# Tag findings with reachability (AST engine, Python files)
ekmire scan --deep . --reachability
# Output SARIF for GitHub Code Scanning
ekmire scan --deep . --deps --output sarif > results.sarif
# Output CycloneDX SBOM (SAST + SCA)
ekmire scan --deep . --deps --output cyclonedx > sbom.cdx.json
# AI security review of a file or staged diff
ekmire dev-audit src/auth.py
ekmire dev-audit --diff
# Scan all IDE MCP configs
ekmire mcp audit
scan command
ekmire scan [PATH] [OPTIONS]
| Option | Default | Description |
|---|---|---|
--deep |
off | Recursive scan without requiring git context |
--all |
off | Scan all files in working directory |
--deps |
off | Also scan lockfiles for CVEs via OSV (SCA) |
--reachability |
off | Tag AST findings with reachability analysis (slower) |
--output |
text |
Output format: text, json, sarif, cyclonedx |
--fail-on |
none | Exit 1 if findings at or above this severity exist |
Detection engines
Engine A — regex (cross-language, fast)
Applied to raw file content. Detects hardcoded secrets, prompt injection patterns, XSS risks, and misconfigured MCP server URLs.
Engine B — AST (Python only)
Structural analysis using Python's ast module. Detects:
HARDCODED_SECRET_GENERIC— high-entropy strings in secret-named variablesSQL_INJECTION_RISK— f-strings or concatenation insideexecute()DANGEROUS_DESERIALISATION—pickle.loads()/marshal.loads()UNSAFE_YAML_LOAD—yaml.load()withoutSafeLoaderCOMMAND_INJECTION_RISK— dynamic args tosubprocess.run()/os.system()MCP_TOOL_POISONING— instruction-override language in MCP tool descriptions
With --reachability: each finding is tagged [REACHABLE] / [NOT REACHABLE]
based on a lightweight intra-file call-graph analysis.
Engine C — SCA (lockfile scanning, network)
Parses package lockfiles and queries the OSV database (api.osv.dev) for known CVEs.
Supported lockfiles:
| Lockfile | Ecosystem |
|---|---|
requirements.txt |
PyPI |
Pipfile.lock |
PyPI |
poetry.lock |
PyPI |
package-lock.json |
npm |
yarn.lock |
npm |
SCA findings include: package name, installed version, fix version, CVE IDs,
and a copy-ready upgrade command (e.g. pip install --upgrade requests==2.32.0).
No source code is sent to any external service — only package name + version is submitted to the public OSV API.
Output formats
--output text (default)
Rich terminal output with severity colours, reachability badges, fix commands, suppression hints, and docs links.
--output json
JSON array of findings. Each finding includes rule_id, severity, file, line,
description, fix, and (when available) reachable, package, installed_version,
fix_version, cve_ids.
--output sarif
SARIF 2.1.0 for GitHub Code Scanning. Includes help.text (fix commands) and
fixes objects. Upload with github/codeql-action/upload-sarif.
--output cyclonedx
CycloneDX 1.5 JSON SBOM. SCA findings appear as components + vulnerabilities; SAST findings appear as code-level vulnerabilities.
Suppression
To suppress a specific finding, add a comment on the line above (preferred) or inline:
# ekmire-ignore:HARDCODED_SECRET_GENERIC
API_KEY = "..." # this is a test value
token = get_token() # ekmire-ignore:HARDCODED_SECRET_GENERIC
Suppressions are logged to your dashboard for review.
CI / CD templates
Copy these into .github/workflows/ in any repository:
| Template | Purpose |
|---|---|
templates/ekmire-sarif.yml |
SAST + SCA scan → GitHub Code Scanning (SARIF) |
templates/ekmire-cyclonedx.yml |
SAST + SCA → CycloneDX SBOM artifact |
Authentication (optional)
Without authentication, ekmire works fully offline using the built-in rule bundle. Authentication enables:
- Cloud rule bundle (updated threat feed)
- Dashboard event tracking
- AI Dev Audit (
ekmire dev-audit)
ekmire auth login # opens browser auth flow
ekmire auth status # show current auth state
ekmire auth logout # remove saved credentials
Docs: ekmire.com/docs
Dashboard: app.ekmire.com
© Flux8Labs 2026
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
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 ekmire-2.0.4.tar.gz.
File metadata
- Download URL: ekmire-2.0.4.tar.gz
- Upload date:
- Size: 30.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c17f302064f93a05038e4a0403464ebf32048892adcdbd71c471029308da4c8
|
|
| MD5 |
d56b72cedf26f9de8acdb15891809a5f
|
|
| BLAKE2b-256 |
9bbe93459a425bd8f1c15e2699130745c4f82c78b8f22357585517bc2ed83d03
|
Provenance
The following attestation bundles were made for ekmire-2.0.4.tar.gz:
Publisher:
cli.yml on bhavyansh001/ekmire-backend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ekmire-2.0.4.tar.gz -
Subject digest:
4c17f302064f93a05038e4a0403464ebf32048892adcdbd71c471029308da4c8 - Sigstore transparency entry: 1754737897
- Sigstore integration time:
-
Permalink:
bhavyansh001/ekmire-backend@c8f5323e31d1901fc7b68ff526f802a6fbc1be2e -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/bhavyansh001
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cli.yml@c8f5323e31d1901fc7b68ff526f802a6fbc1be2e -
Trigger Event:
push
-
Statement type:
File details
Details for the file ekmire-2.0.4-py3-none-any.whl.
File metadata
- Download URL: ekmire-2.0.4-py3-none-any.whl
- Upload date:
- Size: 34.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8ae724f8a8738040cc9da57c7787479d7d9ac091402519cbb19184288800a50
|
|
| MD5 |
23789504c4d24e8a6b6d46e4b9269bf7
|
|
| BLAKE2b-256 |
83e9460b74e6681cbc6da284a1d3aed6ab2e6674ad3d4e0db0566ab552fe7657
|
Provenance
The following attestation bundles were made for ekmire-2.0.4-py3-none-any.whl:
Publisher:
cli.yml on bhavyansh001/ekmire-backend
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ekmire-2.0.4-py3-none-any.whl -
Subject digest:
d8ae724f8a8738040cc9da57c7787479d7d9ac091402519cbb19184288800a50 - Sigstore transparency entry: 1754737901
- Sigstore integration time:
-
Permalink:
bhavyansh001/ekmire-backend@c8f5323e31d1901fc7b68ff526f802a6fbc1be2e -
Branch / Tag:
refs/tags/v2.0.4 - Owner: https://github.com/bhavyansh001
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cli.yml@c8f5323e31d1901fc7b68ff526f802a6fbc1be2e -
Trigger Event:
push
-
Statement type: