Skip to content
Buy · $14.99 Opens the GitHub repository in a new tab. The signed build is a separate download; see the README for what is in each.

Changelog

Every release of Bastion, newest first. These are the notes the app shows before it updates itself; the builds are on GitHub.

  1. 1.28.0 ·

    Claude Code can be held to Bastion's servers.

    A switch on each Claude Code profile blocks the MCP servers that plugins and claude.ai connectors add, and keeps Bastion and the ones you set up. Remote servers and client wiring are sturdier too.

    Read the 1.28.0 notes →
  2. 1.27.0 ·

    Other apps can hand their MCP server to Bastion.

    An app on this Mac can now offer Bastion the MCP server it runs, and Bastion adds it only once you confirm, with its token kept in the Keychain.

    Read the 1.27.0 notes →
  3. 1.26.0 ·

    Yahoo Finance watchlists, behind the writes switch.

    Yahoo Finance can now change a signed-in account's watchlists, and Bastion keeps those tools hidden until a profile turns writes on. The menu bar panel now gets out of the way of the window it opens.

    Read the 1.26.0 notes →
  4. 1.25.0 ·

    One set of Agent Skills, linked into every client.

    Bastion links the skills in folders you choose into Claude Code, Codex, Cursor and the other clients that read them, and leaves alone what it did not create. Client wiring and supervision are safer too.

    Read the 1.25.0 notes →
  5. 1.24.0 ·

    Xcode's own MCP server, shared by every client.

    Xcode 26.3 and later ship an MCP server that builds, runs and tests a project. Bastion now runs it behind one approval in Xcode, and with writes off it cannot edit the project or run arbitrary code.

    Read the 1.24.0 notes →
  6. 1.23.0 ·

    • Workspaces scope profiles to folders.
    • Usage stats count what you asked for, not what the client's SDK sent on its own.
    Read the 1.23.0 notes →
  7. 1.22.0 ·

    • Claude Code's other config directories are offered as clients of their own.
    • A config directory Bastion has not written is left alone until you ask.
    • A window resize could take the app down.
    Read the 1.22.0 notes →
  8. 1.21.0 ·

    • Entries Bastion left behind can be cleaned up without unwiring the client.
    Read the 1.21.0 notes →
  9. 1.20.0 ·

    • A server running on this Mac can be added as a remote server.
    Read the 1.20.0 notes →
  10. 1.19.0 ·

    • Launch at login
    • An npm install could hang with nothing left to wait for.
    • A custom server at an http:// URL was refused as a bad npm package name.
    • A stdio client could wait forever for Bastion to start.
    All 5 changes in 1.19.0 →
  11. 1.18.0 ·

    • A Stats pane, and the number nobody could see.
    • A usage rollup, on disk and on by default.
    • server_stats
    • Adding or removing a profile updates every client already wired to Bastion.
    All 14 changes in 1.18.0 →
  12. 1.17.1 ·

    • The menu bar panel came up empty in 1.17.0.
    • The menu bar header pins the version to its trailing edge.
    Read the 1.17.1 notes →
  13. 1.17.0 ·

    • Help ▸ Report an Issue, Send Feedback and Bastion Support.
    • The app icon's fort sits behind the ridge instead of on top of it.
    • A gateway that had died went on showing green.
    • The menu bar panel had a phantom gap above the gateway line when licensed.
    All 5 changes in 1.17.0 →
  14. 1.16.0 ·

    • A reply can be stopped, and the chat says which tool it is waiting on.
    • One press asks about every installed server, and the sidebar says which ones answered.
    • Leaving the chat pane threw the conversation away.
    • The transcript scrolled to the wrong place, or not at all.
    All 8 changes in 1.16.0 →
  15. 1.15.0 ·

    • X signs you in itself now, rather than asking for a client ID nothing read.
    • The EULA names Magenta Creations.
    • The What's New pane broke sentences that run on past the bold part.
    Read the 1.15.0 notes →
  16. 1.14.0 ·

    • A profile's tools, prompts and resources, in one place.
    • What changed, readable after you have already updated.
    • A server that shells out to npm could not find it.
    • The npm catalog entry documents the variables it always read.
    Read the 1.14.0 notes →
  17. 1.13.0 ·

    • A shield in front of the provenance badge, and a seventeenth package behind it.
    • One crafted request could take the whole app down, before it was ever asked who was sending it.
    • A progress frame could be written into a different client's response.
    • A double-spawn race could leave an orphaned server holding a profile's credentials.
    All 10 changes in 1.13.0 →
  18. 1.12.0 ·

    • The iOS Simulator joins the catalog.
    • Catalog entries say which packages npm can tie back to the repository they link to.
    • A listing too small to be worth searching is no longer fronted, whatever the switch says.
    Read the 1.12.0 notes →
  19. 1.11.0 ·

    • The writes get their own dispatcher, so an editor's approval rule stops collapsing.
    • Every client now says what it is actually being sent.
    • "Load tools on demand" moved from the profile to the server.
    • The cost figure stopped rounding in its own favour.
    Read the 1.11.0 notes →
  20. 1.10.0 ·

    • A client that already defers tool schemas is never fronted.
    Read the 1.10.0 notes →
  21. 1.9.0 ·

    • Progress on a long call, streamed to the client that asked for it.
    • A search field on the catalog tab.
    Read the 1.9.0 notes →
  22. 1.8.0 ·

    • Load tools on demand, app-wide and per server.
    • bastion_search_tools no longer answers "no tool matches" when one does.
    Read the 1.8.0 notes →
  23. 1.7.0 ·

    • Load a profile's tools on demand.
    Read the 1.7.0 notes →
  24. 1.6.0 ·

    • Eleven more servers in the catalog.
    • An update path on Bastion's own server.
    • The sidebar lists the clients you actually have.
    • scripts/builtin-check.sh honours BASTION_PORT.
    Read the 1.6.0 notes →
  25. 1.5.0 ·

    • LM Studio and Windsurf.
    • Two more servers in the catalog: iOS Device and CloudKit.
    • A + at the end of the Servers header.
    • Client and server rows draw real icons.
    All 6 changes in 1.5.0 →
  26. 1.4.1 ·

    • The sidebar is sorted alphabetically, with Bastion pinned to the top.
    Read the 1.4.1 notes →
  27. 1.4.0 ·

    • Ten more remote servers in the catalog.
    • The gateway bounds what a connection costs before it presents a token.
    • The licence Worker's two public routes are rate-limited, and /thanks stops showing the key after a week.
    • A spawned server's credentials are struck from its stderr.
    All 12 changes in 1.4.0 →
  28. 1.3.2 ·

    • What a server costs the editors that connect to it.
    • x-api and ovh-api are now x and ovh.
    Read the 1.3.2 notes →
  29. 1.3.1 ·

    • A switched-off server is no longer written into client configs.
    Read the 1.3.1 notes →
  30. 1.3.0 ·

    • npm joins the catalog.
    • A variable that is a switch is offered as one.
    • Updates is its own pane in Settings, instead of the fourth card down General.
    • The write gate is no longer a text field in the profile editor.
    All 9 changes in 1.3.0 →
  31. 1.2.1 ·

    • A modern client could handshake cleanly and then register no tools at all.
    • The same symptom from the other end: a child's listChanged: true was passed straight through.
    • Typing a profile name allocated a callback port for every prefix of it.
    Read the 1.2.1 notes →
  32. 1.2.0 ·

    • The audit log can be kept on disk.
    • The log can be exported, and signed if you want it.
    • The Activity log has a search.
    • Logs and Settings are one click from the menu bar.
    All 5 changes in 1.2.0 →
  33. 1.1.0 ·

    • The menu bar icon says whether anything is running.
    • The menu bar popover is a panel, not a list of menu items.
    • Add Server and Check for Updates left the popover.
    • The licence terms said the audit log records neither arguments nor results.
    All 5 changes in 1.1.0 →
  34. 1.0.0 ·

    • One supervised server process per profile, instead of one per editor.
    • Credentials live in the Keychain, and nothing reads them back.
    • The gateway binds loopback and refuses anything that is not local.
    • Both protocol eras, translated.
    All 12 changes in 1.0.0 →