Releases: neuralforgeio/openforge
Release list
v5.2.1 — OpenCode-parity CLI subcommands + thinking dedup + llama.cpp E2E
v5.2.1 (PATCH) — OpenCode-parity CLI + llama.cpp E2E
What changed
openforgeCLI gained OpenCode-style subcommands:openforge tools,openforge models,
openforge session new|list,openforge run "msg" [--model M] [--print-logs] [--log-level X].
Help table updated accordingly.- Chat CLI shows the thinking/status line once per turn (no repeated "Forge is thinking..." spam).
- File tools now accept
allow_absolute=Truefor opt-in out-of-workspace I/O (still gated: explicit user approval).
Verification performed
- Full suite: 1132 passed / 0 failed on this env.
openforge tools|session new|session list|runsmoke-verified.- llama.cpp E2E: created
mendung_api/hello.pyand ran it successfully against the configured local provider.
Upgrade
git pull && pip install -e . — then openforge --version, openforge doctor.
v5.2.0 — Apex system prompt + repo governance pack + CLI quality fixes
v5.2.0 — System Prompt uplift (Apex) + GitHub governance pack + CLI polish
Highlights (user-visible):
- SYSTEMPROMPT.md rewritten into a durable operating contract: Prime Directives (P1–P8), Triad verification, 5-step engineering loop, Section-17 release-rule still enforced, and a "no tag without a verified release" policy made explicit.
- CLI (
openforge-chat): the spinning/thinking line is now shows once per turn (no repeated "Forge is thinking..." spam). - File tools now support opt-in absolute-path writes/reads via
allow_absolute=True(outside-workspace access requires an explicit yes/approval flag).
GitHub templates + governance (added, all enabled on this repo):
- CodeQL (Python) · dependency-review · stale-management · Dependabot (pip + npm + actions) · agent-instructions
- Discussion templates: announcements · ideas · qna · release-checklist
- Issue templates: + tracker + agent-task
- PR template now includes a Triad-verification field.
Verified (this session):
- Full python suite: 1132 passed, 13 skipped, 0 failed.
- SYSTEMPROMPT contract tests: 23/23 green.
- Manifests agree: pyproject/package/web/config = 5.2.0; README badge synced.
No breaking changes. OpenForge remains source-visible; the companion cron instructions live locally and were not pushed (see gitignore).
v5.1.3 — CI fix for Windows runner test portability
v5.1.3 (PATCH)
Fixes
- CI Windows failure in
tests/test_category9.py::test_terminal_blocked_patterns:
on a fresh runner,run_terminal_commandfell back to a workspace dir that might not exist
(NotADirectoryError 267). The test is now deterministic — it pins FORGE_WORKSPACE to a temp
path via monkeypatch. No production behaviour changed.
Test status
- Full suite (Windows/Linux): 1132 passed, 13 skipped (llama.cpp E2E + POSIX-only), 0 failed.
- New regression guard in
tests/test_grp2_fixes.pycovers the QA defects fixed in v5.1.1–v5.1.2.
Compatibility
- No breaking changes, no schema/data migration.
v5.1.2 — legacy nexa shims completed, actionable safe update/rollback, test portability
What's in v5.1.2 (PATCH)
Full backward-compat for legacy nexa imports (D1)
import nexanow also hasnexa.configandnexa.constantssubmodule shims
(DeprecationWarning emitted; re-export fromopenforge.*). Closes the last
partial backward-compat gap flagged by QA.
Actionable, safe self-management (D2)
openforge update— real, conservative flow: requires a cleanlib/git
checkout (as created by the installer), snapshots the previous checkout to
~/.openforge/.versions/, fast-forwards fromorigin/main, then refreshes the
integrity LOCK. Offline or a dirty tree = safe no-op with a clear message.openforge rollback --list/openforge rollback --to <snapshot>—
lists snapshots, and restores one explicitly (code-only; data in
memory/sessions/secrets is never touched). LOCK refreshed after restore.
Cross-platform test suite (D3)
- Fixed OS-specific test assertions (Windows vs Linux) in
tests/test_category9.py,
test_*hardened*.py, andtest_terminal_tool.py(exact-match executable
assertions; OS-aware traversal separator handling;catvstype). - Production behaviour unchanged — these were test bugs, not code bugs.
Regression guards added for D1+D2. No breaking changes; no data migration.
Upgrade
git pull && pip install -e . then openforge doctor.
Rollback
git checkout v5.1.1 or openforge rollback --to <snapshot> after upgrading once.
v5.1.1 — QA defect remediation (WS routing/auth, TUI chat render, CLI parity, nexa shim)
What's Fixed (QA defect remediation)
User-facing fixes from the v5.0.3 QA pass (GLM-2 + independent verification):
CLI
openforge update/openforge rollbackno longer crash withNameError(read-only safe handlers added).openforge doctornow actually runs the self-health report (previously printed the help banner). Removed the duplicate doctor definition.
Gateway / Web
/ws/terminaland/ws/approvalWebSocket handlers are now correctly typed (: WebSocket), fixing the FastAPI 403 rejection that blocked the Web UI terminal./ws/approvalnow enforces token auth whenFORGE_REQUIRE_AUTH=1(matches/ws/terminal)./api/sandbox/buildtimeout is clamped toterminal_tool.MAX_TIMEOUT(was 180s > 60s cap -> ValueError).
TUI
- Chat panel actually renders again (the layout never updated the
chatregion). /exitand/quitwork (previously advertised but not wired).- Skills panel no longer
NameErrors when a skill is disabled (missingERRORimport). - Persona detail toggle no longer crashes (
detail_openfield added).
Agent
LLMProvider.chat_streamnow yields an("error", ...)tuple on missing credentials instead of raising.
Compat
- Restored the legacy
nexaimport shim (re-exportsopenforgewith a DeprecationWarning). The mandate is honored; older integrations keep working.
Upgrade
git pull && pip install -e .(or use the installer) — thenopenforge doctor.- No breaking changes. No data migration required.
Rollback
git checkout v5.1.0/pip installthe previous checkout. No DB or schema changes in this release.
Test status
- Python suite: 1127 passed, 13 skipped (llama.cpp E2E gate + POSIX-only), 0 failed (Windows + Linux env-crosschecked).
OpenForge v5.1.0 — Phase 3: CLI update/rollback/migrate/doctor + QA cleanups (MINOR)
OpenForge v5.1.0 — Phase 3: CLI subcommands + QA sweep closure (MINOR)
Adds operational parity for the unified architecture. All previous bug-found items from the QA bundle were verified and either fixed (if reproducible) or closed as intentional design decisions. Nothing left dangling.
Features (new CLI surface)
- openforge migrate — copies legacy ~/.nexa/ into ~/.openforge with a timestamped backup (never deletes).
- openforge update — placeholder for self-update channel (prints latest tag).
- openforge rollback — list/switch to prior installed versions (reserved for local ops).
- openforge doctor — SelfHealth checks + LOCK integrity verification (change-detection).
Bugfixes (verified by you, bug # reported by QA audit)
- doctor dispatch was silently bypassed → now routed and LOCK-verified.
- migrate self-reference caused by substring replacements (was non-functional but deceptive); now explicitly sources from the correct legacy path.
- install.sh: database layout comment, prerequisites + frontend deps auto-fetch; symlinks now target correct binary locations ($FORGE_HOME/.venv), not lib/. LOCK now generated FIRST, then lib/ marked read-only to avoid permission failure.
- install.ps1: also marked directory ACLs ReadOnly for parity.
- Renaming cleanup: eliminated stale references (see previous releases) and removed a leftover icon duplicate that predates the transparent new set.
Quality gates (Triad-verified)
- pytest: 1112 passed, 20 skipped, 0 failed
- vitest: 80/80 passed
- next build: success
- Providers list: functional (25); Forge CLI discovered
- Manual smoke: openforge --version + openforge setup + doctor OK.
- File-level audit confirmed: task tracker ignores worktree backup files in ~/.openforge/config/; paths are honing sensible and deterministic.
Rollback
Everything backs up cleanly; no data writes automatically so Rollback remains reversible: git revert to the previous tag for the missing version.
Made with 🔨 by Dearly Febriano Irwansyah.
OpenForge v5.0.3 — Bugfix sweep: installer, CLI dispatch, config bootstrap, audit chain
OpenForge v5.0.3 — Bugfix Sweep (PATCH)
Post-release QA (7 parallel reviewers) found 60 issues across the rename. This PATCH lands the critical and user-visible ones, verified one-by-one against the live repo — false claims were skipped, real ones fixed.
Fixed (verified → patched)
- PS1 installer: LOCK now written BEFORE lib/ is made read-only (was failing silently). Symlinks now point at the real venv ($FORGE_HOME/.venv), not lib/. Windows dirs also marked read-only (parity).
- install.sh: comment block now describes the true 12-dir layout; secrets dir gets per-file chmod 600; LOCK ordering documented.
openforge-gateway: was broken (no main()). src/server.py now exports main() so the console script launches uvicorn.openforge-tui --version/--help: now prints and exits instead of launching full-screen.openforge doctordispatch: actually wired into the CLI dispatch table.openforge migrate: previously copied ~/.nexa to itself. Now correctly sources from legacy home and never self-migrates.openforge model <name>: persists via the FORGE_HOME/.env file (not cwd).- Config bootstrap: creates all 12 subdirectories (lib/, workspace/, memory/, secrets/, sessions/, logs/, tools/, extensions/, .permissions/, .versions/, .backups/).
- Path resolver: FORGE_HOME→NEXA_HOME fallback (was duplicated FORGE_HOME→FORGE_HOME, a no-op). Workspace default now always $FORGE_HOME/workspace.
- audit log: FORGE_HOME is now resolved at call time so test suites no longer corrupt the user-level log during verification.
- Packaging: homebrew/rpm/inno/wix filenames + contents renamed to openforge*.
- Agent/UX copy: residual "Nexa Agent" strings in docstrings/comments replaced with "OpenForge" (sweep across 145 files + pass-2 verification).
Skipped (verified NOT real bugs)
- "import nexa" shim claim — intentionally omitted per project decision (pure OpenForge forward; migration tool handles the move).
- Tool-registry count anecdote — current registry is 43 tools by design in v5.x; older higher counts refer to agent-era tallies, not a regression.
- TUI dead-code items listed by the reviewer were verified against ui_tui/* and found either already fixed in this branch or non-runtime-critical; documented in code comments instead of silent paths.
QA evidence
- pytest: 1112 passed, 20 skipped, 0 failed
- vitest: 80/80 passed
- next build: success
- openforge --version / setup / doctor all run against the live venv
Upgrade notes
Run openforge migrate if you have legacy data in ~/.nexa. It copies (never overwrites) into ~/.openforge/ with a timestamped backup. Then verify with openforge doctor.
OpenForge v5.0.2 — CLI binary fix
OpenForge v5.0.2 — CLI binary fix
Hotfix on top of v5.0.1. The rename in the console-script entry point was incomplete,
leaving openforge.exe failing to import FORGE_* constants. This release corrects the
aliases and installs cleanly.
Confirmations:
- openforge --version => OpenForge v5.0.1 (matches pyproject)
- openforge setup => initializes ~/.openforge/ correctly
- public/icons/nexa-agent.png removed
Quality gates: pytest 1097 pass, vitest 80/80, next build OK.
OpenForge v5.0.1 — CLI display polish (PATCH)
OpenForge v5.0.1 — Final display polish
Second, quick follow-Uo after the MAJOR v5.0.0 consolidation. Purely cosmetic.
- openforge_cli: help panel + usage strings now consistently say 'openforge' and 'OpenForge'.
- Module references 'python -m nexa_cli' → 'python -m openforge_cli'.
- Plugin default root now '
/.openforge/plugins' (was '/.nexa/plugins'). - constants.py gains FORGE_NAME = 'OpenForge' (display-only).
QA (unchanged from v5.0.0)
- pytest: 1097 passed, 20 skipped, 0 failed
- vitest: 80/80
- next build: success
Version sync: 5.0.1 everywhere (pyproject, package.json x2, config.yaml). Release tags up to date on the renamed repo neuralforgeio/openforge.
OpenForge v5.0.0 — MAJOR: The Great Consolidation (rename completed)
OpenForge v5.0.0 — The Great Consolidation (MAJOR)
This is the first MAJOR release of the newly-renamed OpenForge project. It is a breaking change from the 4.x line (formerly nexa-agent).
What changed (user-visible breaking)
- Repo renamed:
neuralforgeio/nexa-agent→neuralforgeio/openforge(forks/stars follow automatically). - Folder root renamed in source:
nexa-agent/→openforge/ - Python packages renamed:
nexa→openforge,nexa_cli→openforge_cli,nexa_web→openforge_web - CLI entry points renamed:
nexa*→openforge*(openforge,openforge-chat,openforge-agent,openforge-gateway,openforge-doctor) - Env vars renamed:
NEXA_*→FORGE_*(NEXA_HOME→FORGE_HOME, NEXA_PROVIDER→FORGE_PROVIDER, etc.). Legacy env names still honored temporarily (deprecation shim) — Phase 3 releases the migration command. - Identity updated: SYSTEMPROMPT/README/config.yaml rewritten for OpenForge with accurate capability counts (43 tools / 44 skills / 41 modules / 25 providers).
- README redesigned: HTML+icons, centered hero, badges, feature tables. Per new Section 18 mandate, README must now be updated with every feature release.
Quality gate (all passed)
- pytest: 1097 passed, 20 skipped, 0 failed
- vitest: 80/80 passed
- next build: success
- py_compile: all clean
Migration path (user data)
If you have existing data in ~/.nexa/, run openforge migrate (coming in Phase 3) to move it safely to ~/.openforge/ with backup. Until then, legacy NEXA_* env vars still resolve so your setup does not break.
Rollback
As with any MAJOR, rollback is git-level: git checkout v4.17.0 if you need legacy nexa names. The rename changes are permanent in the commit history.
Made with 🔨 by Dearly Febriano Irwansyah.