Skip to content

Releases

v1.12.1

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 10 Nov 03:56

Full Changelog: v1.12.0...v1.12.1

Python MCP launcher

  • pip install lv24-opencode-consilium now installs three console scripts:
    consilium, consilium-mcp and lv24-opencode-consilium.
  • consilium-mcp starts the same stdio MCP server through
    npx --yes --package lv24-opencode-consilium@<version> consilium-mcp.
  • Arguments, environment and exit codes are forwarded; interrupted runs exit 130.
  • python -m lv24_opencode_consilium.mcp works without the console script.
  • Node.js >= 18, npm/npx and OpenCode remain prerequisites; npm remains canonical.

Isolation hardening

  • --isolate --read-only now fails fast with CLI exit 2 when the repository
    contains .opencode/opencode.jsonc, before any worktree, hook or agent. The
    error includes the path and both remedies: rename it to
    .opencode/opencode.json, or use --allow-write.
  • Tracked and untracked .jsonc files are both rejected intentionally
    (fail closed); the library/MCP/plugin surface receives a typed
    IsolationConfigError with code: ISOLATION_JSONC_UNSUPPORTED.
  • Worktree cleanup canonicalizes paths and matches registered worktrees by
    basename as well as path. A live worktree is never treated as unregistered
    when git reports a macOS /private/var path or a Windows 8.3/long path.
  • Directories that still contain a worktree .git marker are never age-collected
    as crumbs.

Cross-platform coverage

  • New manual-only worktree-tests GitHub Actions workflow runs the worktree
    suites on Ubuntu, Windows and macOS (Node 24, pinned actions, no secrets).
  • Added Windows file-lock/Unicode/space/long-path cases and macOS
    symlink/realpath/cancellation cases.
  • Workflow is workflow_dispatch only; the whole matrix is green.

Tests

  • 601 JavaScript tests (599 passed, 2 platform-specific skipped) and 16 Python
    launcher tests.
  • tsc --noEmit, build, wheel/sdist + twine check, and actionlint pass.

Install

npm install -g lv24-opencode-consilium@1.12.1
pip install lv24-opencode-consilium==1.12.1
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.12.1

v1.12.0

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 10 Nov 02:44

Full Changelog: v1.11.0...v1.12.0

Managed read-only worktrees

  • --isolate now creates a Consilium-managed git worktree per agent under
    .consilium/worktrees instead of delegating to OpenCode's native worktree.
  • Each worktree is based on HEAD plus tracked staged/unstaged changes
    (git stash create); untracked files are not copied.
  • With --read-only, V2 agents.<name>.permissions and V1
    agent.<name>.tools are applied inside each worktree; the main project
    overlay is not touched during isolation.
  • Worktrees are removed after every call (success, error, cancellation), and a
    conservative stale cleanup handles crashed runs.
  • Non-git projects fail before any model call; watch ignores
    .consilium/worktrees.

MCP replay and streaming

  • New consilium_replay tool restores a saved run's task, experts, chair,
    models and replayable options, then runs the council again.
  • Progress is streamed through notifications/progress with the same
    progressToken contract as consilium_run.
  • Callers can override read_only, isolate, artifacts, output_file,
    max_cost, deadline_ms, rounds, findings, session and timeout_ms.
  • Replay shares the execution/cancel path with consilium_run; paths remain
    workspace-confined.

Automated eval reports

  • New npm run eval:report / scripts/eval-report.mjs validates recorded
    eval --json and eval --compare-rounds --json output and renders
    docs/eval-results.md.
  • The generator refuses invalid or incomplete JSON and never invents numbers.
  • The 22-fixture corpus and the manual fallback template remain; measured model
    results still require a working provider.

Fixes and hygiene

  • POSIX Python launcher tests no longer depend on dirname when the fake
    npx PATH is intentionally minimal.
  • MCP replay tests cover managed worktrees, read-only overlays, progress,
    cancellation and path confinement.
  • 588 JavaScript tests and 9 Python tests.

Install

npm install -g lv24-opencode-consilium@1.12.0
pip install lv24-opencode-consilium==1.12.0
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.12.0

v1.11.0

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 10 Nov 02:01

Full Changelog: v1.10.0...v1.11.0

