Skip to content

Releases: nexiouscaliver/OmniForge

3.4.0 — Round-2 Latency: Deterministic Pre-Dispatch, Judgment-Only Adjudication, Fix Brief, Cost-Weighted Partition

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 05 Sep 19:38

What's New

Round-2 latency release, validated GO by the R2-E A/B run (round2-validation.md): the review lead-in, adjudication, and reviewer balance are now deterministic scripts, and every posting run ends with a paste-ready fix brief for the developer's coding agent.

Added

  • omni_prepare.py deterministic pre-dispatch (R2-A, PR #34) — one stdlib-only invocation runs the whole Phase-1 lead-in (gather file, partition, digest, per-agent dispatch briefs) and emits prepare.json + one-line machine receipts with phases.jsonl prepare rows. Pre-dispatch: 827 s fleet median → 265 s raw / ~193 s production-equivalent (prepare itself is O(seconds) at any MR size — 3.73 s / 4.05 s measured). Exit codes are a soft-fail contract: a nonzero exit falls back to the improvised Phase-1 path immediately — no retry, no STOP — proven end-to-end by the R2-E force-exit-1 fallback probe.
  • omni_adjudicate.py mechanical pre-pass + judgment-only Phase 5 (R2-B, PR #33) — the worklist's mechanical rows (single-agent autos, near-dup merges, prior matches) are decided script-final without the LLM; only cross-finding and validity rows reach judgment. Adjudication: 461 s / 40 turns fleet median → 239 s / 22 turns — best ever measured on a real MR (17 of 26 rows auto-decided, 9-row judgment core).
  • Fix-brief note (R2-P, PR #32) — the poster's last artifact is a self-contained "OmniForge fix brief — paste this into your coding agent" general MR note (template v1): frozen guard clause first, MR-intent line, then one FIXED in <short-sha> — / SKIPPED — / QUESTION — line per finding linking its exact #note_<id> thread. R2-E verified 20/20 links map 1:1 to posted artifacts (0 dead links, set-equality with the new-adjudicated set); poster stdout gains fix_brief: true.

Changed

  • Cost-weighted 3-agent partition (R2-D, PR #35)omni_partition.py balances reviewer assignments by a per-file cost model (1.25× cap, security spill) instead of file count: real-MR per-agent balance 1288/1296/417‰ → 1000/1000/1000‰ (76/75/76 cost units) — deterministic, ending the 2× reviewer wall skew; dispatch briefs trimmed −51.4 % with tripwire tests against over-trimming.
  • SKILL.md Phases 1–3 rewritten script-first — prepare is the primary lead-in; the fetcher executes only inside prepare and at the two sanctioned --verify-head checkpoints (R2-E gate 2: zero double-fetch on the knob-on path).

Tests

  • Full suite at the release commit: 560 passed + 128 subtests (was 383 + 19 at 3.3.3) — python3 -m pytest plugins/omniforge/tests.

Validation

  • R2-E A/B verdict: GO (frozen head of MR !21; A = 3.3.3 dry vs B = Round-2 real-posting). Every functional, safety, and quality gate passed: prepare-first structure with machine receipts, zero double-fetch, script-final auto rows, 8/8 planned threads anchored first-try, poster failures: 0, zero sleeps, zero MCP on the data path (MCP remains only for the Phase-2/7 worktree lifecycle), waiter unchanged; findings 21 vs 21 (≥70 % of baseline), every verdict flip attributed to reviewer nondeterminism — 0 attributable to the Round-2 levers.
  • Fallback probe PASS (gate 6)omni_prepare.py stubbed to exit 1 → improvised-path fallback invoked 9 s later (no retry, no STOP); the run completed engine exit 0 with a full 23,806-byte report, harness SUCCESS.
  • Fix-brief checks PASS (gate 5) — guard clause first, MR-intent line, 20/20 exact #note_<id> links, listed set == new-adjudicated set, FIXED/SKIPPED/QUESTION vocabulary verbatim, posted last (note 3790163250).
  • Two turn-count calibration misses, disclosed — pre-dispatch 45 turns vs ≤10 and adjudication 22 turns vs ≤12: decomposition shows harness-only token friction (≈12 turns), retrospective re-render absent on first reviews (≈8), and agent inspection verbosity (≈25) — not lever regressions (the 3.3.3 baseline measured 42 pre-dispatch turns under the same harness). R2-F fleet telemetry is the production confirmation — watch phases.jsonl prepare rows and Phase-5 walls.

Known limitations (stated honestly)

  • The ≤10/≤12 turn targets are unreachable under the local A/B harness for ANY arm including the 3.3.3 baseline; they are re-anchored to production telemetry for R2-F.
  • 3.4.x backlog (disclosed): ADJ_ARGS snippet ↔ argparse first-call hiccup (2-turn self-correcting tax per run), retrospective prepare double-gather (+4 s), fix-brief >25-findings cap path awaits its first real >25-findings MR (unit-covered only).

Contributors

  • @nexiouscaliver (Shahil Kadia) — Round-2 levers, tests, and R2-E validation.

Full changelog: see CHANGELOG.md § 3.4.0.

3.3.3 — fix release: poster full-path projects, deletion-MR pre-filter, reply-preference

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 04 Sep 14:51
2c18b3a

[3.3.3] - 2026-09-04

Fix release — resolves the three findings from the 3.3.2 production canary (re-review of MR !1388, pure-deletion +0/−16).

Fixed

  • Poster full-path project 404omni_post_review.py URL-encodes non-numeric --project values on EVERY request path it builds (guard notes GET, refs GET, summary/thread/reply/note POSTs) via the shared omni_glab_api.encode_project; the CLI help now accepts and documents the bare full path. Production motive (canary, session e18dbabb): omni_post_review.py --project regenai-gitlab/regenai-digital/cleo → guard GET 404 — the FETCHER got encode_project in 3.3.2 but the poster never did; the run recovered only by switching to the numeric ID. Live-proven first-try on scratch MR !21 with the full path (note-only batch, exit 0, notes: 1, note re-fetched by id then deleted 204)

Added

  • Deletion-MR / unanchorable-loci pre-filter (SKILL.md Phase 4 + posting-guide) — BEFORE building the findings payload, check the gather data for anchorability: an MR with zero added lines (pure-deletion, e.g. +0/−16) or a finding whose locus has no anchorable line plans as a note entry or a reply on the matching prior thread — never as a thread entry. Production motive (canary, MR !1388): 4 inline threads planned on a pure-deletion MR → GitLab 400 Bad request — Note {:line_code=>["can't be blank"]} → fail-fast aborted the batch (correct) but the threads were burned; the poster docstring now says the line_code-400 remedy is planning (note/reply), not retrying
  • Reply-preference routing rule (SKILL.md Phase 4) — follow-ups to an existing OmniForge thread MUST be posted as replies on that thread (reply_to_thread_id); note entries are ONLY for genuinely anchorless NEW findings with no existing thread — never substitute a note where a reply belongs. Production motive (canary): two prior-thread follow-ups ("Prior thread X is confirmed…") posted as top-level NOTES because the note path had become the path of least resistance

Changed

  • encode_project is ONE shared helper — moved from omni_fetch_mr.py into omni_glab_api.py (same semantics: numeric digits-only passthrough, already-%-encoded passthrough, else quote(safe="")); the fetcher now calls the shared helper (behavior identical — its 3 encoding tests unchanged and green) and the poster uses it on every path builder
  • Test suite 383 + 19 subtests (was 376 + 19)
  • Version bumped to 3.3.3

Deferred to 3.3.4+

  • line_range positions (needs nested-param dev validation), adjudication-turns lever, dead-subagent watchdog automation — unchanged from 3.3.2

3.3.2 — perf + reliability mini release

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 04 Sep 10:48
ff6fdb8

[3.3.2] - 2026-09-04

Added

  • Note entries on omni_post_review.py — findings objects carrying ONLY {"body": ...} (no file_path/line_number) post as top-level MR notes (execution order: summary → threads → replies → notes), counted in the additive stdout key notes; mixed batches fine; a body-only entry that also carries anchor keys is an ambiguous-shape usage error (exit 2 — never silently skipped). Replaces the raw-glab general-notes path: glab api --input - silently drops note bodies — production !1388 lost 5/5 MR-meta notes to it. Live-proven on scratch MR !21: note-only batch (no --summary, no --skip-summary) exit 0 with notes: 1, the note re-fetched by id, then deleted (204)
  • --host on omni_post_review.py — same resolution order as the fetch script (flag > GITLAB_HOST > CI_API_V4_URL > https://gitlab.com), threaded through EVERY API call including the guard's notes listing and the note posts (parity with omni_fetch_mr.py)
  • Auto-summary-skip for no-new-thread batches--summary is required ONLY when the batch has at least one new-thread entry; reply-only and note-only batches proceed without it (implied skip: no summary, guard not evaluated — same as reply-only today). Removes the production friction of reply-only batches dying on argparse exit 2 (seen twice in production, one wasted turn each); --skip-summary keeps its current meaning

Changed

  • Duplicate-summary guard paginates — the guard's notes listing now goes through omni_glab_api.get_all (per_page=100, page-following), so a busy MR (100+ notes) can no longer hide an OmniForge summary beyond page 1; a single page still costs exactly ONE notes GET (pinned by test)
  • omni_fetch_mr.py accepts bare full-path projects — non-numeric --project values are URL-encoded (urllib.parse.quote(safe="")) on every endpoint the script builds; numeric IDs and pre-encoded values pass through unchanged, and the CLI help says so. Production motive: the 3.3.1 A/B arm passed regenai-gitlab/regenai/regenai-base unencoded → 3× HTTP 404 ≈ 72 s before retreating to the numeric ID. Live-proven first-try on MR !21 with the full path (6 API calls, 4.1 s)
  • SKILL.md + posting-guide document note entries — Phase 6 posting instructions and the guide's findings-shape section name note entries as the poster's general-notes path (with the glab api --input - body-drop hazard as the reason); Phase 3 gains the stalled-subagent rule: attempt exactly ONE SendMessage resume before harvesting partials — never loop
  • Test suite 376 + 19 subtests (was 362 + 19)
  • Version bumped to 3.3.2

Fixed

  • Headless MCP −32000 — the .mcp.json launch arg is pinned to mcp[cli]>=1.0.0,<2.0.0: the unpinned uv run --with mcp[cli] resolves mcp 2.x, where from mcp.server.fastmcp import FastMCP dies at import and every tool call returns −32000 (diagnosed end-to-end in 3.3.1 with this exact pin proven locally; now shipped under the operator's keep-MCP decision)

Deferred to 3.3.3+

  • line_range positions (needs nested-param dev validation), adjudication-turns lever, dead-subagent watchdog automation

3.3.1 — W4 GLAB I/O

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 03 Sep 20:47
b45fd7f

[3.3.1] - 2026-09-03

Added

  • omni_fetch_mr.py one-shot MR gather (skills/omnireview-gitlab/scripts/) — ONE stdlib-only invocation gathers everything review Phase 1 needs into ONE JSON file (MR metadata, paginated diffs, unified-diff headers synthesized where the API omits them, diff_line_map, commits, discussions envelope, versions, notes) with bounded retry/backoff (2 s / 4 s on 5xx/429/network, fail-fast on 400/401/403/404), atomic write, and a one-line stdout JSON receipt (elapsed_ms, api_calls); replaces the improvised dozens-of-calls Phase-1 gather
  • --verify-head mid-run STOP guard on omni_fetch_mr.py + the deterministic STOP protocol pinned in SKILL.md (Phase 3 after the waiter, and again immediately before Phase 6 posting): a moved diff_refs.head_sha → exit 4, no re-partition/re-dispatch/re-gather, one flat top-level addendum note, no inline threads on stale anchors — fixes the !1403 class (3 passes / 9 dispatches, watchdog kill, nothing posted)
  • Gather-file shimsomni_partition.py and omni_digest.py detect the gather file's shape (data + discussions at top level) and operate on the embedded envelope; legacy single-/two-file invocations byte-identical
  • --skip-summary on omni_post_review.py — threads/replies-only resume path for mid-batch failures (--skip-summary --force), closing the guide's old unanchored raw-command escape hatch
  • omni_glab_api.py shared direct REST transport (skills/omnireview-gitlab/scripts/) — one tested host/token/auth/retry/pagination contract (stdlib urllib, Bearer auth, token redaction) used by both scripts

Changed

  • omni_post_review.py posts via the direct GitLab Discussions API — every glab subprocess call replaced with omni_glab_api.request; inline threads carry the full documented position[...] payload, so every thread posts ANCHORED first-try (live-proven on scratch MR !21: the probe thread's first note carries position.new_path; see w4-glab-io-validation.md); all 3.3.0 poster contracts preserved (exit codes 0/1/2/3, stdout JSON + elapsed_ms, duplicate-summary guard, reply routing, --dry-run executes nothing and works without a token, refs fetched once per invocation)
  • SKILL.md is script-first — Phase 1 names omni_fetch_mr.py as the primary gather (MCP fetch demoted to optional-interactive); posting-guide names the shipped poster script as the Implementation path (MCP posting tools optional in interactive installs)
  • Test suite 362 (was 325)
  • Version bumped to 3.3.1

Fixed

  • Unanchored inline threads — root cause: glab api --raw-field "position[base_sha]=..." drops nested position[…] keys, so threads landed as unanchored general notes (measured ~209 s / 27 turns of delete+repost anchor repair per review); the direct-API transport sends literal bracket keys form-encoded and the guide's unanchored raw fallback command is removed
  • Headless MCP −32000 diagnosed (record-only) — the .mcp.json launch line uv run --with mcp[cli] resolves the latest mcp (2.x), where from mcp.server.fastmcp import FastMCP dies at import; proven end-to-end, and a one-line pin (mcp[cli]>=1.0.0,<2.0.0) fixes it locally — NOT shipped in 3.3.1 (operator keep/drop decision pending; the standalone script path is primary either way, so headless runs are unaffected). Full evidence: w4-mcp-diagnosis.md
  • posting-guide's trailing "MCP post_full_review remains the recommended primary" claim removed — contradicted the script-first Implementation line

A/B

  • A/B e2e (same MR !21, same head, both arms real-posting, inter-arm reset, w4 arm first): total wall 1335 s vs 1380 s (−45 s, within single-pair noise); gather = 6 API calls / 4.3 s once parameterized vs 5 improvised calls + 7 inline heredocs (~104 s); posting = ~48 s (dry-run validation + one 20.8 s real post) vs ~86 s + an ~80 s token detour + 1 failed post; threads anchored first-try 24/24 (100%) vs 0/30 (3.3.0 posted every finding as an unanchored top-level note and never repaired — silent anchor loss, worse than the known delete+repost loop); improvised /tmp executables 0 in both arms; sleeps 0 (w4, main + all subs) vs 2 in one 3.3.0 subagent; STOP-guard --verify-head ran at both checkpoints, exit 0 both. Honest misses: 3 failed fetch invocations (~72 s — unencoded full-path 404s + a token detour) before the run settled on the numeric project ID (3.3.2 candidate: accept/URL-encode full project paths); adjudication turns 31 vs 24 (the ≤12 target remains unmet — unchanged lever, not a W4 regression). Full tables: w4-glab-io-validation.md

v3.3.0 — Tail Compression: Findings Contract, Deterministic Consolidator, Stable Posting

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 02 Sep 18:06
87d09ab

What's New

Added

  • Structured findings JSON contract + omni_validate_findings.py (skills/omnireview-gitlab/scripts/) — each reviewer agent emits a machine-readable findings block; the validator checks all three blocks and passes malformed output through verbatim (never fails the run).
  • omni_consolidate.py deterministic consolidation (skills/omnireview-gitlab/scripts/) — merges only near-identical findings (same file+lines+category, Jaccard ≥ 0.30); same-locus non-identical pairs classify as clusters, not merges, with per-agent verbatim entries in the worklist; corroboration is recorded as metadata; confidence values are never adjusted or recomputed; emits one 6-section single-pass adjudication worklist; --prior retrospective guard marks prior-matched loci already_adjudicated — prior posted findings are authoritative and new input is routed as replies on their existing threads.
  • omni_post_review.py shipped posting fallback (skills/omnireview-gitlab/scripts/) — standalone glab-based posting with retry/backoff (2 s / 4 s on 5xx/429), a duplicate-summary guard that refuses to post a second default ## OmniForge summary, and --reply-to / reply_to_thread_id thread routing; no MCP dependency (if the MCP server breaks, posting still works).
  • omni_partition.py diff load balancing (skills/omnireview-gitlab/scripts/) — security-affinity assignment first, then greedy balancing across the codebase and analyst reviewers; plus reviewer-brief tightening and the "Never sleep-poll — not even sub-60 s sleeps" rule.
  • omni_digest.py context digest (skills/omnireview-gitlab/scripts/) — script-built digest where bot artifacts are carried byte-verbatim, human prose is capped, and diffs are reduced to hunk headers; retrospective wiring in Phases 1/3/4 replaces raw comment dumps.

Changed

  • One-dispatch-per-reviewer rule in the three reviewer briefs — fixes the 9-vs-3 dispatch-file churn observed on retrospective re-reviews (A/B retrospective arm: sub_count == 3).
  • Test suite 325 + 9 (was 231).

Measured (A/B e2e — same MR, same head, same provider hour)

  • Tail −28.2 % (339.5 → 243.7 s — real, beyond the ±75 s single-pair noise band); output tokens −24.4 %.
  • Dispatch files: 3 (retrospective re-reviews previously produced 9); 3 prior loci marked already_adjudicated with replies routed on their recorded threads.

Known limitations (stated honestly)

  • Adjudication turns: 20 vs the ≤12 target — miss (baseline 10; per-call API time fell 32.5 → 10.9 s, so the tail dropped anyway — the single-pass worklist produces more, much shorter turns).
  • Sub-agent wall skew (2×) unimproved by this release.
  • Measurements are from the local A/B harness; fleet (VPS) verification follows the production rollout.

Full changelog: see CHANGELOG.md § 3.3.0.

v3.2.0 — Chunked Reviewer Waiter (omni_wait.py) + Phase 3 Completion Rewrite

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 01 Sep 20:51
65bb872

What's New

Added

  • omni_wait.py chunked completion waiter (skills/omnireview-gitlab/scripts/) — waits on the 3 reviewer subagents' transcripts with exit-code semantics (0 = all terminal, 3 = still running — re-invoke, 2 = degraded: budget exhausted / every remaining agent stalled / transcript count mismatch). One-line JSON status on stdout with per-agent state and final_text harvest; mtime-stability fallback when the Status: DONE marker is absent (the marker never blocks completion); dead-agent stall detection (>300 s) with partial harvest while the others are still waited on; scan-dir fallback with a 15 s spawn-grace window (count_pending); and --reports-dir writing a pretty-printed status.json plus one markdown report file per agent (omni_wait-<basename>.md, collision-suffixed) — the lossless Read-channel for the reviewers' reports.
  • Chunked SIGALRM deadline strictly inside the chunk budget (default 480 s, under the 600 s Bash-tool ceiling) with fail-fast degraded exits for platforms without POSIX timers (sigalrm_unsupported).

Changed

  • omnireview-gitlab Phase 3 completion detection rewritten — the waiter's exit code is now the sole completion authority; improvised sleep-polling and hand-written collect/wait helper scripts are explicitly forbidden (retired a pattern with a measured worst case of 503 s of dead wait after all agents finished); background-agent task notifications are informational only.
  • Degraded runs (stalled/missing agents) proceed to consolidation with an explicit "coverage degraded (N/3 reviewers)" report note naming the missing perspectives.
  • Post-parse validation of numeric flags (non-positive durations, --expect < 1) fail fast on the usage path instead of breaking the JSON contract mid-wait.
  • Version bumped to 3.2.0.

Tests

  • 31 waiter tests (subprocess-driven, deterministic via faked mtimes and tiny clamped windows), runnable under both python3 -m unittest and pytest; full plugin suite 231 passed. TDD red→green receipts with verified lineage for every review round.
  • Reviewed across 4 adversarial review rounds (1 human-commissioned code review + Copilot rounds on this PR), all findings fixed red→green.

Validation

  • Staggered-completion e2e: last-terminal → exit-0 latency 0.17 s; evaluation overhead 0.036 s.
  • Local A/B dry-runs via the engine harness on a scratch MR: 3.1.0 tag run and 3.2.0 tree run both SUCCESS (engine exit 0, conforming report, content-sha install proof); the 3.2.0 transcript shows waiter chunks bounded at 465 s < 480, the marker fast-path firing, full final_text harvest, and zero improvised sleep commands.
  • Tag installability proven from a fresh scratch config: plugin list reports 3.2.0 and installed_plugins.json records gitCommitSha = 65bb872d7f0a681621ce5c98a6b86d3fedac4fe4 (this release's tagged commit).

Contributors

  • @nexiouscaliver (W2A workstream: waiter implementation, Phase 3 rewrite, review rounds)

Full Changelog: v3.1.0...v3.2.0

v3.1.0 — OmniCheck Auto-Approval + OmniCreate Authoring Guidelines

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 07 Aug 06:53

What's New

Added

  • omnicheck-gitlab auto-approval via bot user — new approve_mr MCP tool that approves a GitLab MR as a dedicated OmniCheck bot when OMNICHECK_BOT_TOKEN is set (falls back to the current glab user). Approval is pinned to the MR HEAD sha so it goes stale on new commits. The skill now branches into nudge (Branch A) or approve (Branch B), with Branch B appearing only when NOT_APPLIED + NEEDS_HUMAN = 0 and firing only on explicit user confirmation.
  • approve_mr MCP tool — MCP server now exposes 14 tools (was 13). run_subprocess gains an optional env param so the bot token is scoped to the single approval call only.
  • omnicreate-gitlab authoring guidelines — explicit rules for MR titles (conventional commit format, ≤72 chars, imperative tense) and structured descriptions (Summary, Changes, Testing, Related sections). Enforces fill=false with crafted content.

Fixed

  • Event loop hygiene in test fixtureconftest.py autouse fixture now owns one loop per test and closes it in teardown. Full suite passes with -W error::ResourceWarning.
  • Plugin manifest version bumpplugin.json version field now correctly reads 3.1.0 (was stale at 3.0.0 despite the git tag). /plugin now reports the correct version.

Tests

  • 9 new tests for approve_mr (bot-token approval, fallback, sha pinning, error cases, no-head-sha guard).

Contributors


Full Changelog: v3.0.0...v3.1.0

OmniForge v3.0.0 — Full GitHub Support + Worktree Fixes

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 19 Jul 17:58

What's New

GitHub Support (NEW)

OmniForge now supports both GitLab and GitHub with full feature parity:

  • omnireview-github — 7-phase PR review with 3 parallel adversarial agents
  • omnifix-github — 7-phase PR fix with parallel triage
  • omnicreate-github — PR creation via gh CLI
  • omnicheck-github — 5-phase diff verification

6 new MCP tools: fetch_pr_data, create_github_pr, post_pr_review_summary, post_pr_inline_thread, fetch_pr_discussions, reply_to_pr_comment

Platform auto-detection via _detect_platform() — checks git remote -v to determine GitLab vs GitHub.

Worktree Support (FIXED)

All worktree creation/cleanup tools now resolve the main repo root when called from a linked worktree (e.g. .claude/worktrees/...). Uses git rev-parse --git-common-dir for reliable resolution.

All bash fallbacks in SKILL.md files include a worktree-awareness preamble.

Stats

  • 19 MCP tools (13 GitLab + 6 GitHub)
  • 8 skills (4 GitLab + 4 GitHub)
  • 188 tests (135 GitLab + 18 worktree + 35 GitHub)

v2.0.0 — OmniForge

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 04 Apr 20:17

OmniReview is now OmniForge

The project has been renamed to OmniForge to reflect its evolution from a code review tool to a full merge request lifecycle toolkit.

What changed

  • Plugin name: omnireviewomniforge
  • Marketplace: omnireview-marketplaceomniforge-marketplace
  • MCP tool prefix: mcp__omnireview__*mcp__omniforge__*
  • Plugin directory: plugins/omnireview/plugins/omniforge/
  • MCP server: omnireview_mcp_server.pyomniforge_mcp_server.py
  • README fully rewritten for OmniForge brand and all 3 skills

Migration

Existing users must uninstall and reinstall:

# Remove old
claude plugin uninstall omnireview
claude plugin marketplace remove omnireview-marketplace

# Install new
claude plugin marketplace add https://github.com/nexiouscaliver/OmniForge.git
claude plugin install omniforge@omniforge-marketplace

Skills (unchanged)

  • /omnireview-gitlab — Multi-agent adversarial MR review
  • /omnifix-gitlab — Automated review finding fixer
  • /omnicreate-gitlab — MR creation from commits

v1.5.0 — OmniCreate: Automated MR Creation

Choose a tag to compare

@nexiouscaliver nexiouscaliver released this 31 Mar 19:33

What's New

omnicreate — a new skill that automates GitLab merge request creation.

New Skill: /omnicreate

  • Auto-populates MR title from first commit message
  • Auto-populates description from all commit messages (including bodies)
  • Pushes branch if needed
  • Supports draft MRs, labels, assignees, reviewers, and more
/omnicreate                              # Create MR from current branch
/omnicreate --draft -l bug,needs-review  # Draft MR with labels
/omnicreate -i 42 --copy-issue-labels    # MR for a specific issue
/omnicreate -b staging -a john           # Target staging, assign to john

New MCP Tool

  • create_gitlab_mr — safe MR creation via MCP server with input validation and structured response

Stats

  • 13 MCP tools (was 12)
  • 116 tests (was 99)
  • 3 skills: omnireview, omnifix, omnicreate

Full Changelog: v1.4.0...v1.5.0