Skip to content

Releases: antasphere/clave

v1.88.0

Choose a tag to compare

@github-actions github-actions released this 11 Sep 17:46

What's Changed

  • An emptied group keeps its place, on a "No sessions" row by @romain-pattyn in #46
  • [minor] Back, forward and home on every page Clave shows; file pages follow their file by @romain-pattyn in #47
  • [minor] The repository lives at antasphere/clave: release, updater and links follow the move by @romain-pattyn in #48

Full Changelog: v1.87.0...v1.88.0

v1.87.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 18:00

Full Changelog: v1.86.0...v1.87.0

v1.86.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 12:32

Fixed

  • Update notes render as formatting, not as tags — the update card's changelog arrived as <h3>Added</h3> <ul> <li><strong>… in plain visible text. The card ran the body through a Markdown renderer, but the source it reads is GitHub's releases feed, whose <content> carries each body already rendered to HTML — so the renderer escaped what it could not parse and printed the markup at the reader. The body's shape is now decided where it arrives: an HTML one is sanitised in the main process against a fixed tag allowlist (scripts, images and wrappers dropped, links forced to open in the browser) and labelled, a Markdown one is left alone, and the card renders each accordingly. The allowlist is applied a second time at the line that injects the markup, so the guard sits on the operation rather than one process away.

Changed

  • What's in an update is a mark on the icon, not a fold in the card — the changelog lived behind a What's changed disclosure inside the update card, which put reference material in the same box as the decision it interrupts: opening it grew the card and pushed Later and Update down the sidebar. The update card is one row now, always, with an ⓘ badge on its icon; hovering opens the notes in a panel beside the card and clicking pins it there, so a link can be followed or three releases scrolled without the panel closing under the pointer. Escape or a click away dismisses it. A release published with no body still shows no badge at all, rather than a control opening onto blank space.

v1.85.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 11:00

Added

  • Edit beside your agent conversation — ask Claude Code or Codex to open a linked Markdown file, HTML file or email. The conversation and editor stay together when you switch sessions, with autosaved edits and protection against conflicting changes.
  • Compose emails in Clave — edit recipients and the rendered body, preview signatures and keep copied attachments with the draft. Set a default signature file for new emails while existing drafts retain their reviewed copy. Ask your agent to send the exact reviewed version through the configured Gmail connection.

v1.84.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 15:07

Added

  • The changelog is readable before you take the update — the update card in the sidebar named a version and asked for a 220 MB download and a restart, without saying what was in it. It could not: help/whats-new.json is stamped at build time and bundled, so the note describing v1.80 exists only inside the v1.80 binary, and the copy running on the machine has never held a note for the version it is offering. The one source a running app does have is the GitHub release bodies, which electron-updater already fetches on the availability check and threw away. fullChangelog is on, so a user several versions behind gets every release between theirs and the latest, newest first, rendered as markdown under a What's changed disclosure on the card. A release published with an empty body normalises to null rather than to an empty array, and the disclosure is then absent rather than opening onto blank space.

Changed

  • Both sidebar announcements are a headline until asked — the what's-new card printed its whole entry, which runs to several paragraphs, at a user who had not asked for it; it is a single title now with the note behind the same disclosure the update card grew. The height cap and the scroll that PRDCT's sidebar-overflow fix introduced move with the note into its expanded state, which is the point at which they matter: these cards live in the sidebar's flex-shrink-0 announcements block, so an unbounded one pushes the session list and the foot panel off the bottom of the window with nothing to scroll.

Fixed

  • A rendered HTML page keeps its place when you switch tabs — click away from a rendered .html tab and back and the page reloaded from scratch: the scroll was at the top again and anything the page held — an open in-page tab, a filter, a chart's zoom — was back to its initial value. Only the selected file tabs were rendered, so deselecting one unmounted its frame and the whole document with it; a group's or a session's web view had the same gap. The frame is an opaque origin, so its state cannot be read out and restored; what works is never destroying it. Every open file tab now stays mounted and the unselected ones are hidden, exactly as the terminals have always been, and a web view once opened stays mounted behind whatever takes the pane — with its server probe paused while nobody is looking. A hidden pane is aria-hidden and takes no clicks.
  • Deleting a group stops its quick-launch terminals, and an ownerless one never comes back as a tab — deleting a group killed its member tabs and forgot its terminals: the npm run dev behind the row kept running in tmux with its record on disk, and the next launch, finding no group to hang it off, adopted it as an ordinary tab. Seven mystery rows from two groups deleted the day before. Delete and Ungroup now both stop the group's terminals (members too on Delete), asking first when one is running and saying what it stops; the keybinding ungroup takes the same path and its dialog renders from the app shell, so it shows with the sidebar closed or Settings open instead of ghosting back later. At boot a hidden record whose owner is gone is discarded rather than surfaced, and every tmux kill by name uses the exact-match form, so an absent name can no longer kill its -2 sibling.

v1.83.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 09:30

