miniforge is an autonomous software development system designed to behave like a factory, not a chatbot
Clojure
45
3,018 commits
updated Oct 1, 2026
Write a spec. Get a pull request.
Miniforge is an autonomous software factory. You describe what you want — in plain English or structured EDN — and miniforge plans the work, writes the code, runs the tests, reviews itself, and opens a PR. No prompt engineering. No copy-paste. Full SDLC.
BEFORE AFTER
────── ─────
1. Write a ticket 1. Write a spec
2. Create a branch 2. mf run spec.edn
3. Read the codebase 3. Review the PR
4. Write code 4. Merge
5. Run tests
6. Fix failures
7. Lint
8. Fix lint
9. Commit
10. Push
11. Open PR
12. Write PR description
13. Wait for CI
14. Wait for review
15. Address feedback
16. Re-push
17. Wait for re-review
18. Merge
Miniforge runs four nested control loops — a team of agents does the work, a tight inner loop enforces quality at every step, a monitor resolves reviewer feedback after delivery, and meta-agents govern the whole operation.
Team loop — specialized agents collaborate through phases, like a dev team handing off work:
Spec ──► Explore ──► Plan ──► Implement ──► Verify ──► Review ──► Release ──► Observe
│ │ │ │ │ │ │
│ │ │ │ │ │ └─ monitors PR:
│ │ │ │ │ │ polls comments,
│ │ │ │ │ │ fixes feedback,
│ │ │ │ │ │ merges when ready
│ │ │ │ │ │
│ │ │ │ │ └─ creates branch,
│ │ │ │ │ commits, opens PR
│ │ │ │ │
│ │ │ │ └─ self-reviews diff
│ │ │ │ against spec + constraints
│ │ │ │
│ │ │ └─ gates: syntax, lint,
│ │ │ no-secrets, tests-pass
│ │ │
│ │ └─ generates code via LLM agent
│ │
│ └─ decomposes spec into a task DAG
│ with dependencies and parallel execution
│
└─ scans codebase, loads relevant files,
queries knowledge base
Inner loop — inside each phase, the agent generates an artifact, validates it against policy gates, and repairs failures automatically:
generate ──► validate ──► [pass] ──► next phase
│
└─ [fail] ──► repair ──► re-validate
│
└─ [budget exhausted] ──► escalate
Observe loop — after Release creates a PR, the monitor loop runs autonomously for up to 72 hours:
poll PR ──► classify comments ──► route
│ │
├─ change request ──► fix, push, reply
├─ question ──────► answer, reply
├─ approval ──────► attempt merge
└─ noise ─────────► skip
Meta loop — governance meta-agents supervise the entire operation at a semantic level. Any meta-agent can halt the factory floor:
┌─────────────────────────────────────────────────┐
│ Meta-Agent Coordinator │
│ │
│ Progress Monitor ─── stagnation? ──► halt │
│ Test Quality ─────── coverage? ───► halt │
│ Conflict Detector ── diverged? ───► halt │
│ Resource Manager ─── over budget? ► halt │
│ Evidence Collector ── (observe only, no halt) │
│ │
│ Any agent can halt. Decisions are observable. │
└─────────────────────────────────────────────────┘
Policy gates govern every transition. Budget limits (tokens, cost, time) enforce hard stops. All decisions produce evidence bundles for traceability.
bash <(curl …) --static; Windows: scoop install babashka):runtime-kind :docker.git clone https://github.com/miniforge-ai/miniforge.git
cd miniforge
bb bootstrap
# Configure provider auth for agent runs:
# opencode auth login
# Run your first workflow
mf run examples/workflows/simple-refactor.edn
bb bootstrap installs the development dependencies (Java, Clojure CLI,
clj-kondo, Polylith, markdownlint), configures the repo, prefetches the
coverage tool used by bb ccov, and on macOS brew-installs Podman and
initializes a default podman machine. Linux users install Podman via
their distro package manager (apt install podman, dnf install podman,
etc.); Docker users can stay on Docker by setting
MINIFORGE_RUNTIME=docker or :runtime-kind :docker in config.
To check the resolved runtime: mf doctor (which now reports the
selected runtime + version + override hint) or mf runtime info
(prints the descriptor as data).
See the Quickstart Guide for a detailed walkthrough.
A spec is a description of what you want. Two fields are required:
{:spec/title "Add input validation to the signup form"
:spec/description
"The signup form accepts any input without validation. Add server-side
validation for email format, password strength (min 8 chars, 1 number),
and username uniqueness. Return structured error messages."
:spec/intent {:type :feature
:scope ["src/auth/signup.clj"]}
:spec/constraints
["No breaking changes to existing API"
"All existing tests must pass"]
:spec/acceptance-criteria
["Email validation rejects malformed addresses"
"Password validation enforces minimum requirements"
"Username uniqueness check queries the database"
"Error messages are structured maps, not strings"]}
Specs can also be written as Markdown with YAML frontmatter. See Writing Specs.
# Watch miniforge improve itself (dogfooding demo)
bash examples/demo/run-demo.sh
The demo is a Bash script. On native Windows, run it from Git Bash or WSL2 —
or invoke the underlying workflow directly with mf run examples/demo/add-utility-function.edn. See Platform
Support for details.
See Demo Guide for a guided walkthrough.
| Workflow | Phases | Use For |
|---|---|---|
| Canonical SDLC | explore, plan, implement, verify, review, release, observe | Features, refactors, bug fixes |
| Quick Fix | implement, verify, done | Small, well-understood changes |
The workflow is selected automatically from the spec's intent, or overridden
with :workflow/type :quick-fix. Canonical SDLC includes the full observe
loop — the PR monitor will autonomously address reviewer feedback after release.
# LLM backend: OpenCode is the default provider/auth wrapper.
opencode auth login
# Tune execution
export MINIFORGE_MAX_ITERATIONS=50 # max phase retries
export MINIFORGE_MAX_TOKENS=150000 # token budget per workflow
See Configuration Guide for all options.
Miniforge is built on a governed workflow engine with pluggable phases, agents, and policy packs:
┌─────────────────────────────────────────────────────┐
│ CLI / TUI / Web Dashboard │
├─────────────────────────────────────────────────────┤
│ Meta Loop: Governance (can halt at any point) │
│ Progress · Test Quality · Conflicts · Resources │
├─────────────────────────────────────────────────────┤
│ Team Loop: Workflow Engine (phase state machine) │
│ ┌──────┐ ┌──────┐ ┌───────┐ ┌──────┐ ┌─────────┐ │
│ │Explore│ │ Plan │ │Implmnt│ │Verify│ │ Release │ │
│ └──────┘ └──────┘ └───────┘ └──────┘ └─────────┘ │
│ ↕ ↕ ↕ ↕ │
│ ┌────────────────────────────────────────────────┐ │
│ │ Inner Loop: generate → validate → repair │ │
│ └────────────────────────────────────────────────┘ │
│ ↕ ↕ ↕ │
│ ┌────────┐ ┌────────┐ ┌──────────┐ ┌─────────┐ │
│ │ Agents │ │ Gates │ │ Policies │ │Evidence │ │
│ └────────┘ └────────┘ └──────────┘ └─────────┘ │
├─────────────────────────────────────────────────────┤
│ Observe Loop: PR Monitor (poll → classify → fix) │
├─────────────────────────────────────────────────────┤
│ DAG Executor: parallel tasks, isolated worktrees │
├─────────────────────────────────────────────────────┤
│ LLM Backends (Claude, GPT, Gemini, Local) │
│ Intelligent model selection · budget enforcement │
└─────────────────────────────────────────────────────┘
See Architecture Overview for details. See Normative Specs for the full specification.
Open source and in active use. Miniforge is actively developed and dogfooded daily. The full pipeline (spec → PR → monitor → merge) works end-to-end for Clojure projects, with hundreds of PRs merged using Miniforge on itself.
See SPEC_INDEX.md for normative specification status and ROADMAP.md for delivery priorities.
See CONTRIBUTING.md for development setup, Polylith structure, git conventions, and the pre-commit hook.
Clojure
97.8%
Python
1.2%
miniforge is an autonomous software development system designed to behave like a factory, not a chatbot
Clojure
45
3,018 commits
updated Oct 1, 2026
Write a spec. Get a pull request.
Miniforge is an autonomous software factory. You describe what you want — in plain English or structured EDN — and miniforge plans the work, writes the code, runs the tests, reviews itself, and opens a PR. No prompt engineering. No copy-paste. Full SDLC.
BEFORE AFTER
────── ─────
1. Write a ticket 1. Write a spec
2. Create a branch 2. mf run spec.edn
3. Read the codebase 3. Review the PR
4. Write code 4. Merge
5. Run tests
6. Fix failures
7. Lint
8. Fix lint
9. Commit
10. Push
11. Open PR
12. Write PR description
13. Wait for CI
14. Wait for review
15. Address feedback
16. Re-push
17. Wait for re-review
18. Merge
Miniforge runs four nested control loops — a team of agents does the work, a tight inner loop enforces quality at every step, a monitor resolves reviewer feedback after delivery, and meta-agents govern the whole operation.
Team loop — specialized agents collaborate through phases, like a dev team handing off work:
Spec ──► Explore ──► Plan ──► Implement ──► Verify ──► Review ──► Release ──► Observe
│ │ │ │ │ │ │
│ │ │ │ │ │ └─ monitors PR:
│ │ │ │ │ │ polls comments,
│ │ │ │ │ │ fixes feedback,
│ │ │ │ │ │ merges when ready
│ │ │ │ │ │
│ │ │ │ │ └─ creates branch,
│ │ │ │ │ commits, opens PR
│ │ │ │ │
│ │ │ │ └─ self-reviews diff
│ │ │ │ against spec + constraints
│ │ │ │
│ │ │ └─ gates: syntax, lint,
│ │ │ no-secrets, tests-pass
│ │ │
│ │ └─ generates code via LLM agent
│ │
│ └─ decomposes spec into a task DAG
│ with dependencies and parallel execution
│
└─ scans codebase, loads relevant files,
queries knowledge base
Inner loop — inside each phase, the agent generates an artifact, validates it against policy gates, and repairs failures automatically:
generate ──► validate ──► [pass] ──► next phase
│
└─ [fail] ──► repair ──► re-validate
│
└─ [budget exhausted] ──► escalate
Observe loop — after Release creates a PR, the monitor loop runs autonomously for up to 72 hours:
poll PR ──► classify comments ──► route
│ │
├─ change request ──► fix, push, reply
├─ question ──────► answer, reply
├─ approval ──────► attempt merge
└─ noise ─────────► skip
Meta loop — governance meta-agents supervise the entire operation at a semantic level. Any meta-agent can halt the factory floor:
┌─────────────────────────────────────────────────┐
│ Meta-Agent Coordinator │
│ │
│ Progress Monitor ─── stagnation? ──► halt │
│ Test Quality ─────── coverage? ───► halt │
│ Conflict Detector ── diverged? ───► halt │
│ Resource Manager ─── over budget? ► halt │
│ Evidence Collector ── (observe only, no halt) │
│ │
│ Any agent can halt. Decisions are observable. │
└─────────────────────────────────────────────────┘
Policy gates govern every transition. Budget limits (tokens, cost, time) enforce hard stops. All decisions produce evidence bundles for traceability.
bash <(curl …) --static; Windows: scoop install babashka):runtime-kind :docker.git clone https://github.com/miniforge-ai/miniforge.git
cd miniforge
bb bootstrap
# Configure provider auth for agent runs:
# opencode auth login
# Run your first workflow
mf run examples/workflows/simple-refactor.edn
bb bootstrap installs the development dependencies (Java, Clojure CLI,
clj-kondo, Polylith, markdownlint), configures the repo, prefetches the
coverage tool used by bb ccov, and on macOS brew-installs Podman and
initializes a default podman machine. Linux users install Podman via
their distro package manager (apt install podman, dnf install podman,
etc.); Docker users can stay on Docker by setting
MINIFORGE_RUNTIME=docker or :runtime-kind :docker in config.
To check the resolved runtime: mf doctor (which now reports the
selected runtime + version + override hint) or mf runtime info
(prints the descriptor as data).
See the Quickstart Guide for a detailed walkthrough.
A spec is a description of what you want. Two fields are required:
{:spec/title "Add input validation to the signup form"
:spec/description
"The signup form accepts any input without validation. Add server-side
validation for email format, password strength (min 8 chars, 1 number),
and username uniqueness. Return structured error messages."
:spec/intent {:type :feature
:scope ["src/auth/signup.clj"]}
:spec/constraints
["No breaking changes to existing API"
"All existing tests must pass"]
:spec/acceptance-criteria
["Email validation rejects malformed addresses"
"Password validation enforces minimum requirements"
"Username uniqueness check queries the database"
"Error messages are structured maps, not strings"]}
Specs can also be written as Markdown with YAML frontmatter. See Writing Specs.
# Watch miniforge improve itself (dogfooding demo)
bash examples/demo/run-demo.sh
The demo is a Bash script. On native Windows, run it from Git Bash or WSL2 —
or invoke the underlying workflow directly with mf run examples/demo/add-utility-function.edn. See Platform
Support for details.
See Demo Guide for a guided walkthrough.
| Workflow | Phases | Use For |
|---|---|---|
| Canonical SDLC | explore, plan, implement, verify, review, release, observe | Features, refactors, bug fixes |
| Quick Fix | implement, verify, done | Small, well-understood changes |
The workflow is selected automatically from the spec's intent, or overridden
with :workflow/type :quick-fix. Canonical SDLC includes the full observe
loop — the PR monitor will autonomously address reviewer feedback after release.
# LLM backend: OpenCode is the default provider/auth wrapper.
opencode auth login
# Tune execution
export MINIFORGE_MAX_ITERATIONS=50 # max phase retries
export MINIFORGE_MAX_TOKENS=150000 # token budget per workflow
See Configuration Guide for all options.
Miniforge is built on a governed workflow engine with pluggable phases, agents, and policy packs:
┌─────────────────────────────────────────────────────┐
│ CLI / TUI / Web Dashboard │
├─────────────────────────────────────────────────────┤
│ Meta Loop: Governance (can halt at any point) │
│ Progress · Test Quality · Conflicts · Resources │
├─────────────────────────────────────────────────────┤
│ Team Loop: Workflow Engine (phase state machine) │
│ ┌──────┐ ┌──────┐ ┌───────┐ ┌──────┐ ┌─────────┐ │
│ │Explore│ │ Plan │ │Implmnt│ │Verify│ │ Release │ │
│ └──────┘ └──────┘ └───────┘ └──────┘ └─────────┘ │
│ ↕ ↕ ↕ ↕ │
│ ┌────────────────────────────────────────────────┐ │
│ │ Inner Loop: generate → validate → repair │ │
│ └────────────────────────────────────────────────┘ │
│ ↕ ↕ ↕ │
│ ┌────────┐ ┌────────┐ ┌──────────┐ ┌─────────┐ │
│ │ Agents │ │ Gates │ │ Policies │ │Evidence │ │
│ └────────┘ └────────┘ └──────────┘ └─────────┘ │
├─────────────────────────────────────────────────────┤
│ Observe Loop: PR Monitor (poll → classify → fix) │
├─────────────────────────────────────────────────────┤
│ DAG Executor: parallel tasks, isolated worktrees │
├─────────────────────────────────────────────────────┤
│ LLM Backends (Claude, GPT, Gemini, Local) │
│ Intelligent model selection · budget enforcement │
└─────────────────────────────────────────────────────┘
See Architecture Overview for details. See Normative Specs for the full specification.
Open source and in active use. Miniforge is actively developed and dogfooded daily. The full pipeline (spec → PR → monitor → merge) works end-to-end for Clojure projects, with hundreds of PRs merged using Miniforge on itself.
See SPEC_INDEX.md for normative specification status and ROADMAP.md for delivery priorities.
See CONTRIBUTING.md for development setup, Polylith structure, git conventions, and the pre-commit hook.
Clojure
97.8%
Python
1.2%