HefestoAI

io.github.artvepa80由 GitHub 账号 artvepa80 发布v4.20.3更新于 Oct 25, 2026

HefestoAI checks AI-generated code before you ship it.

已验证Streamable HTTP可网页运行开发者工具安全与监控

概览

AI 生成的概览

HefestoAI 的托管 MCP 服务器让助手检查自己写的代码的安全性、复杂度与声明漂移,并查询价格、安装方式和对比信息。

可以做什么
  • 用开源 hefesto-ai 引擎分析发送的文件,返回规则 ID、严重级别、文件、行号、消息和 SARIF 指纹,可选输出完整 SARIF 2.1.0 日志
  • 查询静态价格档位、本地包的安装命令,以及与 sonarqube、snyk 等指定扫描器的简短对比
  • 识别硬编码密钥、SQL 与命令注入风险、pickle 导入、复杂度和嵌套问题,以及依赖声明、文档、打包、安装产物与 CI 配置之间的不一致
适用场景
适合在助手编写或修改代码后,对少量文件做一次托管检查再交付;也适合在对话中直接获取该工具的价格、安装说明或与其他扫描器的对比。整仓库扫描时,README 建议改为在本地运行命令行工具。
运行要求
远程 streamable HTTP 端点,无需 API 密钥或账号。托管 analyze 工具每次最多 20 个文件、单文件 100 KB、总计 256 KB,限时 20 秒,每个 IP 每分钟 10 次请求。整仓库分析需本地安装 Python 包(Python 3.10 及以上)。
安装前请注意
发送分析的文件会上传到由 Narapa LLC 运营的第三方托管服务;服务器称不存储内容,但分析器本身为闭源。分析结果仅供参考,analyze 工具不会修改你的代码。价格与对比回答为静态文本,并非实时查询。

安装

在 SourceWeft 中

  1. 打开 控制台中的 HefestoAI,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.artvepa80%2Fhefestoai/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "hefestoai": {
      "type": "http",
      "url": "https://hefestoai.narapallc.com/api/mcp-protocol"
    }
  }
}

README

HefestoAI — release truth engine for AI-generated code

English | 简体中文 | 日本語

[Hefesto Demo]

HefestoAI runs after your AI assistant writes the code and before it ships. It checks that what your project declares (dependencies, configs, install artifacts) matches what it actually does, and it runs security and complexity checks on the code itself.

[PyPI version] [Python 3.10+] [License: MIT] [Languages]

Quick start (GitHub Action)

Deterministic pass/fail check for agent-written code. It compares what your repo declares (dependencies, README, pyproject.toml, CHANGELOG, action.yml, CI) with what it actually does, and flags secrets and risky IaC. Same input, same result.

yaml
# .github/workflows/hefesto.ymlname: HefestoAIon: [pull_request, push]permissions:  contents: read  security-events: writejobs:  hefesto:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - uses: artvepa80/Agents-Hefesto@v4        with:          fail_on: HIGH          sarif: 'true'

Findings show up under Security > Code scanning and as pull request annotations. Public repositories work as shown; private repositories without GitHub Code Security set upload_sarif: 'false' (the SARIF file is still written). @v4 follows every 4.x release, minors included (4.16.0 made a run that analyzes no files fail the gate). For a fixed version, pin artvepa80/[email protected] or a commit SHA. The Action runs the same formats as hefesto analyze: Python plus YAML, Terraform, Shell, Dockerfile, SQL, PowerShell, JSON, TOML, Makefile, Groovy, COBOL, CloudFormation, ARM, Helm and Serverless, plus the drift checks. TypeScript, JavaScript, Java, Go, Rust and C# need the CLI with pip install "hefesto-ai[multilang]".

Free and MIT. PRO ($8/mo per user) and OMEGA ($19/mo): plans.


Operational Truth Analyzers (v4.20.4)

These analyzers look for drift between what your project declares and what it does. They run on every hefesto analyze. The problems they look for don't live in any single file, so a per-file linter or security scanner won't report them: they show up only when you compare two files.

AnalyzerWhat it catchesRule ID
Imports vs DepsPython imports not declared in pyproject.toml or requirements.txtOT-IMPORTS-001
Docs vs EntrypointsCLI scripts in [project.scripts] missing from READMEOT-DOCS-001
Packaging ParityVersion mismatch between pyproject.toml, CHANGELOG, and README badgesOT-PKG-001/002
Install Artifact Parityaction.yml inputs not consumed; Dockerfile COPY sources missingOT-INSTALL-001/002
CI Config DriftPython version or flake8 config mismatch between local and CI workflowOT-CI-001/002/003
bash
# All operational truth findings appear in standard outputhefesto analyze . --severity MEDIUM

Quick Start

bash
pip install hefesto-aicd your-projecthefesto analyze . --fail-on critical
# PR review (added in v4.10.0) — analyze only changed codehefesto pr-reviewhefesto pr-review --strict        # include file-level contexthefesto pr-review --post --pr 42  # post inline comments via gh CLI

