Show HN: AutoMaxFix – controlled AI repair loop that won't eat your migrations Noumenon AI released AutoMaxFix, an open-source Python CLI tool that creates a controlled, safety-gated repair loop for AI-generated software. The tool converts failing tests and bug reports into structured tickets, then applies patches one at a time with infrastructure-level safeguards including banned command lists, path allowlists, and dirty workspace checks. AutoMaxFix aims to solve the reliability problems of AI-generated code by enforcing reproduction tests, human approval gates, and regression testing before any patch is applied. Audit → Reproduce → Patch → Test → Report Supported test runners: pytest · jest · vitest · mocha · go · cargo · generic AutoMaxFix is a standalone open-source Python CLI for controlled repair loops in AI-built software. It turns failing tests, audit logs, or plain-English bug reports into structured tickets, then runs a safety-first patch workflow one ticket at a time. AutoMaxFix is not an autonomous code god. AutoMaxFix is a controlled repair loop for AI-built software. The safety floor enforced at infrastructure level, not in the prompt : - Banned command list — rm -rf , sudo , curl|bash , pip install , npm install are all rejected before any agent sees them - Path allowlist — patches cannot touch .git/ , .env , secrets , or anything outside configured allowed paths - Dirty workspace check — won't run if there are uncommitted changes - Reproduction test bundled in the same patch as the fix max files changed cap per patch python3 -m venv .venv .venv/bin/pip install -e . .venv/bin/automaxfix --help Wire AutoMaxFix into GitHub Actions with the composite action in docs/ci-integration.md /Noumenon-ai/AutoMaxFix/blob/main/docs/ci-integration.md . The full walkthrough covers the reusable workflow wrapper, approval gating, path allowlists, and required permissions. - name: Run tests run: pytest -q 2 &1 | tee pytest-failures.log - name: AutoMaxFix on failure if: failure uses: ./.github/actions/automaxfix-action with: test-runner: pytest test-output-path: pytest-failures.log agent: codex cli require-approval: true open-pr: true For local failure loops, automaxfix watch polls a test command, captures each failing run, creates a ticket with the matching scanner, and launches codex cli with --max-attempts 2 . automaxfix watch --test-runner pytest --command "pytest -q" --interval 30 Watch mode keeps the approval gate by default: it prints the full proposed diff and asks y/n before applying each patch attempt. To opt into unattended approval, set watch mode.auto approve in watch: true in config or export AUTOMAXFIX WATCH AUTOAPPROVE=1 . The watched command is reused as the regression suite after each patch attempt, and polling continues until Ctrl+C . - A ticket generator for test runner failures and user bug reports - A controlled patch-execution loop for local repositories - A bridge between structured bug tickets and external coding agents such as Codex CLI or Claude CLI - A local-first, open-source workflow with no required hosted API - Not a blind repo rewriter - Not a package installer - Not a networked orchestration platform - Not tied to Noumenon, Nexus, or any private internal stack AI-generated code is fast, but speed creates failure modes: - missing reproduction coverage - low-confidence fixes - patch sprawl across unrelated files - hidden regressions after a "successful" edit AutoMaxFix enforces a repair loop: - detect failure - create ticket - create or confirm a reproduction test - validate a patch - require human approval unless explicitly bypassed - apply only inside allowed paths - run targeted tests - run regression - generate a report - stop Python 3.11+ is recommended. If your environment does not provide a python alias, use python3 for module mode: python3 -m automaxfix.cli ... Run directly: python3 -m automaxfix.cli init Or install a console script in a virtualenv: pip install -e . automaxfix init Initialize local state: python3 -m automaxfix.cli init Create a ticket from a bug report: python3 -m automaxfix.cli bug "reminder gets duplicated after update" Create tickets from pytest output: python3 -m automaxfix.cli scan --pytest-output examples/broken pytest output.txt Create tickets from other supported test runners: python3 -m automaxfix.cli scan --jest-output tests/fixtures/jest/failures.txt python3 -m automaxfix.cli scan --from-file test-output.log --format generic Prepare a reproduction brief: python3 -m automaxfix.cli reproduce --ticket .automaxfix/tickets/AMF-YYYYMMDD-001.json Run Phase 3 in manual patch mode: python3 -m automaxfix.cli run \ --ticket .automaxfix/tickets/AMF-YYYYMMDD-001.json \ --patch-file patch.diff \ --yes Read the latest report: python3 -m automaxfix.cli report --latest Check current status: python3 -m automaxfix.cli status Watch a local test loop: python3 -m automaxfix.cli watch --test-runner pytest --command "pytest -q" automaxfix init automaxfix scan --pytest-output failed.txt automaxfix scan --jest-output jest.log automaxfix scan --vitest-output vitest.log automaxfix scan --mocha-output mocha.log automaxfix scan --go-output go-test.log automaxfix scan --cargo-output cargo-test.log automaxfix scan --from-file build.log --format generic automaxfix bug "reminder gets duplicated after update" automaxfix reproduce --ticket .automaxfix/tickets/AMF-YYYYMMDD-001.json automaxfix run --ticket .automaxfix/tickets/AMF-YYYYMMDD-001.json --patch-file patch.diff automaxfix run --ticket .automaxfix/tickets/AMF-YYYYMMDD-001.json --agent codex cli automaxfix run --ticket .automaxfix/tickets/AMF-YYYYMMDD-001.json --agent claude cli automaxfix run --ticket .automaxfix/tickets/AMF-YYYYMMDD-001.json --agent codex cli --max-attempts 4 automaxfix watch --test-runner pytest --command "pytest -q" automaxfix report --latest automaxfix status | Format | Flag | Example | |---|---|---| pytest | --pytest-output