Skip to content

Releases: Don-Works/mcplexer

v0.6.3 — lean v11 agent rules

Choose a tag to compare

@revitteth revitteth released this 07 Jul 14:42
v0.6.3
ca0e920

v0.6.3 — lean v11 agent rules block

The managed rules block agents read every session was rewritten from a ~180-line append-only accretion (V1→V10) into one self-contained ~33-line block (V11). Enforcement stays in code — leases + auto-release, the quote-aware shell hook, CWD gating — and the block now only says what exists, when to reach for it, and what the guardrails will do.

  • Rules template (agentrules v11): four entrypoints, one line per namespace, guardrails-as-facts. TestRenderV11LeanContract pins the design both ways: required strings, banned process-essay markers (HARD-BLOCKED, "default execution path", Anti-patterns, …), and a 60-line budget so sections can't accrete again.
  • Accurate shell-guard description: the old block still taught the pre-quote-aware hard-block ("grep -E \"foo|bar\" is blocked") long after the guard went quote-aware and ShellGuardAllowChaining began routing chains to the approval path by default. The rules now describe today's behaviour.
  • No more "ignore your harness" imperatives: where gateway and harness surfaces overlap (tasks, memory), the text states the durability trade-off ("prefer the gateway store") and leaves the call to the agent.
  • Delegation is a tool, not a mandate: the "delegation-first / default execution path" framing was removed from the rules block, CLAUDE.md, AGENTS.md, and the token-preserving-delegation skill; the skill's measured first-12h economics section stays.
  • harnesssync: the "single source of truth / Do NOT use your native memory" section was replaced with the preference-with-why framing across all harness variants; golden testdata now regenerates via go test ./internal/harnesssync -update.

Existing installs pick up the new block on task upgrade (the upgrade script re-runs rules sync).

v0.6.2

Choose a tag to compare

@github-actions github-actions released this 06 Jul 13:43
v0.6.2
65b7e73

Release v0.6.2

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 06 Jul 13:37
v0.6.1
fdb75cd

Release v0.6.1

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 13:30
v0.6.0
6753420

Release v0.6.0

v0.5.1 — Compression measures the code-mode path + live dashboard

Choose a tag to compare

@revitteth revitteth released this 01 Jul 12:33
3320f9b

v0.5.1 — Compression measures the code-mode path + live dashboard

A patch on v0.5.0 that makes token compression actually fire for the default usage pattern, and makes the dashboard live.