Why Hefesto? The AI Code Problem

Assistants such as Claude Code, GitHub Copilot and Cursor write code faster than anyone can review it line by line. Some of what they write passes a linter and is still dangerous:

  • os.system(user_input) → command injection
  • f"SELECT * FROM {table}" → SQL injection
  • code that runs but quietly changes behavior, such as a misspelled attribute or an exception that is caught and dropped (checked in Python)

Hefesto checks for these at pre-commit, at pre-push and in CI, so they surface before the code reaches production.


What Hefesto Catches

IssueSeverityDescription
HARDCODED_SECRETCRITICALAPI keys, passwords in code (known public client keys such as PostHog phc_ and Stripe pk_live_/pk_test_ are reported as LOW)
SQL_INJECTION_RISKHIGHString concatenation in queries
COMMAND_INJECTIONHIGHUnsafe shell command execution
PICKLE_USAGEHIGHimport pickle / cPickle lines (the import is flagged; pickle.loads() calls are not reported separately)
UNDECLARED_DEPENDENCYMEDIUMImport used but not in pyproject.toml
PACKAGING_VERSION_DRIFTMEDIUMVersion mismatch across pyproject/CHANGELOG/README
CI_CONFIG_DRIFTMEDIUM-HIGHLocal env vs CI configuration mismatch
INSTALL_ARTIFACT_DRIFTMEDIUM-HIGHaction.yml inputs or Dockerfile COPY out of sync
HIGH_COMPLEXITYHIGHCyclomatic complexity > 10
DEEP_NESTINGHIGHNesting depth > 4 levels
GOD_CLASSHIGHClasses > 500 lines
LONG_FUNCTIONMEDIUMFunctions > 50 lines
LONG_PARAMETER_LISTMEDIUMFunctions with > 5 parameters
python
# Hefesto catches:password = "admin123"  # HARDCODED_SECRETquery = f"SELECT * FROM users WHERE id={id}"  # SQL_INJECTION_RISKos.system(f"rm {user_input}")  # COMMAND_INJECTION
# Hefesto suggests:password = os.getenv("PASSWORD")cursor.execute("SELECT * FROM users WHERE id=?", (id,))subprocess.run(["rm", user_input], check=True)

GitHub Action

yaml
steps:  - uses: actions/checkout@v4  - name: Run Hefesto Guardian    uses: artvepa80/Agents-Hefesto@v4    with:      target: '.'      fail_on: 'CRITICAL'

@v4 is a floating tag that follows the whole 4.x line, minor releases included: every v4.x.y release moves it, so the workflow gets fixes without edits, and also behaviour changes such as the 4.16.0 change that makes a run with no analyzed files fail --fail-on (exit 1; --allow-no-files opts out). If you need exact stability, pin an exact release tag such as artvepa80/[email protected] (exact tags never move) or a commit SHA, and bump it yourself.

With SARIF upload to GitHub code scanning (findings appear under Security > Code scanning and as pull request annotations):

yaml
jobs:  hefesto:    runs-on: ubuntu-latest    permissions:      contents: read      security-events: write   # upload-sarif      actions: read            # private repositories only    steps:      - uses: actions/checkout@v4      - uses: artvepa80/Agents-Hefesto@v4   # SARIF needs v4.15.0 or later        with:          target: '.'          fail_on: 'CRITICAL'          sarif: 'true'

The Action is a composite action: it installs HefestoAI from the Action's own checkout into a private virtualenv (needs python3 >= 3.10 on the runner; ubuntu-latest has it), runs hefesto analyze, and with sarif: 'true' uploads the SARIF file with github/codeql-action/upload-sarif@v4, also when the fail_on gate fails. Full reference: docs/github-action.md.

Inputs:

InputDescriptionDefault
targetPath to analyze (file or directory).
fail_onExit with error if issues found at or above this severity levelCRITICAL
allow_no_filestrue: passes --allow-no-files, so a run that analyzes no files keeps exit 0 under fail_on (intentionally empty target); the warning is still printedfalse
allow_not_analyzedtrue: passes --allow-not-analyzed, so a found file that could not be analyzed does not fail fail_on; the file is still listed as "Not analyzed" and warned aboutfalse
min_severityMinimum severity to report (CRITICAL, HIGH, MEDIUM, LOW)LOW
formatOutput format printed to the log (text, json, html, sarif)text
sariftrue: also write a SARIF 2.1.0 file and upload it to code scanning (needs security-events: write)false
sarif_filePath of the SARIF filehefesto.sarif
upload_sarifWith sarif: true, upload the file; false only writes ittrue
sarif_categoryCode scanning category of the uploadhefesto
telemetryOpt-in. Only 1 or true enables telemetry: the Action sends one anonymous ping per run and the CLI sends its usage events. Any other value, including the default 0, sends no telemetry (the CLI still checks pypi.org for a newer version); see docs/telemetry.md0

Outputs:

