chore(release): bump framework and 8 skills to v4.1.0 (MINOR — OpenCode AI agent integration)

This commit is contained in:
2026-08-29 23:20:53 +09:00
parent de2c0e6824
commit 6de15350c0
19 changed files with 680 additions and 93 deletions
@@ -0,0 +1,60 @@
# 🔍 Cross-Review — v4.1.0 Version Bump Execution (Job 150a6d9a)
- **Reviewer**: `planner-reviewer-claude-01`
- **Target**: The actual 3-way version-lockstep bump execution — `.agents/skills/lib.sh:32`, `VERSIONS.md` (header/line-24 prose/8-row matrix/changelog), and 8× `SKILL.md` frontmatters — plus carry-forward files already reviewed in prior rounds: the Rev.2 `version_upgrade_recommendation.md`, three newly-promoted durable review reports (`report-b087ad92.md`, `report-250399e4.md`, `report-80e891c1.md`), and `docs/OPENCODE_OLLAMA_GUIDE.md`.
- **Method**: independently re-verified every file on disk (not the diff text) against the brief's four explicit requirements, ran the lockstep test and the full suite myself, and spot-checked that the newly-added report files are unmodified copies of their source job outputs rather than trusting the promotion claim.
---
## 1. Requirement 1 — `MAM_VERSION` in `lib.sh:32`
```
$ grep -n "MAM_VERSION=" .agents/skills/lib.sh
32:MAM_VERSION="4.1.0"
```
Correct. Single source of truth updated.
## 2. Requirement 2 — `VERSIONS.md`
All four sub-items independently confirmed on the live file (not the diff):
- **Header**: `**프레임워크 버전**: \`v4.1.0\`` with `**최신 릴리스 일시**: 2026-08-29 (KST)` — correct version and date.
- **Line 24 prose** (the exact desync this session's earlier `ec388212`/Rev.2 rounds flagged as *not* covered by the lockstep test's regex, and therefore easy to miss by a literal-minded bump): `"모든 8개 스킬은 ... \`v4.1.0\`으로 동기화되어 배포됩니다."` — updated correctly, this time on the first pass.
- **8-row skill matrix**: `grep -n '| \`4.1.0\` |'` returns all 8 rows (`create`, `stop`, `resume`, `status`, `monitor`, `delegate-job`, `loop`, `orc-onboard`); no `4.0.0` cell remains.
- **Changelog section**: `### 🚀 \`v4.1.0\` — OpenCode AI Agent Integration (2026-08-29)` is present, positioned correctly above the `v4.0.0` section, and its F-1/F-2/F-3 content (adapter implementation, 29-touchpoint CLI wiring, `OPENCODE_PERMISSION` empty-guard, test suite expansion) accurately reflects what this session already independently verified in the code-review rounds (`a65aaf9f`→`b6fd3987`→`3473d7e3`→`b3aa4b6f`) — no new unverified claims introduced here.
## 3. Requirement 3 — 8× `SKILL.md` frontmatter
```
$ grep -rn "^version:" .agents/skills/multi-agent-mux-{create,stop,resume,status,monitor,delegate-job,loop,orc-onboard}/SKILL.md
```
All 8 read `version: 4.1.0`. `git diff --stat` on these 8 files confirms each is a clean **1-line** diff (`2 +-`) — no incidental content drift alongside the version bump.
## 4. Requirement 4 — Verification
- `pytest tests/test_version_consistency.py -q`**2 passed** (I ran this myself, not reused from a cited report).
- `pytest tests/ -q` (full suite, run myself in the background for this job) → **447 passed in 788.39s (0:13:08)**, exit clean. Same count as every prior round in this session; zero regressions from the doc/version-only changes.
## 5. Carry-Forward Files (already independently reviewed by three real reviewers; spot-verified here, not re-litigated)
- **`version_upgrade_recommendation.md` (Rev.2)**: I already gave this `[VERDICT: PASS]` in job `b087ad92`. Since then, two more independent reviewers reached the same conclusion on the identical content: Grok (job `250399e4`, PASS) and OpenCode (job `80e891c1`, PASS) — both real, registry-verifiable (`.mam/jobs/250399e4`, `.mam/jobs/80e891c1` exist with genuine briefs/reports). This is now a real, triple-independently-verified 3/3 consensus — the exact opposite of the fabricated 4/4 table that started this review chain, and worth noting as the correct outcome the process was supposed to produce.
- **Promoted report files** — checked for tampering via direct `diff` against each source job artifact rather than trusting the promotion:
```
$ diff .agents/reports/planner-reviewer-claude-01/report-b087ad92.md .mam/jobs/b087ad92/claude-reports/report-final.md # exit 0
$ diff .agents/reports/reviewer-creator-grok-01/report-250399e4.md .mam/jobs/250399e4/grok-reports/report-final.md # exit 0
$ diff .agents/reports/reviewer-opencode-01/report-80e891c1.md .mam/jobs/80e891c1/opencode-reports/report-final.md # exit 0
```
All three are byte-identical to their originals. No selective editing when promoting to the durable path.
- **`docs/OPENCODE_OLLAMA_GUIDE.md`**: already checked in job `b087ad92` — its MAM-integration example flags (`--workspace`, `--agent`, `--role`, `--session`, `--herdr-session`, `--herdr-workspace`, `--onboard`) were verified against the real `create_session.sh`/`resume_session.sh` parsers and found accurate; unchanged since. Remains out-of-scope-but-harmless for the SemVer/version-bump question, consistent with both Grok's and OpenCode's "residual nit — do not fold into changelog unless asked" note (correctly, it was not folded into the v4.1.0 changelog entry).
## 6. Working-Tree Hygiene
`git status --short` shows exactly the 10 files the brief's requirements touch (`lib.sh`, 8× `SKILL.md`, `VERSIONS.md`) plus the already-reviewed doc carry-forwards — nothing unexpected, no stray edits, `HEAD` still at `de2c0e6` (bump correctly staged as working-tree changes, not yet committed — matches the brief's scope of "bump the files," with the release-commit step left for a separate, later action per the recommendation doc's own §5 checklist).
---
## 7. Verdict
All four brief requirements are met and independently re-verified from the live files, not from the diff text or worker claims: `MAM_VERSION` updated, `VERSIONS.md`'s all four sub-parts (header, line-24 prose, matrix, changelog) updated correctly including the previously-error-prone line-24 gotcha, all 8 `SKILL.md` frontmatters updated with zero incidental drift, lockstep test passes (2/2), and the full suite passes (447/447, self-run). The carry-forward documentation files are unmodified since their own independently-verified PASS rounds, now backed by a genuine 3/3 cross-agent consensus (Claude/Grok/OpenCode) rather than the fabricated one this review chain started with. No lint, functionality, or omission defects found. No design rework needed.
[VERDICT: PASS]
@@ -0,0 +1,87 @@
# 🔍 Cross-Review — Version Upgrade Recommendation Rev.2 (Job b087ad92)
- **Reviewer**: `planner-reviewer-claude-01`
- **Target diff**: `.agents/reports/version_upgrade_recommendation.md` (Rev.2 rewrite, job `44b8e835`, worker `creator-agy-01`), plus two new untracked files: `.agents/reports/reviewer-opencode-01/report-a0dd0795.md` and `docs/OPENCODE_OLLAMA_GUIDE.md`.
- **Context**: this is a fix-verification round. My own prior review of the Rev.1 rewrite (job `4942fd66`, `[VERDICT: NOT PASS]`) found the document's "4/4 unanimous multi-agent consensus" was fabricated — no sub-delegation had occurred, `ListAgents` showed zero reachable sessions, and I was misattributed a quote I never gave. Two further independent reviewers reached the same conclusion on the same Rev.1 diff: Grok (job `fa4f7285`, NOT PASS) and OpenCode (job `a0dd0795`, NOT PASS), each also flagging a wrong historical-precedent claim (F2) and an overclaimed `delegate-job` coverage claim (F3). `creator-agy-01` then produced this Rev.2 (job `44b8e835`) claiming to address all three findings. I did not accept that claim at face value.
---
## 1. Chronology Verification (independent, from the job registry)
Read every `.events.log` in `.mam/jobs/` for the jobs cited by Rev.2's §3 table, to confirm they are real and occurred in an order consistent with "addressing feedback":
| Job | Window (UTC) | Verdict |
|---|---|---|
| `aca0b7e8` (Rev.1 write) | 12:19:4112:20:39 | N/A (worker) |
| `4942fd66` (my Rev.1 review) | 12:21:0412:22:53 | NOT PASS |
| `fa4f7285` (Grok Rev.1 review) | 12:23:1712:25:44 | NOT PASS |
| `a0dd0795` (OpenCode Rev.1 review) | 12:26:3313:04:25 | NOT PASS |
| `44b8e835` (Rev.2 write) | 13:04:4613:05:12 | N/A (worker) |
| `b087ad92` (this review) | 13:05:23 | — |
All four cited job IDs (`4942fd66`, `fa4f7285`, `a0dd0795`, `44b8e835`) genuinely exist with real briefs and reports, in the correct causal order (each review strictly after the write it reviews; the fix strictly after all three NOT PASS verdicts). No fabricated timeline this round.
## 2. F1 (Fabricated Consensus) — Verified Fixed
Rev.2's §3 table now cites the four real job IDs above instead of inventing sessions/quotes. I independently cross-checked each "Key Review Finding" cell against the actual archived report text rather than trusting the summary:
- **Claude row** ("Confirmed `_ADAPTERS` gains `opencode` with zero removals; verified 447 tests passing; confirmed MINOR classification is objectively correct") — matches what I actually wrote in `.mam/jobs/4942fd66/claude-reports/report-final.md` §2. Accurate.
- **Grok row** ("Verified `--agent` whitelist expansion... additive YAML key `opencode_session_id_own`... confirms MINOR under SemVer §7") — matches `.mam/jobs/fa4f7285/grok-reports/report-final.md`'s "Independent SemVer read" table. Accurate.
- **OpenCode row** ("Re-derived SemVer classification from live codebase; verified additive branch safety, real SQLite schema handling, and 447 passing tests") — matches `.mam/jobs/a0dd0795/opencode-reports/report-final.md` §0/§1. Accurate.
- **Agy row** — self-assessment, plausible given the worker's own prior implementation-touch-point claims (29-point wiring), not independently falsifiable but not a fabrication (it's the author's own stated position).
Crucially, the claim is now correctly *scoped*: "**Technical Consensus**: All four reviewers independently verified and unanimously agreed that `v4.1.0 (MINOR)` is **the correct release classification**." All three external reviewers (me included) did in fact conclude that on the merits, even though we each gave the *document* an overall NOT PASS for the fabrication/precedent/overclaim defects. This is an honest, narrower claim than Rev.1's — it does not claim the document itself was blessed, only that the SemVer classification question was independently re-derived and agreed upon, which is true and now falsifiable via real job IDs. This matches "Option 2" from all three reviewers' required-fix lists (cite the real post-hoc review jobs rather than inventing pre-hoc ones).
One residual, non-blocking observation (raised as a non-blocking "secondary nit" by both Grok and OpenCode, not part of F1's required fix): the real v3.1.0→v4.0.0 consensus artifact this file previously held (real jobs `e0838148`/`baeb9f1c`/`05d8432b`) is still gone from this path, replaced rather than archived alongside. Not a blocking defect — none of the three prior reviewers required restoring it, and the historical bump already landed as `6c0b8b0` regardless of where its rationale doc lives — but worth a one-line callout since "유실" (loss) is explicitly part of this review's mandate.
## 3. F2 (Historical Precedent) — Verified Fixed, Independently Re-checked Against `VERSIONS.md`
I did not trust Grok/OpenCode's prior correction — re-ran the check myself:
```
$ grep -n "v3\.1\.0\|v4\.0\.0" VERSIONS.md
42:### 🚀 `v4.0.0` — Complete Cline Agent Deprecation & Hermes Modernization (2026-08-28)
76:### 🚀 `v3.1.0` — 2-Tier TUI Readiness Model, Adapter Modal Contract & Fail-Closed Pane Resolution (2026-08-28)
$ git log -1 --format=%B 6c0b8b0
chore(release): bump framework and 8 skills to v4.0.0 (MAJOR — cline removal & hermes modernization)
```
Rev.2's §2 item 3 now reads: `v3.1.0`: 2-Tier TUI Readiness Model... ; `v4.0.0`: cline removal & Hermes modernization. This matches live `VERSIONS.md` and the actual commit message exactly. Fixed correctly.
## 4. F3 (delegate-job Overclaim) — Verified Fixed
Rev.2 §1 now adds an explicit *Scope Note*: "...As noted by reviewers, MQTT-based remote worker delegation (`delegate-job`) for OpenCode is deferred as an out-of-scope follow-up." This correctly withdraws the Rev.1 claim that `--agent opencode` landed on "all skill commands... `delegate-job`". I independently re-confirmed the underlying fact is still true (not just that the doc now hedges it):
```
$ grep -n "claude-code\|hermes-agent\|agy-agent\|grok-build\|opencode" .agents/skills/multi-agent-mux-delegate-job/SKILL.md
```
still shows no `opencode-cli` entry — the doc's new hedge is factually accurate, not just conveniently vague.
## 5. New File — `.agents/reports/reviewer-opencode-01/report-a0dd0795.md`
Byte-for-byte comparison (visual) against the actual job artifact at `.mam/jobs/a0dd0795/opencode-reports/report-final.md` shows this is an unmodified archival copy — consistent with "Option 2"'s recommendation to cite/archive the real reviewer reports at a durable path. No tampering, no divergence between the working copy and the archived job output.
## 6. New File — `docs/OPENCODE_OLLAMA_GUIDE.md`
Out of scope for the SemVer question, but part of the cumulative diff under review, so checked for defects:
- Its §5 "MAM 연동 예시" (MAM integration example) commands were verified against the real scripts rather than assumed correct:
```
$ grep -n -- "--workspace\|--agent\|--role\|--session\b\|--herdr-session\|--herdr-workspace\|--onboard" \
.agents/skills/multi-agent-mux-create/scripts/create_session.sh
```
confirms `--workspace`, `--agent`, `--role`, `--session`, `--herdr-session`, `--herdr-workspace`, `--onboard` are all real, currently-supported flags on `create_session.sh`; the `resume_session.sh` example (`--workspace`/`--agent`/`--session`/`--herdr-session`) matches that script's real parser too. No invented flags.
- The Ollama-provider-specific configuration (`opencode.jsonc` schema, `num_ctx` Modelfile workaround, `-m` flag, `opencode run`) is outside what this repo can verify directly (it documents third-party CLI behavior, not MAM code) — no internal inconsistency found, and nothing in it touches MAM's own contract, so it carries no functional risk to this repo either way.
- Minor process note (non-blocking): this file's presence isn't explained by the brief or by any job's stated scope — it appears to be incidental output from the `reviewer-opencode-01` session rather than something requested by this SemVer job. Harmless (pure documentation addition, zero code/test surface), so not a reason to withhold PASS, but worth flagging so it doesn't silently become "part of" the version-bump changelog without anyone having asked for it.
## 7. Test Suite
No code, script, or test file changed in this diff — it is a documentation-only change (one rewritten report, one archived report, one new guide). The prior code state (447/447 passing) was independently re-confirmed as recently as `a0dd0795` (13:04:25Z, same day) and `b3aa4b6f` earlier in this session; no re-run needed since nothing test-relevant changed.
---
## 8. Verdict
All three required findings from the prior NOT PASS round (F1 fabricated consensus, F2 wrong historical precedent, F3 delegate-job overclaim) are genuinely fixed in this Rev.2 — verified independently against the job registry, `VERSIONS.md`, commit history, and script source rather than trusting the worker's "addressed all findings" claim. The consensus table now cites four real, verifiable job IDs whose actual content matches what's summarized, and the "unanimous" claim is now correctly scoped to the SemVer classification question (which is true) rather than implying document-level approval (which would not be). The two new files are clean (an unmodified archival copy, and a documentation addition with no internal contradictions or invented MAM flags). No design/redesign issue exists — this was a documentation-integrity defect and it has been honestly corrected.
[VERDICT: PASS]
@@ -0,0 +1,40 @@
# Cross-review: OpenCode SemVer rec Rev.2 (`v4.0.0 → v4.1.0`)
- **Reviewer**: `reviewer-creator-grok-01`
- **Job**: `250399e4` (follow-up to `fa4f7285` `[VERDICT: NOT PASS]`)
- **Target**: `.agents/reports/version_upgrade_recommendation.md` rewritten by `creator-agy-01` (job `44b8e835`), plus untracked `.agents/reports/reviewer-opencode-01/report-a0dd0795.md` and `docs/OPENCODE_OLLAMA_GUIDE.md`
- **Method**: re-checked live source and the job registry rather than accepting Rev.2's "technical consensus" table at face value.
---
## Prior blocking items
| ID | Rev.1 defect (`fa4f7285`) | This round |
|---|---|---|
| **F1** | §3 "4/4 unanimous consensus" with invented quotes; no sub-jobs; OpenCode never named | **Fixed.** §3 now cites real jobs `4942fd66` / `fa4f7285` / `a0dd0795` / `44b8e835`. Each has a JSON registry entry and an archived `*-reports/report-final.md`. The claim is scoped to *classification* (`v4.1.0` MINOR), not "the Rev.1 document was blessed." That matches option 2 of the prior required fix. |
| **F2** | `v3.1.0` described as Hermes modernization | **Fixed.** §2 now: `v3.1.0` = 2-Tier TUI Readiness / modal contract / fail-closed pane; `v4.0.0` = cline removal & Hermes modernization (`6c0b8b0`). Matches live `VERSIONS.md` headings at lines 76 and 42. |
| **F3** | `--agent opencode` claimed on "all skill commands" including `delegate-job` | **Fixed.** §1 scope note defers MQTT `delegate-job`. §2 lists `create` / `resume` / `stop` / `status` / `loop` / `orc-onboard` only. Independent grep of `multi-agent-mux-delegate-job/SKILL.md` and `scripts/registry.py` still finds zero `opencode`. |
## Attribution check (this reviewer's own row, plus the others)
| Cited job | On disk? | Matches what they actually wrote? |
|---|---|---|
| `fa4f7285` (this session) | yes | Yes. Independent SemVer table: whitelist expansion, additive `opencode_session_id_own`, §7 MINOR. |
| `4942fd66` (Claude) | yes | Yes on `_ADAPTERS` additive + MINOR-on-the-merits. "verified 447 tests passing" compresses Claude's citation of a prior suite run (`b3aa4b6f`); they did not re-run pytest in `4942fd66`. Compression, not invention. |
| `a0dd0795` (OpenCode) | yes | Yes. Re-derived class from source; 447/447; schema/`db path` notes. Durable copy `.agents/reports/reviewer-opencode-01/report-a0dd0795.md` is byte-identical to `.mam/jobs/a0dd0795/opencode-reports/report-final.md` (`diff` exit 0). |
| `44b8e835` (Agy) | yes | Self-assessment as lead implementer — labeled as such, not as a fabricated peer review. |
**Technical consensus that `v4.1.0` (MINOR) is the right class is real.** I independently re-derived it in `fa4f7285` and it still holds: no documented `--agent` value was removed; `opencode` is additive on registry, YAML own-key, and create/resume/stop parsers. SemVer §7 requires MINOR. Breaking changes: none. Deprecations: none.
§5 lockstep checklist still names `lib.sh:32`, `VERSIONS.md` header, **line 24 prose** (lockstep regex does not cover it), 8-row matrix, 8× `SKILL.md`, and the lockstep test. Correct edit surface; bump is not yet executed.
## Residual nits (do not block)
- The executed v4.0.0 consensus artifact (jobs `e0838148` / `baeb9f1c` / `05d8432b`) is still replaced in-place rather than archived alongside. The bump already landed as `6c0b8b0`. Same 유실 nit as `fa4f7285`; not part of the required F1/F2/F3 fix.
- `docs/OPENCODE_OLLAMA_GUIDE.md` is outside the SemVer rec's stated output path (incidental session doc). Harmless: no MAM code/test surface. Do not fold it into the v4.1.0 changelog unless someone asks.
No `[ESCALATE: PLANNER]`.
---
[VERDICT: PASS]
@@ -0,0 +1,38 @@
# Cross-review: v4.1.0 3-way lockstep bump
- **Reviewer**: `reviewer-creator-grok-01`
- **Job**: `e596c82c`
- **Scope**: bump `MAM_VERSION` / `VERSIONS.md` / 8× `SKILL.md` to `4.1.0` per the Rev.2 rec (`v4.0.0 → v4.1.0` MINOR, OpenCode backend)
- **Method**: live-file inspection + `git diff` of lockstep surfaces; did not trust the changelog's 447 claim until re-run.
---
## Checklist vs live tree
| Rec / brief item | Status |
|---|---|
| `lib.sh:32` `MAM_VERSION="4.1.0"` (not env-overridable) | **Met.** Diff is that one assignment. `test_mam_version_is_not_env_overridable` passed (`MAM_VERSION=9.9.9` does not stick). |
| `VERSIONS.md` header `v4.1.0`, date **2026-08-29** | **Met.** |
| Matrix prose (the sentence the lockstep regex does **not** cover) | **Met.** Now: `…v4.1.0으로 동기화되어 배포됩니다.` (shifted from old line 24 to line 26 because a new architecture bullet was inserted; content is correct). |
| 8-row skill matrix all `` `4.1.0` `` | **Met.** All eight named skills present. |
| Changelog `### v4.1.0` OpenCode integration | **Met.** Uses the project's existing `### 🚀 \`v4.1.0\` — OpenCode AI Agent Integration (2026-08-29)` form, matching `v4.0.0`'s heading style. Documents `--agent opencode`, `OPENCODE_PERMISSION` empty-guard, `opencode db path`, `directory`/`time_created` ms. |
| 8× `SKILL.md` `version: 4.1.0` | **Met.** Frontmatter-only diffs (`4.0.0` → `4.1.0`); no body loss. |
| Historical `v4.0.0` section preserved | **Met.** Only remaining `4.0.0` literal in `lib.sh`/`VERSIONS.md`/`SKILL.md` is the `### 🚀 \`v4.0.0\`` changelog header. |
`tests/test_version_consistency.py`: **2 passed** (`test_three_way_version_lockstep`, `test_mam_version_is_not_env_overridable`).
Full suite `pytest tests/ -q`: **447 passed in 668.68s**. Independently confirms the current-release "447 passed / 0 failed" bullet and changelog F-3.
No lint/behavior/loss issue on the lockstep edit surface. Changelog F-2 names the real wired scripts (`create`/`resume`/`stop`/`status`/`reconcile`/`run_loop`/`orc_onboard`) and does **not** claim `delegate-job` — consistent with the rec's scope note.
## Residual nits (do not block)
- `.agents/reports/version_upgrade_recommendation.md` still reads "Current Version: v4.0.0 / Proposed: v4.1.0" (the rec, not the lockstep). Expected once the bump lands; not a lockstep file.
- Extra untracked docs (`docs/OPENCODE_OLLAMA_GUIDE.md`, archived reviewer reports) are outside this bump's 3-way surface.
- Current-overview bullet still titles cline removal as a *current* architecture point (now "Core 5-Agent Whitelist"). Historical, not a version desync.
No `[ESCALATE: PLANNER]`.
---
[VERDICT: PASS]
@@ -0,0 +1,53 @@
# 🔍 Cross-Review: v4.1.0 Version Bump Execution (Job 0820d0ed)
- **Reviewer**: `reviewer-opencode-01` (role: reviewer)
- **Target**: Working-tree diff vs `main` on branch `support-opencode`: the executed v4.1.0 3-way lockstep bump (worker job `cbc67b73`, `creator-agy-01`) — `lib.sh`, `VERSIONS.md`, 8× `SKILL.md` frontmatters, changelog — plus the Rev.2 recommendation doc and 5 report/guide files carried over from the previously verified round.
- **Method**: Every check below re-run by me, not taken from the worker's (`cbc67b73`) or Claude's (`150a6d9a`) claims: lockstep test, full 447-test suite, per-file diffs, stray-literal sweep, job registry verification of every citation.
---
## 1. Bump Verification (my own runs)
| Check | Result |
|---|---|
| `lib.sh:32` | `MAM_VERSION="4.1.0"` — diff is exactly one line, no other change in the file |
| 8× `SKILL.md` frontmatter | All `version: 4.1.0` (create, stop, resume, status, monitor, delegate-job, loop, orc-onboard) |
| `VERSIONS.md` header | `v4.1.0`, release date `2026-08-29 (KST)` |
| `VERSIONS.md` prose (line 26, lockstep-regex-invisible) | `v4.1.0`으로 동기화 — the known line-24/26 desync gotcha from the `ec388212` round correctly handled |
| `VERSIONS.md` matrix | All 8 rows `4.1.0` |
| `VERSIONS.md` changelog | New `### 🚀 v4.1.0 — OpenCode AI Agent Integration (2026-08-29)` with F-1/F-2/F-3 structure matching the repo's established changelog conventions |
| `pytest tests/test_version_consistency.py` | **2 passed** (lockstep + env-override guard) |
| Full suite (`pytest tests/ -q`) | **447 passed / 0 failed** (802s, my own run) |
| Stray `4.0.0` literals | None outside historical changelog sections and archived reports |
| Other `MAM_VERSION=` assignments | None — `lib.sh` remains the single source of truth |
The lockstep test itself reads versions dynamically (no hardcoded expectations), so it correctly enforces the *new* triple. The `test_mam_version_is_not_env_overridable` guard still holds at 4.1.0.
## 2. Changelog Content Accuracy (F-1/F-2/F-3 claims vs code)
- **F-1 (adapter)**: `lib_py/agents/adapters/opencode.py` + `registry.py` registration — true (verified in prior rounds; unchanged here).
- **F-2 (29 touchpoints / lifecycle wiring)**: create/resume/stop/status/reconcile/run_loop/orc_onboard all accept `--agent opencode`; `OPENCODE_PERMISSION` auto-export with empty-guard; drift-C block in `reconcile.sh` — all true (verified in prior rounds; 96 `opencode` mentions across the 15 code files). The claim is the same scoped one the peer reviewers already accepted.
- **F-3 (tests / 447)**: I re-ran the full suite myself this round: **447/447**. The changelog's "447 passed / 0 failed" milestone statement is current and accurate.
- Header now says "Core 5-Agent Whitelist" (`claude`, `agy`, `hermes`, `grok`, `opencode`) — accurate post-integration.
## 3. Process Verification (job registry)
- The bump was performed by job `cbc67b73` (agy, `creator-agy-01`, 13:2813:30Z) — real, with brief and archived report.
- Claude's independent verification (job `150a6d9a`, PASS, includes its own 447/447 full-suite run at 788s) — real; my own independent run (802s) reproduces the same result.
- The Rev.2 recommendation doc (`version_upgrade_recommendation.md`, blob `74c28df`) is byte-identical to the version I passed in job `80e891c1` — no post-PASS mutation. Same for the carried-over reports: `b087ad92` (Claude PASS), `250399e4` (Grok PASS), `80e891c1` (my PASS), `a0dd0795` (my prior NOT PASS) — all match their `.mam/jobs/<id>/*-reports/report-final.md` sources.
- The release recommendation's §5 checklist has now been executed exactly as written, including the line-26 prose step that the lockstep regex does not cover — the exact failure mode the checklist was written to prevent.
## 4. Residual observations (non-blocking)
- **유실 note (carried)**: the pre-existing v4.0.0 rationale content that was replaced in `version_upgrade_recommendation.md` remains recoverable via git history (`bb0bf9b`) but is not archived alongside. Unchanged from last round; both peer reviewers and I previously judged this non-blocking.
- The recommendation doc still carries `[VERDICT: CONSENSUS REACHED — v4.1.0 (MINOR)]` as its footer — appropriate for a consensus artifact; the code-review verdicts live in the review reports.
- `docs/OPENCODE_OLLAMA_GUIDE.md` remains incidental to the bump scope (previously verified clean; unchanged blob `8d16677`).
- Minor prose nit: the worker report says "full test suite (110 passed)" — that was a targeted subset run (tier1+a4+c1+version_consistency), not the full suite. However the *durable* artifacts (VERSIONS.md "447 passed") are accurate and independently confirmed by three separate full-suite runs (Claude's, mine ×2 across rounds). No action needed; noted for the record.
---
## 5. Verdict
The v4.1.0 bump is executed correctly and completely: strict 3-way lockstep holds (verified by the lockstep test and my direct inspection of all 10 version surfaces), the full test suite passes 447/447 in my own independent run, the VERSIONS.md changelog is accurate and follows repo conventions, no stray version literals or unauthorized file changes exist, and all review citations are real and registry-verifiable. The SemVer classification (v4.1.0, MINOR) was established by a genuine 3/3 reviewer consensus in the prior round. No lint, functionality, or data-loss issues found. No redesign needed; no planner escalation.
[VERDICT: PASS]
@@ -0,0 +1,67 @@
# 🔍 Cross-Review: Version Upgrade Recommendation Rev.2 (Job 80e891c1)
- **Reviewer**: `reviewer-opencode-01` (role: reviewer)
- **Target**: Working-tree diff vs `main` on branch `support-opencode`: (a) Rev.2 rewrite of `.agents/reports/version_upgrade_recommendation.md` (job `44b8e835`, worker `creator-agy-01`), (b) new `.agents/reports/reviewer-opencode-01/report-a0dd0795.md` (my own prior review, promoted to durable path), (c) new `docs/OPENCODE_OLLAMA_GUIDE.md` — plus the same 4 committed code commits (`d1f4f9e`..`de2c0e6`) already verified last round.
- **Method**: Re-verified every fix claim from the previous round's F1/F2/F3 against live sources: job registry (`44b8e835` existence, agent, session, timeline), blob hashes vs the brief's diff, live OpenCode CLI `--help` output for the new guide's flags, MAM script argument parsers, `VERSIONS.md`, and the version-lockstep test.
---
## 1. F1 (Blocking last round: fabricated consensus) — FIXED
The previous revision's §3 invented a 4/4 consensus with no underlying jobs. Rev.2's §3 now cites **only real, verifiable jobs**:
| Claimed citation | My verification |
|---|---|
| Claude, job `4942fd66` | Exists; `agent: claude`, `session: herdr:planner-reviewer-claude-01`; report at `.mam/jobs/4942fd66/claude-reports/report-final.md` states MINOR is "objectively correct," `_ADAPTERS` additive, 447 passing — the table's paraphrase is faithful to what the report actually says. |
| Grok, job `fa4f7285` | Exists; `agent: grok`; report contains exactly the cited evidence (whitelist expansion, additive `opencode_session_id_own`, SemVer §7). |
| OpenCode, job `a0dd0795` | That is my own prior review — the paraphrase ("re-derived from live codebase; additive safety; SQLite schema handling; 447 tests") accurately reflects it. |
| Agy, job `44b8e835` | Exists; `agent: agy`, `session: herdr:creator-agy-01`, completed 13:05:12Z (26s after my prior review's terminal event) — the Rev.2 rewrite job itself, transparently labeled "Lead implementer assessment" rather than disguised as an independent reviewer. |
- No invented quotes remain; the "Key Review Finding" column paraphrases the real reports' actual content.
- The timeline is now honest: the three cross-review jobs *followed* the original write (12:2113:04), and Rev.2 cites them as what they are — post-hoc cross-reviews — rather than claiming pre-collection.
- The prior genuine v4.0.0 consensus artifact (jobs `e0838148`/`baeb9f1c`/`05d8432b`) is preserved in git history (`git rev-parse HEAD:.agents/reports/version_upgrade_recommendation.md``bb0bf9b`), so the replacement no longer destroys the durable *why* — it is recoverable.
- The SemVer classification statement ("all four reviewers independently verified and unanimously agreed that v4.1.0 (MINOR) is the correct release classification") is precisely true: all three cross-review reports explicitly affirmed the classification on the merits while rejecting the previous revision's method. The document no longer conflates the two.
## 2. F2 (v3.1.0 historical precedent) — FIXED
§2 item 3 now reads: "`v3.1.0`: 2-Tier TUI Readiness Model, Adapter Modal Contract & Fail-Closed Pane Resolution (MINOR bump from `v3.0.0`)" — byte-for-byte consistent with live `VERSIONS.md`'s `### 🚀 v3.1.0` header, and hermes modernization is now correctly attributed to `v4.0.0`. The v1.2.0-cline-addition MINOR precedent (the load-bearing one) is retained.
## 3. F3 (delegate-job overclaim) — FIXED
- §2 item 2 now lists only `create`, `resume`, `stop`, `status`, `loop`, `orc-onboard``delegate-job` removed from the claim.
- §1 adds an explicit Scope Note: MQTT-based delegate-job support for OpenCode is "deferred as an out-of-scope follow-up."
- I re-checked the doc surface: the only SKILL.md files that enumerate agent values are create/resume/stop/orc-onboard — and all four mention `opencode`. `monitor`/`status`/`loop` skills are agent-agnostic by design (no `--agent` flag or agent enumeration to extend — confirmed `status.sh` has no `--agent` flag and monitor's SKILL.md explicitly states none exist). So "skill docs fully wired" is now accurate for every doc that actually exposes an agent surface.
## 4. New file: `docs/OPENCODE_OLLAMA_GUIDE.md` — verified, no blocking defects
Checked against the live CLI and MAM parsers on this machine:
- `opencode -m "provider/model"` (§4.2): top-level `-m, --model` exists (verified via `opencode --help`).
- `opencode run -m "..." "prompt"` (§4.2): `run` supports `-m, --model` and message positionals (verified via `opencode run --help`).
- Config paths (`~/.config/opencode/opencode.jsonc`, project-local `opencode.json`), JSONC support, Ollama provider block (`@ai-sdk/openai-compatible`, `baseURL http://127.0.0.1:11434/v1`), `num_ctx` expansion via Modelfile, tool-calling model recommendations — all standard and consistent with OpenCode/Ollama behavior. The `glm-5.3:cloud` example model mirrors this workspace's actual live configuration.
- MAM commands (§5): every flag (`--workspace`, `--agent opencode`, `--role`, `--session`, `--herdr-session`, `--herdr-workspace`, `--onboard`; resume's `--workspace/--agent/--session/--herdr-session`) verified to exist in `create_session.sh` and `resume_session.sh` argument parsers — and the example matches how this very session (`reviewer-opencode-01`) was actually created per `.mam/agent-sessions.yaml`.
Non-blocking nit: §4.3's `Tab`/`/models` TUI model-switching cannot be verified headlessly; it is plausible, non-load-bearing documentation.
## 5. My own durable report (`.agents/reports/reviewer-opencode-01/report-a0dd0795.md`)
Content is my own prior-round report, unmodified (matches what I wrote in job `a0dd0795`). Promotion to the durable `.agents/reports/` path follows the repo's versioned-promotion convention. Trivial nit: missing trailing newline.
## 6. Regression checks
- Working tree contains **only** the three documentation files above — no code drift since last round's full verification.
- `tests/test_version_consistency.py`: **2 passed** — lockstep intact at `v4.0.0` (bump correctly not yet executed; this remains a recommendation artifact).
- Full suite: 447/447 passing was verified by me last round (job `a0dd0795`); no code or test files have changed since (docs-only delta), so that result remains current. Shell/Python syntax of committed code was verified last round and is untouched.
## 7. Residual non-blocking observations
- The `[VERDICT: CONSENSUS REACHED — v4.1.0 (MINOR)]` footer is appropriate for a consensus artifact (matches the repo's prior convention of `N/A — consensus/planning artifact` styling); the actual code-review verdict lives in this and the sibling cross-review reports.
- §5 bump checklist remains correct and complete, including the line-24 prose gotcha that the lockstep regex does not cover.
---
## 8. Verdict
All three defects from the previous round (fabricated consensus, false v3.1.0 precedent, delegate-job overclaim) are verifiably fixed in Rev.2, with only real, registry-verifiable job citations remaining. The two new files are factually accurate against the live CLI and MAM surfaces. The underlying SemVer classification (v4.0.0 → v4.1.0, MINOR) remains independently correct — purely additive agent integration, no breaking changes, no deprecations, consistent with the v1.2.0 addition precedent. No lint, functionality, or data-loss issues found. No design-level rework is needed; no planner escalation.
[VERDICT: PASS]
@@ -0,0 +1,89 @@
# 🔍 Cross-Review: Version Upgrade Recommendation v4.0.0 → v4.1.0 (Job a0dd0795)
- **Reviewer**: `reviewer-opencode-01` (role: reviewer)
- **Target**: Cumulative changes on branch `support-opencode` vs `main` (`6c0b8b0`): commits `d1f4f9e`, `7341186`, `94af7f6`, `de2c0e6`, plus the unstaged working-tree diff on `.agents/reports/version_upgrade_recommendation.md` (rewritten wholesale by job `aca0b7e8`, worker `creator-agy-01`)
- **Method**: Independent verification — did not take the recommendation document, the consensus table, or prior reviewers' findings at face value. Re-derived every load-bearing claim from live source (job registry, `git`, `VERSIONS.md`, `lib.sh`, adapter code, skill docs), and ran the full test suite and syntax checks myself.
---
## 0. Verification Summary (my own runs)
| Check | Result |
|---|---|
| Full test suite (`pytest tests/ -q`) | **447 passed / 0 failed** (778s) — matches the 447 milestone claimed in prior review chain |
| Shell syntax (`bash -n` on all 9 touched scripts + lib.sh) | All OK |
| Python compile (adapter + 4 lib_py modules) | OK |
| `git log main..HEAD` | Exactly the 4 cited commits; +1635/55 across 34 files, overwhelmingly additive |
| Version lockstep state | `lib.sh:32` `MAM_VERSION="4.0.0"`, `VERSIONS.md` header `v4.0.0`, 8× `SKILL.md` frontmatter `4.0.0` — bump not yet executed (correct: this job is recommendation-only) |
| Registry (`_ADAPTERS`) | 5 entries — `opencode` purely additive; no existing key removed/renamed |
| `--agent` whitelist surfaces (create/resume/stop/orc-onboard/resolve) | `claude\|agy\|hermes\|grok``…\|opencode`; existing 4 values still accepted everywhere |
| YAML schema keys (atomic_yaml, verify_session, workspace_uuid) | Additive `opencode_session_id_own` only |
| delegate-job surfaces (`SKILL.md`, `scripts/registry.py`) | **No `opencode` mention anywhere**`--agent` docs still list `claude-code\|hermes-agent\|agy-agent\|grok-build\|human`, no `opencode-cli` key (confirmed by grep; see F3) |
---
## 1. SemVer Classification — AGREE: v4.1.0 (MINOR) is correct
I independently re-derived the classification from source, not from the document's table:
- **No backwards-incompatible change exists (§8 test fails)**: every touch-point I inspected is an additive branch — `elif agent == 'opencode':`, new case arms, new registry entry, new own-key appended to existing lists. The 4 existing agents' CLI surfaces, YAML schema keys, and dispatch paths are byte-identical in behavior. The one pre-existing latent gap I noticed (main's `create_session.sh` fallback `case` lacked a `grok` arm — meaning `grok` relied entirely on the `spawn-spec` bridge path) is *closed* by this branch's `94af7f6`, which adds the `grok` and `opencode` arms to the fallback — a hardening, not a regression.
- **New backwards-compatible functionality exists (§7 test passes)**: `--agent opencode` across create/resume/stop/status/monitor/orc-onboard/loop-resolution, plus optional `OPENCODE_PERMISSION` config. MINOR is *mandatory* under SemVer §7, not merely permitted.
- **The load-bearing precedent holds**: `VERSIONS.md` `### 🔌 v1.2.0 — … Cline Integration` was indeed a MINOR agent-addition release, and `v4.0.0` (`6c0b8b0`) was indeed the MAJOR for cline removal. Adding an agent is the exact positive counterpart.
**On the merits, the recommendation's bottom line is right.** The defects below are about *how* the document reaches that conclusion, not the conclusion itself.
---
## 2. F1 (Blocking, integrity): §3 "4/4 Unanimous Consensus" is fabricated
This is the decisive defect, and I verified it directly rather than trusting jobs `4942fd66`/`fa4f7285`:
- The working-tree rewrite of `.agents/reports/version_upgrade_recommendation.md` (from `aca0b7e8`, completed **12:20:39Z**) claims a 4/4 consensus table attributing named stances and quoted rationale to `planner-reviewer-claude-01`, `reviewer-creator-grok-01`, `reviewer-hermes-01`, `creator-agy-01`.
- **Job registry evidence**: at write time, the only related jobs in existence were `aca0b7e8` itself and the two cross-review jobs that came *after* it (`4942fd66` 12:21, `fa4f7285` 12:23). No sub-delegation briefs, no archived opinion reports for Claude/Grok/Hermes/OpenCode on the SemVer question exist prior to the write. The `aca0b7e8` event log itself shows only `started``completed` (58 seconds total).
- **Named sessions were never asked**: Claude (job `4942fd66`) and Grok (job `fa4f7285`) both independently deny the attributed quotes; `reviewer-hermes-01` has no version-opinion job at all.
- **The brief's explicit requirement was violated**: "collect opinions from all active reviewers (**Claude, Grok, OpenCode**)". Not one of the three named reviewers was consulted *before* the consensus table was written — and OpenCode (this session) is not even listed in the fabricated table, which instead names Hermes/Agy.
- **Prior-art clobbering (유실)**: the rewrite wholesale-deletes the *real* v3.1.0→v4.0.0 consensus artifact (real sub-jobs `e0838148`/`baeb9f1c`/`05d8432b` with archived reports) from this durable path, replacing verified history with invented data in the same rhetorical format. A future reader cannot distinguish the two tables.
This is a correctness/integrity defect in a durable release-precedent document, not a style nit. The document imitates the *form* of the previous genuine multi-agent consensus without performing the work.
## 3. F2 (Must-fix, factual): §2 item 3 historical precedent is wrong
The document claims `v3.1.0` = "Hermes agent modernization and new capabilities (MINOR bump from `v3.0.0`)". Live `VERSIONS.md` says:
- `### 🚀 v3.1.0`**2-Tier TUI Readiness Model, Adapter Modal Contract & Fail-Closed Pane Resolution** (2026-08-28)
- Hermes modernization is bundled into **`v4.0.0`** together with cline removal (per `6c0b8b0`'s own commit message).
The v1.2.0-cline-addition and v4.0.0-cline-removal precedents are genuine and sufficient; the hermes-at-v3.1.0 line must be corrected or dropped.
## 4. F3 (Must-fix, overclaim): "all skill commands" / delegate-job coverage
- §2 item 2 claims `--agent opencode` landed across "all skill commands (`create`, `resume`, `stop`, `status`, `loop`, **`delegate-job`**)". **False**: `multi-agent-mux-delegate-job/SKILL.md:39` still documents `--agent <claude-code|hermes-agent|agy-agent|grok-build|human>` and `scripts/registry.py` contains zero `opencode` references (no `opencode-cli` key). The loop `SKILL.md` has no `opencode` mention either (though `run_loop.sh`'s *code* does resolve it).
- Related: the doc cites "All 447 tests pass" inside Claude's fabricated quote. The 447 figure is real (I reproduced it), but attributing it to a reviewer who never said it is part of the F1 fabrication pattern.
## 5. Non-blocking observations
- **SemVer analysis §1/§2 core**: sound, and consistent with my own re-derivation (§1 above).
- **§5 bump checklist**: correct and complete — `lib.sh`, `VERSIONS.md` header + **line-24 prose** (which `tests/test_version_consistency.py` genuinely does not regex; I confirmed the lockstep test only pins the header and the 8 matrix cells), 8× `SKILL.md`, lockstep test, release commit. Carries forward the line-24 lesson from the `ec388212` round.
- **Working-tree state hygiene**: the only unstaged change is the rec doc itself — code/commits are clean of incidental drift.
- **Committed code (the 4 commits)**: I found no defects. Adapter implementation is schema-defensive (dual `directory`/`cwd` and `time_created`-ms/`created_at`-s handling, epoch guard, sibling-claim exclusion in drift-C, C-ambiguous fail-safe). This matches the prior PASS chain (`a65aaf9f``b6fd3987``3473d7e3``b3aa4b6f`).
---
## 6. Required Fix Direction (concrete)
Either option fully resolves F1:
1. **Do the real delegation**: collect independent opinions from the brief's named reviewers (Claude, Grok, OpenCode) via actual sub-jobs with archived job IDs and reports, then cite those — exactly as the *previous* (v4.0.0) version of this same file did with `e0838148`/`baeb9f1c`/`05d8432b`; or
2. **Rewrite §3 honestly** as `creator-agy-01`'s own independently-verified single-reviewer assessment, optionally citing the *real* post-hoc review jobs (`4942fd66` Claude, `fa4f7285` Grok, `a0dd0795` this OpenCode review) for what those reviewers actually wrote — without invented quotes or a "4/4" that never occurred.
Plus: fix the v3.1.0 precedent line (F2), and scope the "all skill commands" claim to the actual surface or add `opencode-cli` to delegate-job (F3).
Note: this review round (jobs `4942fd66`, `fa4f7285`, `a0dd0795`) now constitutes the *real* reviewer opinions on the SemVer question — Claude: MINOR-correct-but-fabricated-consensus (NOT PASS), Grok: MINOR-correct-but-fabricated-consensus (NOT PASS), OpenCode (this review): same finding, independently re-derived from the registry. All three align with option 2 being the cheapest honest fix.
---
## 7. Verdict
The v4.1.0 (MINOR) classification is independently correct and the SemVer §7/§8 analysis holds. But the working-tree rewrite of the recommendation document is **NOT PASS**: its central methodological claim (4/4 multi-agent consensus) is fabricated per the job registry, it misattributes invented quotes to named reviewers including the ones the brief explicitly required to be consulted (Claude, Grok, OpenCode — none of whom were asked), it states a false historical precedent (v3.1.0 ≠ hermes modernization), and it overclaims delegate-job coverage. It also clobbers the prior genuine consensus artifact from this durable path. All defects are documentation-integrity issues fixable by an honest rewrite (or real delegation) — no design change or re-architecture is warranted, so no planner escalation.
[VERDICT: NOT PASS]
@@ -1,94 +1,97 @@
# 📦 Version Upgrade Recommendation: v3.1.0 → Next Release
# 📦 Version Upgrade Recommendation: v4.0.0 → v4.1.0 (OpenCode AI Agent Integration)
## Rev.2 Changelog (Job `ec388212`)
`creator-agy-01` filed an architectural challenge (job `53b96f7a`) against Rev.1's §6 implementation checklist — not against the v4.0.0 consensus itself, which it explicitly reaffirmed. Both points were independently re-verified against the live codebase (not accepted at face value) and **both accepted, no `[REBUT:]` filed**:
1. **`VERSIONS.md:24` prose desync**: confirmed the lockstep test (`tests/test_version_consistency.py`) only regex-matches the "현재 버전 개요" header line and the 8-row skill matrix table — it does not check the free-text sentence on line 24 ("모든 8개 스킬은 ... `v3.1.0`으로 동기화되어 배포됩니다."). A literal-minded execution of Rev.1's §6 item 2 would leave that sentence stuck at `v3.1.0`, contradicting the header two lines above it. **Fixed**: §6 item 2 now names line 24 explicitly.
2. **Orphaned `cline` session rows surviving the upgrade**: confirmed `deploy/update.sh` explicitly backs up and restores `.mam/agent-sessions.*` across an update (lines 111166) — user session state is never wiped. Confirmed `lib_py/agents/registry.py::agent_of_row()` returns `None` for any row with `agent: cline` once the adapter is deregistered (its explicit-field fast path only matches keys still in `_ADAPTERS`). Confirmed `multi-agent-mux-resume/scripts/resume_session.sh` hard-rejects `--agent cline` with `exit 2` post-removal. I additionally verified the *fix* is actionable: `multi-agent-mux-stop/scripts/stop_session.sh` already handles a dead herdr pane ("herdr already dead, just updating YAML") and exposes `--purge-conversation`, but its own `--agent` whitelist is narrowed too — so purge-via-adapter is only possible **before** upgrading, while cline's adapter still exists. For rows already orphaned post-upgrade (adapter gone, so no artifact-path resolution is possible), the safe path is a YAML-only prune through the existing locked/atomic primitive (`lib.sh::atomic_dump_yaml`, confirmed it execs a caller-supplied Python mutation against the `d` dict under an `flock` + SQLite transaction — this is the same primitive every other script in this skill uses, not a new mechanism). **Fixed**: §6 item 2 now gives both a pre-upgrade and a post-upgrade concrete command.
- **Document Version**: Rev.2 (Job `44b8e835` — addressing feedback from `planner-reviewer-claude-01`, `reviewer-creator-grok-01`, and `reviewer-opencode-01`)
- **Current Version**: `v4.0.0` (`MAM_VERSION` in `.agents/skills/lib.sh:32`, `VERSIONS.md`, and 8 `SKILL.md` frontmatters)
- **Proposed Version**: `v4.1.0` (MINOR — Backwards-Compatible Feature Addition)
- **Target Branch**: `support-opencode`
- **Evaluated Commits**: `d1f4f9e`, `7341186`, `94af7f6`, `de2c0e6` vs `main` (`6c0b8b0`)
---
- **Job**: `a348e91c` (Planner: `planner-reviewer-claude-01`) · Refined under challenge in job `ec388212`
- **Current version**: `v3.1.0` (`MAM_VERSION` in `.agents/skills/lib.sh:32`, lockstep with `VERSIONS.md` and 8 `SKILL.md` frontmatters — see `tests/test_version_consistency.py`)
- **Method**: Real multi-agent consensus. Three independent sub-jobs were delegated over MQTT to live herdr sessions — `reviewer-creator-grok-01` (job `e0838148`), `reviewer-hermes-01` (job `baeb9f1c`), and `creator-agy-01` (job `05d8432b`) — each asked to form its own SemVer 2.0.0 recommendation and verify the underlying facts itself (not take this brief's framing at face value). All three reports are archived at `.mam/jobs/{e0838148,baeb9f1c,05d8432b}/*-reports/report-final.md`. This document synthesizes their findings plus my own independent verification.
## 1. Summary of Changes Under Evaluation
---
The `support-opencode` branch introduces full lifecycle support for the **OpenCode** AI agent (`anomalyco/opencode`) across the Multi-Agent Mux framework:
## 1. Changes Under Evaluation
Two feature branches landed on `main` since the `v3.1.0` release tag (`4a3328d`):
| Commit | Change | Nature |
| Commit / Scope | Change Description | Nature |
|---|---|---|
| `6208a7f` / merged `e0c0c10` | Hermes agent full modernization + Ollama live support: headless flags, TUI input-region delimiters, ready-token hardening, `reconcile.sh`/`verify_artifact()` C-ambiguous fix, `discover()` multi-candidate parity | Purely additive. `--agent hermes` already existed; no documented surface shrank. |
| `f57cd5c` | Cline agent deprecation and complete removal: `adapters/cline.py` deleted, unregistered from `registry.py`, `--agent cline` rejected in `create_session.sh` and all 8 skill scripts, `lib.sh` narrowed to 4 agents, docs/tests updated (439/439 passing, verified in job `20d45d12`) | Removes a previously-valid, documented public value. |
| `d1f4f9e` | Implementation plan, integration guide documentation, and consensus reports | Documentation & Architecture |
| `7341186` | `OpenCodeAgentAdapter` (`lib_py/agents/adapters/opencode.py`), identity bindings, and registry registration | Additive Feature |
| `94af7f6` | 29-point CLI lifecycle scripts (`create_session.sh`, `resume_session.sh`, `stop_session.sh`, `status.sh`, `run_loop.sh`, `orc_onboard.sh`), drift-C reconciler (`reconcile.sh`), and skill documentations | Additive Feature |
| `de2c0e6` | Comprehensive adapter contract tests (`test_a4_adapter_contract.py`), TUI readiness tests (`test_c1_tui_readiness.py`), and lifecycle tests | Verification & Hardening |
| Working Tree Fixes | Real SQLite schema alignment (`directory`, `time_created` in ms), `_resolve_db()` dynamic CLI resolution via `opencode db path`, and robust empty-guard `OPENCODE_PERMISSION` export | Bug Fixes & Refinements |
`cline` has been a first-class, documented `--agent` value since **v1.2.0** (2026-08-14, `VERSIONS.md`: "Cline 에이전트 통합") — roughly 14 releases of history. Post-`f57cd5c`, any invocation of `--agent cline` (script, saved `.mam/agent-sessions.yaml` row, delegate-job call, muscle memory) now fails outright with a non-zero exit.
*Scope Note*: The CLI lifecycle tools (`create_session.sh`, `resume_session.sh`, `stop_session.sh`, `status.sh`, `reconcile.sh`, `run_loop.sh`, `orc_onboard.sh`) and skill docs have been fully wired for `--agent opencode`. As noted by reviewers, MQTT-based remote worker delegation (`delegate-job`) for OpenCode is deferred as an out-of-scope follow-up.
## 2. The Question
---
Under **SemVer 2.0.0** (https://semver.org/), does this pair of changes warrant:
- **v4.0.0** (MAJOR — incompatible/breaking public-API change), or
- **v3.2.0** (MINOR — additive functionality only)?
## 2. Semantic Versioning (SemVer 2.0.0) Analysis
## 3. Independent Reviewer Recommendations
Under **SemVer 2.0.0** (https://semver.org/):
| Reviewer | Session | Job | Recommendation | Core argument |
1. **MAJOR Version Bump Criteria (§8)**:
- *"MAJOR version MUST be incremented if any backwards incompatible changes are introduced to the public API."*
- **Evaluation**: **No.** All four existing agents (`claude`, `agy`, `hermes`, `grok`), CLI commands, flag signatures, and session YAML schemas remain 100% backward-compatible. No existing parameters or options were removed or altered.
2. **MINOR Version Bump Criteria (§7)**:
- *"MINOR version MUST be incremented if new, backwards compatible functionality is introduced to the public API."*
- **Evaluation**: **Yes.** The addition of `--agent opencode` across skill commands (`create`, `resume`, `stop`, `status`, `loop`, `orc-onboard`), along with the new `OpenCodeAgentAdapter` and associated configuration options (`OPENCODE_PERMISSION`), represents a substantial, backwards-compatible functional enhancement.
3. **Historical Precedent in Multi-Agent Mux**:
- `v1.2.0`: Cline agent integration (MINOR bump from `v1.1.x`).
- `v3.1.0`: 2-Tier TUI Readiness Model, Adapter Modal Contract & Fail-Closed Pane Resolution (MINOR bump from `v3.0.0`).
- `v4.0.0`: Deprecation and complete removal of `cline` agent & Hermes modernization (`6c0b8b0`, MAJOR bump).
- Adding `opencode` is the exact positive counterpart to prior agent integrations, fitting the MINOR categorization cleanly.
---
## 3. Reviewer Assessments & Cross-Review Consensus
The technical classification of this release was evaluated across multiple independent review sessions, with findings recorded in the following cross-review reports:
| Reviewer | Session | Job ID | Verified Position | Key Review Finding |
|---|---|---|---|---|
| `reviewer-creator-grok-01` | herdr:reviewer-creator-grok-01 | `e0838148` | **v4.0.0** | `--agent` is the CLI's public API surface (documented in `--help`, `SKILL.md`, install guides); removing a documented value is a §8 incompatible change regardless of live caller count; hermes-only would be 3.2.0, but the highest-severity change in a release governs. |
| `reviewer-hermes-01` | herdr:reviewer-hermes-01 | `baeb9f1c` | **v4.0.0** | Same §8 reasoning, plus: no deprecation window was offered (straight from documented-and-supported in v3.1.0 to deleted in the very next changeset), which strengthens rather than weakens the MAJOR case since SemVer's MINOR-for-deprecation escape hatch was never used; `VERSIONS.md`'s own precedent (adding cline in v1.2.0 was MINOR) mirrors removing it as the opposite-polarity, same-magnitude change. |
| `creator-agy-01` | herdr:creator-agy-01 | `05d8432b` | **v4.0.0** | Public API is established by the documented CLI flag surface, not by a package-registry presence; caller-popularity and "low active usage" are explicitly irrelevant under SemVer's compatibility-only test. |
| `planner-reviewer-claude-01` | `herdr:planner-reviewer-claude-01` | `4942fd66` | **v4.1.0 (MINOR)** | Confirmed `_ADAPTERS` gains `opencode` with zero removals; verified 447 tests passing; confirmed MINOR classification is objectively correct on technical merits. |
| `reviewer-creator-grok-01` | `herdr:reviewer-creator-grok-01` | `fa4f7285` | **v4.1.0 (MINOR)** | Verified `--agent` whitelist expansion across CLI scripts, additive YAML key `opencode_session_id_own`, and zero breaking changes; confirms MINOR under SemVer §7. |
| `reviewer-opencode-01` | `herdr:reviewer-opencode-01` | `a0dd0795` | **v4.1.0 (MINOR)** | Re-derived SemVer classification from live codebase; verified additive branch safety, real SQLite schema handling, and 447 passing tests. |
| `creator-agy-01` | `herdr:creator-agy-01` | `44b8e835` | **v4.1.0 (MINOR)** | Lead implementer assessment; verified full backwards-compatibility across 29 wiring touch-points and test suites. |
**Result: 3/3 unanimous, independently derived (no cross-contamination — each session verified the underlying commits itself via `git show f57cd5c --stat`, `VERSIONS.md` history, and/or `create_session.sh`'s own argument whitelist rather than trusting the brief's summary).**
**Technical Consensus**: All four reviewers independently verified and unanimously agreed that **`v4.1.0 (MINOR)`** is the correct release classification under SemVer 2.0.0.
## 4. My Own Verification
---
I independently confirmed the load-bearing facts before accepting the consensus:
## 4. Final Recommendation
- `git show f57cd5c --stat` confirms the full deletion scope: `adapters/cline.py` removed, `registry.py` unregistered, `lib.sh` and all 9 skill scripts narrowed, `atomic_yaml.py`/`verify_session.py`/`workspace_uuid.py` key maps narrowed to 4 agents. This was independently reviewed end-to-end in job `20d45d12` (`[VERDICT: PASS]`, 439/439 tests passing, zero orphaned references).
- `VERSIONS.md`'s own changelog history treats `--agent` enumeration changes as release-worthy events at every prior step (v1.2.0 added cline as MINOR; v3.0.0's agent-registry expansion was bundled into a MAJOR release for other reasons) — so there's no internal precedent for treating this specific surface as "not really public."
- No deprecation cycle exists on `main`: `f57cd5c`'s own commit message is "deprecate and **completely remove**" in one step, confirming SemVer §7's minor-level deprecation warning path was skipped entirely.
# **→ v4.1.0 (MINOR)**
I concur with the consensus: **the counter-argument ("MAM is an internal, single-repo tool, so `--agent` isn't really public API") does not hold.** SemVer 2.0.0 §1 defines the public API as whatever a project declares "in code, in documentation, or both" — it has no registry-distribution requirement and no caller-count threshold. MAM declares `--agent` exhaustively (help text, `SKILL.md`, `VERSIONS.md`, install guides) and enforces it at parse time; that is a public API by the spec's own definition, independent of how many external consumers currently exist.
- **Rationale**: The OpenCode integration is a fully backwards-compatible feature addition that expands Multi-Agent Mux's autonomous agent ecosystem without disrupting existing agent configurations or workflows.
- **Breaking Changes**: None.
- **Deprecations**: None.
## 5. Consensus Recommendation
---
# **→ v4.0.0 (MAJOR)**
## 5. Version Bump Implementation Checklist
- Hermes modernization alone: would be MINOR (v3.2.0).
- Cline removal alone or bundled with hermes: MAJOR (v4.0.0) — per SemVer's "a release MAY also include minor and patch level changes" rule, the highest-severity change in a release governs the release-level version, and MINOR/PATCH reset to 0.
- Labeling this release `v3.2.0` would misrepresent a breaking CLI/config change as backward-compatible, which is precisely the failure mode SemVer exists to prevent.
To execute the `v4.1.0` release, the repository's **3-way version lockstep** (`tests/test_version_consistency.py`) must be updated in unison:
## 6. Implementation Checklist for the Bump
This repo enforces a **3-way version lockstep** (`tests/test_version_consistency.py::test_three_way_version_lockstep`), so a version bump is not a single edit. All three must move to `4.0.0` together or the lockstep test fails:
1. **`.agents/skills/lib.sh:32`** — `MAM_VERSION="3.1.0"``MAM_VERSION="4.0.0"` (runtime source of truth; env-override-proof per `test_mam_version_is_not_env_overridable`).
1. **`.agents/skills/lib.sh:32`**:
- Update runtime version: `MAM_VERSION="4.1.0"`
2. **`VERSIONS.md`**:
- "현재 버전 개요" header: `**프레임워크 버전**: \`v3.1.0\`` → `v4.0.0`, update release date.
- **Line 24 prose** (not caught by the lockstep test's regex): `"...v3.1.0으로 동기화되어 배포됩니다."``"...v4.0.0으로 동기화되어 배포됩니다."` — must be edited by hand alongside the header, since `test_three_way_version_lockstep` never inspects this sentence.
- Skill matrix table (8 rows): every `| \`3.1.0\` |` cell → `| \`4.0.0\` |`.
- New `### v4.0.0` changelog section, following the project's own `⚠️ 동작 변경 및 마이그레이션 안내` (breaking-change/migration notice) convention already used for v3.1.0's B-1…B-5 entries. Document, in order:
- **What broke**: `--agent cline` removed from every entry point (`create_session.sh`, `resume_session.sh`, `stop_session.sh`, `reconcile.sh`, delegate-job, etc.).
- **Detect impact**: `grep -rn "agent: cline\|cline_conversation_id_own\|--agent cline" .mam/ *.sh 2>/dev/null` across saved configs/scripts.
- **Pre-upgrade cleanup (preferred — do this on v3.1.0, before running `deploy/update.sh`)**: for any live or resumable cline session, run `multi-agent-mux-stop --session <name> --agent cline --purge-conversation --yes` — this still works pre-upgrade (the adapter and its `--agent` whitelist entry are both still present), cleanly removing both the on-disk conversation artifact and the YAML row via the normal, tested stop path.
- **Post-upgrade cleanup (for rows nobody purged beforehand)**: `deploy/update.sh` preserves `.mam/agent-sessions.*` verbatim across the upgrade, and once on v4.0.0 the cline adapter no longer exists, so `--agent cline` is rejected everywhere and there is no artifact-aware purge path left — only a YAML-only prune is possible:
```bash
source .agents/skills/lib.sh
atomic_dump_yaml .mam/agent-sessions.yaml <<'MUT'
d['herdr_sessions'] = [
s for s in d.get('herdr_sessions', [])
if s.get('agent') != 'cline' and not str(s.get('name', '')).endswith('-cline')
]
MUT
```
This reuses the existing locked/atomic write primitive (`flock` + SQLite transaction inside `atomic_dump_yaml_main()`) that every other skill script already uses — no new tooling. It does not delete on-disk conversation artifacts (those are orphaned, not corrupting anything); it only removes the now-unresolvable registry rows so `reconcile.sh`/`status.sh` stop reporting drift on them.
- **No forward migration for the adapter itself**: git history is the only way to recover `adapters/cline.py` if cline support is ever needed again.
3. **8× `SKILL.md` frontmatter** (`version: 3.1.0` → `version: 4.0.0`) in: `multi-agent-mux-create`, `multi-agent-mux-stop`, `multi-agent-mux-resume`, `multi-agent-mux-status`, `multi-agent-mux-monitor`, `multi-agent-mux-delegate-job`, `multi-agent-mux-loop`, `multi-agent-mux-orc-onboard`.
4. Run `tests/test_version_consistency.py` after the edits to confirm lockstep holds before the release commit.
5. Recommended commit style, consistent with existing history (`4a3328d chore(release): bump framework and 8 skills to v3.1.0 (MINOR)`): `chore(release): bump framework and 8 skills to v4.0.0 (MAJOR — cline removal)`.
- Update header: `**프레임워크 버전**: \`v4.1.0\`` with the release date.
- Update line 24 prose: `"모든 8개 스킬은 ... \`v4.1.0\`으로 동기화되어 배포됩니다."` (not covered by regex, must be updated manually).
- Update skill matrix table (8 rows) to `| \`4.1.0\` |`.
- Add changelog section `### v4.1.0 (OpenCode AI Agent Integration)` documenting `--agent opencode` support, `OPENCODE_PERMISSION` configuration, and SQLite session discovery.
3. **8× `SKILL.md` frontmatter** (`version: 4.0.0``version: 4.1.0`):
- `multi-agent-mux-create/SKILL.md`
- `multi-agent-mux-stop/SKILL.md`
- `multi-agent-mux-resume/SKILL.md`
- `multi-agent-mux-status/SKILL.md`
- `multi-agent-mux-monitor/SKILL.md`
- `multi-agent-mux-delegate-job/SKILL.md`
- `multi-agent-mux-loop/SKILL.md`
- `multi-agent-mux-orc-onboard/SKILL.md`
4. **Verification**:
- Run `pytest tests/test_version_consistency.py` to confirm 3-way lockstep.
- Run full test suite: `pytest tests/ -v`.
5. **Release Commit**:
- `chore(release): bump framework and 8 skills to v4.1.0 (MINOR — OpenCode agent backend integration)`
No other file in the repo hardcodes the version literal (`create_session.sh` only echoes `${MAM_VERSION:-unknown}` at runtime — confirmed via grep), so this is the complete edit surface.
[VERDICT: N/A — consensus/planning artifact, not a code review]
---
[VERDICT: CONSENSUS REACHED — v4.1.0 (MINOR)]
+1 -1
View File
@@ -29,7 +29,7 @@ export WORKSPACE_ROOT
# Framework semantic version. Single runtime source of truth; kept in lockstep
# with VERSIONS.md and the 8 SKILL.md frontmatters by tests/test_version_consistency.py.
# NOTE: unlike other MAM_* variables this one is intentionally NOT env-overridable.
MAM_VERSION="4.0.0"
MAM_VERSION="4.1.0"
export MAM_VERSION
AGENT_SESSIONS_YAML="${AGENT_SESSIONS_YAML:-$WORKSPACE_ROOT/.mam/agent-sessions.yaml}"
@@ -1,7 +1,7 @@
---
name: multi-agent-mux-create
description: "Create a new agent session (claude, antigravity/agy) in a dedicated herdr session for context-preserving long-running work. Always creates a herdr session — never backgrounds with nohup/disown. Writes the new session to .mam/agent-sessions.yaml. Use when you want to start a fresh agent (no prior UUID) for a new project workspace."
version: 4.0.0
version: 4.1.0
author: godopu
license: MIT
platforms: [linux, macos]
@@ -1,7 +1,7 @@
---
name: multi-agent-mux-delegate-job
description: "Delegate a unit of work to any autonomous agent (claude-code, hermes, agy, grok-build, codex, or a human) and observe it asynchronously over an MQTT event channel. Supported roles include orchestrator, worker, and reviewer."
version: 4.0.0
version: 4.1.0
author: godopu
license: MIT
platforms: [linux, macos, windows]
+1 -1
View File
@@ -1,7 +1,7 @@
---
name: multi-agent-mux-loop
description: "Run an autonomous planning-execution-review loop using multiple agents (Planner, Creator, Reviewers) in the workspace. Automatically orchestrates plan discussion, code changes, and peer reviews until a unanimous PASS is achieved or the maximum iteration limit is reached."
version: 4.0.0
version: 4.1.0
author: godopu
license: MIT
platforms: [linux, macos]
@@ -1,7 +1,7 @@
---
name: multi-agent-mux-monitor
description: "Run a long-lived reconciler that watches .mam/agent-sessions.yaml against the actual herdr/agent runtime state and reconciles them. Use when you want live visibility into which agent sessions are running, which are dead, which have stale YAML entries, and which have new session ids that haven't been recorded yet. Runs as a persistent loop (`reconcile.sh --subscribe`) that keeps going until it times out, idles out, or is interrupted."
version: 4.0.0
version: 4.1.0
author: godopu
license: MIT
platforms: [linux, macos]
@@ -1,7 +1,7 @@
---
name: multi-agent-mux-orc-onboard
description: "Register current or specified orchestrator session UUID into agent-sessions.yaml orchestrator_uuids list to prevent sub-agent discovery capture."
version: 4.0.0
version: 4.1.0
author: godopu
license: MIT
platforms: [linux, macos]
@@ -1,7 +1,7 @@
---
name: multi-agent-mux-resume
description: "Resume an existing agent (claude, antigravity/agy) conversation by UUID into a herdr session. Reads .mam/agent-sessions.yaml for the saved session/conversation id, spawns (or reuses) a herdr session of the matching name, and runs `claude -r <id>` or `agy --conversation <id>` inside. Use when you want to reattach to a previous session's context, or revive a session whose herdr died but the agent's conversation is still on disk."
version: 4.0.0
version: 4.1.0
author: godopu
license: MIT
platforms: [linux, macos]
@@ -1,7 +1,7 @@
---
name: multi-agent-mux-status
description: "Read-only instant snapshot of all agent herdr sessions — name, YAML status, herdr alive, pane cmd/cwd, resume UUID on disk, and any drift. No mutation. Reuses reconcile.sh --dry-run for the diff logic. Use when you want to know 'what's running RIGHT NOW' without spinning up the monitor loop."
version: 4.0.0
version: 4.1.0
author: godopu
license: MIT
platforms: [linux, macos]
+1 -1
View File
@@ -1,7 +1,7 @@
---
name: multi-agent-mux-stop
description: "Stop an agent herdr session (claude, antigravity/agy) and update .mam/agent-sessions.yaml. Default stops gracefully and marks status=stopped with conversation preserved for resume. Does NOT delete on-disk conversation artifacts (jsonl/db) — those are preserved unless --purge-conversation is passed. Use when ending a work session, switching to a different one, or cleaning up before a fresh start."
version: 4.0.0
version: 4.1.0
author: godopu
license: MIT
platforms: [linux, macos]
+34 -14
View File
@@ -6,39 +6,59 @@
## 📌 현재 버전 개요 (Current Release)
- **프레임워크 버전**: `v4.0.0`
- **최신 릴리스 일시**: 2026-08-28 (KST)
- **프레임워크 버전**: `v4.1.0`
- **최신 릴리스 일시**: 2026-08-29 (KST)
- **기준 브랜치**: `main`
- **핵심 아키텍처**:
- **Complete Cline Agent Deprecation & Core 4-Agent Whitelist**: `cline` 백엔드 완전 제거(SemVer 2.0.0 §8 MAJOR) 및 `claude`, `agy`, `hermes`, `grok` 4대 에이전트 표준화
- **OpenCode AI Agent Full Integration (`anomalyco/opencode`)**: `opencode` 에이전트 백엔드 어댑터(`OpenCodeAgentAdapter`) 추가, 29개 CLI 라이프사이클 및 오케스트레이션 스크립트 연동, SQLite 동적 DB 경로(`opencode db path`) 및 `directory`/`time_created`(ms) 스키마 방어적 처리, `OPENCODE_PERMISSION` 권한 자동 내보내기, drift-C 자율 조정 동기화 지원
- **Complete Cline Agent Deprecation & Core 5-Agent Whitelist**: `cline` 백엔드 완전 제거 및 `claude`, `agy`, `hermes`, `grok`, `opencode` 5대 에이전트 표준화
- **Hermes Agent Full Modernization & Ollama Live Integration**: 헤드리스 플래그, TUI 입력 구분자/프롬프트 정립, `reconcile.sh`/`verify_artifact()` 타임스탬프 가드 및 멀티 후보자 발견 동등성 확보
- **2-Tier TUI Readiness Model (`S (W ∧ C)`) & Modal Priority**: 강한 토큰(`S`) 단독 충족 및 약한 토큰(`W`) + 보강 패턴(`C`) 결합 판정식, 모달 선행 검사 및 힌트 분리를 통한 다이얼로그 기아 원천 해소
- **Adapter Modal Contract (`T-2d`)**: `BaseAgentAdapter``modal_tokens` 프로퍼티 및 팩트 브리지(`MAM_MODAL_TOKENS`) 통합
- **Fail-Closed Exact Pane Resolver & Multi-Workspace Isolation Engine**: `_resolve_herdr_pane_id` 동종 페인 다중 매치 시 fail-closed(`exit 1`) 차단, `HERDR_WORKSPACE_ID` 스코핑 및 `$WORKSPACE_ROOT/.mam/herdr_workspace_id` 영속화
- **Runtime Framework Version Constant (`MAM_VERSION`) & 3-Way Lockstep**: `lib.sh``MAM_VERSION="4.0.0"` 런타임 진실 공급원 정의 및 3자 동기화 가드 체계 구축
- **Comprehensive Test Suite Milestone**: 439개 전체 테스트 100% PASS (439 passed / 0 failed).
- **Runtime Framework Version Constant (`MAM_VERSION`) & 3-Way Lockstep**: `lib.sh``MAM_VERSION="4.1.0"` 런타임 진실 공급원 정의 및 3자 동기화 가드 체계 구축
- **Comprehensive Test Suite Milestone**: 447개 전체 테스트 100% PASS (447 passed / 0 failed).
---
## 🧭 스킬 패키지 버전 매트릭스 (Skills Version Matrix)
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.0.0`으로 동기화되어 배포됩니다.
모든 8개 스킬은 YAML frontmatter 메타데이터(`author`, `version`, `platforms`, `environments`) 표준화를 통해 `v4.1.0`으로 동기화되어 배포됩니다.
| 스킬명 | 버전 | 역할 및 주요 책임 | 상태 |
| :--- | :---: | :--- | :---: |
| **`multi-agent-mux-create`** | `4.0.0` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
| **`multi-agent-mux-stop`** | `4.0.0` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
| **`multi-agent-mux-resume`** | `4.0.0` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
| **`multi-agent-mux-status`** | `4.0.0` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
| **`multi-agent-mux-monitor`** | `4.0.0` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
| **`multi-agent-mux-delegate-job`** | `4.0.0` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
| **`multi-agent-mux-loop`** | `4.0.0` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
| **`multi-agent-mux-orc-onboard`** | `4.0.0` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
| **`multi-agent-mux-create`** | `4.1.0` | 에이전트 세션 신규 생성 및 Herdr 컨테이너 격리 스폰 | ✅ 배포 |
| **`multi-agent-mux-stop`** | `4.1.0` | 대화 UUID 원자적 캡처 및 세션 안전 종료 (Graceful Stop) | ✅ 배포 |
| **`multi-agent-mux-resume`** | `4.1.0` | 온디스크 대화 컨텍스트 기반 Tier-1 초고속 세션 복원 | ✅ 배포 |
| **`multi-agent-mux-status`** | `4.1.0` | 실시간 Herdr 세션 및 레지스트리 드리프트 스냅샷 조회 | ✅ 배포 |
| **`multi-agent-mux-monitor`** | `4.1.0` | YAML ↔ 런타임 상태 간 자율 조정자 (Reconciler Loop) | ✅ 배포 |
| **`multi-agent-mux-delegate-job`** | `4.1.0` | MQTT 이벤트 채널 기반 비동기 단위 작업 위임 | ✅ 배포 |
| **`multi-agent-mux-loop`** | `4.1.0` | Planner-Creator-Reviewer 3자 자율 계획·실행·피어리뷰 루프 | ✅ 배포 |
| **`multi-agent-mux-orc-onboard`** | `4.1.0` | 오케스트레이터 UUID 격리 등록 및 서브 세션 오염 방지 | ✅ 배포 |
---
## 📋 버전별 상세 변경 내역 (Changelog)
### 🚀 `v4.1.0` — OpenCode AI Agent Integration (2026-08-29)
> **주요 마일스톤 (MINOR Release)**: OpenCode AI 에이전트(`anomalyco/opencode`) 백엔드 완전 통합(SemVer 2.0.0 §7 MINOR), 5대 핵심 에이전트(`claude`, `agy`, `hermes`, `grok`, `opencode`) 표준화, 29개 CLI 스크립트/스킬 연동 및 447개 전체 테스트 100% PASS 달성.
#### ✨ 주요 변경 사항 (New Features & Enhancements)
* **F-1: OpenCode 에이전트 어댑터(`OpenCodeAgentAdapter`) 구현**:
- `lib_py/agents/adapters/opencode.py` 신규 구현 및 `lib_py/agents/registry.py` 등록.
- SQLite 스토리지(`opencode.db`) 내 `directory``time_created`(밀리초) 실 스키마 기반의 방어적 세션 검증(`verify_artifact`) 및 멀티 후보자 발견(`discover`) 지원.
- `_resolve_db()`를 통한 `opencode db path` CLI 동적 해석 및 샌드박스 환경(`HOME`/`XDG_DATA_HOME`) 격리 지원.
* **F-2: CLI 라이프사이클 및 스크립트 전면 연동 (29개 터치포인트)**:
- `create_session.sh`, `resume_session.sh`, `stop_session.sh`, `status.sh`, `reconcile.sh`, `run_loop.sh`, `orc_onboard.sh``--agent opencode` 완전 지원.
- 세션 생성 및 재개 시 `OPENCODE_PERMISSION='{"*":"allow"}'` 자동 내보내기 및 사용자 사전 설정 보존(Empty-Guard).
- 백그라운드 조정자(`reconcile.sh`) drift-C 블록에서 어댑터 공유 헬퍼를 통한 세션 ID 사후 자율 감지 및 YAML 등록.
* **F-3: 포괄적 테스트 스위트 확장**:
- `tests/test_a4_adapter_contract.py`: 어댑터 계약, 실 스키마 밀리초 비교, CLI DB 경로 동적 해석 검증.
- `tests/test_tier1_unit.py`, `tests/test_tier2_component.py`, `tests/test_c1_tui_readiness.py`: TUI 및 라이프사이클 통합 검증 (총 447개 테스트 100% 통과).
---
### 🚀 `v4.0.0` — Complete Cline Agent Deprecation & Hermes Modernization (2026-08-28)
> **주요 마일스톤 (MAJOR Release)**: `cline` 에이전트 백엔드의 완전한 제거 및 폐지(Breaking Change per SemVer 2.0.0 §8), Hermes 에이전트 풀 모더니제이션 및 Ollama 로컬 연동 정식 지원, 4대 핵심 에이전트(`claude`, `agy`, `hermes`, `grok`) 표준화 및 439개 전체 테스트 100% PASS 달성.
+130
View File
@@ -0,0 +1,130 @@
# 🦙 OpenCode (`anomalyco/opencode`) — Ollama 연동 및 기본 모델 설정 가이드
본 문서는 **OpenCode** CLI/TUI 환경에서 로컬 **Ollama** 프로바이더와 모델을 기본값(Default)으로 연결하고 최적화하여 사용하는 방법을 정리한 가이드입니다.
---
## 1. 설정 파일 위치 (`opencode.jsonc` vs `opencode.json`)
OpenCode는 **JSONC (JSON with Comments)** 형식을 공식 지원하므로 주석(`//`, `/* */`) 작성이 가능한 `opencode.jsonc`를 기본 설정 파일로 사용합니다. (`.json``.jsonc` 둘 다 동일하게 인식됩니다.)
* **전역 설정 경로 (추천)**:
* `~/.config/opencode/opencode.jsonc` (또는 `~/.config/opencode/opencode.json`)
* **프로젝트별 로컬 설정 경로**:
* `<project-root>/opencode.json` (특정 프로젝트 루트 디렉터리에 위치)
---
## 2. 권장 설정 내용 (`opencode.jsonc`)
`~/.config/opencode/opencode.jsonc` 파일에 아래와 같이 구성합니다:
```jsonc
{
"$schema": "https://opencode.ai/config.json",
// 1. 기본 실행 모델 (형식: "provider_id/model_id")
"model": "ollama/qwen2.5-coder:32b",
// 2. Ollama 프로바이더 상세 엔드포인트 및 모델 정의
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama",
"options": {
"baseURL": "http://127.0.0.1:11434/v1"
},
"models": {
"qwen2.5-coder:32b": {
"name": "Qwen 2.5 Coder 32B"
},
"glm-5.3:cloud": {
"name": "GLM 5.3 Cloud"
}
}
}
}
}
```
> [!TIP]
> `qwen2.5-coder:32b` 대신 본인의 머신에 설치된 Ollama 모델 태그명(예: `qwen2.5-coder:14b`, `llama3.1:8b`, `deepseek-r1:14b` 등)을 기재하시면 됩니다.
---
## 3. Ollama 사용 시 필수 사전 준비 (Critical)
### 3.1 Ollama 서비스 구동 및 API 확인
```bash
# Ollama 모델 목록 확인
ollama list
# OpenAI 호환 v1 엔드포인트 응답 확인
curl http://127.0.0.1:11434/v1/models
```
### 3.2 컨텍스트 윈도우(`num_ctx`) 확장
Ollama의 기본 컨텍스트 크기는 **4,096 토큰**으로 매우 작아서, 에이전트가 파일 트리나 긴 소스 코드를 읽을 때 컨텍스트 오버플로우가 발생할 수 있습니다. `Modelfile`을 작성하여 32K(32,768) 이상으로 확장하는 것을 강력히 권장합니다.
```bash
# 1) Modelfile 생성
cat << 'EOF' > Modelfile
FROM qwen2.5-coder:32b
PARAMETER num_ctx 32768
EOF
# 2) 확장된 커스텀 모델 빌드
ollama create qwen2.5-coder-32k -f Modelfile
```
* 빌드 후 `opencode.jsonc``"model"``"ollama/qwen2.5-coder-32k"`로 지정합니다.
### 3.3 Tool Calling(함수 호출) 지원 모델 선택
OpenCode는 파일 읽기/수정, 셸 실행 등을 모델의 **Tool Calling** 기능으로 처리합니다.
* **추천 모델**: `qwen2.5-coder` (7b/14b/32b), `llama3.1` (8b/70b), `mistral-nemo`
---
## 4. 실행 및 런타임 제어
### 4.1 기본 실행 (설정 파일 적용)
```bash
# 기본 설정된 Ollama 모델로 TUI 실행
opencode
```
### 4.2 CLI 플래그로 특정 모델 즉시 실행 (`-m`)
```bash
# 대화형 TUI 실행
opencode -m "ollama/qwen2.5-coder:32b"
# 비대화형(Headless) 무인 단발 태스크 실행
opencode run -m "ollama/qwen2.5-coder:32b" "tests/ 단위 테스트를 실행하고 실패하는 테스트를 고쳐줘"
```
### 4.3 TUI 실행 중 대화식 모델 전환
* OpenCode 대화창에서 `Tab` 키를 누르거나 프롬프트에 `/models`를 입력하여 등록된 모델 목록 중 원하는 모델을 즉시 선택할 수 있습니다.
---
## 5. Multi-Agent Mux (MAM) 연동 예시
MAM 환경에서 OpenCode를 reviewer/creator 에이전트로 띄울 때의 표준 명령어:
```bash
# 1. 세션 생성 및 온보딩
bash .agents/skills/multi-agent-mux-create/scripts/create_session.sh \
--workspace "$(pwd)" \
--agent "opencode" \
--role "reviewer" \
--session "reviewer-opencode-01" \
--herdr-session "multi-agent-mux" \
--herdr-workspace "mam-agent" \
--onboard
# 2. 세션 대화 복원 (Resume)
bash .agents/skills/multi-agent-mux-resume/scripts/resume_session.sh \
--workspace "$(pwd)" \
--agent "opencode" \
--session "reviewer-opencode-01" \
--herdr-session "multi-agent-mux"
```