Skip to content

Releases: OpenSource03/harnss

0.21.5

19 Mar 01:31

Choose a tag to compare

fix: enable shell mode for ACP agent spawn on Windows

On Windows, `npx` is a `.cmd` batch wrapper. Node's `spawn()` doesn't
resolve `.cmd` extensions, causing ENOENT even when npx is on PATH.
Adding `shell: true` on win32 lets cmd.exe handle the resolution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

v0.21.4 — Agent Control, Transcripts & Streaming Performance

18 Mar 02:14

Choose a tag to compare

What's New

🤖 Background Agent Control

  • Stop running agents — a stop button now appears next to each running background agent, letting you cancel them at any time
  • Live progress summaries — agents now show AI-generated descriptions of what they're working on, updated in real time
  • Current tool indicator — see exactly which tool an agent is using right now and how long it's been running

📄 Agent Transcripts

When a background agent completes, you can now view its full transcript — every tool call, result, and text response — in a detailed modal. Great for understanding what the agent did and debugging unexpected results.

⚡ Faster Streaming

Streaming responses during long conversations are noticeably snappier. Invisible content updates (like thinking) now run at a fraction of the rate, and several rendering hot paths have been optimized to reduce unnecessary work during active streams.


Full Changelog: v0.21.3...v0.21.4

v0.21.3 — Codex Permissions, Terminal & Edit Display Fixes

17 Mar 14:49

Choose a tag to compare

Changes

⚙️ Codex Permission Policies

Codex sessions now respect your chosen approval and sandbox policies. Previously these settings weren't forwarded — now they're applied from the first message onward.

🐛 Bug Fixes

  • Fixed the terminal replaying garbled text after switching between spaces — historical output no longer triggers stray escape-sequence responses
  • Fixed multi-hunk edits to a single file incorrectly displaying as "N files" in collapsed tool cards and the changes panel

Full Changelog: v0.21.2...v0.21.3

v0.21.2 — Multi-File Codex Edits & Queued Message Fixes

16 Mar 12:05

Choose a tag to compare

Changes

🐛 Bug Fixes

  • Multi-file Codex edits now show all files — when Codex edited multiple files at once (e.g. updating both a Hebrew and English translation file), only the first file's changes appeared in the UI. All files in the edit are now rendered individually with their own diff viewers.
  • Queued messages stay visible above the input bar — previously, messages waiting to be sent could end up hidden behind the input area. They now appear correctly in the message list alongside other messages.

Full Changelog: v0.21.1...v0.21.2

v0.21.1 — Chat Virtualization Fixes

16 Mar 09:53

Choose a tag to compare

Changes

🐛 Bug Fixes

  • Fixed chat content sometimes appearing misaligned or overlapping after switching sessions
  • Fixed switching between spaces occasionally triggering a race condition that could show the wrong session
  • Fixed streaming text from a previous session briefly flashing when opening a new chat
  • Fixed message bubbles and tool summaries occasionally breaking out of their expected layout

Full Changelog: v0.21.0...v0.21.1

v0.21.0 — Virtualized Chat, Mermaid Diagrams & Shared Lib Extraction

16 Mar 03:11

Choose a tag to compare

Warning

This is a pre-release and can only be downloaded manually due to potential issues found out after testing.

What's New

⚡ Much Faster Chat

Long conversations are dramatically faster now. We replaced the old rendering approach with a proper virtualized list — only the messages you can actually see are rendered at any time. Previously, a 500-message chat would keep hundreds of React components in memory. Now it's just the ~20 visible ones, regardless of how long the conversation gets. Scrolling is smoother, switching sessions is snappier, and the app uses less memory overall.

📊 Mermaid Diagrams #29

When Claude draws a diagram using a mermaid code block, it now actually renders as a visual diagram — flowcharts, sequence diagrams, pie charts, git graphs, and more. Diagrams adapt to your light/dark theme automatically and are cached so they don't re-render on scroll. While Claude is still typing, you see the raw source; once the message is complete, the diagram appears.