OutputDescription
exit_codeThe exit code of the CLI (0 = threshold not breached, 1 = fail_on threshold breached or runtime error; see Exit Codes)
sarif_filePath of the SARIF file, when sarif is true and the file was written

AI-Generated Code Guardrails (Pre-commit + MCP)

HefestoAI can run as a pre-commit check or be called by an AI agent over MCP, so risky changes are flagged before merge.

Add as an MCP server:

bash
npx @smithery/cli@latest mcp add artvepa80/hefestoai

Add to Cursor (one click):

[Add HefestoAI MCP server to Cursor]

The button opens Cursor's install prompt through cursor.com/link (GitHub does not render cursor:// links). Direct deeplink: cursor://anysphere.cursor-deeplink/mcp/install?name=hefestoai&config=eyJ1cmwiOiJodHRwczovL2hlZmVzdG9haS5uYXJhcGFsbGMuY29tL2FwaS9tY3AtcHJvdG9jb2wifQ%3D%3D. The same server is in .mcp.json at the repository root ({"mcpServers":{"hefestoai":{"url":"https://hefestoai.narapallc.com/api/mcp-protocol"}}}). No API key.

API Endpoints:

EndpointProtocolPath
MCPJSON-RPC 2.0/api/mcp-protocol
Hosted analysisHTTP POST/api/analyze
RESTHTTP GET/POST/api/mcp
OpenAPIOpenAPI 3.0/api/openapi.json
Q&ANatural Language/api/ask
ChangelogJSON/api/changelog.json
FAQJSON/api/faq.json

The MCP analyze tool (and POST /api/analyze) runs the open-source engine (hefesto analyze --no-config; the hosted MCP runs a recent hefesto-ai release) on the files you send: at most 20 files, 100 KB each, 256 KB in total, 20 seconds. It returns findings with rule ids, severities, lines and SARIF fingerprints. TypeScript, JavaScript, Java, Go, Rust and C# are covered too (multilang grammars; the first such request on a fresh server instance is a few seconds slower). Nothing is stored. For a whole repository, run hefesto analyze . locally.

The hosted MCP server is closed-source and operated by Narapa LLC. server.json keeps repository on this public repository because it contains the open-source hefesto-ai engine that analyze runs.


PR Review (v4.20.4)

Analyze only the code changed in a pull request and post inline comments on the changed lines. Each finding carries a deterministic dedup key, so a workflow can skip findings it has already posted (the deduped template below does this; the simple one does not).

bash
# Generate review as JSON (default — no network, no token needed)hefesto pr-review
# Post inline comments via gh CLI (convenience mode)hefesto pr-review --post --pr 42 --repo owner/name
# Include file-level context findings (not just changed lines)hefesto pr-review --strict

How it works:

  1. Parses git diff between base and head (auto-detects origin/main or GITHUB_BASE_REF)
  2. Runs the full analyzer suite on touched files only
  3. Filters findings to changed lines (default) or full files (--strict). A function-level finding (complexity, long function, deep nesting) is reported on the def line and counts as changed when any added line falls inside the function. Its line stays on the def line, so the dedup key does not move, and anchor_line is the added line that inline comments go on (null outside a hunk)
  4. Emits JSON with SHA256 dedup keys for each finding

GitHub Actions workflow templates are provided under examples/github-actions/:

TemplateUse caseIdempotent?
hefesto-pr-review-simple.ymlQuick onboarding, small reposNo (reruns duplicate)
hefesto-pr-review-deduped.ymlProduction CI, teamsYes (jq dedup pipeline)

See examples/github-actions/README.md for setup instructions.


Language Support

Code Languages

LanguageParserStatus
PythonNative ASTFull support
TypeScriptTreeSitterSupported¹
JavaScriptTreeSitterSupported¹
JavaTreeSitterSupported¹
GoTreeSitterSupported¹
RustTreeSitterSupported¹
C#TreeSitterSupported¹

¹ TreeSitter languages require the [multilang] extra: pip install "hefesto-ai[multilang]". Without it, files in these languages are skipped at parse time and Hefesto emits a stderr warning pointing to the install command (also exposed via report.meta.parser_failures in JSON output).

DevOps & Configuration

FormatAnalyzerRulesStatusRun by hefesto analyze
YAMLYamlAnalyzerGeneric YAML securityv4.4.0Yes
TerraformTerraformAnalyzerTfSec-aligned rulesv4.4.0Yes
ShellShellAnalyzerShellCheck-alignedv4.4.0Yes
DockerfileDockerfileAnalyzerHadolint-alignedv4.4.0Yes
SQLSqlAnalyzerSQL Injection preventionv4.4.0Yes
PowerShellPS001-PS0066 security rulesv4.5.0Yes
JSONJ001, J002, J004, J0054 security rulesv4.5.0Yes
TOMLT001-T0033 security rulesv4.5.0Yes
MakefileMF001-MF0055 security rulesv4.5.0Yes
GroovyGJ001-GJ0055 security rulesv4.5.0Yes
COBOLCobolGovernanceAnalyzerCOBOL001-COBOL016 (16 free rules)²v4.12.0Yes

