Skip to content

Releases: seonglae/vect

Vect v0.3.5

Choose a tag to compare

@seonglae seonglae released this 21 Aug 15:00

Vect leaves the window. The same agent, the same memory, the same record, in
whatever terminal you already had open.

Added

  • vect chat opens an agent session where you are, with the streamed answer, the tool calls, the permission prompts and the project's memory that the window has. It runs the code the app runs rather than a second implementation of it, so a fix to one is a fix to both. vect chat -p "..." prints one answer for a pipe, --json gives a script the whole turn, and cat error.log | vect chat -p "what happened here" sends the log with the question
  • vect room "<task>" puts several agents in one directory, reading each other. They can take rounds, and the room says when two of them touched one file before the next round starts; or --free, where nobody waits and a seat that finishes goes again, and a clash is two turns that overlapped. Either way it ends by printing what changed and who changed it. Asked to fix two bugs in one file, one agent fixed both and the other read the file, found the work already done, and stopped rather than redoing it
  • vect doctor answers the question every failure here looks like: whether an agent can start on this machine at all, which ones are installed, and what they would be handed
  • The model, where the agent lets a client choose one. /model in a session lists what that agent offers with a mark on the current one; --model sets it from the command line, and a room can name one per seat since the agents do not share a list
  • The app carries the command and can put it on your PATH. One button in Settings links the copy inside Vect.app into a directory your shell already searches
  • What a terminal session did shows up in the audit view, because it is the same product doing the same work as the window

Fixed

  • Two things written to the record at the same moment could merge into one unreadable line. The event and the newline after it were two separate writes, so another writer could land between them
  • A tool row now says which file, even for an agent whose edit tool is handed no arguments and names the file alongside them instead, or only in the question it asks before making the change

Vect v0.3.4

Choose a tag to compare

@seonglae seonglae released this 17 Aug 12:28

The disk image opens like a disk image again, and the frame stops leaving
gaps where nobody asked for them.

Fixed

  • The macOS download opens as a window with an arrow in it, not as a list of files. Every release built on CI shipped a volume that opened showing .background, .VolumeIcon.icns, Applications and Vect.app side by side with nothing telling you to drag one onto the other: tauri arranges that window by asking Finder to do it, and a build runner has no Finder, so the arrangement was silently never written. The layout now travels with the source and is written onto the volume after the build, and the three support files are marked invisible rather than merely dot-prefixed
  • The content pane no longer stops well short of the status bar. In calm density the frame holds room at the bottom for the bar to float in, and that reserve was written as a hard-coded 30px bar plus 12px of air for a bar that is neither: an editor ended 16.5px above it, twice the gap every other edge keeps

Changed

  • Tabs are smaller and squarer: half the corner radius of the card below them, 128px wide instead of 160px, and the air beneath a tab is now the same as the air between two of them
  • The terminal draws its cells rather than building each one as an element, when there is a GPU to draw with. Measured both ways in both engines: on Windows this is a steadier frame under heavy output, on macOS both renderers were already keeping up and it changes nothing you can see. A machine with no graphics acceleration keeps the old renderer, because there the drawn one is three times slower

macOS only for this build. The Actions budget on the build account is
exhausted, so this DMG was built, signed and notarized on the maintainer's
machine instead of by CI. Windows and Linux stay on 0.3.3 until the pipeline
runs again, and the updater will not offer them anything in the meantime.

Vect v0.3.3

Choose a tag to compare

@github-actions github-actions released this 06 Aug 13:12

Fixed

  • Nothing sits behind a tab now, the active one included. 0.3.2 cleared the fill from unselected tabs and left the selected tab a filled slab; the underline already says where you are, and the same fill was on the right panel's Files/Git/Knowledge tabs too

Vect v0.3.2

Choose a tag to compare

@github-actions github-actions released this 06 Aug 12:16

A patch for what 0.3.0 shipped looking wrong or doing nothing: the white
smear on every rounded corner, the pale slabs behind unselected tabs, and a
conversation minimap whose marks were often not clickable at all.

0.3.1 carried the same fixes and never reached anyone: all three platforms
built, signed and notarized, then failed on the upload step because GitHub's
artifact storage quota was full. Releases no longer route binaries through
artifact storage at all.

Changed

  • The white glaze on rounded corners is gone. A 1px white line inset along the top edge stood in for Apple's specular highlight, but a border-box inset bends around a radius instead of wrapping a bevel, so every rounded card carried a white smear at each corner. Calm density already suppressed it and full brought it straight back, and six components hand-rolled their own copy regardless (the nav rail's active item at 0.4 alpha, the sessions filter pill, the coming-soon badge, both analytics bar charts). The token is removed rather than zeroed. Radius, fill and the hairline border are untouched