Read-only and isolated runs

  • --read-only restricts experts and the chair to read, glob and grep.
    Write/edit/patch/shell/webfetch/websearch/subagent/question/MCP tools and
    external-directory access are denied; .env stays unreadable.
  • Enforcement uses a temporary .opencode/opencode.json layer with V2
    agents.<name>.permissions and V1 agent.<name>.tools, a lock, a backup and
    byte-exact restore on success, error, cancellation and exit.
  • Invalid JSON, an existing .opencode/opencode.jsonc and symlinked layers fail
    closed instead of silently running without enforcement.
  • audit and the composite GitHub Action are read-only by default;
    --allow-write / read-only: false opt out.
  • --isolate runs each agent in an OpenCode-managed git worktree.
  • The effective policy is recorded in metadata.safety.

MCP artifact tools

Four read-only tools that never call a model:

  • consilium_list_runs — newest saved runs with id, task, success and finding counts.
  • consilium_get_run — full run.json for an id or latest.
  • consilium_sarif — SARIF 2.1.0, in the response or atomically in the workspace.
  • consilium_diff_runs — markdown comparison of two saved runs.

consilium_run also accepts read_only and isolate.

Ticket reports

  • --report jira renders Jira wiki markup (h2., ||...||, {code}).
  • --report linear renders clean Linear Markdown.
  • .jira and .linear are inferred by --report-file; explicit --report
    works with any filename.
  • Both include verdict, models, cost, duration, findings, rejected positions and
    parse errors; empty findings produce a valid report.

Evaluation

  • The deterministic corpus grows from 10 to 22 fixtures, covering injection,
    authorization, concurrency, reliability, SSRF/path traversal, data integrity,
    pagination/caching and prompt injection.
  • No benchmark numbers are fabricated or committed: docs/eval-results.md
    contains the reproducible commands and reporting template. A measured table
    requires a real model provider.
  • V1 tools/permission now migrate to ordered V2 rules; temperature/
    top_p/maxSteps still block migration with a warning.
  • 561 JavaScript tests and 9 Python tests.

Release hygiene

  • npm source maps now embed sourcesContent, so stack traces work from the
    packaged tarball.
  • Python launcher tests run in the PyPI workflow before building.
  • GitHub Actions are pinned to Node 24-compatible releases.
  • AGENTS.md documents the repository map, invariants and release flow.

Install

npm install -g lv24-opencode-consilium@1.11.0
pip install lv24-opencode-consilium==1.11.0
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.11.0

v1.10.0

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 10 Nov 00:47

Full Changelog: v1.9.0...v1.10.0

PyPI (new distribution channel)

  • pip install lv24-opencode-consilium installs a thin, dependency-free Python launcher.
  • Its consilium and lv24-opencode-consilium console scripts delegate to the npm CLI through npx.
  • Node.js >= 18, npm and the OpenCode CLI remain prerequisites; npm stays canonical.
  • Pinning: CONSILIUM_NPM_VERSION=1.10.0 (or latest) selects the npm version the launcher runs.
  • Publishing uses PyPI Trusted Publishing (OIDC) from .github/workflows/pypi-publish.yml:
    no API token, no password, no OTP. A GitHub release publishes npm and PyPI.
  • Guide: docs/pypi.md

SARIF export and GitHub code scanning

  • New consilium sarif [--run <id|latest>] [--output <file>] exports SARIF 2.1.0
    from saved artifacts without re-running the council.
  • The composite GitHub Action now:
    • runs the review with --artifacts;
    • exports the newest run with consilium sarif --run latest;
    • uploads it with github/codeql-action/upload-sarif;
    • exposes sarif, sarif-file and category inputs.
  • Requires security-events: write and code scanning enabled for the repository.
    SARIF export/upload failures use continue-on-error and never mask the gate.

Also

  • Version consistency now covers python/pyproject.toml and __version__.
  • 522 JavaScript tests and 5 Python tests.
  • Documentation updated in English, Russian and Chinese.

Install

npm install -g lv24-opencode-consilium@1.10.0
pip install lv24-opencode-consilium==1.10.0
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.10.0

v1.9.0

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 09 Nov 23:26

Full Changelog: v1.8.0...v1.9.0

SARIF and code scanning

  • --report sarif emits SARIF 2.1.0 for GitHub code scanning and other SARIF viewers.
  • One result per finding; critical/high → error, medium → warning, low/info → note.
  • File/line locations, stable fingerprints, one rule per category, sources/contested in properties.
  • --report-file report.sarif (or .sarif.json) infers the format; upload with github/codeql-action/upload-sarif.

Debate evaluation

  • consilium eval --compare-rounds runs every fixture with one and two rounds and prints a delta table:
    catch rate, false-positive rate, p50 latency and total cost, plus a verdict.
  • consilium eval --rounds 2 runs the suite in debate mode.
  • --fail-under gates the debate catch rate; --max-cost covers both runs.