Cloud Infrastructure

FormatAnalyzerFocusStatusRun by hefesto analyze
CloudFormationCloudFormationAnalyzerAWS IaC Securityv4.7.0Yes
ARM TemplatesArmAnalyzerAzure IaC Securityv4.7.0Yes
Helm ChartsHelmAnalyzerKubernetes Securityv4.7.0Yes
ServerlessServerlessAnalyzerServerless Frameworkv4.7.0Yes

Total: the package ships analyzers for 22 formats (7 code languages + 11 DevOps formats + 4 Cloud formats). hefesto analyze (which the GitHub Action and the pre-push hook call) runs all 22. When a suffix matches more than one format, the precedence table in docs/design/devops-analyzers-wiring.md chooses one analyzer.

² COBOL: all 16 rules are free; no license is needed. The analyzer is regex-based (no full COBOL parser) and reads .cbl, .cob, .cobol, .cpy and .pco files (lower or upper case), plus .dcl, .copy, .cbk and extension-less files that a scanned program COPYs or EXEC SQL INCLUDEs and that hold COBOL data definitions (copybooks get only the data rules COBOL004/COBOL008/COBOL009/COBOL016, COBOL007 and COBOL015 for their own nested COPYs; the other rules are not applied to them).

COBOL details (source format, per-rule behaviour, COPY expansion, measured recall, performance, SARIF): docs/cobol.md.


Installation

bash
# FREE tierpip install hefesto-ai
# Required for TypeScript, JavaScript, Java, Go, Rust, and C# analysispip install "hefesto-ai[multilang]"
# Optional: Black, for `hefesto analyze --format-check`pip install "hefesto-ai[format]"

pip install hefesto-ai installs the FREE tier only. For PRO or OMEGA, Narapa sends you an activation code after purchase, and the activation instructions come with it.


CLI Reference (v4.20.4)

bash
# Analyze codehefesto analyze <path>hefesto analyze . --severity HIGHhefesto analyze . --output jsonhefesto analyze . --format sarif > hefesto.sarif   # SARIF 2.1.0 (--format is an alias of --output)hefesto analyze . --sarif-file hefesto.sarif       # text report + SARIF filehefesto analyze . --format-check   # opt-in: also report Black formatting drifthefesto analyze . --config ci/hefesto.yaml    # explicit config file (see Configuration)hefesto analyze . --no-config                 # ignore .hefesto.yamlhefesto analyze src/ --copybook-path ../copylib  # COBOL copybooks outside the scanhefesto analyze . --include-vendored  # also analyze vendored/minified JS (skipped by default)
# PR review (added in v4.10.0)hefesto pr-review                              # JSON to stdouthefesto pr-review --base main --head HEAD      # explicit refshefesto pr-review --strict                     # file-level findings toohefesto pr-review --post --pr 42 --repo o/r    # post via gh CLI
# Check statushefesto status
# Install/update git hookhefesto install-hooks
# Start API server (PRO)hefesto serve --port 8000
# Telemetry (on by default)hefesto telemetry disable

JSON Output

bash
hefesto analyze . --output json          # stdout = pure JSON, banners -> stderrhefesto analyze . --output json 2>/dev/null | jq .  # pipe-safe

SARIF Output

bash
hefesto analyze . --format sarif > hefesto.sarif   # stdout = pure SARIF, banners -> stderrhefesto analyze . --sarif-file out/hefesto.sarif   # any --output, plus a SARIF file

SARIF 2.1.0 for every finding hefesto analyze reports (all analyzers it runs, COBOL included, plus Operational Truth and provider findings), validated against the OASIS schema in the tests:

  • one rule per rule ID (COBOL004, DOCKER010, ...; the issue type such as HARDCODED_SECRET when an analyzer has no ID) with name, description, help, help URI and a default level;
  • level: CRITICAL/HIGH -> error, MEDIUM -> warning, LOW -> note; security rules (secrets, injection, unsafe commands, ...) also get security-severity (9.5 / 8.0 / 5.5 / 3.0), so GitHub rates them Critical/High/Medium/Low;
  • CWE, from one mapping (CWE list 4.20): GitHub code scanning reads the rule tag external/cwe/cwe-N (no zero-padding). The same id is a run.taxonomies CWE entry (organization MITRE) with a relationships kind on the rule (equal, superset or relevant). Python: secrets 798, SQL injection 89, command injection 78, eval/exec 95, bare except 396, pickle import 502 (relevant, precision low, because only the import is flagged). Assert has no CWE. A finding's metadata.cwe overrides the table; existing COBOL tags (cwe-798, cwe-20) stay as written. Table: docs/ANALYSIS_RULES.md;
  • repo-relative URIs (%SRCROOT%, the git top level of the current directory) and partialFingerprints built from the rule, the file and the text of the flagged line, so alerts keep their identity when code above them moves;
  • GitHub upload limits: at most 25,000 results (highest severity kept) and 10 MB gzipped; anything dropped is reported in the log's tool notifications.

