Skip to content

v0.1.5

Choose a tag to compare

@github-actions github-actions released this 30 Aug 19:28
· 146 commits to master since this release

Added

  • swe-mux now ships an agent skill, embedded in every install. swemux --skill prints
    the copy matching the running release, and swemux install-skill writes it into the skill
    directories agent CLIs actually read - two writes inside a checkout cover every registered
    harness, with no third-party tool and no registry. The skill teaches an agent the
    in-session environment check and where the current contract lives (the mux MCP tools, or
    swemux --help); it deliberately enumerates no commands, so it cannot go stale between
    releases. Installing into the per-user skill roots, which reach every agent you run
    anywhere, prints the exact paths first and proceeds only under --yes; --remove takes
    back only files the installer can recognize as its own.
  • A PyPI install can now gain the tray, the native window, and shortcuts without
    reinstalling.
    Settings → General → Desktop integration installs or removes the Start
    Menu and Desktop shortcuts, and acquires the desktop shell's dependencies on one press -
    about 2.4 MB, verified against pinned hashes on the same path that fetches the speech
    libraries, never anything without an explicit press. One of those dependencies publishes
    no wheel at all, so the acquirer gained a pinned-sdist case with a strict rule: the
    archive is extracted, never built - nothing from it is ever executed, and an sdist that
    would need a build step is refused. The tray starts inside the desktop app, so after
    acquiring you launch (or restart) swe-mux once; every surface says so. On platforms
    with no desktop app the whole group is simply absent.
  • First run now asks how much swe-mux should do. Three experience tiers, phrased as
    three genuine products: pure terminal (real terminals, nothing watching - no hooks, no
    status detection, no fleet plumbing), deterministic (transcripts, live status, managed
    harnesses, the agent fleet surface; model-free), and automations (adds the scan timeline
    and the model-backed observers, under your budgets). A tier is a batch of defaults,
    never a lock: everything it turns off stays one switch away, the choice is re-applyable
    and reversible from Settings → General, and existing installs are never stamped with a
    choice they did not make.
  • The empty workspace now offers three first steps instead of nothing. A quest log on
    the empty stage points at the three setups that cannot finish in one screen: voice
    (opens the guided setup), isolated worktrees, and connecting a phone. It is capped at
    three by design - it will never become a todo list - the voice entry completes itself
    when voice is set up, and dismissing an entry is permanent, on every device.
  • Voice setup is now a guided walk. Settings → Voice gains "Guided setup" (also in the
    command palette and by voice: "set up voice"): pick the engine, watch the one-press
    download's three progress lines, test the microphone where a permission prompt is
    visible and explained, and hear one spoken sentence at the end. Every step drives the
    same controls Settings already has, so nothing new can drift.
  • The side panel's default density follows the chosen tier. A pure-terminal install
    opens with five panel tabs (Actions, Files, Notes, Git, Alerts) instead of ten; the
    agent-layer tabs stay one right-click away, exactly as before. Only a device that has
    never touched the panel visibility menu follows the tier default - any choice you have
    made, including showing everything, is never overwritten.
  • Agents can be handed the skill automatically, per harness. A new "Fleet access"
    control in Settings → Harnesses phrases the choice as capability - may agents in this
    harness's sessions see the fleet, and how do they learn they can - with MCP tools, the
    skill file, both, or neither. The two routes are deliberately not symmetric and the
    control says so: for Claude the skill travels as a session-scoped plugin from the mux
    data directory and nothing is written into your Projects, while for codex, pi, omp, and
    opencode it is written into the Project's .agents/skills/ at session start, because
    those CLIs read skills from nowhere else. Automatic delivery is off by default -
    swe-mux does not write into your checkout unasked - and turning it off later stops the
    writes without deleting anything.

Changed

  • A session row now reports the whole time that session has worked, not just the length of
    its current turn - the sum of every completed turn the record was willing to report, so a
    measurement it refused as "the last turn" is not quietly admitted into the total either.
    Context is also coloured on a finer ramp: the old one's first step arrived at 70%, by which
    point the decision it exists to inform - carry on in this thread or start a fresh one - has
    already been made for you.
  • The account switcher's quota figures line up. Each provider's rows now sit under one set
    of headed columns rather than being printed as a sentence per account, so several accounts can
    actually be compared against each other. The Git drawer's refresh also shows that it is
    reading rather than appearing to have finished.

Fixed

  • A transcript's Copy and Select controls no longer sit on top of the timestamp they were
    meant to clear.
    They were drawn at rest on every reply, sized against a gutter that predated
    the read-aloud markers. They now appear when asked for: on hover or keyboard focus with a
    pointer, and one at a time by tapping with a finger, which has no hover.

  • The daemon starts tens of seconds faster when its database has grown large.
    Every start used to re-verify the whole of mux.db before serving anything - a full-file
    read whose cost is the size of the file, measured at 60-84 seconds of every cold start
    against a 3.36 GB database, more than the entire rest of the startup sequence. The full
    verification now runs only when it can tell you something new: after the previous daemon
    died uncleanly (a crash or an external kill - the one signal that says the file's history
    is suspect), or when the last passing check is more than 24 hours old. Every other start
    runs a milliseconds header-and-schema probe instead, which still catches the
    gross-corruption class that used to stop the daemon coming up at all, and still quarantines
    a bad file before anything opens it. The trade, stated plainly: a corrupted page deep
    inside a cleanly-managed file can now go unnoticed for up to a day rather than until the
    next restart. Each start logs which check it ran and why, and deleting
    mux.db.last-verified.json beside the database forces a full check on the next start.

Full changelog: https://github.com/jatoran/swe-mux/blob/v0.1.5/CHANGELOG.md