Scheduled audits

  • docs/scheduling.md covers cron, Windows Task Scheduler, launchd and GitHub Actions for
    consilium audit --since <ref> with --deadline and --max-cost.
  • Runnable wrappers: examples/consilium-audit.sh, examples/consilium-audit.ps1 and
    examples/consilium-audit-nightly.yml (outside .github/workflows/ — nothing runs automatically here).

Also

  • 515 tests.
  • npm publishing now runs through Trusted Publishing (OIDC): publishing this release triggered
    .github/workflows/npm-publish.yml, which published the version with provenance — no token or OTP.

Install

npm install -g lv24-opencode-consilium@1.9.0
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.9.0

v1.8.0

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 09 Nov 22:44

Full Changelog: v1.7.0...v1.8.0

Debate rounds

  • --rounds 2 adds a second expert round: each expert sees anonymized peer answers (A/B/C), critiques errors and omissions, and states a final position.
  • The expert's own first-round answer is included for continuity; peer answers are marked as untrusted data and never reveal agent names.
  • The chair receives the final positions plus a note listing which experts changed their position; metadata.debate = { rounds, participants, changed }.
  • Round 2 doubles model calls and is skipped when fewer than two experts succeeded, the deadline fired, or --max-cost is already exceeded. Findings are collected from the final answers.

init --local

  • Probes Ollama (/api/tags) and LM Studio (/v1/models) for model lists.
  • Assigns models round-robin to arch, ux, ba, sec and the chair, and writes consilium.config.json with localOnly: true.
  • --dry-run prints the assignment; --json prints the proposed config; refuses to overwrite without --force; merges existing timeouts/retry/report settings.

consilium audit --since

  • Builds an untrusted <ref>...HEAD diff and runs the council end-to-end, reusing reports, artifacts and --fail-on.
  • --dry-run prints the ref, file count and truncation flag without calling models.
  • --since is required and validated (no shell metacharacters); schedule from cron, Task Scheduler or CI — no daemon.

Also

  • Custom presets, local-only privacy and deadlines from 1.7.0 remain unchanged.
  • 491 tests, no missing public exports.

Install

npm install -g lv24-opencode-consilium@1.8.0
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.8.0

v1.7.0

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 09 Nov 20:59

Full Changelog: v1.6.0...v1.7.0

Deadlines and partial synthesis

  • --deadline <ms> (config deadlineMs) caps the expert phase at up to 24 hours.
  • When the deadline fires, in-flight experts are cancelled, finished answers are kept, and the chair synthesizes them with an explicit note listing how many experts finished and which roles are missing.
  • metadata.deadline = { limitMs, hit, completed, missing }.
  • Zero completed experts skip the chair and fail with errorCode: DEADLINE; a partial run with at least one expert succeeds.
  • The timer is cleared on every path; user cancellation still wins.

Local and privacy mode

  • --local-only requires an explicit local model (Ollama, LM Studio, llama.cpp, vLLM) for every expert and the chair — no implicit cloud fallback.
  • models --local filters the ranked catalog; models --probe-local reports whether local providers are running.
  • The guarantee is enforced in the library, CLI, MCP and plugin, not just one entry point.
  • doctor adds a local-providers check that fails when localOnly is on and no provider is reachable.

Custom presets

  • presets in consilium.config.json merge over the built-ins; a custom preset can override a built-in name.
  • consilium presets [--json] lists the merged set.
  • Custom presets work in the CLI (--preset docs), MCP consilium_run and the V2 plugin; the MCP/plugin schemas no longer reject unknown preset names before config lookup.

Fixes

  • The trusted-project-config marker is now an enumerable symbol, so it survives object spreads used by presets, deadline prompts and CLI overrides (this fixes trusted .cmd OpenCode paths on Windows).
  • localOnly validation also rejects agents without an explicit model instead of silently allowing a cloud fallback.

Install

npm install -g lv24-opencode-consilium@1.7.0
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.7.0

v1.6.0

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 09 Nov 18:20

Full Changelog: v1.5.0...v1.6.0

Evaluation harness

  • consilium eval runs a deterministic planted-bug corpus (10 fixtures) with claim/file/severity matching — no LLM judge.
  • Reports per-fixture caught/missed/false positives, aggregate catch and FP rates, p50 latency and cost.
  • --fail-under <pct> exits 3 below the threshold; --max-cost stops the suite at the budget.
  • Fixtures ship in eval/fixtures; the format is documented in eval/README.md.

Context pack

  • --context auto adds changed files, the nearest AGENTS.md, related tests and recent commits to the task.
  • Priority rules → files → tests → commits, 48k chars total, 12k per file, 20 files; binary/lock/generated files are skipped.
  • Every section is wrapped in <untrusted-*> markers so repository text cannot act as instructions.