Columns are not reported (start line only).

Formatting Drift (opt-in)

hefesto analyze does not check formatting by default. With --format-check it also runs Black in check mode (in-process, files are never modified) on the Python files it analyzed:

bash
pip install "hefesto-ai[format]"                    # or: pip install blackhefesto analyze . --format-check                    # report drifthefesto analyze . --format-check --fail-on LOW      # fail the gate on drift
  • Each file Black would reformat is one FORMAT_DRIFT finding, severity LOW. Because the check is opt-in, these findings are shown even when --severity is above LOW. --fail-on and --exclude-types apply to them like any other finding, so --fail-on MEDIUM (or higher) does not trip on drift.
  • Black settings come from your pyproject.toml [tool.black] table, found the same way the black CLI finds it (line-length, target-version, skip-string-normalization, preview, extend-exclude / force-exclude, ...). If required-version does not match the installed Black, Hefesto warns.
  • JSON output carries a unified diff (first 60 lines) in code_snippet and lines_added / lines_removed in metadata.
  • If Black is not installed, Hefesto prints a one-line warning and continues; the exit code is unaffected.
  • Only Black is covered; isort and flake8 are not run.

Exit Codes

CodeMeaning
0Analysis complete (no --fail-on, or threshold not breached)
1Gate failure (--fail-on threshold breached, or no file was analyzed under --fail-on) or runtime error
2Invalid command-line usage or invalid .hefesto.yaml

Gate Examples

bash
hefesto analyze . --fail-on high         # exit 1 if HIGH+ foundhefesto analyze . --fail-on critical     # exit 1 only if CRITICAL foundhefesto analyze .                        # always exit 0 (report only)hefesto analyze . --fail-on high --allow-no-files   # an empty run keeps exit 0hefesto analyze . --fail-on high --allow-not-analyzed  # a file that failed does not fail the gate

A run that analyzes no files (empty directory, only unsupported files, or every file excluded) is never reported as a pass: the report says "No files were analyzed", a warning naming the path goes to stderr, and with --fail-on the gate fails with exit 1. When files were left out as vendored JavaScript, the warning names how many and suggests --include-vendored.

