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