Fixed

  • Clicking a mark on the conversation minimap actually jumps. A sectioned conversation collapses every section but the last, so those rows are not in the DOM and that render path has no virtualised list to fall back on either: the jump looked for an element that could not exist and gave up silently. It opens the owning section first now. Hovering also behaves like the Dock, swelling the marks around the pointer and spelling out the hovered prompt with three either side, each one clickable
  • Nothing sits behind an inactive tab. A faint fill meant to show an unselected tab's shape turned the strip into a row of pale slabs
  • cargo test no longer leaves a working remote-access token in your own ~/.vect/devices.json. The pairing test called the real redeem path, which persists, so every test run minted a device named "phone" with a valid 64-character token into the real config and its cleanup only removed it from memory. The device store now honours VECT_HOME, the test points that at a temp dir, and it asserts the token landed there instead. Affects anyone who runs the suite; shipped builds never do

Vect v0.3.0

Choose a tag to compare

@github-actions github-actions released this 06 Aug 00:03

Vect leaves the one window it used to live in. A worktree now opens as a
workspace whose panes you arrange yourself, any agent CLI can drive that
workspace over MCP, and a phone paired to your machine is a second screen onto
the same agents, on iOS and on Android.

If you are coming from 0.2.2, this also carries everything in 0.2.3, whose
build published binaries but never reached the downloads page: the data-loss
fixes in the context editor and memory saves, the session-lifecycle fixes that
stop orphaned agents and terminals, and the input-escaping and path-traversal
fixes. That section is below, unchanged.

Changed

  • Every workspace pane docks anywhere. Drag a pane by its header onto the left, right, top or bottom edge of any other pane and it splits there; drop it in the middle and the two trade places. The arrangement is a split tree rather than a fixed chat-left/panels-right frame, so it can express any layout, dividers move only the two panes they sit between, and closing a pane hands its room back to its neighbours. Escape abandons a drag in flight. A workspace still opens as the conversation alone, and pane headers appear only once there is somewhere to drag to
  • Tabs keep one rounded shape and fade where they run out of room. Each tab is its own rounded top, inset from the window edge, so the leftmost one is no longer a blunt slab flush against the sidebar; the strip scrolls instead of squeezing, and tabs past either end dissolve into the background rather than being sliced mid-shape into what looked like two overlapping tabs
  • The installer is ~384 MB lighter — voice models no longer ship inside it. Supertonic TTS (~398 MB) downloads on first play and Silero VAD (~630 KB) on first /voice use, into the app data dir with progress events, exactly the way SenseVoice STT already did; dev checkouts keep using scripts/fetch-supertonic.sh so tauri dev doesn't wait on a download
  • Installers look intentional — the Windows installer carries the Vect icon (it shipped with the stock NSIS one), installs per-user without an elevation prompt, hides the file-copy log and advances itself to the finish page; the macOS DMG opens onto a designed dark backdrop (wordmark, corner glows, drag-to-Applications arrow) instead of the bare white Finder window
  • Calm surface — Vect now opens as a near-empty frame and earns its density back. Workspaces are opt-in: discovery still walks every agent's session store, but the results are offered behind a .claude sync picker instead of filling the sidebar, so a fresh launch shows "Nothing here yet" and a count of what was found. The nav rail and status bar are summoned by approaching the screen edge rather than sitting there permanently, and borders drop to a single near-invisible hairline (one token, not 180 call sites). A full density setting restores the previous always-on posture. Existing installs will find the sidebar empty on first launch — nothing is deleted, and .claude sync restores any subset in one click.
  • Thinking text now glazes — a highlight travels across the glyphs themselves while a model is working, in place of a static label
  • Dragging selects text, not the interface — a drag across a conversation used to paint over role chips, timestamps and the full empty width of every row, so copying a reply came back with "User", "4h ago" and the layout wrapped around the sentence. Chrome is no longer selectable; message bodies, rendered markdown, code blocks and text fields are. A selection must now begin on text (starting a drag in a gutter selects nothing), which is how a desktop app behaves and how the copy stays clean

