Skip to content

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 02 Sep 00:06
· 46 commits to master since this release

Added

  • swemux.dev now carries an interactive demo of the real app.
    The landing page runs the unmodified frontend against an in-page fake daemon, on a desktop frame and a phone frame that mirror one fleet, with a guided walkthrough and seven further scenarios - the prompt queue, orchestration, previews, landing a branch, the command palette, keymap presets, and the assistant - that label the parts of the screen they are talking about.
    Nothing in it listens, speaks, or reaches a real daemon.

  • Automations now have an install-wide default that new and existing Projects inherit.
    The Automation → Policy matrix's Global cell gained a default checkbox beside the existing "off everywhere" lock, with a line under it saying how many Projects that default actually reaches ("12 inherit · 3 custom") before you click it.
    A Project that never wrote an automation down follows the default and keeps following it as you change your mind; a Project that wrote one still wins.
    The per-Project control gained a third position, Follow global, so a Project can go back to inheriting instead of being pinned to whatever it was set to once.
    scan_timeline_auto_enable - whether a new conversation arms the timeline by itself - inherits the same way.

  • The plugin marketplace now has one validated public catalog and a real website.
    /plugins/ and the in-app browser share exact-commit manifests discovered from the swe-mux-plugin GitHub topic, with explicit official/community labeling, release tags, permissions, platforms, runtimes, licenses, and install commands.
    The catalog executes no plugin source, excludes invalid repositories, refreshes through the site deploy workflow, and falls back to the unreviewed live GitHub topic inside the app if swemux.dev is unavailable.

  • Managed plugins retain their release channel.
    Install and update now store the requested channel or ref, the selected tag or branch, and the resolved commit separately.
    --ref latest follows the newest GitHub release on each explicit update, while a literal tag remains pinned.

Changed

  • Add project inherits your automation defaults instead of asking you to choose again.
    The three starting-set checkboxes are now one summary line - what the new Project will run, and that it came from the install - which expands to a per-automation panel for changing individual rows for that Project only.
    Only a row that actually disagrees with what is inherited is written into the Project, so a form you never expand writes nothing and the Project keeps following your defaults.
    Where the install has no opinion at all the free analysis set is still pre-ticked, so a fresh install's first Project is not empty; once you have set a default either way, the form stops second-guessing it.
    The model-backed and agent-autonomy sets stay explicit checkboxes: one can bill and the other hands agents real authority.
  • "Adaptive session title" is now "Re-title on scope change".
    It re-titles a session when its scope changes, and it is not what names a session in the first place - that is the Session titler, an install-wide switch on the Automation dashboard that runs whatever a Project opted into.
    Both were described as "session titles", which made declining the model-backed automations look like declining session titles.
  • The Files tab now opens files into itself, as tabs, instead of into a workspace pane.
    A second rail below File Explorer | Recent holds what you have open; a plain click on a tree row, a search hit, or a Recent row lands there, and the side panel stays open over the session you were reading.
    A file moves into a pane on request - beside the rail, Open in a pane on its tab or on its row in the tree, ctrl/cmd-click on a row, or the row drag that already worked - and it lives in exactly one of the two places at a time.
    This also fixes a real cross-device fault: opening a file used to insert a tab into the Project layout, which is shared, so browsing files on a phone permanently rearranged the desktop's panes.
    Open files are remembered per Project on the device, capped at eight, evicted by least-recent use, never evicted while they hold unsaved edits, and marked and guarded when they do.
  • Plugins is now a first-class app-menu destination.
    The row opens plugin management directly, while Project-scoped plugin tools remain in each Project's Run menu.
  • Plugin marketplace selection now fills an immutable release tag, and manual installation exposes an optional ref field.
    Expanded plugin details show the selected channel and resolved revision, while acquisition, approval, and enablement remain separate.
  • The account switcher's quota rows are narrower.
    Each account's 5h, weekly, and Fable figures sit closer together, divided by a hairline instead of a bullet in a wide gap, with a small breath between a percentage and its reset time, which there was none of before.
    Percentages still line up across stacked accounts.
  • The default desktop command rail leads with what a terminal has no key for.
    Approve-once sat fourth, spending a visible slot on a control that is inert except while a turn is asking; the front of the row is now attach, both clipboard directions, the code fence, the resume command, Branch, clipboard history, and the skills picker.
    Copy-input renders its label rather than an icon that shared a silhouette with Copy reply.
    Your own rail configuration is untouched.

Fixed

  • swemux plugin validate is now genuinely local and works in CI without a running daemon.
    It calls the same canonical parser used by the daemon and still executes no plugin code.
  • A linked plugin whose manifest identity changed can still be uninstalled.
    Uninstall no longer reloads a broken or renamed manifest merely to disable and unregister its existing record.
  • The desktop app is no longer reported as one of its own sessions' orphaned processes.
    Rebuilding and relaunching the app from inside a swe-mux session left the desktop window attributed to that session; when the session ended, the live UI appeared in the process fleet as a suspected orphan with Terminate offered on it.
    swe-mux now recognizes its own shell, daemon and PTY supervisor by identity rather than by descent, and the terminate actions refuse a process that is swe-mux itself regardless of what the fleet believes owns it.
  • The "swe-mux runtime" row now reports swe-mux's whole footprint.
    It counted only the daemon and its descendants, so the desktop window, its embedded browser, and the supervisor were reported as nothing at all.
  • Switching Claude accounts no longer tells you that your running sessions kept the old login.
    The account switcher put the same sentence under every non-selected account's session count: "Switching is not retroactive - a session keeps the login it started with until it is restarted."
    That is true of Codex, whose CLI reads its login once at startup, and false of Claude Code, which re-reads its credential file when the file changes and sends its next request as the new account.
    The daemon now declares per provider whether a switch reaches sessions already running, and the notice says which: a muted "started under X, spending the selected account now" for Claude Code, whose only stale surface is its own /status line, and the amber "keeps spending X until restarted" for Codex.
    The Settings disclosure says the same, and the selected audit entry records which of the two the live sessions got.

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