Fixes

  • Token compression now measures execute_code output. The seam previously only ran on direct downstream tool results — but a slim-surface + code-mode harness (mcplexer's default) never makes those; every result comes back inside execute_code, which is intentionally excluded from the seam (for JS iterability). So nothing was ever measured. The execute_code output — the payload the model actually reads — is now measured (and, when turned on, compressed) too.
  • Live dashboard. /settings/compression updates in real time via SSE (GET /api/v1/compression/stream), with a Live connection indicator — no manual refresh.

Notes

  • Still dry-run by default — measurement only, zero accuracy/latency risk, until you flip a transform on.
  • Code-mode output is often already compact (the sandbox caps it), so per-call savings are modest and accumulate; the larger wins are on verbose pretty-JSON / log outputs.

Full changes: v0.5.0...v0.5.1

v0.5.0 — Token compression at the gateway seam

Choose a tag to compare

@revitteth revitteth released this 01 Jul 11:00
fa01dab

v0.5.0 — Token compression at the gateway seam

MCPlexer now compresses the tokens it feeds into your agent's context — measured first, applied only when proven safe.

Highlights

Token compression (measure-first, zero-config)

MCPlexer compresses downstream MCP tool-result payloads before they reach the model. It auto-wires into a dry-run (shadow) mode on upgrade: it measures what each transform would save on your real traffic and returns results byte-identical — zero accuracy or latency risk — until you turn a transform on from the dashboard.

  • Dashboard settings page (/settings/compression): a three-state mode (off / dry-run / on), a per-transform toggle, and each transform's observed savings shown next to it, with a gate-verified badge for transforms proven safe.
  • Four transforms:
    • json_minify — strip insignificant JSON whitespace (value-lossless).
    • structured_dedup — drop the double-encoded content text when structuredContent already carries the value.
    • log_compact — drop low-severity INFO/DEBUG log noise, keep errors + stack traces + load-bearing tokens.
    • oversize_truncate — head + tail for very large payloads.
  • Reversible by design (CCR): any dropped content is stashed and expandable on demand via the new mcpx__retrieve tool. A verify-after-compress kill-switch guarantees the model never sees a marker it can't expand.
  • Measured, not asserted: the first tokenizer in the codebase + a durable savings ledger + a REST API power the dashboard. A CI gimmick gate enforces value-losslessness, credential safety, a latency budget, and a real measured win for every transform.

Also in this release

  • Audit live-stream filter parity — the live tail now filters identically to the historical feed across all facets.
  • macOS install — release binaries are re-signed + de-quarantined so the installed binary runs cleanly.
  • Tasks — honest open-count + bulk move-to-workspace.

Good to know

  • The compression seam sees MCP tool results + execute_code output; native harness Bash/Read/Grep bypass the gateway. Budget 15–35% on mixed MCP traffic.
  • Default is dry-run — nothing is compressed until you opt a transform in from the dashboard.
  • Pure Go, no CGO, single static binary — the ML/sidecar path was deliberately left out to preserve that.

Full changes: v0.4.0...v0.5.0

MCPlexer v0.4.0 — brw multi-profile sync + auto-discovery

Choose a tag to compare

@revitteth revitteth released this 30 Jun 14:54
v0.4.0
0640d08

MCPlexer v0.4.0 — brw multi-profile sync + auto-discovery

Run several browser profiles (Chrome + Chromium, multiple profiles) and let an agent pick which one — the gateway now discovers and registers them for you.

mcplexer brw sync

Turns brw's brwctl daemons discovery into one downstream MCP server + route per browser-profile daemon. Idempotent; adopts existing manually-registered brw servers untouched; --dry-run by default, --apply / --prune / --workspace.

🔄 Auto-discovery (opt-in, default off)

When enabled, the gateway keeps its source="brw" servers + routes in sync with the live daemon roster — via a file_watch on browser-profiles.json plus a periodic interval reconcile, both routed to one in-process executor. Launch a brwd for a new profile and its namespace just appears; no manual sync.

Enable: MCPLEXER_BRW_AUTODISCOVER=true (+ MCPLEXER_BRW_WORKSPACES, MCPLEXER_BRW_POLICY, MCPLEXER_BRW_INTERVAL, MCPLEXER_BRWCTL_PATH, MCPLEXER_BRW_PRUNE). Off = no behavior change.

Docs: docs/brw-profiles.md.

Also in this release

  • Dashboard / UI + approval-flow refinements and accumulated web work.

Full changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 30 Jun 14:04
v0.3.0
0640d08

Release v0.3.0

v0.2.0 — Worker pre/post-execute JS hooks

Choose a tag to compare

@revitteth revitteth released this 29 Jun 20:22
v0.2.0
b2c571e

Worker pre/post-execute JS hooks 🪝

Workers can now carry two optional JavaScript hooks that run in MCPlexer's existing code-mode (goja) sandbox, around the model loop:

  • pre_execute_script — runs before any model/CLI spend and can block the run. throw or call abort(reason) to stop it; return cleanly to proceed. Use it to hit an endpoint, check a flag, or read a condition and decide whether the worker should run at all. A blocked run costs zero tokens.
  • post_execute_script — runs after output is produced and can reject it (throw on a successful run), which suppresses emission to every output channel.

This lets an agent provisioning a worker attach a gate like "only run if https://…/gate says go" or "don't publish output shorter than N chars" — entirely declaratively.

How it works

  • Hooks run through the worker's own mcpx__execute_code path, so they inherit that worker's tool allowlist, capability profile, and audit trail — no new sandbox or privilege surface. (There's no JS fetch; reach an HTTP endpoint via an allowed downstream tool, e.g. fetch.fetch({url}).)
  • A generated preamble binds a hook context object — {phase, worker, run, params} (post adds run.status/output/error/tokens/cost) — plus abort(reason) / proceed() helpers.
  • New terminal run status blocked — deliberately not failure, so an intentional gate never trips the consecutive-failure auto-pause.
  • Fail-closed: a hook that throws, times out, or fails to dispatch blocks the run.
  • Scripts are validated at write time with codemode.Preflight (syntax + no eval/Function/import/require) and a 64 KB cap.

Surfaces

  • New workers.pre_execute_script / post_execute_script columns (migration 125 + idempotent boot invariant).
  • Exposed on create_worker, update_worker, and mcpx__delegate_worker.
  • Web editor: Tools → Execute hooks; read-only config view; blocked status badge.

Tested

  • Go unit + integration tests (hook engine, validation, store round-trip).
  • Live end-to-end against the built daemon: gate=noblocked (zero spend); gate=yessuccess; post-hook veto flips success → blocked; malformed hook JS rejected at create.

Artifact

mcplexer-v0.2.0-darwin-arm64.tar.gz — macOS (Apple Silicon) build, web UI embedded. Build from source with task build for other platforms.

🤖 Generated with Claude Code

MCPlexer v0.1.9

Choose a tag to compare

@revitteth revitteth released this 27 Jun 19:48
v0.1.9
a5daabd

Highlights

  • Stops human-owned tasks with stale agent leases from being reclaimed every minute by the lease sweeper.
  • Fixes misleading mesh task_event:status_changed ... -> open emissions for lease cleanup when the task status did not actually change.
  • Keeps routine task_event rows out of the Mesh page by default while preserving explicit/deep-link opt-in.
  • Sends task-related notification clicks to the task detail route instead of raw mesh rows or inert /app?task=... URLs.
  • Bumps the PWA service-worker shell cache to mcplexer-shell-v12 so installed clients pick up the deep-link and Mesh feed fixes.

Verification

  • go test ./cmd/mcplexer ./internal/api ./internal/mesh ./internal/store/sqlite ./internal/tasks
  • npm run test
  • npm run build
  • Local daemon verification: default Mesh status has zero task_event rows; Tadweld task stopped moving after the pre-fix 19:42:02Z row.

Artifacts

Installable archives are attached for macOS, Linux, and Windows on amd64 and arm64, with checksums.txt for verification.