Added

  • Vect MCP server — vect mcp serve (stdio) hands any agent CLI Vect's whole surface as tools: run and read the workspace's embedded terminal (the visible one — "restart the dev server" stops being a copy-paste conversation), point the workspace browser pane at a URL, spawn and steer other agent sessions cross-provider, create/update tasks in the audit hierarchy, read and write project memory, and query the audit trail. Calls proxy to the desktop app's localhost IPC bridge (which now actually starts — it existed but was never wired into the module tree), and every mutating call lands in the audit log as a tool_called event. Register with claude mcp add vect -- vect mcp serve (docs/guide/vect-mcp.md)
  • Workspaces — a worktree opens as one tab holding its whole working set: the agent conversation on the left, a terminal cwd'd into the worktree and a browser pane on the right, all resizable. Switching workspace tabs switches everything together, ending the chat/terminal/browser alt-tab shuffle. Each workspace gets a stable suggested port (seeded as $PORT in its terminal, and the browser pane opens on it by itself once something serves there), the PTY survives tab switches, and a worktree with no session yet offers to start one. Open from the worktree list or the palette
  • Focus Mode — ⌘⇧Enter (or the palette) folds away everything except the active pane: nav rail, sidebar, right panel, tab bar and status bar all leave the frame until toggled back. Rebindable like every command
  • One-click GitHub context — a branch button in the composer gathers the current branch's PR reviews, recent comments, and the log tails of failing CI checks (via the gh CLI) into one markdown block appended to the message, so handing an agent "fix the review feedback and the red checks" no longer means copy-pasting from the PR page
  • A real diff viewer — single-file diffs now render through CodeMirror's merge view instead of a hand-rolled line parser, so they get language-aware syntax highlighting, line numbers, intra-line change marks (the exact characters that changed within a modified line), and collapsed runs of unchanged context. Split and Unified toggle as before. The backend hands over the full before (HEAD blob) and after (working tree) contents rather than a unified diff, which is what a two-pane view needs; binary and added/deleted files are handled, and the language + theme tables are now shared with the code editor instead of duplicated
  • Tool calls appear while they are still being written — Claude's CLI does emit token-level events, it just needs --include-partial-messages, which Vect never passed. With the flag the same stream carries text_delta, thinking_delta and input_json_delta, so a tool call now shows the instant the model names it and fills each argument in as that argument closes, instead of appearing only after the whole assistant message lands. The incremental JSON parser behind it is ported from getpaseo/paseo (MIT) and pinned to a captured real stream in tests
  • Ask the palette in plain English — Cmd+P now takes a natural-language instruction ("show me my token spend analytics") and a fast one-shot agent, handed this window's live commands and recent sessions, resolves it to a single action and runs it. A ghost cursor arcs from the palette to the element being acted on and pulses a ring there, so the cause is visible rather than the UI just jumping. The resolver runs in the invoking renderer, so with several windows open the one you asked is the one that acts; actions are a closed schema grounded against the live registry, so a hallucinated command or session id becomes a clarifying question instead of a wrong click
  • Hermes — NousResearch's hermes-agent joins the provider lineup (quiet chat -q -Q runs with the session id captured from its stderr line, --resume continuity, session browser + transcripts from ~/.hermes/state.db, YAML MCP config management, Analytics coverage, icon, and -z one-shot powering utilities when Hermes is the default agent)
  • Session rename for every agent — rename now lands in each agent's own store where one exists: Claude custom-title entries, opencode's session.title, hermes via hermes sessions rename (its title-uniqueness rules respected), codex via the app-server thread/name/set RPC (the name becomes a codex resume handle) — with a Vect-local overlay as the universal fallback so the browser always shows the chosen name
  • Skills — the shared ~/.agents/skills standard (loaded by codex and opencode) and project .agents/skills are now listed alongside the Claude dirs, so the Skills view reflects what every agent actually sees
  • Windows release signing is wired — the release workflow signs the exe and NSIS installer via Azure Trusted Signing as soon as the AZURE_TS_* secrets are set (one-time Azure setup in docs/guide/windows-signing.md), which is what removes SmartScreen's grey "unknown publisher" screen; until then builds stay unsigned exactly as before
  • Auto-update — Vect now keeps itself current like Claude Code: on launch it checks the public GitHub release feed, downloads the new version in the background, and applies it on the next restart; the macOS app menu gains "Check for Updates…" (under About) for on-demand checks with a restart prompt. Release artifacts are minisign-signed and the public repo publishes a latest.json updater manifest

Fixed (runtime-verified by driving the app)

  • Scanning the pairing QR code actually pairs the phone. Two things stopped it, and both only show up on the path that matters (app not already running): the deep-link plugin filters incoming URLs against its own config, and the config declared https://vect/pair app links rather than the vect scheme the code carries, so a scanned link launched the app and was then dropped; and the client only listened for links arriving while it was already open, which a QR scan never is. Driven on an Android emulator from a cold start: link to paired to reading the conversation with no typing and no taps
  • A workspace tab shows its own panes. WorkspaceTabView was rendered without a key, so React reused one instance for every workspace tab and the pane layout and PTY of the workspace you left stayed on screen under the next one's title
  • The Android app refuses nothing on your o...