Added

  • Codex usage panel — see the account's reported usage windows, remaining capacity, and reset times in Settings → Usage.
  • Codex activity glow — the OpenAI icon pulses blue while Codex works, including in background tabs and tmux sessions. It clears when Codex is ready, needs input, or exits. Relaunch existing Codex sessions to enable this indicator.

Changed

  • Usage follows the active agent — the sidebar footer shows Claude Code or Codex remaining capacity for the selected session, or today's recorded tokens and cost for Pi. Clicking it opens that provider's usage panel.

v1.82.1

Choose a tag to compare

@github-actions github-actions released this 05 Sep 15:55

Full Changelog: v1.82.0...v1.82.1

v1.81.2

Choose a tag to compare

@github-actions github-actions released this 05 Sep 09:27

Fixed

  • A group added to a .clave file no longer multiplies by one on every restart — append a group to a workspace file while Clave is running and the sidebar showed it once, then twice after the next launch, then three times, then four. The file was right the whole time: the pin the file watcher created for the new group carried no workspace stamp, so it landed in the state file's unstamped partition; the boot refresh then re-stamped it and wrote the workspace's partition, but never rewrote the one it had left — boot hydration had not recorded what the file held, so that partition never counted as changed. The stale copy survived, hydrated beside the re-stamped one at the next launch, was re-stamped in its turn, and the workspace partition gained one more copy of the same pin per boot. Three guards now, each sufficient on its own: the watcher stamps a new pin with the file's workspace, boot seeds the persisted-partition map so a partition a pin leaves is written back empty, and main's partition merge lets a pin id live in exactly one partition of the file. A state file already carrying duplicates is cleaned on the first launch of this build.

v1.81.1

Choose a tag to compare

@github-actions github-actions released this 03 Sep 12:26

Fixed

  • Your own shell starts your agents again — every agent on macOS was launched through /bin/zsh regardless of the user's login shell, which looked like a no-op and was not. path_helper (run by /etc/zprofile and /etc/profile alike) reorders PATH on every login, system directories first; a bash user's .bash_profile puts their own entries back in front, and their absent .zprofile does not. So anyone shadowing a system binary from bash — a newer git, a pyenv shim — got the system one inside every agent session, while the same command in their own terminal resolved correctly. Reproduced with a user tar shadowing the system one: bash -l -c found the user's, zsh -l -c found /usr/bin/tar, and the probed env passed to the pty does not save it because zsh reorders that PATH again. resolvePosixShellLaunch now keeps the user's shell for the wrapper whenever its basename is a POSIX one (sh, bash, zsh, dash, ksh, mksh, ash) and diverts only the shells that cannot parse it — /bin/zsh on macOS, /bin/sh elsewhere — with -l kept on the fallback so Linux does not lose its login shell either.

v1.81.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 17:31

Changed

  • Pull all pulls what you can see, and Refresh is what goes looking — clicking ↓ on a folder of repositories used to fetch every one of them, one after another, before pulling anything. On ninety repos that is a minute of network spent almost entirely on repositories with nothing to bring, and the button said “Fetching” the whole time: one static word, no repository name, no count, second 1 and second 90 identical — indistinguishable from a click that did nothing. The two halves are separate controls now. ↓ pulls the repositories carrying a ↓ badge, in parallel, and nothing else — it never goes to a remote to look for work, so it finishes in about a second and does exactly what the panel showed you; with nothing badged it disables itself and says so instead of sweeping ninety remotes to find out. Refresh, at the foot of the panel, is the sweep: it fetches every repository in the folder in parallel, and its badges are what make the next ↓ complete. Both draw on a new progress row under the bar's controls — a track that fills as repositories finish, 12/38 at its end, and the batch's summary held there for a few seconds afterwards — so a sweep over a large tree shows its own movement instead of a spinner. Magic sync reports on the same row. Underneath, every git call that talks to a remote now carries a 20-second idle timeout (reset by any output, so a large fetch that is progressing is never cut off) and refuses to prompt for credentials, so one unreachable remote costs one repository instead of stalling the whole batch — and a fetch that fails is reported as failed rather than counting as “up to date”, which is the one answer that is certainly wrong.

Fixed

  • An app restart no longer silently cuts running agent tabs off from Clave's tools — an agent tab reads its MCP endpoint once at spawn and can never be re-pointed, so when a restart failed to rebind the persisted port (typically the previous instance still draining its long-lived agent connections during an update's relaunch) and silently fell back to a random one, every surviving tmux-backed tab lost clave_* for good — while the rewritten config files on disk read as perfectly healthy. Quit now drops those connections so the port is actually released; startup fights for the persisted port (probing the new unauthenticated GET /health to tell a live sibling instance — a dev run beside the installed app, which keeps its own port and is left alone — from a draining zombie, which gets up to 5 s of retries); and when the endpoint genuinely must move, the app says so: a native notification names how many running tabs are cut off and that restarting them reconnects. scripts/mcp-health.mjs is the companion diagnostic — run from any tab, it distinguishes "server down" from "this tab holds a dead endpoint", reading the tab's own MCP client log rather than the healed config file.