Reliability memory

  • Model outcomes, error codes and latency are stored in .consilium/reliability.json.
  • consilium models --reliability prints the table; ranking accepts an optional reliability bonus after 3+ attempts.
  • Best-effort writes: a blocked/unwritable .consilium never fails a run.

GitHub Action

  • Composite action at .github/actions/consilium: reviews a PR diff, posts/updates one comment with the <!-- consilium:report --> marker, then propagates the gate exit code.
  • Fork PRs are skipped by default; pin the npm version with the version input. Guide: docs/github-action.md.

Findings and history

  • Fuzzy claim merging deduplicates paraphrased findings (Jaccard + containment, same file/category).
  • consilium history [--limit N] lists recent runs; consilium stats [--json] [--html <file>] aggregates success rate, p50/p95, cost, findings, per-model errors and top failure codes.

Quality

  • The published plugin type no longer imports @opencode/plugin; the .d.ts is self-contained.
  • Version is single-sourced across package/config/MCP/example/llms/workflow and covered by a test.
  • Bins are executable in git.

Install

npm install -g lv24-opencode-consilium@1.6.0
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.6.0

v1.5.0

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 09 Nov 03:47

Full Changelog: v1.4.3...v1.5.0

Structured findings and a policy gate

  • --findings makes every expert and the chair return a validated findings[] JSON block: severity, category, file, line, claim, evidence, confidence. The chair also lists positions it rejected with reasons.
  • Findings are deduplicated by a stable fingerprint (category + file + normalized claim, line excluded), merged across roles with the maximum severity, and marked contested when rejected.
  • metadata.findings = { items, counts, rejected, parseErrors }; HTML and PR reports render the findings table and a collapsible dissent ledger. Malformed JSON never fails a run.
  • --fail-on <severity> gates on new findings; exit code 3 means the gate failed.
  • consilium baseline accept|prune manages .consilium/baseline.json, so accepted findings are ignored by the gate and can be shared with the team.

Correctness

  • Config: per-agent V1/V2 precedence across layers, per-file parse warnings, explicit chair.model wins, excludedAgents validation.
  • Models: cached fallback survives total network failure, minContext applies to fresh fetches, dedupe prefers available copies, the chair agent is always emitted by init --free, missing cost telemetry is no longer fabricated as 0.
  • Runner: SIGKILL escalation survives settle, RATE_LIMITED retries without an explicit delay, timeouts clamp to the Node maximum, sessions require ses_, CLI command words only at argv[0], --no-artifacts no longer breaks replay lookup, fallback chains use the configured length.
  • Watch/reports: reruns are queued during an active run, signals registered before the first run, env shebangs accepted, presets no longer empty the council, consensus has explicit no-data states, smart selection respects max, MCP progress totals match the selected council.

Also

  • /council OpenCode slash command template (.opencode/commands/council.md).
  • 317 tests.
  • No missing public exports across all 22 subpaths; new findings/baseline helpers are additive.

Install

npm install -g lv24-opencode-consilium@1.5.0
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.5.0

v1.4.3

Choose a tag to compare

@LevapVeeskela LevapVeeskela released this 09 Nov 02:44

Full Changelog: v1.4.2...v1.4.3

Security hardening

  • Project config is untrusted by default. A repository's consilium.config.json may define models, experts, prompts and presets, but process/path keys (opencodePath, opencodeArgs, autoApprove, cwd, opencodeConfigPath, string output.file, reportFile, string artifacts) are ignored with a warning. Pass the file explicitly with -c to trust it.
  • Windows spawn: .cmd/.bat shims run through cmd.exe only after every argument passes a strict allowlist; .exe and POSIX binaries spawn directly. Bare opencode is resolved through PATH.
  • MCP: tools/call requires an id, the queue is capped at 16, cancelled queued calls are skipped, output_file and artifact paths are confined to the workspace, and consilium_init_free writes .bak files and requires confirm: true with force.
  • Injection: dynamic diff fences with untrusted-data markers; report inline code and markdown links are escaped.
  • Artifacts: atomic run directories, case-insensitive expert filenames, token redaction, automatic .consilium/.gitignore; reports are written atomically.

Compatibility

  • No missing public exports across all 22 subpaths (one additive export: PathContainmentError).
  • 246 tests pass.

Install

npm install -g lv24-opencode-consilium@1.4.3
docker pull ghcr.io/levapveeskela/lv24-opencode-consilium:1.4.3