Read more

Vect v0.2.2

Choose a tag to compare

@github-actions github-actions released this 09 Jul 17:23

Added

  • Agent Inbox — Dashboard strip showing every agent that is working, asking permission, or waiting for a reply, with one-click candidate answers and a notification when an agent stalls on a question
  • Codex sessions — the session browser, dashboard history, and resume now cover Codex rollouts alongside Claude; opening a Codex session shows its conversation
  • Full-history search — global search scans every on-disk conversation (Claude + Codex), not just loaded sessions
  • Claude local hooks from settings.json appear in the project browser under "Claude hooks"

Fixed

  • Agent replies can no longer vanish: sessions reload from the on-disk jsonl when stdout streaming is lost, failures surface as error messages instead of silence, and resumed sessions stream events again
  • Status bar running count decrements when agent processes exit
  • First-run flow: Solo/Manager sessions start message-driven instead of spawning a CLI that dies instantly on piped stdio; collab role priming actually reaches the agent; mode clicks launch the clicked mode; the wizard's Working Directory and agent selection apply; hero buttons disable without a detected CLI
  • Markdown gets real syntax highlighting in unfolded tool output (was proxied through the XML highlighter)

Vect v0.2.1

Choose a tag to compare

@github-actions github-actions released this 08 Jul 16:37

Fixed

  • Navigation — every nav rail icon now opens working main content: Skills / Agents / Memory / Hub open their tabs, Sessions lands on Welcome, Search opens global search
  • Side panels — dedicated Skills (filterable list + enable toggles), Agents (providers + running counts), and Hub (marketplace search + categories) sidebars replace the workspace-tree fallback
  • Hub store — marketplace search works from GUI launches: falls back to the gh CLI token when GITHUB_TOKEN is absent
  • Dashboard — honors the workspace side-panel filter and lists on-disk recent session history instead of "No sessions yet"

Vect v0.2.0

Choose a tag to compare

@seonglae seonglae released this 06 Jul 15:10

Added

  • Voice — bidirectional voice: TTS (Supertonic), STT (SenseVoice), hands-free /voice mode (Silero VAD)
  • Analytics — prompt insights (top words, phrases, language mix, intents); Dashboard/Analytics left sidebar panels with workspace filter
  • Extensions — Skills + Hub views on the SKILL.md standard
  • Memory — Memory panel wired to real ~/.claude on-disk memory
  • Sessions — three session modes on landing (Solo / Collab / Manager)
  • Build — macOS Developer ID signing + notarization pipeline; DMG icon embedding
  • Welcome / landing — recent sessions and recent projects cards on first tab
  • CLI subcommands — vect session export, vect session usage, vect mcp list, vect template list
  • Quick switchers — Cmd+J recent-session popover, Cmd+Shift+J project popover
  • Help system — searchable in-app docs (HelpView) wired to sidebar, command palette, and /help
  • Status bar — project, branch, agent, running session count, all clickable
  • Notifications — persistent history, filter pills, clear-all
  • Settings — project organization editor (favorites + tags), backup/restore section
  • Theme — custom theme builder with schema, picker entry, inline editor; CSS variable application via provider + desktop hook
  • Chat input — drag-and-drop files and images
  • Message — expanded context menu, ISO timestamp tooltips
  • Session note — markdown notes editor with edit/preview tabs and debounce
  • CRDT room — structured state manager (claims/status/files), --room-type selector (crdt-state / mcp-chat / none), crdt-room mode over Vect WebSocket

Fixed

  • macOS app icon conforms to the Apple icon grid — fixes gray letterbox in Raycast and other launchers
  • Dashboard — real running session count and tokens-today from the backend
  • Composer — mic/Send spacing and flush Send+caret split
  • Usage popover — resets_at is ms (drop *1000), formatResetIn extracted, regex matches digit-attached AM/PM ('7am'), 'at' for clock-time vs 'in' for durations, hide empty 'Resets in' row
  • Settings circular import (TDZ on VectSettingsSchema) and window permission gate

Changed

  • Version unified at 0.2.0 across tauri.conf.json, both package.json, and all three Cargo crates (apps/desktop/src-tauri, crates/vect-cli, crates/vect-core)
  • scripts/release.sh updates all six version sources (was: desktop only)