Fixed
1 - Windows: Claude Code, npm, Node and other agent bees now spawn reliably — replaced the PTY layer with the upstream
portable-pty-psmux crate, eliminating the intermittent crash that left bees stuck in the Crashed state immediately after launch.
Fixed
2 - Crashed bees no longer leave a blank pane — selecting a Crashed bee now shows the agent's exit code and the last 30 lines of output it produced before exiting, plus a prominent Restart button. Previously the pane stayed empty and the only signal was a tiny red status dot in the sidebar.
- Auto-starting multiple Claude bees no longer races — when a project auto-started several agents at once on Windows, some would silently crash because the underlying CLI's lockfiles, AppData ACLs, and shell wrapper chain raced on shared resources. Spawn dispatch is now throttled to one bee every 250 ms, removing the concurrent access without any user-visible delay.
Fixed
2 - Windows:
claude, npm, node and other npm-installed CLIs now spawn cleanly — the leaner Windows spawn path introduced in v0.22.0 was bypassing cmd.exe for commands without shell metacharacters, which caused npm-style shims (claude, npm, node, python, cargo...) to fail with os error 193: %1 is not a valid Win32 application. CreateProcessW doesn't honour PATHEXT and grabbed the extensionless Bash shim instead of the .cmd sibling. Commands without an executable extension are now routed through cmd.exe again so Windows' PATHEXT lookup picks the right file. Programs given by absolute path with .exe/.bat/.cmd/.com keep the fast path. - Windows: duplicate "Help" menu — the v0.22.1 menubar showed two "Help" entries because the new "Check for updates…" command appended a fresh submenu instead of merging into the default Help that Tauri already creates on Windows and Linux. The command now lives inside the existing Help menu.
Added
3 - Check for updates, anytime — a new menu entry (HiveTerm › Check for updates… on macOS, Help › Check for updates… on Windows and Linux) lets you pull the latest release without restarting the app.
- Jump straight to the change — clicking a file in the Changes panel now scrolls the viewer directly to the first modified line, so you stop hunting through long files to find what's new.
- See every file, just like your editor — the Explorer now mirrors the VSCode behavior and surfaces files listed in
.gitignore (.env, lockfiles, generated docs). Heavy directories like node_modules, target, and dist stay hidden so the tree remains usable.
Changed
1 - Cleaner button labels — the prominent action in the Diff panel is now "Commit & Push" across English, Portuguese, and Spanish.
Performance
6 - Lower CPU on every platform — the resource monitor now aggregates CPU and memory across each bee's full process tree, so wrappers like
cmd.exe /C and shell pipelines report the work their children are actually doing. - CPU metrics that work on Windows — fixed a baseline-sampling bug where Windows showed a flat 0% for every bee. Per-bee and per-project CPU readings are now accurate on every OS.
- Snappier tab switching with chatty agents — the hidden-pane PTY buffer now flushes in 64 KB chunks instead of one 2 MB write, eliminating the brief UI freeze that could appear when switching to a long-running Claude or Codex tab.
- Stable memory under heavy git activity — the per-project file watcher now applies back-pressure to its event queue, preventing memory growth during large
git checkout or npm install bursts on Windows. - Cleaner file picker on Windows — the Explorer's always-skip list (
node_modules, Build, Vendor, etc.) now matches case-insensitively, matching how NTFS treats those directory names. - Self-healing token tracking — when an agent CLI rotates or removes its session log, the token watcher now re-discovers the new file on the very next tick instead of going silent.
Fixed
4 - The "0 bees but limit reached" mystery — the Free-tier per-project limit was incorrectly counting bees from every project in the workspace, so users with multiple projects could be blocked from launching a fresh bee even when the target project was empty. Counting now correctly scopes to the project being launched.
- Commands with paths that contain spaces — running
node "C:\Program Files\app\index.js" (and any other command with quoted arguments) no longer mangles the arguments before reaching the binary. Affects every platform; most visible on Windows. - No more phantom "crashed" badges on Windows — when Windows recycled a PID inside the auto-restart window, the previous bee's exit could be wrongly applied to a freshly started bee. The watcher now identifies a spawn by
(pid, started_at), eliminating the false positive. - "You're up to date" dialog dismisses on click — the OK button on the manual update check now closes the dialog reliably.
Added
11 - Agent instructions library — pick a system prompt from a curated set of dev-focused templates (Software Engineer, Software Architect, Front-End Developer, Back-End Developer, DevOps Specialist, Code Reviewer, Debugger, Refactoring Specialist, Test Author, Technical Writer, Product Developer, UI/UX Designer, Technical Product Manager) or write your own. Instructions are auto-loaded when the bee starts — natively via
--append-system-prompt for Claude Code and --system-instruction for Gemini, and via a quick paste-into-prompt for every other CLI. Picking a template also names the bee after the role. - Per-project share toggle — choose whether each project's agent instructions stay private to you (default) or get committed to the repo so the whole team uses the same prompts. The choice is sticky across reloads.
- Drag-and-drop files into any terminal — drag any file or folder from the Changes panel or Explorer into a terminal and the path lands in the agent's input as
@src/file.ts for Claude / Gemini (native auto-resolve) or as the absolute path for Codex and other CLIs, so the agent opens the file directly instead of grepping for it. - Find in Files — VSCode-style multi-line content search across the whole project, with case-sensitive, whole-word, and regex toggles. Results group by file, expand inline, jump to the exact line + column.
- File viewer with syntax highlighting — open any file in the project from the Explorer or a search result. Powered by Shiki, theme-aware, with line numbers, search-match highlighting, and Markdown rendering for
.md files. - Editor & terminal font customization — pick from every monospace font installed on your system in Settings → Appearance. Live preview while you scroll the list.
- Settings as a tab — Settings now opens as a regular tab in the tab bar instead of a modal overlay, so you can keep it open while you work and switch back to a terminal without losing your place.
- Command palette (Cmd+K) — fuzzy-find any file in the project or jump to any action.
- Auto-responsive panels — the sidebar and Changes panel collapse automatically when the window is below 600px wide, and restore when there's room again.
- Multi-line inline diff — the file viewer now highlights changed *ranges*, not just whole lines, so you can see exactly which characters moved.
- Per-agent CLI flag presets — the Add Agent modal now offers correct flag chips per CLI (e.g. Codex gets
--dangerously-bypass-approvals-and-sandbox, -s workspace-write, etc. instead of the old --full-auto that the CLI no longer accepts).
Changed
4 - Sidebar tree connectors removed — cleaner, denser sidebar without the dotted ASCII tree lines.
- Project Settings layout — directory, config file, gitignore toggle, share-agent-instructions toggle, and command count are now grouped as a clean "Overview" card.
- Add Agent modal — collapsible Instructions section, searchable ComboPicker for templates, hidden Name field for agents (auto-generated and adopted from the agent's session title via Auto-rename).
- Terminal link provider — clickable links now recognise tilde-prefixed paths (
~/Projetos/...) and resolve them against your home directory before opening.
Removed
1 - Marketing-flavored templates — Marketing Strategist, Product Marketing Manager, SEO Specialist, Product Designer, and the generic QA Engineer template were dropped to keep the picker focused on the people who use HiveTerm: developers building and maintaining software.
Fixed
5 - Auto-start agents finally auto-starting —
auto_start: true on an agent in hive.yml now actually starts the agent on boot. Previously the logic excluded agent-type bees from the auto-start pass. - Paste-and-submit reliability on TUI agents — instructions pasted into Ink-based CLIs (Claude, Gemini, etc.) now reliably submit on first try.
- Find in Files preserving indentation — multi-line patterns that depend on leading whitespace now match correctly.
- File viewer respecting the chosen font — the browser default was overriding the picked monospace font inside the viewer's code blocks.
- Settings tab no longer disappears when opening a file — opening a file from the Explorer keeps Settings pinned in the tab bar instead of closing it.
Added
1 - Workspace loading splash — animated hive logo with a "Loading workspace… (X of Y projects)" indicator while project configs are parsed at boot. No more staring at a blank sidebar when restoring a workspace with many projects
Fixed
4 - Bees not spawning in production builds —
spawn_bee was hanging on the license RwLock because phone_home self-deadlocked: a Rust temporary lifetime kept a read guard alive across an assignment that also reached for a write guard on the same lock. The same-thread reader-then-writer pattern blocked forever. The phone-home update now snapshots the read state into local variables before taking the write lock - Spurious downgrade to Free tier on heartbeat — the phone-home heartbeat was overwriting an active Trial/Pro session whenever the server happened to return
tier: "free", even though the local signed token (with its server-issued expires_at) was still valid. Trial/Pro expiration is now determined locally from the token. Server revocation still applies via the explicit revoked: true branch - Tauri IPC blocked by Content-Security-Policy in release builds — the production CSP was missing
connect-src entries for the Tauri IPC scheme (ipc: / http://ipc.localhost) and the HiveTerm API endpoints, so every invoke() failed silently in release. Dev builds appeared to work because Tauri's dev profile relaxes CSP. The CSP now allows the IPC scheme and the *.hiveterm.com API hosts explicitly -
spawn_bee, kill_bee, restart_bee blocking the UI thread — sync Tauri commands run on the webview/main thread, which meant the spawn_pty fork+exec path froze the window when several bees came up at boot. The commands are now declared with #[tauri::command(async)] so Tauri dispatches them on the async runtime while keeping the synchronous signature (and the Channel<Vec<u8>> PTY stream) intact
Fixed
1 - Bees stuck on the "Stopped" overlay after clicking Start — clicking Start (or any restart action) on a stopped bee fired a
kill_bee first, which always emitted a stale bee:status:stopped event. The event reached the frontend after the spawn had already set status = "running" and reverted the UI to the idle overlay, even though the process was up and the PTY was streaming. The frontend no longer sends a redundant kill before each spawn (the backend already tears down the previous process atomically), and kill_bee only emits a stopped event when it actually killed something
Fixed
2 - UI freeze on multi-project boot — opening a workspace with several projects no longer hangs the window for 30s+. The bee spawn pipeline (
spawn_bee / kill_bee / restart_bee) was running on the webview/main thread and serializing every fork+exec through it; it now runs on a background pool so the UI stays responsive while bees come up - Boot-time fork+exec storm — agents listed in
hive.yml no longer auto-spawn when the workspace loads. They start the first time you open their tab. Server-style command bees marked auto_start: true still launch eagerly as before
Added
7 - 14-day Pro trial — new installs and existing free-tier users can start a 14-day Pro trial directly from the sidebar. No credit card required
- Anonymous usage analytics — opt-out toggle in Settings → Privacy. Helps us understand where the product needs work. No PII, no project paths, no terminal output
- Trial-expired project picker — if a trial ends with more projects open than the Free tier allows, a blocking modal lets you choose which to keep (or upgrade to Pro to keep them all)
- Welcome to Pro modal — short celebration after activating a Pro license that recaps what's unlocked
- "Auto-rename" toggle in the Add agent modal — uncheck to lock the agent name when adding it; default keeps the existing behavior of adopting the agent's session title
- System theme as the default appearance — fresh installs follow the OS preference and update live when the OS toggles dark ↔ light. Manually picked themes still persist
- Pro education accordion in the sidebar — collapsible bullets summarising what Pro unlocks; the whole row is clickable
Changed
4 - Free tier limits adjusted — up to 2 projects, 3 bees per project, 6 bees total, 1 MCP sub-agent. The new 14-day Pro trial covers anyone who needs more while evaluating
- Sidebar license footer is a single row (status + Upgrade button + chevron) instead of multiple stacked cards
- Localized pricing in the Upgrade and Trial-expired modals — both modals now show your region's price via the existing
/api/pricing endpoint instead of hard-coded values - PR status badges (Merged / Open / Closed / Draft / Pending) now use legible colors under the light theme
Fixed
7 - Windows Ctrl+V double-paste — clipboard contents now reach the PTY exactly once. Please re-test on a Windows machine and report back if it still misbehaves
- File viewer "Code" mode showing stale content after an agent edits the file — re-opening a file always shows the current contents on disk
- Focus lost when closing a file tab — the previously-active bee is restored when the last file tab closes
- Setup project modal closing on drag-released-outside — selecting text inside the modal and releasing the mouse beyond its edge no longer cancels the setup
- Trial users hitting the Free-tier paywall when spawning bees or sub-agents
- First-launch race condition that could auto-start a trial for an existing user
- White screen the first time the project setup modal finished detecting the project stack
Security
2 - Trial token integrity — trial tokens are signed with the same Ed25519 keypair already used for Pro licenses; the private key never leaves the server. Tokens are bound to the issuing machine and rejected on any other
- Telemetry payloads are explicitly allow-listed — no clipboard, no file contents, no terminal output ever leave the device
Added
8 - Material Icon Theme — file/folder icons in the FileTree, Changes list, and TabBar now use the open-source Material Icon Theme (1238 SVGs, MIT). Resolution cascades through filename → extension → language id (via Shiki's lang map) so
*.ts, *.php, *.rs, package.json, Dockerfile, src/, etc. all light up correctly. Icons copied to public/file-icons/ by scripts/copy-file-icons.mjs (predev / prebuild / postinstall) - "Open file" picker in the All files tab — sticky search input at the top with fuzzy match, keyboard navigation (↑/↓/Enter/Esc), basename score weighted 1.5× over path score. Backed by a new
list_project_files Rust command that walks the project respecting .gitignore (max 50k files, skips .git/.DS_Store) - Reveal active file in FileTree — opening a file in the viewer auto-expands every ancestor directory and scrolls the row into view. New
revealPath action on fileTreeStore handles the lazy load top-down so rows fill in from the root - Active file highlight in lateral — DiffFileList (Changes tab) and FileTree (All files tab) both highlight the currently active file viewer tab. Closing or switching tabs clears immediately
- TabBar auto-scroll — opening a new file or switching tabs scrolls the tab strip so the active tab is always visible
- Cmd+B branch switcher — toggle the branch dropdown from anywhere with
⌘B. Chevron rotates 180° when open, dispatched via a window CustomEvent so dropdown state stays local to the header - Commit footer link — the last-commit row at the bottom of the diff panel is now a button that opens
<remote>/commit/<sha> in the browser when the project has an HTTPS remote. Falls back to the previous read-only display for SSH-only / private remotes. Remote URL cached per-project in a new lib/remoteUrl.ts helper - Shared fuzzy match library —
src/lib/fuzzy.ts centralizes the scoring used by the Command Palette and the new file picker
Changed
4 - Toolbar height alignment — FileViewer toolbar now uses
h-9 to match the TabBar / CenterHeader / DiffPanel headers, so the action icons line up with the search input on the right - Open in editor passes
Cursor explicitly to the backend so the picker doesn't fall through to $EDITOR (often vim/nano, which silently spawned a hidden TTY) - Removed close (×) button from the FileViewer toolbar — the per-tab close on the tab strip already covers it
- Website /changelog — removed the GitHub Releases link since the repo is private
Fixed
3 - Syntax highlighting + line numbers in code viewer — Shiki was failing silently because Tauri's strict CSP (
default-src 'self') blocks the default Oniguruma WASM engine. Switched to createJavaScriptRegexEngine() (pure JS, no WASM). Highlighting and the gutter line numbers both come back; PHP, TS, Rust, etc. all render correctly - Project settings overlay blocking file tab clicks — clicking a file tab while the project settings panel was open looked like a no-op because the overlay sat on top.
fileViewerStore.clearActiveBee() now also clears showProjectSettings, so activating a file tab dismisses the overlay - Sticky search header in the FileTree — removed the parent's
py-1 and the sticky's mb-1 so tree rows no longer bleed through the gap above/below the search bar when scrolled
Changed
7 - Multi-project performance —
useGitWatcher now reconciles git watchers incrementally instead of tearing down and re-spawning every watcher whenever a project is added, removed, or its config updates. With 9+ projects open, adding/switching projects no longer fans out 27+ git IPC calls per change. Watcher subscription uses a stable id+path signature so unrelated project mutations don't re-run the effect - Visibility refresh scoped to active project — when the app regains focus,
useGitWatcher only refreshes the active project's diff state. Background projects keep their watcher running and pick up changes via push events. Drops focus-return cost from 3*N IPC calls to 1 - Persistent Diff Panel per project — DiffPanel now stays mounted per project (like terminals do), hidden via CSS
display toggling instead of unmount. Switching projects preserves commit-message draft, scroll position, file tree expansion, and active tab. Same persistence for the bottom-sheet variant on narrow windows - Booting overlay in TerminalPane — when a bee spawn or restart begins, a small "Iniciando…" overlay with a spinner is rendered over the terminal until the first PTY byte arrives. Bees attached to an already-running process with buffered output skip the overlay. Spawn errors clear the overlay so the idle state is reachable
- Auto-collapse projects with no running bee — projects with bees configured but none running default to collapsed in the sidebar. Empty (no-bee) projects stay expanded so the user sees the empty state. Once the user clicks the chevron, the choice is persisted in
settingsStore.projectCollapsedByProject and survives app restarts; the persisted preference always overrides the auto rule - Tighter sidebar tree connectors — bee/section tree elbow indent reduced from 16px (
w-4) to 10px (w-2.5) for a more compact hierarchy - Visible kbd on diff panel toggle — the right-edge expand/collapse button shows the shortcut as a kbd badge inline (matching the GitHub Open button style); shortcut removed from tooltip since it's now visible
Fixed
1 - Removed border-bottom from project settings header — the sticky
Start all header no longer renders a divider line under it
Added
9 - Right-side Diff Panel — git workspace pane per project: branch + ahead/behind, PR card (state-tinted background — purple Merged, green Open, red Closed/Conflicts, amber Pending, zinc Draft), file list with +/- numstat, two tabs
All files / Changes N. Auto-opens by default for every active project; user choice persisted per project. Default width 320px (drag-resize 280–720). Bottom-sheet variant on windows narrower than 1200px - Tab strip in Diff Panel —
All files browses the full project tree (lazy read_dir Rust command, respects .gitignore via the ignore crate, skips .git / node_modules / target / dist / .DS_Store and friends). Changes N shows the modified file list with badge counter - Read-only File Viewer — click any file (in either tab) to open it as a tab in the center column. Shiki syntax highlighting (lazy-loaded singleton, ~37 grammars), Markdown render with raw/preview toggle (react-markdown + GFM + sanitize), image preview via
convertFileSrc, unified diff render. Cmd+F search overlay with match highlighting + prev/next navigation - Three-column layout — TitleBar removed; each column owns its own h-9 top bar. Sidebar header reserves space for macOS traffic lights when expanded. Center column hosts breadcrumb + workspace folder pill + branch dropdown + Revisar (per-bee changes) + GitHub link. Diff panel column hosts PR chip + state pill + Commit / Push / Create PR buttons in a single bar that takes the PR's tone color
- Commit / Push / Create PR — three direct git actions in the diff panel header. Inline forms (textarea + Cancel + Submit) instead of modals. Push only renders when
ahead > 0 and an upstream exists, with a counter chip. Create PR is hidden on protected branches (main / master / trunk / develop / development) and shows an "uncommitted changes won't be in this PR" warning when the working tree is dirty. Both forms gain an Ask {agent} button when an agent bee is running for the same project — clicking sends a prompt to its PTY (commit all changes with a descriptive message / create a pull request for the current changes) and closes the form - Discard changes per file — hover-only undo button on each row in the Changes tab, with a confirm dialog before reverting. Tracked files restore via
git checkout HEAD -- <path>; untracked files are deleted from disk. Path-traversal-safe - Rust file watcher (push-based, zero polling) — replaces the 3s
setInterval refresh with a notify recursive watcher per project. Ignores .git/objects, .git/lfs, .git/logs, *.lock files, node_modules, build dirs, agent state dirs (.claude, .codex, .cursor, .gemini, etc.) — and uses an allowlist for .git/ so only HEAD / index / refs/heads / refs/remotes flow through. Debounced 250ms. Frontend useGitWatcher listens for git:changed and refreshes the diff store, file tree, and CenterHeader branch info - Sidebar diff stats — per-project insertion/deletion totals (
+2175 −70) shown next to the project header in the sidebar - Sidebar footer expanded — Update pill, Free-tier usage + Upgrade CTA, Add project, theme + settings now live in the footer instead of a global title bar
Changed
9 - Lazy per-file diff —
get_git_changes no longer returns the full diff blob (the heaviest single git subprocess in the refresh path). New get_file_diff(dir, path) is invoked only when a file is opened. Branch-switch and refresh latency drop ~3-5x on big repos - Branch-aware PR cache — PR cache key now includes the current branch, so a branch switch doesn't return the previous branch's stale PR
- PR fallback on protected branches — when on main / master / develop / etc. and
gh pr view returns no PR, fall back to gh pr list --base BRANCH --state merged --limit 1 so the most recently merged PR shows on the base branch - Project switch is instant —
CenterHeader reads branch / dirty / upstream from useDiffPanelStore.branchInfo (already kept fresh by the watcher) instead of fetching get_git_branch per switch. Remote URL cached per project at module level - TabBar height aligned to h-9 — matches sidebar / center / diff column headers across all three columns
- Diff panel opens by default —
diffPanelOpenByProject[id] !== false (treats undefined as open). Closed only when the user explicitly toggles it off; the choice persists per project - Header height harmonization — every column header strip uses
h-9 so the three columns align across a single horizontal grid line - Shortcuts remap — Cmd+Shift+D now toggles the Diff Panel (was the per-bee Changes panel). Cmd+Shift+B toggles the left sidebar. Cmd+\ kept as an alias
- Settings → Hotkeys updated with
Toggle diff panel row and the new Cmd+Shift+B for sidebar toggle
Fixed
1 - Windows: Enter key submits in Claude Code / Ink agents —
process_manager::write_pty no longer translates \r on Windows. PSEUDOCONSOLE_PASSTHROUGH_MODE (Windows 11 22H2+) forwards the input pipe untouched, so Ink's keypress parser sees \r and treats it as Enter the same way it does on Mac/Linux. Earlier translations to \r\n and to \n both landed as newline insertions in multi-line input. PowerShell, cmd, and other cooked-mode shells continue to work because they accept either CR or LF as Enter
Removed
2 - ChangesPanel (per-bee fullscreen modal) is gone — the Diff Panel covers the same data with a better UI. The old Cmd+Shift+D binding has been repurposed for the Diff Panel toggle. The legacy Revisar button in the per-bee status bar has been removed
- TitleBar component deleted; its responsibilities moved into the per-column headers
Fixed
1 - Windows: Claude Code / Codex / Gemini raw-mode TUI agents no longer crash on first input — the upstream
portable-pty-psmux 0.9.3 enables PSEUDOCONSOLE_WIN32_INPUT_MODE unconditionally, which makes ConPTY re-encode every keystroke as the Win32 Input Mode escape sequence (ESC [ Vk;Sc;Uc;Kd;Cs;Rc _) toward the child. Cooked-mode shells (cmd, PowerShell) decode this fine, but Ink/readline-based TUIs read stdin directly and treat it as garbage — Claude Code's first-run theme picker (v2.1.126) and any subsequent arrow-key/Enter/Esc input would crash the agent. v0.16.4 tried to compensate from the host side by encoding lone \r/\x1b as Win32 Input Mode but PSEUDOCONSOLE_PASSTHROUGH_MODE (Win11 22H2+) forwards bytes raw, so PowerShell saw the literal escape and broke; that change was reverted in v0.16.5. Real fix: vendor the crate as portable-pty-hiveterm under src-tauri/vendor-portable-pty/ and drop the WIN32_INPUT_MODE flag from base_flags in PsuedoCon::new and new_without_passthrough. ConPTY falls back to plain VT input — both raw-mode TUIs and cooked shells handle that. Escape hatch: set HIVETERM_WIN32_INPUT_MODE=1 to opt back in for editors that benefit from the richer key info (vim modifier keys, IME composition). The local normalize_crlf_for_conpty translation in process_manager::write_pty is kept as a defensive no-op for non-WIN32-Input ConPTY (it only triggers on lone \r)
Added
3 - Per-bee recap line in the sidebar — every agent bee can now show a one-line summary of its most recent turn under its name in the project tree. The
recap_watcher background thread polls each agent bee's PTY ring buffer (last 16KB, every 400ms) and scrapes Claude Code's native * recap: marker (emitted by Claude when its awaySummaryEnabled setting is on) and the multi-line └ <body> block produced by the /recap slash command. Continuation/wrapped lines are joined into a single sentence; CR-overwrites from TUI redraws are split apart so spinner status doesn't pollute the captured text. The recap is pushed back to the frontend via set_recap on ProcessManager and the new bee:recap Tauri event; long recaps wrap in a full-width row that sits below the bee row so hover-state on the metrics column never reflows the wrap. New REST endpoint POST /recap { beeId | cwd, text } lets external integrations push a recap directly to Queen - Sidebar recap visibility + Claude session recap toggle — Settings → Sidebar adds a "Agent recaps" toggle (default on) that controls only the sidebar render. Settings → Agents → Recap section adds a "Claude Code session recap" toggle that mirrors Claude's own
/config → Session recap switch by writing/removing the awaySummaryEnabled key in ~/.claude/settings.json. On open, the panel calls get_claude_session_recap to sync the UI with whatever the user has configured outside Hive — so flipping it in Claude /config and flipping it in Hive stay consistent. Both toggles persist and i18n labels ship in EN/PT/ES - Bottom-of-terminal breathing room — a fixed-height spacer (
h-2) sits between the xterm container and the status bar so the last line of TUI output (Codex's input box, Claude's Cooked for Xs, plain shell prompts) doesn't crash into the status bar. The spacer is outside the xterm container so the FitAddon row math is untouched — earlier attempts to add bottom padding inside the xterm parent caused descenders of the last visible row to be clipped. Status bar height also bumped from py-1 to py-2 for visibility
Changed
4 -
strip_ansi translates CSI <n> C (cursor forward) into N literal spaces — Claude Code's TUI renderer emits inter-word spacing as cursor-move escapes rather than U+0020 chars (e.g. Opus\x1b[1C4.7\x1b[1C(1M\x1b[1Ccontext)). The previous stripper consumed the escape and dropped the visual gap, producing Opus4.7(1Mcontext) in the captured recap. The rewrite captures the CSI parameter, dispatches via emit_csi_visual based on the final byte, and emits N spaces for C / a (HPR). Other CSIs (SGR m, cursor up/down, etc.) are still stripped silently — they have no visible content to preserve -
ProcessInfo.recap: Option<String> field added to the Rust struct (mirrored on the frontend ProcessInfo interface) so the recap travels with list_bees, get_bee_status, and any new bee snapshot. set_recap() truncates to 280 chars and treats empty string as "clear"; find_bee_by_working_dir() resolves the most recently-started bee for a given cwd so the /recap POST endpoint works even when the caller only knows the working directory (not the bee_id) -
beeStore.setBeeRecap preserves Map identity when the recap value is unchanged (no spurious re-renders) and trims/clears empty strings to null so consumers can use a single recap ?? null check - TerminalStatusBar slightly taller —
py-1 → py-2 improves visual weight against the dense status info row
Added
4 - MCP project isolation enforced at the transport layer — sub-agents spawned via
spawn_bee can no longer read output, write input, kill, restart, or even see status of bees in other projects. The Queen MCP server now resolves the calling bee from the TCP peer PID at SSE connect (and per-request for the streamable HTTP transport), walking the parent process chain via sysinfo until it finds a managed PID. The resolved caller_bee_id is plumbed through CallContext into every tool handler; enforce_isolation() is the single chokepoint on read_output, write_input, kill_bee, restart_bee, get_bee_status, and list_bees is filtered by the caller's project. Cross-project calls are rejected with "project isolation: bee X (project A) cannot access bee Y (project B)". External MCP clients (curl, IDE plugins) without a resolvable caller still work — no project scope is implied. New module caller_resolver.rs performs the OS-specific peer port → PID lookup (lsof on macOS, /proc/net/tcp + /proc/*/fd on Linux, netstat -ano on Windows). The pre-existing global "first running non-MCP bee" fallback that would non-deterministically attribute MCP spawns to whichever workspace happened to come first in the bee map is gone — that bug was responsible for spawning Codecs/Gemini agents into the Work workspace when the user invoked them from the Personal workspace -
encoding: "screen" for read_output — full-screen TUI agents (Gemini, interactive Codex, k9s, htop) write their UI by replaying cursor moves, screen clears, and OSC color polls into the same region of the terminal. The 256KB ring buffer fills with redraw frames before the actual response can be retrieved, so utf8 reads return raw escape-sequence soup. The new screen encoding replays the byte stream through a virtual VT100 (vt100 crate, 200×50 default, cols/rows configurable up to 1000×1000) and returns just the visible terminal contents as plain text. In benchmark, a Gemini "good night" reply that was buried in 256KB of redraw bytes renders to 1935 chars of legible text - Voice transcription returns focus to the terminal — after the user clicks Stop on the voice button (or VAD auto-stops it), the transcribed text is written into the bee via
write_pty and a hiveterm:focus-terminal window event is dispatched. TerminalPane listens for it and calls terminalRef.current?.focus() inside a requestAnimationFrame. The user can now press Enter immediately to submit instead of having to click back into the terminal. Skip-on-empty: whitespace-only transcriptions don't dispatch (avoiding spurious focus changes) -
auto_register_codex_mcp and auto_register_gemini_mcp refresh the port on every Hive startup — the default queenMcpPort=0 means the OS assigns a fresh port on each launch. Codex's ~/.codex/config.toml and Gemini's ~/.gemini/settings.json were grabbing the port at toggle time and never updating, so MCP startup in those clients failed against a dead port until the user toggled the integration off and back on. Both functions now run alongside auto_register_mcp (Claude Code) right after the Queen binds. Decision matrix per client: section/entry present → rewrite URL with current port; absent + flag absent → first-run register + create flag; absent + flag present → respect the user's explicit disable. set_codex_mcp / set_gemini_mcp also touch the flag so a UI toggle is never overridden by auto-register on the next startup. Codex auto-registration uses pure TOML manipulation in the new mcp_register module (preserves comments / unrelated sections); Gemini uses JSON upsert that preserves all other top-level keys
Changed
3 -
ProcessInfo.project_id: Option<String> — config-driven and frontend bees inherit the project from the bee_id prefix ({projectId}/{beeName}), but MCP sub-agents (id starts with queen/) lose that signal in the id. The new field is captured at spawn time so ProcessManager::project_of() can return the authoritative project for any bee. Free fn project_id_from_bee_id provides the prefix-derivation rule (returns None for queen/* and unscoped ids). Used as the source of truth for MCP isolation -
build_screen_response and build_read_response extracted as pure helpers in mcp_tools.rs — both encoding paths now testable without Arc<ProcessManager>/AppHandle. Existing tool_read_output delegates to them. clamp_screen_dim enforces 1×1 minimum and 1000×1000 maximum so a runaway caller can't request a multi-MB virtual grid - MCP tool
read_output description updated to advertise the screen encoding, document when to prefer it (full-screen TUIs), and explicitly note that utf8 returns the raw byte stream
Added
4 - Per-bee token tracking when multiple agent bees share a project — previously, two Claude (or Codex) sessions in the same
cwd collided because discover_session() picked the newest .jsonl in ~/.claude/projects/<encoded-cwd>/ and assigned it to every bee, so both displayed identical token counts. The watcher now stamps each bee with started_at (millis since epoch) at spawn and pairs the oldest unclaimed JSONL with the oldest unclaimed bee within a [started_at - 5s, next_bee.started_at + 5s] bracket. Subsequent spawns disambiguate by bracket, restart re-discovers the new session by excluding the bee's previous path from the claimed set, and Gemini (which writes a single shared telemetry.log) is mapped only to the first bee so siblings don't echo the aggregate - In-app update modal with rendered changelog replaces the native confirm dialog. The modal shows the new version, the user's current version, the release notes (mini-markdown renderer covers
bold, ` code , text links, bullets, and headings), a download progress bar fed by the Tauri updater's Started/Progress/Finished events, and Install / Later / Skip controls. Skip persists dismissedUpdateVersion` to settings so the same version stops nagging until a newer one ships - Persistent update pill in the title bar — when an update is available and not dismissed, an amber
↓ vX.Y.Z button with a status dot appears next to the plan badge. Clicking it opens the update modal so the user can review the changelog before deciding to install - CI publishes the real changelog into
latest.json — scripts/extract-changelog.sh reads the ## [X.Y.Z] section out of CHANGELOG.md, the release workflow pipes it through $GITHUB_OUTPUT into tauri-action's releaseBody, and Tauri propagates that into the updater manifest's notes field. The updater's Update.body now carries the actual release notes instead of the static "see CHANGELOG.md" link
Changed
4 - Voice record button no longer flashes on first click — the
Waveform canvas had no width/height attributes, so it claimed its default 300×150 intrinsic size for one frame after mount, expanding the recording pill before useEffect resized it. Subsequent clicks were warm enough to mask the reflow but the first cold click (cpal audio engine init delay on macOS) kept the flash visible. Fixed by setting an inline style={{ width, height }} so the layout box is locked from the first paint, and switching to useLayoutEffect so the bitmap dimensions apply before the browser paints - Standardized button contrast on the amber accent —
bg-hive-accent text-white (~2.4:1 contrast, fails WCAG AA) was used in five places. Replaced with the codebase-standard text-hive-amber-600 (#412402 warm-dark, ~9:1) in UpdateModal install button, VoiceButton mic/stop buttons (icon fill-white → fill-hive-amber-600 too), UpgradeModal activate, AccountTab license activate, and VoiceTab provider toggle - Token total in sidebar and status bar now excludes cache_read / cache_creation —
BeeItem and TerminalStatusBar previously summed all four counters when deciding whether to render the badge and when computing the displayed total, which inflated the headline number with cached input that the user did not pay re-tokenization for. Now both surfaces use inputTokens + outputTokens; the breakdown modal still shows the cache columns separately -
ProcessInfo now carries started_at: Option<u64> populated in process_manager::spawn_bee and spawn_bee_headless. The frontend already had startedAt for uptime display; the backend field unlocks server-side time-based pairing (token watcher) without round-tripping through the UI
Fixed
1 - Revert v0.16.4's Win32 Input Mode encoding — the experimental re-encoding of bare Enter/Esc as
ESC [ <Vk>;<Sc>;<Uc>;<Kd>;<Cs>;<Rc> _ sequences regressed PowerShell on Windows: with PSEUDOCONSOLE_PASSTHROUGH_MODE active (Windows 11 22H2+), ConPTY forwards bytes raw to the child instead of decoding the Win32 Input Mode format, so PowerShell received the literal escape sequence as text and Enter stopped submitting commands. Restored v0.16.3 behavior: bare \r is normalized to \r\n for ConPTY (cooked-mode shells work), and \x1b passes through unchanged. The raw-mode TUI Enter/Esc issue (Claude Code, Ink agents) remains under investigation — needs hardware-level debugging on the user's Windows build to pin down whether ConPTY's input pipe is buffering, whether Ink's keypress parser is ignoring \r\n, or whether a different encoding is required for the specific Win10/Win11 build path
Fixed
5 - Windows: raw-mode TUIs (Claude Code trust prompt, Ink agents) now accept all keystrokes — the previous 0.16.2 attempt addressed only lone-CR buffering and depended on JS-side platform detection (
navigator.platform, deprecated and unreliable in WebView2). Root cause was deeper: portable-pty 0.8 created the ConPTY without PSEUDOCONSOLE_WIN32_INPUT_MODE (0x4), so once a child enabled raw mode, ConPTY's input translation dropped Enter, Esc, digits, arrows, and modifier-aware keys - Switched to
portable-pty-psmux 0.9.3 (drop-in fork of upstream portable-pty 0.9 from WezTerm, with PASSTHROUGH_MODE + WIN32_INPUT_MODE + RESIZE_QUIRK patches enabled). API-compatible — only Cargo.toml changed - Moved CR→CRLF normalization from TS to Rust in
process_manager::write_pty(), gated by cfg!(target_os = "windows") (compile-time, immune to runtime detection failures). Implementation uses Cow<[u8]> for zero-alloc on the hot path (typing, escape sequences, paste with LF-only line endings) - Added
flush() after every PTY write so bytes go through ConPTY's pipe immediately instead of waiting for the next write to nudge the buffer - Removed dead code:
src/lib/normalizeInput.ts, its test file, and the IS_WINDOWS constant in usePtyBridge.ts — all superseded by the Rust-side fix
Fixed
1 - Windows: Enter key not confirming prompts in interactive CLIs — lone
\r (0x0D) emitted by xterm.js was being held in the ConPTY input buffer waiting for \n, which stalled raw-mode prompts in Ink/readline-based agents (e.g. Claude Code's "trust this folder" confirm screen). Added normalizeKeyInput() utility (src/lib/normalizeInput.ts) wired into usePtyBridge.ts that translates lone \r to \r\n only on Windows. Unix PTYs unchanged (kernel handles \r→\n via ICRNL). Multi-line paste with embedded \r\n is preserved (regex uses negative lookahead).
Changed
1 - macOS microphone permission fix — added
com.apple.security.device.audio-input entitlement via new src-tauri/entitlements.plist, wired through bundle.macOS.entitlements in tauri.conf.json. Without this entitlement, the hardened-runtime signature would silently inject zeros into the audio buffer (peak=0.0000) and macOS would never register HiveTerm in System Settings → Privacy & Security → Microphone, making voice input impossible to enable on signed/notarized builds
Added
4 - Voice input for agent prompts — native microphone capture and cloud transcription, dictate prompts straight into any agent bee. Click the floating amber mic (bottom-right of the terminal) or press
Cmd+Shift+M to record; the transcribed text is written into the bee's input without auto-submitting, so you can review before sending - New Voice settings tab with provider selector (OpenAI
whisper-1 or Groq whisper-large-v3), local API key storage, "Test microphone" button with peak-level feedback, transcription language selector (11 options including auto-detect and follow-app-language), and configurable auto-stop on silence (slider from 0.5s to 5s, or fully disabled) - Animated waveform during recording — 28 centered bars driven by RMS frequency data from cpal, DPR-scaled canvas at 60fps
- Voice Activity Detection (VAD) in Rust — auto-stops recording after N seconds of silence (configurable) once the user has spoken for at least 800ms, avoiding premature cutoffs and requiring zero click-to-stop
Changed
6 - Native audio capture via
cpal — cross-platform microphone access (macOS/Windows/Linux) with dedicated audio thread owning the stream, lock-free VAD state via AtomicU64/AtomicBool, and WAV encoding via hound. Eliminates WebView/getUserMedia dependency - Platform-aware error messages — silence detection returns OS-specific hints (macOS: "System Settings → Privacy & Security", Windows: equivalent Windows path) via
cfg!(target_os) dispatch in Rust - Whisper prompt biasing — per-language prompts (en/pt/es) with dev vocabulary ("git", "commit", "refactor", "função", "componente", …) dramatically reduce hallucinations like "ご視聴ありがとうございました" on short or quiet audio
- macOS dev-mode mic permission —
Info.plist embedded in the binary via __TEXT,__info_plist Mach-O section (build.rs rustc-link-arg) plus ad-hoc codesigning with the correct dev.hiveterm.desktop identifier (sign-dev.sh) so macOS TCC prompts correctly without requiring a full .app bundle - Custom range slider styling —
::-webkit-slider-thumb + ::-moz-range-thumb using hive theme CSS variables, readable in both light and dark modes - Styled language dropdown —
appearance-none + Lucide chevron matching the hive theme
Fixed
1 - Windows: CMD window no longer flashes every 10 seconds — non-PTY helper commands (git branch polling,
taskkill, explorer, cmd.exe env capture, reg machine GUID) now spawn with CREATE_NO_WINDOW, eliminating the transient cmd.exe popup that appeared on Windows every time the status bar refreshed git state
Changed
1 - New
NoWindowExt trait (src-tauri/src/process_ext.rs) — cross-platform helper that adds CREATE_NO_WINDOW on Windows and is a no-op elsewhere, applied to all 16 non-PTY Command call sites (commands.rs, shell_env.rs, license.rs, process_manager.rs)
Fixed
2 - Image drag-and-drop now shows [Image #N] — dragging screenshots/images into agent terminals (Claude Code, etc.) now triggers proper image detection instead of showing raw file paths. Uses bracketed paste mode and writes image data to system clipboard so CLIs can recognize the image
- Image paste uses bracketed paste — paste handler now sends paths via
terminal.paste() instead of raw write_pty, ensuring consistent behavior with clipboard-aware CLIs on all platforms
Changed
1 - New
copy_image_to_clipboard command — decodes PNG files and writes RGBA pixel data to the system clipboard via arboard (cross-platform: macOS, Windows, Linux)
Added
4 - Token usage tracking — real-time monitoring of input/output tokens and cost for Claude Code, Codex, and Gemini agents. Reads session JSONL files (Claude/Codex) and OTel telemetry logs (Gemini) with 5s adaptive polling
- Token details modal — click token stats in the status bar to see full breakdown: input, output, cache read, cache creation, cache hit rate, and estimated cost (Claude only)
- Token display settings — configurable in Settings > Sidebar: "All" (In/Out + cost), "Cost only", or "Never". Plus a master toggle in Settings > Agents
- Gemini telemetry toggle — one-click enable/disable of Gemini CLI local telemetry directly from Settings > Agents (writes to ~/.gemini/settings.json)
Fixed
3 - Quick-agent not switching project — adding an agent via context menu submenu or AddCommandModal now correctly selects the target project
- Agent auto-start on add — agents now auto-spawn when TerminalPane mounts instead of relying on fragile setTimeout
- Token session discovery — uses file creation time (not modification time) to avoid reading wrong session when multiple Claude instances share a project directory
Changed
3 - Reduced macOS energy consumption — resource monitor uses adaptive polling (5s active, 15s idle), granular Zustand selectors in TerminalPane, cursor blink paused on hidden terminals, memoized ProjectMetrics selector
- Wider default layout — minimum window width 1280px (was 680px), sidebar default 400px (was 320px)
- Compact status bar — action buttons are icon-only (Clear, Stop, Restart), "View changes" → "Review", "Open on GitHub" → "Open"
Fixed
5 - High energy consumption on macOS — resource monitor now uses adaptive polling (5s active, 15s idle) instead of fixed 3s, reducing CPU wakeups by ~40%
- Excessive re-renders in TerminalPane — replaced
useSettingsStore() (whole-store subscription) with granular selectors, preventing N terminal re-renders on every settings change - Cursor blink on hidden terminals — cursor animation now pauses when a terminal tab is not visible, eliminating ~1 CPU wakeup/sec per hidden terminal
- ProjectMetrics re-render storm — metrics selector now returns a stable primitive instead of a new object reference, avoiding re-renders every 5s per project
- Quick-agent not switching project — adding an agent via context menu submenu or AddCommandModal now correctly selects the target project
Added
4 - Custom title bar — native macOS title bar replaced with custom overlay showing app title, plan badge ("Free — 2/3 projects"), and Upgrade button
- MCP multi-client support — Queen MCP server now supports Codex (Streamable HTTP at
/mcp) and Gemini (SSE at /sse) in addition to Claude Code, with per-client toggles in Settings > Integrations - MCP auto-registration — HiveTerm automatically registers as an MCP server in Claude Code's
~/.claude.json on first launch (no manual setup needed) - Settings close button — added X button with Esc keyboard shortcut to close the Settings panel
Fixed
3 - Project reorder persistence — reordering projects via drag now correctly saves to the active workspace (was only saving to legacy
openProjectPaths) - Terminal overflow — terminal content no longer overflows behind the status bar footer; added
overflow-hidden to main area and xterm container - Settings modal clipping — agent edit modal now uses
absolute positioning to stay within the settings panel instead of being clipped by overflow-hidden
Changed
3 - Minimum window size — enforced 680x400px minimum to prevent UI elements from being cut off
- Sidebar footer cleanup — moved "Free — 2/3" badge from floating text to the title bar; simplified sidebar footer
- CORS for MCP clients — opened CORS on Queen MCP server to allow local CLI clients (Codex, Gemini) to connect
Added
4 - Agent avatars in sidebar — agent bees now show their logo (Claude, Codex, Gemini, OpenCode, Cline) with a status badge overlay instead of the generic hex icon
- PPP regional pricing — website now shows geo-localized pricing via Cloudflare Pages Functions (5 tiers: $99 US, €89 Europe, R$149 Brazil, $29 LATAM, $19 India/SEA)
- Agent-specific CLI suggestions — Settings > Agents now shows relevant flags per agent type (e.g.
--full-auto for Codex, --yolo for Gemini) - Dev/prod isolation — debug builds use
~/.hiveterm-dev/ for settings, license, and hooks to avoid conflicts with the installed release
Fixed
4 - Free tier limits — count only running bees (stopped bees no longer block new spawns); check limits before spawning PTY to prevent orphaned processes; enforce per-project limit on MCP commands
- Project count — "Free — X/3 projects" now counts globally across all workspaces, not just the active one
- Workspace switch — switching or creating workspaces now clears the active terminal panel
- Spawn error UX — errors shown in the stopped overlay with an "Upgrade to Pro" button instead of hidden behind the terminal
Changed
3 - Sidebar default width — increased from 240px to 320px
- Tab bar setting — moved from Sidebar settings to Appearance > Application
- Projects default expanded — projects no longer collapse when switching workspaces
Fixed
1 - License lost on reboot — machine fingerprint was using MAC address which changes on macOS due to Private Wi-Fi Address randomization. Now uses stable hardware UUID (
IOPlatformUUID on macOS, /etc/machine-id on Linux, Registry MachineGuid on Windows). Includes migration so existing tokens remain valid.
Changed
2 - Auto-update via Cloudflare R2 — update endpoint moved from GitHub Releases (inaccessible from private repo) to Cloudflare R2 at
dl.hiveterm.com. Release workflow now automatically uploads artifacts to R2 after builds complete. - Website download URLs — now use versioned paths (
dl.hiveterm.com/v0.12.0/...) for better artifact management and rollback support.
Added
2 - Toggle tab bar visibility — new setting to show/hide the tab bar for a cleaner workspace
- macOS code signing & Linux builds — CI release pipeline now includes code signing for macOS and builds for Linux
Security
1 - Full security audit remediation — resolved all 12 findings from security audit (1 critical, 4 high, 6 medium, 5 low): - MCP server hardened with restrictive CORS and random port binding - Path traversal fixes in config loading and image reading (canonicalize + filename validation) - TOCTOU race condition fixed — license check moved inside write lock for atomic spawn - SSE session limits (max 50) with cleanup on disconnect - Settings and port validation with atomic writes - Token file permissions restricted to 0600 on Unix - Clipboard extension allowlist and hook script injection prevention
Fixed
1 - Cline agent not appearing — new built-in agents added in updates were invisible to existing users because persisted settings overwrote the defaults without merging new entries. Added a migration in
loadPersistedSettings that detects missing built-in agents and appends them while preserving user customizations.
Added
2 - Cline agent tool — added Cline as a built-in agent option in Add Agent modal, quick-add menu, and auto-detect
- License generation script —
create-license script for partner/manual license generation
Added
7 - License system — annual Pro license with free tier (3 projects, 5 bees/project, 20 total bees, 2 MCP sub-agents) and unlimited Pro tier
- Ed25519 offline validation — license tokens verified locally without internet after activation, with 7-day grace period on expiry
- Machine fingerprint — license tied to hardware (2 machines per license), SHA-256 of MAC + hostname + OS + arch
- Account tab — new Settings > Account tab showing plan status, license key activation/deactivation, and machine ID
- Upgrade modal — shown when free-tier limits are hit, with license key input and purchase link
- Sidebar badge — displays "Free — X/3 projects" for free-tier users
- License API — Cloudflare Worker with Hono (4 endpoints: activate, deactivate, status, Stripe webhook) + KV storage + Resend email delivery
Changed
2 - License enforcement at Rust command layer (spawn_bee, restart_bee) and MCP tools — cannot be bypassed from frontend
- i18n: all license strings translated in English, Portuguese, and Spanish
Fixed
2 - Changes panel: untracked files — new (untracked) files now display their full content as an all-additions diff instead of "No changes detected"
- Sidebar filter crash — fixed app crash when typing in the filter input, caused by React hooks called after a conditional return
Fixed
3 - MCP bees placed in wrong project — inherit projectId from parent bee instead of fragile backend heuristic; fallback uses longest-match path matching
- Literal
\r in write_input — handle \\r escape sequence (agents sending \r for Enter appeared as text) - write_input docs — clarify that Codex/Gemini multi-line CLIs cannot submit via write_input; guide agents to use spawn_bee command argument
Added
6 - Tree connector sidebar — CSS tree layout (├ └) connecting AGENTS, TERMINALS, COMMANDS sections with continuous border lines
- Sub-agents section — MCP-spawned bees (
queen/ prefix) shown in a dedicated "Sub-agents" group branching from the agents tree - Agent auto-rename — agent bees rename from terminal title via
xterm.onTitleChange, manual renames take priority - Double-click project header — collapse/expand project section
- Font scale fix — all
text-[Npx] converted to rem so Interface font scale applies to all text, not just spacing - Font scale tooltip — hover the A buttons to see exact pixel size
Changed
12 - Section labels (AGENTS, TERMINALS, etc.) use
font-mono for terminal aesthetic - Separator line between section title and counter in BeeGroup
- "Filter bees..." replaces "Filter processes..." (i18n)
- Add Agent modal: name field hidden, defaults to "Store locally only", auto-start on add, auto-increment duplicates
- Long bee names truncated in status bar (200px max with tooltip)
- Default font sizes: application 15px, terminal 13px
-
HIVETERM_BEE_ID env var injected in all spawned bees - MCP
spawn_bee tool description updated with correct CLI flags - CLAUDE.md fully updated with architecture, file structure, rem convention, and release flow
- Removed unused
NotificationError variant - Fixed Windows CI:
test_get_git_branches_current_repo resilient to shallow clones - Removed useless
usize >= 0 comparison warnings
Added
9 - Notification system fix — reverted to Tauri plugin approach (notify-rust uses deprecated API on macOS 12+)
- Hook notifications —
POST /notify REST endpoint on Queen MCP server, configurable toggle in Settings > Notifications - Auto-install Claude Code hooks — toggle in Settings registers
Notification hook in ~/.claude/settings.json automatically - Auto-rename agents — agent bees rename from terminal title via
xterm.onTitleChange (strips * prefix, manual renames take priority) - Sub-agents section — MCP-spawned bees (
queen/ prefix) appear in a dedicated "Sub-agents" group with tree connectors - Tree connector sidebar — CSS tree layout (├ └) connecting AGENTS, TERMINALS, COMMANDS sections and sub-agents
- Add Agent UX — name field hidden (auto-generated), defaults to "Store locally only", auto-start on add, auto-increment duplicates
- Double-click project header — collapse/expand project section
- Auto-focus terminal — terminal receives focus when switching tabs
Changed
8 -
HIVETERM_BEE_ID env var injected in all spawned bees - MCP
spawn_bee tool description updated with correct CLI flags - Section labels use
font-mono for terminal aesthetic - Separator line between section title and counter
- Long bee names truncated in status bar (200px max with tooltip)
- "Filter bees..." replaces "Filter processes..." (i18n)
- Duplicate name validation with red border and error message in Add modal
- CLAUDE.md fully updated with current architecture, file structure, and conventions
Added
8 - Workspaces — organize projects by context (Work, Personal, Client) with a dropdown selector at the top of the sidebar
- Workspace onboarding — first-access modal prompts for the first workspace name
- Workspace CRUD — create, rename, and delete workspaces from the dropdown menu
- Non-destructive workspace switch — bees keep running when switching workspaces; projects lazy-load on first visit
- Duplicate project guard — warning dialog blocks adding the same project to multiple workspaces
- New workspace hotkey (⌘⇧W) — quick-create workspace from anywhere, shown in dropdown and Hotkeys settings tab
- Settings link in workspace dropdown — quick access to settings with ⌘, shortcut hint
- Automatic migration — existing users get a "Default" workspace with their current projects, zero manual steps
Changed
3 - Workspace selector aligns with TabBar height (32px) for consistent layout
- Empty state shortcut updated from ⌘K to ⌘O
- Active panel and tabs clear when switching workspaces
Added
6 - Git Changes Panel — modal diff viewer (⌘⇧D) with GitHub-style file sidebar, syntax-colored diffs, and search (⌘F) with match navigation
- Git branch in status bar — shows current branch name with dirty indicator (*), clickable to open branch on GitHub when remote exists
- Open on GitHub (⌘⇧G) — detects git remote URL, converts SSH to HTTPS, opens in browser
- Agent action bar — footer in Changes modal with Commit, Create PR, Revert All buttons + free-form "Ask agent..." input that sends prompts directly to the running agent
- Notification click-to-focus — clicking a desktop notification (crash, agent complete, bell) focuses the HiveTerm window and switches to the agent's tab
- Git hotkeys in settings — new "Git" section in Hotkeys tab showing ⌘⇧D and ⌘⇧G
Changed
3 - Git commands (status, numstat, diff) run in parallel via
std::thread::scope for faster Changes panel loading - Changes button highlights amber only when working tree is dirty
- Window title separator changed from em dash (—) to middle dot (·)
Added
13 - Complete i18n coverage (~130 new keys) for all UI components across EN/PT/ES
- Terminal search with Cmd+F — match count, Enter/Shift+Enter navigation
- Auto-start terminals on creation (Cmd+T, sidebar, hover button)
- Project header hover actions: Start/Stop All, Open in Terminal, Reveal in Finder, Open in Editor
- Cmd+W closes active tab with smart neighbor activation and confirmation dialog
- Right-click context menu on tabs: Rename, Start/Stop/Restart, Remove
- Context menu submenus — "Add agent" shows pre-configured agents for quick spawn
- Hotkeys settings tab with keyboard shortcut reference
- Native OS notifications (macOS/Windows/Linux) for crash, bell, and agent events
- MCP
notify tool — agents can send desktop notifications when tasks complete - Notifications settings tab with event toggles and behavior options
- Keyboard shortcut hints (⌘1-9) shown in tab bar
- Connected CPU/memory threshold settings to sidebar and process metrics
Fixed
6 - Fixed "Open in editor" failing in production builds (missing login shell PATH)
- Fixed terminal overlay blocking error output on crash — overlay only for stopped
- Fixed new terminals not auto-starting when created
- Fixed project not activating when adding terminal from another project
- Fixed all missing accents in Portuguese and Spanish translations
- Parent detection prefers original bee over MCP siblings
Changed
4 - Removed unused "Tools" settings tab
- Added tauri-plugin-notification dependency
- Added @xterm/addon-search dependency
- 73 tests passing (notifications, settings, search, stores, i18n)
Fixed
2 - Keyboard shortcuts work when terminal focused (capture phase)
- Reorder — Agent, Terminal, Command in context menu + palette
Added
4 - Cmd+O / Ctrl+O opens project folder dialog
- Add project button shows ⌘O kbd, removed ellipsis
- Keyboard shortcuts — ⌘T terminal, ⌘⇧A agent, ⌘⇧N command
- ⌘E new agent, ⌘D new command — shortcuts + command palette
Added
2 - Clickable URLs in terminal — click to open in browser
- Theme toggle shows Monitor icon for 'system' mode
Fixed
4 - Stop button shows 'Stopped' not 'Crashed'
- Start All activates each bee before restarting
- Letter spacing default 0, add 0 option in settings
- Stop button updates terminal overlay — emit status event on kill
Changed
1 - Remove splashscreen — causes more issues than it solves
Fixed
9 - Restart status race — child watcher checks PID before updating
- I18n for IntegrationsTab — added EN/PT/ES translations
- All auto_start bees spawn on app launch, not just the active one
- MCP spawn_bee places bees under matching project, not always Queen
- Attach_channel status check — match lowercase 'running' from serde
- MCP kill_bee removes bee from sidebar via queen:bee-killed event
- Write_input converts \n to carriage return for PTY Enter
- Write_input accepts both 'data' and 'input' field names
- Resolve all clippy warnings — zero errors with -D warnings
Changed
1 - Queen MCP instructions in CLAUDE.md — agent naming, command, type
Added
8 - Queen MCP server — multi-agent orchestration via MCP protocol
- Queen MCP toggle in Settings > Integrations
- Projects with auto-start bees expand on launch
- MCP spawn_bee auto-resolves agent command from Settings > Agents
- Spawn_bee tool description instructs descriptive naming for agents
- Sub-agent tree view — children nest under parent in sidebar
- Auto-rename parent to 'Orchestrator' when spawning sub-agents
- Auto-detect parent agent — no parent_id param needed
Changed
1 - Release v0.6.0 — Queen MCP Server
Fixed
2 - Removing a bee no longer corrupts other bees' config
- Removing a bee no longer crashes siblings with same name
Fixed
1 - Windows double paste — disable browser paste handler on non-macOS
Fixed
1 - Dynamic WebGL — only active terminal uses GPU context
Added
1 - Sidebar UI polish — project headers with borders, spacing, chevron hover
Fixed
3 - Ctrl+C copies selection on Windows instead of sending interrupt
- Set configKey on bees created via AddCommandModal
- Disable Ctrl+C interrupt for agents — use UI buttons to stop
Fixed
1 - Windows UTF-8 encoding — set code page 65001 for cmd.exe and PowerShell
Changed
1 - Only build Windows in CI — macOS built locally to save minutes
Fixed
1 - Modals only close via X/Cancel/Escape, not backdrop click
Fixed
2 - Rename doesn't break terminal — removed bees Map subscription
- Windows icon — multi-size ICO (16/24/32/48/64/256)
Fixed
8 - Sync PTY size after spawn/restart — no more wrong columns
- Projects start collapsed except the active one
- Click project name to expand/collapse, double-click for settings
- Standardize sidebar numbers font-mono + translate missing strings
- Chevron toggles collapse, click name opens settings
- Icon padding for macOS Dock — same size as other apps
- Clear terminal on restart — fresh screen instead of stacking
- Start button works on first click — spawn after terminal mounts
Added
3 - Add 'Project settings...' to context menu
- Terminal status bar with controls, CPU/memory, status
- Exited/crashed overlay on stopped terminals
Fixed
1 - Respect auto_start=false + send Ctrl+C before kill for Docker
Added
1 - Add Dank Mono to font family options
Added
2 - New honeycomb brand icon — 7 hexagons with gradient opacity
- Kill process tree on close + quit confirmation dialog
Fixed
1 - Set TERM=xterm-256color for color support in PTY
Fixed
14 - Remove non-functional UI elements, dynamic Start/Stop all
- Start all stays on settings page, spawns all processes
- Settings panel closes when clicking bee or project in sidebar
- Remove ESC and X button from settings panel
- Deselect bee when opening global settings
- Manual rename not overwritten by terminal title changes
- Laravel detection suggests single 'composer run dev' command
- Windows PTY — use cmd.exe instead of /bin/sh
- Debounce terminal title rename to prevent re-render storms
- Get_user_shell returns COMSPEC on Windows, SHELL on Unix
- Force terminal refresh when becoming visible — fixes blank screen
- Remove auto-rename via OSC title — was causing blank terminals
- Rename uses store action, terminal fits at 50/150/500ms
- Rename doesn't break terminal — use configKey for config lookup
Added
4 - Platform-aware keyboard shortcuts — Ctrl on Windows/Linux, ⌘ on Mac
- Rename agents, terminals, commands via right-click
- Auto-rename bees from terminal title (OSC 0/2)
- Re-add auto-rename from terminal title (OSC) — safe with configKey
Changed
1 - Remove auto-rename via OSC title — causes blank terminals
Fixed
2 - Align bee hex badges with section icons in sidebar
- Windows CI — shell env test accepts PATH or Path
Changed
1 - Inline controls next to hex badge, not at end of row
Fixed
13 - Add icon.ico for Windows build
- Kill child processes on Drop + drag-drop enabled
- Drag & drop via Tauri native API — gets real file paths
- Drag & drop — quote paths with spaces, deduplicate
- Drag & drop only on visible terminal, escape shell special chars
- Drag & drop images — copy to temp with clean filename
- Debounce drag & drop — ignore duplicate events within 500ms
- Icon picker uses native file dialog instead of directory scan
- Add missing useEffect import in ProjectSection
- Cmd+1-9 shortcuts scoped to active project, ordered like sidebar
- Auto-restart respects live toggle changes + security fixes
- Auto-start/restart saves false explicitly + smoother drag reorder
- Project reorder via context menu (Move up/Move down)
Added
5 - Paste images into terminal — saves as temp file, pastes path
- Drag & drop files/images into terminal
- Filter processes — search by name or command in sidebar
- Show project icon in sidebar — falls back to hex badge
- Drag-to-reorder projects in sidebar
Security
1 - Fix 3 High severity issues from audit
Fixed
2 - Kill all running processes on app exit
- Terminal rendering — only fit/resize the visible terminal
Changed
1 - Release v0.2.1 — fix signing key format
Fixed
33 - Keep terminals alive on tab switch, Lucide icons, resizable sidebar
- Auto-restart only on actual crashes, never on ephemeral terminals
- Sidebar layout — labels next to icons, no green highlights, project borders
- Use user's default shell ($SHELL) for terminals and PTY spawn
- Spawn interactive shells directly without shell -c wrapper
- Terminal spawn loop — stabilize usePtyBridge effect deps
- Restart uses event-based approach instead of remount hack
- Show Add agent/command buttons in empty sidebar sections
- Enable Remove for agents and commands, not just terminals
- Terminal width on initial mount + sidebar context menu for Add project
- Deselect active bee when opening project settings
- Project context menu not bubbling to sidebar Add project menu
- Load project images via base64 instead of asset protocol
- Project settings title syncs when switching projects
- Right-click anywhere in project area shows project context menu
- Replace native select with custom styled dropdown
- Remove --dangerously-skip-permissions default, add quick-toggle flags
- Add missing useSettingsStore import in Sidebar and BeeGroup
- Terminal preview reflects settings, interface font scale applies
- Reveal in Finder + Open in editor via Rust commands, system theme default
- Unify theme toggle icons with Lucide, match Settings gear size
- System theme support, interface scale default 14px
- 7 TypeScript errors breaking CI build
- Start button re-spawns stopped bees via restart event
- Start button — only restart if terminal was previously opened
- Sanitize bee names in IDs for Tauri event compatibility
- Commands run in project directory, not home
- Commands not starting — State<Arc<ProcessManager>> mismatch
- Restart/start — ignore kill errors, always re-spawn
- Allow multiple agents with same name — unique IDs with timestamp
- Terminal width/flash on tab switch — use visibility instead of display
- Terminal fit on initial mount — double rAF for layout completion
- Always show + Add buttons even when section has items
Changed
2 - Add cross-platform build workflow for macOS, Windows, Linux
- Build workflow only on PRs, not on every push to main
Added
26 - Open project, shell env capture, auto-restart, sidebar controls
- Ephemeral terminals, multi-project support, bee uptime display
- Stack auto-detect, context menus, sidebar UI overhaul
- Sidebar layout overhaul
- Full project context menu — start/stop/restart all, add terminal, remove
- Project settings panel with overview, settings, notifications, commands
- Add Command modal + expandable command editor in project settings
- Project icon picker from project images
- Terminal theme follows light/dark mode
- Project setup modal on first add
- Test infrastructure + 43 tests, fix stop button and terminal padding
- Rename to HiveTerm, dynamic title bar, dark native theme
- Native confirmation dialog before removing agent/terminal/command
- Global settings modal + i18n (PT/EN/ES) + Appearance tab
- Sidebar settings tab with filter, sections, project/process headers, footer
- Wire sidebar settings — show/hide filter, empty sections, footer
- Agents settings tab with agent tools list, edit modal, auto-detect
- Wire i18n translations to all components + connect terminal settings
- Pre-configure popular agent tools as enabled by default
- Replace generic dots with hexagonal Hive-branded status badges
- Working Directory buttons with tooltips
- Persist settings to ~/.hiveterm/settings.json, cross-platform
- Persist open projects across app restarts
- CPU/memory monitoring for running processes
- Quick-pick agents from configured tools in Add Agent modal
- Auto-updater with signing keys and check for updates
Changed
2 - Release infrastructure — changelog, release workflow, version script
- Release v0.2.0
Changed
2 - Remove uptime display from sidebar bee items
- Settings from modal overlay to inline panel