For runs that are empty on purpose (a changed-files-only job on a PR that touches only Markdown, a monorepo matrix entry with no supported sources), pass --allow-no-files (the Action's allow_no_files: 'true' input passes it for you). Only the exit code changes: the run keeps exit 0 and prints "Gate skipped: no files were analyzed (--allow-no-files)", while "Files analyzed: 0", "No files were analyzed" and the stderr warning are still printed. It is a command-line flag only: .hefesto.yaml cannot set it (an allow_no_files key is rejected as unknown, exit 2), so a shared config never turns this check off.

A file that is not valid UTF-8 is read with the latin-1 fallback and analyzed (its findings count); the text report lists it under "Decoded with fallback (latin-1)", --output json has it in meta.decoded_with_fallback, SARIF has a warning notification for it, and stderr warns about it.

A file the run found but could not analyze (it could not be read, or its analyzer raised an error) is never dropped silently: the text report lists it under "Not analyzed" with the reason, --output json has it in meta.not_analyzed (path, language, reason: read_error or analyzer_error, exception), SARIF has an error notification for it in invocations[0].toolExecutionNotifications, and a warning goes to stderr (also with --quiet). With --fail-on such a file fails the gate with "Gate failure: N file(s) could not be analyzed (exit 1)", also when --allow-no-files is set. --allow-not-analyzed (the Action's allow_not_analyzed: 'true' input) opts out: the gate then judges only the findings, and the file is still listed and warned about. Like --allow-no-files, it is a command-line flag only. --allow-not-analyzed does not cover a path where no file was analyzed at all (for example hefesto analyze a.ts without the TypeScript parser): that is the zero-files case, which still exits 1 with --fail-on unless --allow-no-files is set. When a missing parser is the cause, the warning says so: parser unavailable for typescript (pip install "hefesto-ai[multilang]").


Pre-Push Hook

In your own project, hefesto install-hooks installs the hooks shipped with the package: pre-commit analyzes the staged (index) content of the staged files (--fail-on HIGH), pre-push analyzes the repository (--fail-on CRITICAL). The hooks call the Python interpreter that ran install-hooks (python -m hefesto), fall back to hefesto on PATH, and fail with a message if neither is found (reinstall the hooks or set SKIP_HEFESTO_HOOKS=1). The hooks go to git rev-parse --git-path hooks, so worktrees and submodules work; if core.hooksPath is set (Husky, lefthook...), nothing is written and the command exits 1: call python -m hefesto analyze from that hook manager or use the hefesto-analyze pre-commit framework hook (see pre-commit Hook). It also exits 1 when no hook was installed (for example, existing hooks without --force). The contributor hooks from scripts/git-hooks/ described below are used only in a clone of Agents-Hefesto (root pyproject.toml with name = "hefesto-ai"); the command says which set it installed.

Automatic validation before every git push in this repository:

bash
# Install the same hooks and print the plans link (PRO $8/mo, OMEGA $19/mo)hefesto init
# Install/update hook (copies scripts/git-hooks/pre-push -> .git/hooks/pre-push)hefesto install-hooks
# Update an existing hookhefesto install-hooks --force
# Bypass temporarilySKIP_HEFESTO_HOOKS=1 git push

The hook runs two gates:

  1. Security gate — hefesto analyze with --fail-on CRITICAL --exclude-types VERY_HIGH_COMPLEXITY,LONG_FUNCTION (blocks security issues, ignores complexity debt)
  2. Fast lint/test gate — Black, isort, Flake8, and a minimal test suite

Note: Hooks are local to your machine and not committed to git. Run hefesto install-hooks after cloning or whenever scripts/git-hooks/pre-push is updated.


Features by Tier

FeatureFREEPRO ($8/mo per user)OMEGA ($19/mo)
Static AnalysisYesYesYes
Security ScanningBasicAdvancedAdvanced
Pre-push HooksYesYesYes
Language & format support (details)YesYesYes
ML EnhancementNoYesYes
REST APINoYesYes
IRIS MonitoringNoNoYes
Production CorrelationNoNoYes

Hefesto PRO Optional Features

Hefesto OSS works standalone. If Hefesto PRO is installed, OSS can optionally enable: Patch C API hardening for hefesto serve, scope gating (first-party by default), TS/JS symbol discovery, and safe deterministic enrichment (schema-first, masked, bounded). See docs/PRO_OPTIONAL_FEATURES.md.


REST API (PRO), OMEGA Guardian and IRIS

hefesto serve (PRO) exposes the analyzer over HTTP: docs/rest-api.md. OMEGA Guardian and the IRIS production-monitoring agent: docs/omega-iris.md.


CI/CD Integration

GitHub Actions — Full Repo Analysis

yaml
name: Hefesto
on: [push, pull_request]
jobs:  analyze:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4      - name: Install Hefesto        run: pip install hefesto-ai      - name: Run Analysis        run: hefesto analyze . --severity HIGH

GitHub Actions — Code Scanning (SARIF) with the CLI

yaml
jobs:  analyze:    runs-on: ubuntu-latest    permissions:      contents: read      security-events: write    steps:      - uses: actions/checkout@v4      - run: pip install hefesto-ai      - run: hefesto analyze . --severity LOW --fail-on CRITICAL --sarif-file hefesto.sarif      - if: always()        uses: github/codeql-action/upload-sarif@v4        with:          sarif_file: hefesto.sarif          category: hefesto

GitHub Actions — PR Review with Inline Comments (v4.20.4)

yaml
name: Hefesto PR Review
on:  pull_request:    types: [opened, synchronize, reopened]
permissions:  contents: read  pull-requests: write
jobs:  review:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4        with:          fetch-depth: 0      - run: pip install hefesto-ai      - name: Review changed code        env:          GITHUB_BASE_REF: ${{ github.event.pull_request.base.ref }}          GITHUB_SHA: ${{ github.event.pull_request.head.sha }}          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}        run: hefesto pr-review --post --pr ${{ github.event.pull_request.number }} --repo ${{ github.repository }}

For production use with dedup (no duplicate comments on reruns), see the workflow templates in examples/github-actions/.

pre-commit Hook

yaml
# .pre-commit-config.yamlrepos:  - repo: https://github.com/artvepa80/Agents-Hefesto    rev: v4.20.4    hooks:      - id: hefesto-analyze

GitLab CI

yaml
hefesto:  stage: test  script:    - pip install hefesto-ai    - hefesto analyze . --severity HIGH

Configuration

hefesto analyze takes its options from command-line flags (see CLI Reference above) and, optionally, from a .hefesto.yaml file (below). There is no environment variable for analysis options such as severity or output format.

Environment Variables

bash
# Telemetry (see Telemetry below)export HEFESTO_TELEMETRY=0                            # Disable usage events
# PRO/OMEGA only (read by the private distribution, ignored by the FREE tier)export HEFESTO_LICENSE_KEY="your-key"
# API Security (PRO, v4.7.0) -- used by `hefesto serve`export HEFESTO_API_KEY="your-api-key"                # Enable API key authexport HEFESTO_RATE_LIMIT_PER_MINUTE=60               # Enable rate limitingexport HEFESTO_CORS_ORIGINS="https://app.example.com" # Restrict CORSexport HEFESTO_EXPOSE_DOCS=1                          # Enable /docs, /redocexport HEFESTO_WORKSPACE_ROOT="/srv/code"              # Path sandbox rootexport HEFESTO_CACHE_MAX_SIZE=1000                     # Cache size limitexport HEFESTO_CACHE_TTL_SECONDS=300                   # Cache entry TTL

Config File (.hefesto.yaml)

Put the hefesto analyze options you would otherwise repeat on every run in a .hefesto.yaml (or .hefesto.yml) file, usually at the repository root:

yaml
# .hefesto.yaml -- every key is optional and maps to a `hefesto analyze` flagseverity: MEDIUM            # --severity      LOW | MEDIUM | HIGH | CRITICALfail_on: HIGH               # --fail-on       LOW | MEDIUM | HIGH | CRITICALoutput: text                # --output        text | json | htmlexclude:                    # --exclude       list or "a/,b/" string  - tests/  - node_modules/exclude_types:              # --exclude-types list or comma-separated string  - VERY_HIGH_COMPLEXITY  - LONG_FUNCTIONquiet: false                # --quietmax_issues: 50              # --max-issuesformat_check: true          # --format-check  (needs: pip install "hefesto-ai[format]")enable_memory_budget_gate: false  # --enable-memory-budget-gatecopybook_paths:             # --copybook-path (COBOL copybook directories outside the scan)  - ../copylib              # relative paths are resolved from this file's directoryinclude_vendored: false     # --include-vendored (analyze vendored/minified JavaScript too)
  • Excluded by default: .venv/, venv/, .tox/, node_modules/, .git/, __pycache__/, dist/, build/, .mypy_cache/, .pytest_cache/, .eggs/, *.egg-info/ (whole path components below the analyzed path), plus vendored and minified JavaScript (.js, .mjs, .cjs): *.min.js / *-min.js files, files under vendor/, vendors/, bower_components/ or jspm_packages/, and files under a lib/, libs/, plugins/, third_party/ or thirdparty/ directory inside static/, assets/, public/ or wwwroot/ (for example static/js/libs/jquery.js). A top-level lib/ is the project's own code and stays in scope, as do non-JavaScript files under vendor/ (Go, PHP). --include-vendored (or include_vendored: true) analyzes the JavaScript ones again; a single file given on the command line is always analyzed. The summary says how many were left out (N files skipped as vendored (use --include-vendored); meta.vendored_skipped in JSON, a tool notification in SARIF).

  • critical_tests (preview): an optional section that maps requirements to pytest tests for the critical-test regression guard. hefesto analyze validates it and otherwise ignores it; see docs/critical-tests.md.

  • exclude entries are path segments, not globs. Each entry matches whole path components below the analyzed path (tests/fixtures/ skips tests/fixtures/...); * and ** are taken literally, so tests/fixtures/** or *.json match nothing even though "Excluding: ..." lists them. A file or directory given explicitly on the command line is not filtered by exclude.

  • Discovery: Hefesto starts at the first path given to hefesto analyze (its directory if it is a file) and walks up to the repository root (the first directory containing .git), or to the filesystem root outside a repo. The nearest file wins. Both .hefesto.yaml and .hefesto.yml in one directory is an error. With several paths, the first path's config applies to the whole run (Hefesto warns if another path would pick a different file).

  • Precedence: explicit flag > config file > built-in default. A flag counts as explicit even when it repeats the default (--severity MEDIUM overrides severity: LOW). Lists are replaced, not merged: --exclude docs/ ignores the file's exclude.

  • Flags: --config PATH uses that file instead of searching; --no-config ignores config files. They cannot be combined.

  • Validation: unknown keys, bad values and invalid YAML stop the run with exit code 2 and a message naming the problem, e.g. Error: invalid Hefesto config in /repo/.hefesto.yaml: 'severity' must be one of LOW, MEDIUM, HIGH, CRITICAL (got 'urgent'). Keys may use - or _ (fail-on or fail_on); null means "not set".

  • The file in use is printed as Config: <path> (to stderr with --output json; hidden with --quiet).

  • Only hefesto analyze reads it (not pr-review or the GitHub Action inputs). Rule thresholds (cyclomatic complexity, etc.), --save-html and the PRO scope/enrichment flags are not configurable through the file.


vs. Competition

CriterionHefestoSemgrepCodeRabbitQodoSnyk
AI-generated code focus✅ Primary use caseGeneric✅ Yes✅ YesGeneric
Declared-vs-real drift detection✅ Core feature❌❌❌❌
Operational truth analyzers✅ 5 analyzers❌❌❌❌
Languages supported22 formats analyzed by the CLI (details)ManyManyManyMany
Setup time< 5 min, no configConfig-heavyCloud signupCloud signupCloud signup
Where it runsLocal CLI / GitHub Action / pre-commit / MCPLocal / cloudCloud onlyCloud onlyCloud / CLI
Pricing (as of Oct 2026)Free OSS / $8/mo PRO / $19/mo OMEGAFree tier / Teams $30/contributor/mo (Code)*Free for public repos / $24/dev/mo (annual)Credit-based, $0.012/credit; no permanent free planFree / Team $25/mo**

*Semgrep Supply Chain and Secrets are priced separately. **Snyk Team covers up to 10 developers; Enterprise is credit-based. Prices from each vendor's official pricing page, checked Oct 2026; they change often.

Where HefestoAI fits: most tools check code against the rules of its language. HefestoAI also checks a project against its own declarations: whether the imports match the declared dependencies, whether the versions in pyproject.toml, the CHANGELOG and the README agree, and whether action.yml and the Dockerfile match the files they reference.


Dogfooding (Honest Account)

We run HefestoAI's strict gate against HefestoAI's own code on every push to main. The gate has been GREEN since 2026-04-29, and getting there took more than six weeks: we logged the findings on 2026-03-17.

In strict mode, the gate flagged 12 complexity findings in our own gate-internals code (2 CRITICAL, 10 HIGH). We considered three responses: silence the findings (rejected — that's exactly the drift we critique), accept the override permanently (rejected — same reason), or refactor at root cause (chosen). The root-cause refactor itself was short once we started it: one PR, written over two days (2026-04-27 and 04-28) and merged on 2026-04-29. Along the way we also found a declared-vs-real drift in our own positioning doc and logged it for a fix.

The full audit and refactor history are tracked internally in our private repo. The refactor took the two CRITICAL functions from cyclomatic complexity 33 → 1 and 25 → 6, all helpers under 10. The 10 HIGH findings are under a temporary override whose mechanics and reversion criteria are documented.


Telemetry

The CLI sends anonymous usage events to PostHog by default (a random id; analyze also sends file and issue counts, duration, exit code, version, OS, Python, and ci/docker/dogfood plus pypi or editable — no code, file paths, findings or repository names, and no IP field in the payload). Turn them off with hefesto telemetry disable, HEFESTO_TELEMETRY=0, or DO_NOT_TRACK=1. The GitHub Action sends no usage events unless you set telemetry: 1. Separately, hefesto analyze asks pypi.org for the latest version (1.5 s timeout, cached for 24 hours). hefesto telemetry disable does not stop that check. From 4.20.3 the settings below skip it; 4.20.2 and earlier have no setting to disable it. Details: docs/telemetry.md.

The PyPI newer-version check is skipped, with no request and no cache write, when HEFESTO_NO_UPDATE_CHECK is 1, true, yes, or on, when HEFESTO_TELEMETRY is 0, false, no, or off, or when DO_NOT_TRACK is 1, true, yes, or on. Usage events stay on by default. The Action's default telemetry: 0 exports HEFESTO_TELEMETRY=0, so that check does not run on runners.

Changelog

Release history: CHANGELOG.md.


Contact

License

The code in this repository is licensed under the MIT License. The paid PRO and OMEGA features (the separately distributed hefesto_pro add-on) are covered by separate commercial terms in LICENSE-COMMERCIAL.md. Questions about licensing: [email protected].


(c) 2026 Narapa LLC, Miami, Florida

来源:README.md,提交 b497606

工具

4

pricing

Pricing

Return current HefestoAI prices (Free $0, PRO $8/month per user, OMEGA $19/month). Use it when the user asks what HefestoAI costs. Static text. Does not look up or change a subscription. No parameters: call it with {}.

无需输入参数。

install

Install

Return install commands for the open-source package (pip install hefesto-ai, Python 3.10+). Use it when the user wants to run HefestoAI locally, in a pre-commit hook or on a whole repository. Does not install anything on the caller's machine. No parameters: call it with {}.

无需输入参数。

compare

Compare tools

Return a short static comparison of HefestoAI with one named tool. Use it when the user asks how HefestoAI differs from another scanner. No live lookup and no code is inspected. All arguments are optional: {} compares with sonarqube. Known values: sonarqube (the default when tool is omitted), snyk, github-advanced-security, semgrep, claude-code-security, coderabbit, qodo. Any other value is answered as sonarqube.

输入参数tool

analyze

Analyze code

Runs the open-source hefesto-ai engine (`hefesto analyze --no-config`, free tier) on the files you send to the hosted analyzer and returns its findings: rule id, severity, file, line, message and the SARIF hefestoFingerprint/v1 fingerprint (format "sarif" adds the full SARIF 2.1.0 log). Use it to check a file or snippet the user shares (for example "analyze this file") for security and quality issues before committing. Minimum call: {"code": "<file contents>"}. Add path (e.g. "app/run.py") so the language comes from the extension; without path or language the language is inferred from the content, else python. For several files send files=[{"path", "content"}] instead. severity and format are optional. Covers Python, COBOL, the DevOps/IaC formats hefesto analyze routes, and TypeScript, JavaScript, Java, Go, Rust and C# through the multilang tree-sitter grammars (the first such request on a fresh server instance downloads the grammars and can take a few seconds longer). Limits: 20 files, 100 KB per file, 256 KB in total, 20 seconds, 10 requests per minute per IP, shared across server instances. No .hefesto.yaml is read. Files are deleted after the run; nothing is stored. For a whole repository, run `hefesto analyze .` locally.

输入参数codepathfilesformatlanguageseverity

版本历史

5
  1. v4.20.3最新Oct 25, 2026
  2. v4.20.2Oct 19, 2026
  3. v4.19.0Oct 16, 2026
  4. v4.17.0Oct 15, 2026
  5. v4.13.1Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分