Skip to content

0.1.15

Choose a tag to compare

@github-actions github-actions released this 31 Aug 08:04
· 9 commits to main since this release

Download

Find your operating system — that row has the only file you need.

Your machine Download
Windows 10 / 11 · 64-bit Vibisual-0.1.15-setup.exe · 181 MB
Linux Debian, Ubuntu, Mint — vibisual_0.1.15_amd64.deb · 134 MB
Fedora, RHEL, openSUSE — vibisual-0.1.15.x86_64.rpm · 139 MB
Arch, NixOS, anything else — Vibisual-0.1.15.AppImage · 162 MB
The other 3 files under Assets — you do not need them

They are what the app's built-in updater reads: latest*.yml is the version feed, *.blockmap lets an update download only the changed parts, and *-mac.zip is the format macOS updates in place with. Downloading them by hand does nothing.

Or install with one line

# macOS and Linux
curl -fsSL https://raw.githubusercontent.com/Vibisual/vibisual/main/scripts/install.sh | sh
# Windows
irm https://raw.githubusercontent.com/Vibisual/vibisual/main/scripts/install.ps1 | iex

The script reads this release, picks the build for your machine, and prefers your package manager over the AppImage when you have one.

First launch

  • Windows — the build is not code-signed yet, so SmartScreen warns on first run: More info → Run anyway.

  • Linux (.deb / .rpm) — your package manager pulls in the libraries for you:

    sudo apt install ./vibisual_0.1.15_amd64.deb
    sudo dnf install ./vibisual-0.1.15.x86_64.rpm
  • Linux (AppImage) — for distributions that take neither format. It needs FUSE 2, which recent releases no longer ship:

    sudo apt install libfuse2t64   # "libfuse2" on Ubuntu 22.04 and older
    chmod +x Vibisual-0.1.15.AppImage
    ./Vibisual-0.1.15.AppImage

Vibisual runs on top of the Claude CLI, which must already be on your PATH.

Day-to-day development and testing happen on Windows, so macOS and Linux get far less hands-on use. If a build is broken there, open an issue — we will fix it quickly.


What changed in 0.1.15

Added

  • Install with one line. Picking the right file out of fourteen release assets was the first thing a new person had to get right, and the macOS instructions had a step you could only find by scrolling. curl … | sh on macOS and Linux, irm … | iex on Windows: the script reads the release list, picks the build for your machine, prefers your package manager over an AppImage when you have one, and prints the quarantine command macOS still needs. Both scripts are in scripts/ so you can read them before you run them.
  • The release page now says which file is yours. It had no description at all — electron-builder uploads the builds and writes nothing, so everything a first-time visitor saw was fourteen filenames in alphabetical order. Nothing on that page told you that -arm64.dmg is the Apple Silicon build, that the .dmg with no suffix is the Intel one, or that the .zip, .blockmap and latest*.yml files are for the app's own updater and are not meant to be downloaded. Every release from now on opens with a six-row table — one row per machine, with the file size — followed by the first-launch step for that platform and what changed in the version. The table is built from the assets that were actually published, so a release that lost one platform's build shows five rows instead of pointing you at a file that does not exist. Past releases can be given the same treatment without re-tagging, from Actions → Release notes.
  • A written answer to "what does this send?"PRIVACY.md names every outside address the app can reach — separating the ones that happen while it simply runs from the ones that stay unused until you switch a feature on — and says where everything else is stored on your disk. SECURITY.md states the security model that was previously only implied — loopback binding, the per-installation hook token, that remote access takes two deliberate steps, that crash dumps are never uploaded — and gives a private channel for reporting a vulnerability.
  • macOS installs its own updates again. The previous release could only announce a new version on macOS and send you to the download page, because the updater's macOS backend refuses to apply anything unsigned — it would download the whole build and then fail at the last step. The app now performs the replacement itself: it fetches the build for your machine, checks it against the SHA-256 the release publishes, opens the downloaded binary and confirms its actual architecture before touching anything, and swaps the app in place. That last check matters more than it sounds — the two macOS builds publish a feed under the same name and overwrite each other, so trusting the feed is how an Intel build ends up on an Apple Silicon Mac, where it dies on launch. Nothing downloaded this way is quarantined, so there is no Gatekeeper prompt on the next start.
  • Linux installs through your package manager. The only Linux build was an AppImage, and AppImage opens libfuse.so.2 — which Ubuntu 24.04 and its relatives no longer ship, so the app exited on launch with a FUSE error and left you to work out the package name yourself. Every release now also carries a .deb and an .rpm, where the package manager resolves the dependencies and there is nothing to install by hand. The AppImage stays for distributions that use neither.
  • Chinese, Japanese and Indic text is drawn with fonts that ship with the app. Only Latin and Korean faces were bundled, so those scripts fell back to whatever the machine happened to have — which on a clean Windows or Linux install is often nothing, and the interface showed rows of empty boxes. Noto Sans SC, JP and Devanagari are now included (SIL OFL 1.1, licence files committed beside them), and a test checks each locale's characters against what is actually bundled rather than trusting the list.
  • Sticky notes you can leave on a conversation. A thought about what an agent just did had nowhere to go except the input box, where it becomes a prompt. Notes attach to the point in the stream you put them at, stay there across restarts, and belong to that session.
  • HTML files open as pages in the editor. Opening one showed you its source, so checking what an agent had just built meant leaving for a browser. It now renders in place, with back and forward, and relative links to the stylesheets and images beside it resolve the way a browser resolves them.
  • Alt+click reaches into a preview page. The element inspector stopped at the frame edge, so anything an agent rendered was a picture you could not point at. Clicking inside now selects the element and takes you to the line and column in the source that produced it.
  • The file explorer has a right-click menu — new file, new folder, rename, delete — and right-clicking Files in the activity bar opens the folder in your system file manager.
  • A right-click menu in every text field. Cut, copy, paste, select all and the web-search entry existed in some places and not others, which is worse than not having them at all: you learn the gesture and then it silently does nothing. One menu now serves every field in the app.
  • Choosing a project folder is part of first run. Onboarding went install, sign in, and then straight to a canvas — the app had already created state somewhere before you said where your work lives. There is now a third step, nothing is written until you answer it, and the three onboarding windows let you pick the interface language, which previously could only be changed once you were already through them.
  • A verification run can keep what it saw on screen. Verification could report a verdict but not show you the moment it was judging, so a disputed "passed" had nothing behind it. Selected frames are now kept with the run.