📂 Deep Folder Inclusion (@#)

You can now use @#foldername in the composer to include the full contents of a folder — not just the file tree, but every file inside it. Regular @folder still gives you the structure overview. Use @# when you want Agent to actually read everything in a directory. If the folder is large (over ~50k tokens), Harnss will warn you before sending.

⌨️ /clear Command #15

Type /clear in the composer and hit Enter to instantly open a fresh chat. Quick way to start over without reaching for the sidebar.

🛡 Better Error Feedback

Permission prompts (allow/deny tool use) now show a notification if something goes wrong responding to them, instead of failing silently. Fixes several edge cases where permission state could get stuck.

🐛 Bug Fixes

  • Fixed a bug where switching out of plan mode could sometimes reset the permission level incorrectly
  • Fixed markdown characters occasionally getting eaten during streaming (apostrophes, backticks, etc.)
  • Clipboard copy now works correctly in all cases including sandboxed contexts
  • Codex web search cards now show meaningful details (queries used, URLs opened) instead of blank tool inputs
  • And many other small irritating bugs I don't remember to mention

Full Changelog: v0.20.0...v0.21.0

v0.20.0 — Startup Performance & Draft Preservation

12 Mar 03:37

Choose a tag to compare

What's New

⚡ Startup Performance

  • Flash-free window launch — window starts hidden (show: false) and appears only after ready-to-show, eliminating the white flash on startup
  • Non-blocking analytics init — PostHog initialization in the main process is now fire-and-forget instead of await-blocking app.whenReady()
  • Deferred analytics sync — renderer-side syncAnalyticsSettings() moved from module-level to a useEffect so IPC calls don't block first paint
  • Lazy model cache revalidation — model list revalidation (which spawns a Claude SDK subprocess) is deferred by 3 seconds, reducing startup IPC contention while cached models serve the initial render
  • Relaxed session prefetch timing — idle callback timeout raised from 1.5s → 5s and fallback timeout from 250ms → 3s, with 50ms yields between sequential loads to let the main process event loop breathe

🎨 Draft Preservation

  • BottomComposer component — new wrapper keeps the InputBar always mounted (hidden via aria-hidden + inert) while a permission prompt is active, preserving any unsent text the user was composing
  • Test coverage — static-render tests verify both states: InputBar visible when no permission is pending, and InputBar hidden-but-mounted alongside the PermissionPrompt

Full Changelog: v0.19.1...v0.20.0

v0.19.1 — Streaming Stability & Thinking Animation Fix

11 Mar 04:20

Choose a tag to compare

Changes

🐛 Streaming Stability

  • Overlap-tolerant chunk merging — new mergeStreamingChunk() handles cumulative snapshots, overlapping deltas, and exact replays from upstream without duplicating text
  • Background session streaming — background Claude handler now uses the same merge logic, preventing text duplication when switching between sessions

🎨 Thinking Animation

  • Extracted thinking animation state machine — moved from inline ThinkingBlock logic into a pure, testable thinking-animation.ts module
  • Removed coalescing timer — the v0.19.0 interval-based chunk coalescing caused replay/duplication under rapid thinking updates; replaced with a simpler append-only model

Full Changelog: v0.19.0...v0.19.1

v0.19.0 — Session Prefetch, Scoped Permissions & Dark Theme Overhaul

11 Mar 04:00

Choose a tag to compare

What's New

⚡ Session Prefetch & Switching Performance

  • Session payload cache — prefetches up to 6 recent sessions via requestIdleCallback so switching is instant with no disk I/O
  • Metadata sidecar files — session listing reads tiny .meta.json files instead of parsing full multi-MB session files
  • Async session I/O — migrated all fs.existsSync/readFileSync calls to fs.promises.* for non-blocking session operations
  • Consolidated metadata sync — merged 4 separate setSessions(prev => prev.map(...)) effects into a single batched update
  • startTransition wrapping — session switch state updates are wrapped in React transitions for smoother UI

🔐 Scoped Permission Rules

  • "Always allow" dropdown — split button on the permission prompt with per-destination scope (session, local project, shared project, user-global)
  • Permission rule forwardingupdatedPermissions flows through the SDK permission bridge so rules persist to the chosen settings file
  • Local settings source — all SDK query paths now include "local" in settingSources for .claude/settings.local.json support

🎨 Dark Theme & Glass Morphism Overhaul

  • Light glass tuning — separate gradient math for light glass mode with softer titlebar veils, adjusted shadow opacity curves, and color-mix(in oklab, white 97%, var(--background) 3%) surface color
  • Refined top scroll fade — lighter, shorter gradient (h-20/h-24), reduced radial shadow spread, and fine-tuned opacity breakpoints for both island and flat layouts
  • Transparency toggleglass-enabled class now respects a harnss-transparency localStorage key, applied early in preload before React mounts
  • Darker window background — Electron window base color changed from #18181b to #040404 for true dark appearance
  • ShadCN Select component — new Radix-based <Select> replaces all native <select> elements in settings panels for consistent styling

🛠 Tool & UI Polish

  • Bash output truncation — long bash results (200+ lines) collapse with a "Show full output" toggle
  • Engine icons in sidebar — session items show per-engine/agent icons instead of generic message bubbles
  • AskUserQuestion redesign — tighter spacing, smaller type scale, and cleaner answer display
  • Icon picker fix — dropdown-to-popover transition uses onCloseAutoFocus prevention instead of fragile setTimeout
  • Message unqueue — new unqueueMessage action lets users remove queued messages before they're sent

📜 Scroll System Refactor

  • getTopScrollProgress helper — extracted smoothstep scroll-progress calculation to a pure, tested function in chat-scroll.ts
  • Synchronous viewport sync — programmatic scrolls (jump-to-bottom, prepend anchor restore) now immediately update top-progress and scrolled-from-top state
  • useLayoutEffect for session reset — scroll position resets happen in layout phase to prevent flicker on session switch
  • Stale viewport ref guardgetViewport() checks isConnected to avoid operating on detached DOM nodes

🐛 Bug Fixes

  • Git status loading race — separate loadingRequestIdRef prevents stale requests from clearing the loading spinner
  • Switch request guardswitchRequestIdRef discards late-arriving disk loads when the user rapidly switches sessions
  • Non-blocking save on switchsaveCurrentSession() is now fire-and-forget (void) during session switches to avoid blocking the UI

Full Changelog: v0.18.1...v0.19.0

v0.18.1 — Project Switch Performance Fix

10 Mar 04:43

Choose a tag to compare

Changes

⚡ Performance

  • Async file listing — converted synchronous readdirSync calls to async fs.promises.readdir with periodic event-loop yielding every 25 directories, preventing main-process freezes on large projects
  • Single recursive watcher — replaced per-directory watcher swarm (up to 5,000 individual fs.watch handles) with a single fs.watch(cwd, { recursive: true }) per project, leveraging native FSEvents (macOS) and ReadDirectoryChangesW (Windows) for near-zero overhead
  • Lazy panel loading — Project Files panel now skips all file fetching and watcher setup when the panel is not visible, avoiding unnecessary I/O during project switching

📦 Dependencies

  • SDK bump to @anthropic-ai/claude-agent-sdk 0.2.72

Full Changelog: v0.18.0...v0.18.1