Releases: zainfathoni/amux
Releases · zainfathoni/amux
Release list
v0.3.7
fix(claude): admit completed config migration evidence (#312) ## Summary - match core migration-required semantics when quarantine encounters retained config-local or global rollback sources - bind bounded, hash-only object/content evidence for effective legacy sources and all canonical destinations, then revalidate it immediately before park - preserve legacy and canonical config bytes while keeping pending, unsafe, unavailable, oversized, symlinked, or drifted evidence fail-closed - document completed retained migration evidence versus genuinely pending migration ## Validation - `go test ./skills/amux-claude/experimental/claude-delegation -run 'TestProviderOwnedInvalidStoreQuarantine|TestQuarantineRetainedCompletedMigrationEvidence' -count=1` - `GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=commit.gpgsign GIT_CONFIG_VALUE_0=false go test ./skills/amux-claude/experimental/claude-delegation -count=1` - `go test ./scripts -count=1` - `GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=commit.gpgsign GIT_CONFIG_VALUE_0=false go test ./... -count=1` - `go vet ./...` - `go build ./cmd/amux` - `python3 -m py_compile skills/amux-claude/experimental/claude-delegation/claude_delegation.py` - `gofmt` on the changed Go test - `git diff --check` No live Claude/provider call was performed. Closes #288
v0.3.6
Support Claude Opus 5 read-only delegation (#306) ## Summary - admit exact `claude-opus-5` only for local read-only Claude delegation - preserve exact model binding through policy, launch, receipt, and process checks without aliases, fallback, normalization, or retry - keep mutating Stage A and fresh-Orb Claude pinned to exact `claude-opus-4-8` - add a maintained provider/executor readiness matrix for `/amux-claude` and `/amux-pi` ## Validation - `go test ./skills/amux-claude/experimental/claude-delegation -count=1` - `go test ./scripts -count=1` - `go test ./...` - `go vet ./...` - `go build ./cmd/amux` - `git diff --check` Closes #305
v0.3.5
Add local-checkout skill symlink installation (#304) ## Summary - add opt-in `AMUX_SKILLS_SOURCE` support to the shell installer - link `/amux`, `/amux-claude`, and `/amux-pi` from one canonical local checkout under `~/.agents/skills` - preserve replaced real installs and same-name legacy duplicates as timestamped backups - reject invalid sources, unsafe destination parents, source/destination overlap, and backup collisions before mutation - keep binary-only installation unchanged when the option is absent - document explicit checkout refresh and Amp reload behavior ## Verification - `/bin/sh -n docs/install.sh` - `go test ./scripts -count=1` - `go test ./...` - `go vet ./...` - `go build ./cmd/amux` - `git diff --check`
v0.3.4
Restore lean projectless local worker spawn (#299) Closes #297. ## Summary - restore `amux spawn` for the narrow projectless physical-host case, with `amux worker spawn` as the exact alias - rely on executor selection to route the command to the intended physical host; spawn is local by construction, canonicalizes the requested workdir, and requires no local process `--runner-id` alias or attestation - read and bound the complete prompt before taking the mutation lock; dry-run remains lock-free, while real ownership/group/tmux preflight, sole creation, input, and persistence stay under the existing machine lock - run `amp threads new --mode <exact-mode>` once in that cwd; retain exact returned IDs, while nonzero/no-parseable-ID and zero/invalid-ID results are sanitized as creation-indeterminate - create one exact tmux continue pane, attempt one bounded literal paste, and attempt one Enter only after paste succeeds; failed loads/pastes scrub the exact randomized transport buffer - preserve and report the exact thread and returned tmux identity—or explicitly indeterminate requested identity—on every post-create failure; never retry, search, read history/transcripts, archive, kill, or reconcile - after successful input attempts, report and persist the worker; for an optional existing group, preflight the established additive Amp capability before creation, then report/persist membership and call/report the shared add-only label ensure This follows the owner's clarification on #297: the historical local `amux spawn` sequence is the baseline. It intentionally does not introduce a new Amp server API or revive the removed worker-spawn operation ledger/state machine. Creation and composer submission remain separate controlled local steps. ## Verification - focused spawn/tmux tests: plain unnamed runner/projectless path; default and pass-through modes; multiline stdin/file; prompt-before-lock ordering; mutable create under lock; group-aware lock-free dry-run; sanitized human/JSON creation-indeterminate output; exact-ID preservation; canonical cwd and ownership conflicts; tmux/load/paste/Enter failures and exact buffer scrub; group capability/persistence/label failures; truthful partial-success outcomes; no retry/cleanup - `go test ./...` - `go vet ./...` - `go build ./cmd/amux` - Darwin cross-compile for `internal/tmux` - `git diff origin/main...HEAD --check` - focused final review: approved with no remaining blocker ## Residual behavior The route is intentionally non-atomic after Amp returns a thread. A reported post-create failure requires deliberate operator inspection; rerunning spawn, repasting, pressing Enter, or cleaning up automatically is forbidden. Readiness is transcript-free: amux requires the exact returned Amp pane and continue command/environment to remain stable for a bounded settle period before input attempts. Successful paste/Enter commands are attempts, not transcript or inference proof.
v0.3.3
Support Pi 0.82.1 in the bounded local Spark helper (#295) ## Summary - migrate only the bounded physical-host Pi helper from exact `@earendil-works/pi-coding-agent` 0.80.10 to exact 0.82.1 - enforce Pi 0.82.1's exact Node `>=22.19.0` engine contract inside the same bounded process before Pi's entrypoint loads - preserve exact Spark model, one-attempt, one-file, OAuth, settings, timeout/output, process-group cleanup, and independent-review boundaries - accept normal owner-managed provider cache and read-only settings permissions on the explicitly trusted host, while rejecting unsafe cache filesystem objects - leave the separate fresh-Orb recipe pinned to 0.80.10 ## Audit evidence - registry and v0.82.1 source agree on package name, version, bin, and Node engine - all fixed CLI flags remain supported in published Pi 0.82.1 - published Pi 0.82.1 reached its entrypoint through the exact guard under Node 22.19.0 - physical-host preflight confirmed exact Pi 0.82.1, compatible Node 25.9.0, all required flags, owner-managed OAuth metadata, bounded settings, and normal generated cache state without exposing credential contents ## Physical OAuth smoke - one exact owner-authorized inference attempt on the trusted physical host; no retry or fallback - exact requested model `openai-codex/gpt-5.3-codex-spark`, owner-managed OAuth, fixed no-tools/session/context argv, two-minute bound, empty stderr - helper returned `replacement_applied_untrusted` for exactly one test file - complete model diff contained the intended one-line normal-cache fixture plus a missing final newline; exact-file gofmt corrected only that formatting defect - physical-host package verification encountered three existing PID timing-fixture failures; no second provider attempt or semantic repair ran - coordinator reproduced the exact final line in the Orb and independently passed the package once, five consecutive package runs, race mode, scripts, formatting, and diff checks ## Validation - `go test ./skills/amux-pi/experimental/pi-spark-local -count=1` - `go test ./skills/amux-pi/experimental/pi-spark-local -count=5` - `go test -race ./skills/amux-pi/experimental/pi-spark-local -count=1` - `go test ./scripts -count=1` - `go vet ./...` - process-local signing-disabled `go test ./...` because the Orb's SSH signing buffer was unavailable - `git diff --check` - published-package Node 22.19.0 guard/CLI smoke without inference Closes #293
v0.3.2
Validate operator-assisted local Claude tmux adoption (#294) ## Summary - document the operator-assisted local Claude tmux adoption route separately from managed delegation and fresh-Orb execution - incorporate field-learned fail-closed composer guidance for exact `claude-opus-5`/`Opus 5` confirmation, ghost autocomplete, collapsed paste segments, Vim key semantics, and unclassified UI - add stable exact-substring coverage for the complete updated guidance ## Field evidence - read-only adoption smoke validated exact semantic window selection, preflight, one bounded prompt, independent result verification, and preservation of the owner-created session - exclusive-writer mutation smoke validated the one-file corrective result and independent aggregate verification - final-window decommission blocked safely; a later non-final exact-window decommission succeeded while preserving the keeper window, authentication, branch, and worktree - Pi 0.82.1 compatibility remains a separate follow-up in #293 ## Tests - `gofmt -w scripts/amux_skill_test.go` - `git diff --check` - `go test ./scripts -run TestClaudeLocalTmuxAdoptionRouteStaysOperatorAssistedAndFailClosed -count=1` - `go test ./scripts -count=1` - `go test ./...` (Claude delegation and scripts pass; overall command is not green because unrelated tmux terminal-launch fixture and Pi process/timing fixture tests fail in this environment) Closes #291
v0.3.1
v0.3.1: lifecycle safety and provider quarantine