Changed

  • Contributions can no longer opt out of the terms that let the project license itself. CONTRIBUTING.md asked for a relicensing grant and then, at the end, offered to accept contributions without it. One such merge would have permanently pinned the affected module to a single licence — the exact outcome the sign-off check exists to prevent. The grant is now stated as a condition of merging, with an invitation to raise employer IP concerns first.
  • Building from source works from a fresh clone. The instructions ran a development script that is not part of the public repository, so the documented path failed immediately for anyone who cloned it. They now use the published workspace scripts.
  • Every package declares its licence. Five of the seven package.json files had no license field, which is what corporate dependency scanners read; they now all say Apache-2.0, matching the repository.
  • The Status section stopped turning people away at the door. It used to end with "not recommended for critical production workflows or repositories containing highly sensitive data" — which reads as do not use this at work, and left the reader with no way to decide for themselves. It now says the same honest thing from the other side: this is a 0.1.x preview, pin a version if you need one that holds still, and it runs entirely on your own machine with nothing sent anywhere. The security guidance it duplicated already lives one section down, where reviewing the generated hook configuration is framed as the review any tool with shell access deserves.
  • Pull requests are checked for a sign-off. CONTRIBUTING.md already asked contributors to agree that their work can be relicensed for a future commercial offering, but nothing verified that the agreement was actually recorded. Every commit in a pull request is now checked for a Signed-off-by: line matching its author, with the exact command to fix it if missing.
  • A daily snapshot of the project's public numbers. GitHub reports stars and downloads as a running total and keeps no history, so a growth curve can only exist if someone starts writing it down. A scheduled workflow appends one row a day to a CSV on a separate metrics branch. Every figure in it is already public, none of it comes from the app, and the app still collects nothing.
  • The agent settings window tells you which fields you have changed. It has grown to around twenty controls, and nothing distinguished a value you chose from a default you never touched — so "why is this agent behaving differently" meant reading every row. Changed fields are now marked, hovering one shows the default, and the header counts them. Colour is excluded, arrays compare as sets, and one shared rule decides all of it so the window and the server never disagree about what "changed" means.
  • Every bubble on the canvas responds to the same click. Agent bubbles had one set of selection and double-click rules and the other kinds had their own approximations — double-click sometimes also fired the selection underneath it, and the selection ring could be drawn twice. There is now one state machine and one selection slot for all of them.
  • Auto-compaction has a default instead of nothing. The setting existed but shipped unset, which in practice meant a session ran to the full context window before anything happened. It is now split into two questions — how full it has to get, and when it is allowed to act — with a bundled default of 400k.
  • Floating IDE windows move out of each other's way instead of stopping dead where they touch, and the layout inside a window now measures the window rather than the screen, so a narrow docked pane folds the way a narrow window should.
  • Pulling a window out of the app no longer blinks. The handover happened at the moment you released the pointer, which meant a rebuild, a blank frame, and the sense that the window had been thrown rather than moved. It now happens as you cross the boundary, is drawn as an outline while you drag, and rebuilds nothing on the far side.
  • Detached windows have their maximize and restore button back, and the windows-and-bubbles list shows what is actually running rather than what happens to have a window open.
  • The editor's width handle follows your pointer instead of lagging behind it, and absolute paths pointing outside the project root are clickable — through the file explorer only, which is the one branch that can safely show them.
  • Apps open inside Vibisual first. An internal app went straight to an external window, so the app you launched from the canvas appeared somewhere the canvas could not see. It now opens here, and goes outside only when you drag it out.

Fixed

  • Two paths that differ only by a symlink or by capitalisation are judged correctly on every platform. The check deciding whether a path lives inside a project root resolved links on one side only, so on macOS — where /var is a link to /private/var — a file plainly inside the project read as outside it. The same check applied Windows' case rules everywhere, which is wrong on Linux. Eight tests on macOS and one on Linux had been failing on this, and only became visible once the suite started running on all three systems.
  • Two agents started in the same instant can no longer be given the same id. Ids came from a per-instance counter, which collides the moment two arrive together — and the second one inherits the first one's stream.
  • Sessions that appeared stuck "waiting for a response". Three separate causes, each identical from the outside: a single stored timestamp could suppress a write that mattered, an execution path with no live child was never sealed and stayed listed as running, and the diagnostic that would have said so was buried in its own noise.
  • "Copy selection" on a question card copies what you ticked. It read only one of the two ways an answer can be chosen, so a card answered with checkboxes copied nothing.
  • The built-in terminal shrinks again. Its rendered surface set a minimum width the pane could never go below, so a terminal grew with the window and then refused to come back.
  • When the app cannot open your browser, it says so. The call reports success on Linux even when nothing opened, so an external link simply did nothing and there was no way to tell whether it had failed or you had missed the new window. The result is now confirmed, and a link that did not open is reported on screen rather than silently swallowed.

Full history: CHANGELOG.md