ForgeFix
One command to set up, health-check, and repair any open-source project.
forgefix doctor tells a newcomer exactly what a repository is missing — README, install
line, lockfile, CI, security policy, license, working dev environment — with a deterministic
0–100 health score and concrete fixes. forgefix up then does the bring-up: it detects the
stack, repairs missing setup files, installs dependencies, and runs the tests.
- Original code, MIT licensed. ForgeFix reads repository metadata only (file names, README text, config keys). It never copies source code from the projects it inspects.
- No shells, no eval. Every external command runs as a sanitized argument list with a
bounded timeout.
banditandgitleaksare wired into CI and pre-commit.
Quickstart (30 seconds)
pip install forgefix # once published; or: pip install -e .
cd your-project
forgefix doctor # see the score + what to fix
forgefix up # dry-run: shows the bring-up plan
forgefix up --apply # repairs + venv + deps + tests (never overwrites files)
forgefix report # writes reports/forgefix-report.md
Try it on the bundled fixtures right now:
forgefix doctor --path tests/fixtures/broken_repo # -> 42/100
forgefix doctor --path tests/fixtures/minimal_repo # -> 100/100
Why
Every contributor's first hour in a new repository is the same loop: clone, guess the install command, discover there is no lockfile, hunt for the test runner, wonder whether the project is even maintained. Maintainers keep re-explaining the same missing pieces in issues. ForgeFix turns that tribal knowledge into one deterministic, scriptable check that both humans and CI can run.
Features
| Command | What it does |
|---|---|
forgefix doctor |
Health table (pass / warn / fail / skip) with fix suggestions; --json for machines, --min-score for gates |
forgefix up |
Dry-run-by-default bring-up: stack detection, create-if-missing setup repairs, venv + deps, tests, optional dev server (--apply to execute) |
forgefix report |
Markdown report with score, category breakdown, and top fixes |
forgefix serve |
FastAPI server exposing the same checks at /health, /doctor, /report |
forgefix init |
Scaffolds a .forgefix.yml (disable rules, set a score gate) |
| Plugins | Third-party checks via the forgefix.plugins entry-point group |
The health score is deterministic and unit-tested: every rule carries fixed fail/warn weights, so the same repository always scores the same.
How it compares (by category, not by name)
ForgeFix does not replace linters, formatters, or container starters — it complements them, one layer higher:
| Category | What it covers | What ForgeFix adds |
|---|---|---|
| Linters / formatters (ruff, eslint class) | Code style and correctness inside files | Repository-level onboarding health that no in-file linter sees |
| Container starters (cookiecutter / devcontainer class) | Bootstrapping a new project | Works on the existing repos you already cloned |
| Manual README checklists | What maintainers should document | A score, a CI gate, and a JSON API so "should" becomes "does" |
Safety model
- Read-only scans.
doctorandreportopen files and read text. They never execute repository code and never touch the network. upis dry-run by default. With--applyit only creates missing files (README skeleton, SECURITY.md, .editorconfig, CI workflow) and never overwrites an existing file. It deliberately never invents a LICENSE for you.- No shell interpolation. Commands are fixed argument lists with full executable
paths,
shell=False, and bounded timeouts.
Plugins
# my_forgefix_plugin.py
from pathlib import Path
from forgefix.core.rules import Finding
class MyPlugin:
name = "my-plugin"
def check(self, root: Path) -> list[Finding]: ...
Register it under the forgefix.plugins entry-point group; ForgeFix discovers it
automatically. A broken plugin is logged and skipped — it can never break a scan.
See docs/plugins.md.
Roadmap
- Deterministic doctor/report/serve + bring-up
- Plugin API (
forgefix.plugins) - Richer stack detection (rust, java/gradle) and per-rule fix scripts
- SARIF export for GitHub code scanning
-
forgefix cloudhosted dashboard for private repos — see docs/monetization.md
Development
make setup # editable install + pre-commit hooks
make test # pytest (coverage gate 85%)
make lint # ruff check + format check
make type # mypy
make gif # regenerate demo/demo.gif with vhs
Full guidelines in CONTRIBUTING.md. Docs site: mkdocs serve
(config in mkdocs.yml, pages in docs/).
Security
Report vulnerabilities privately per SECURITY.md — 48h acknowledgement SLA.
License
MIT © ForgeFix contributors. Original code; no source copied from other projects.
Metadata
Release files for forgefix 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| forgefix-0.1.0.tar.gz | 29.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| forgefix-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 53.1 kB
Release files / forgefix-0.1.0.tar.gz
| Download URL | forgefix-0.1.0.tar.gz |
|---|---|
| Size | 29.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff29ffbba4359740a6724946729d006c1fe0c99b2222a6caaedfb92297c6c2d0
|
|
BLAKE2b-256 checksum How to use checksums |
0b4ec91114cce77d054ef44274fc6487b4d44e47514f0242abd444ea413705d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency logRelease files / forgefix-0.1.0-py3-none-any.whl
| Download URL | forgefix-0.1.0-py3-none-any.whl |
|---|---|
| Size | 23.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
10312c9509091ea424908f793af6d253ec742d2a23768e7db85b72994e32a663
|
|
BLAKE2b-256 checksum How to use checksums |
2d539827dcb95e3b6e991995f5b1a272591eff44d0f4f69a895542f88ddf025f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency log