Skip to content

Releases: tylergraydev/fury

Fury v2.1.0

Choose a tag to compare

@tylergraydev tylergraydev released this 10 Apr 01:18

What's New

Persistent Memory System

AI agents now retain knowledge across sessions with a 3-layer memory architecture:

  • Layer 1 (Context Injection): SQLite-backed observations, compressed snapshots, and curated learnings are injected into agent system prompts automatically
  • Layer 2 (Observation Extraction): PostToolUse hooks capture high-signal events (file edits, test results, errors, git ops) and compress them into concise snapshots — zero API token cost
  • Layer 3 (On-Demand Tools): In-process MCP server exposes memory_recall, memory_save_learning, and memory_search tools that Claude can call during sessions
  • MemPalace Integration: Optional Python-based MCP sync for cross-session memory persistence
  • Settings UI: New Memory tab in settings for configuring memory behavior

Browser, Codebase Search, Inline Edit, Notepads, AI PR Review

  • Built-in browser for web research during agent sessions
  • Codebase-wide search with file and symbol navigation
  • Inline edit support for targeted code modifications
  • Notepads for persistent scratch notes across sessions
  • AI-powered pull request review

Bug Fixes

  • Fix clippy 1.94 errors blocking CI
  • Fix TypeScript build errors
  • Address security and reliability issues in new features
  • Fix async executor blocking during memory context building
  • Fix memory context not being injected on followup agent messages

Fury v2.0.0

Choose a tag to compare

@github-actions github-actions released this 04 Apr 23:20

See the assets to download and install this version.

v1.16.0

Choose a tag to compare

@tylergraydev tylergraydev released this 27 Mar 00:42
6132c1b

What's New

Enhanced Permission System

The permission flow gets a major upgrade. "Always Allow" now works — when you approve a tool with Always Allow, the rule persists to ~/.claude/settings.json and carries across sessions. No more re-approving the same tools every time you restart.

Permission timeout safety. A 120-second timeout in the sidecar prevents indefinite hangs when HMR reloads disconnect the frontend mid-permission-prompt. Previously this could leave the agent frozen waiting for a response that would never come.

New Permissions settings tab. Manage your allow/deny rules from Settings with suggested presets for common tool patterns. View, add, and remove rules without editing JSON files.

Other permission improvements:

  • Pending permissions tracked in AppState for re-emission on frontend reconnect
  • Switched from bypassPermissions to default permission mode for safer defaults
  • Built-in slash commands (/clear, etc.) now work while an agent is running
  • /clear stops running agents before clearing chat

Bug Fixes

  • Sidecar camelCase serialization — Fixed sidecar command fields to serialize as camelCase, matching the TypeScript protocol contract. This resolves deserialization failures between the Rust backend and Node.js sidecar. (#139)

E2E Coverage

  • Expanded permission flow E2E test coverage

Full Changelog: v1.15.0...v1.16.0

v1.15.0

Choose a tag to compare

@tylergraydev tylergraydev released this 26 Mar 14:25
69b9c76

What's New

Claude Agent SDK Migration

Fury now uses the Claude Agent SDK (@anthropic-ai/claude-agent-sdk) instead of spawning the Claude CLI directly. This is the biggest architectural change since launch.

Permission control now works. Safe mode surfaces an Allow/Deny bar for every tool call the agent makes — file writes, shell commands, everything. Users can approve or deny each action individually. The SDK's canUseTool callback gives programmatic control that the CLI's stream-json mode never supported.

.claude/settings.json respected automatically. If you have existing permission rules (allow, deny) in your project or user settings, the SDK loads and enforces them. Pre-approved tools skip the prompt entirely.

Real-time streaming. The SDK emits character-by-character text deltas (content_block_delta) for smoother streaming output, plus tool input deltas so you can see commands being composed live.

Architecture: A Node.js sidecar process wraps the SDK and communicates with the Rust backend via stdin/stdout NDJSON. Single sidecar handles all workspaces (multiplexed by ID). The frontend is unchanged — same event format, same UI.

Other Changes

  • Removed --sandbox flag from Claude process args (#135)

Full Changelog: v1.14.0...v1.15.0

v1.14.0

Choose a tag to compare

@tylergraydev tylergraydev released this 24 Mar 03:04
72757f6

What's New

Features

  • One-click repo containerization via AI (#131) — AI-powered Dockerfile and docker-compose generation for any repository

Security & Stability

  • Path traversal protection — read_file_base64, diff, and branch file operations now validate paths against known workspace/repo roots
  • Container ID validation — all docker exec calls validate container IDs match hex format
  • Env var key sanitization — prevents argument injection via docker exec -e flags
  • Deadlock prevention — fixed 3 lock ordering violations in agent and devcontainer commands
  • Poisoned lock hardening — security validation now fails hard instead of silently degrading

Accessibility

  • WCAG AA improvements: aria-label on chat textarea, icon buttons, notification bell
  • Dialog semantics (role="dialog", focus trap, Escape key) on settings and notification overlays
  • Keyboard navigation on model dropdown menu
  • aria-live status announcements on agent status indicator

Performance

  • Scroll-aware auto-scroll in chat — no longer force-scrolls when reading earlier messages
  • Adaptive polling in ChangesPanel (3s when active, 15s when idle)
  • MarkdownContent memoization — components no longer rebuild on every streaming chunk
  • Fixed 8 components using non-selective Zustand subscriptions
  • Output arrays capped at 5000 lines in script/test runner stores

Bug Fixes

  • Fixed keybindings shift-match bug — Cmd+Shift+* shortcuts now work correctly
  • Fixed chatStore stale closure losing content blocks during fast streaming
  • Fixed chatStore subscribe race condition causing duplicate listeners
  • Fixed workspace archive/delete navigating to stale repo
  • Added cross-store cleanup on workspace delete to prevent memory leaks
  • UTF-8 safe string truncation in Rust (10 sites) — prevents panics on multi-byte characters
  • Fixed devcontainer stderr race between tokio task and wait_with_output
  • Converted Linear and Azure DevOps services from blocking to async HTTP
  • Added Copilot LSP pending request cleanup on timeout
  • Added restoreMocks: true to vitest config

Docs

  • Added 12 missing feature pages and updated 6 existing pages (#132)

Full Changelog: v1.13.1...v1.14.0

v1.13.1

Choose a tag to compare

@tylergraydev tylergraydev released this 21 Mar 16:46

What's New

  • fix: resolve CI test flake in UpdatesTab — replaced dynamic import("@tauri-apps/api/app") with the existing getAppVersion() wrapper to fix unreliable mock interception in CI

Full Changelog: v1.13.0...v1.13.1

v1.13.0

Choose a tag to compare

@tylergraydev tylergraydev released this 20 Mar 22:12
3d165c4

What's New

  • Codebase refactor: split 15 large files into focused domain modules — Pure structural refactoring with zero behavior changes. All files over 750 lines split into single-responsibility modules (#130)

Backend (Rust)

  • db/mod.rs (2,733 lines) → 9 domain modules
  • services/gh.rs (2,322 lines) → 6 modules
  • commands/git.rs (2,131 lines) → 4 modules
  • commands/workspace.rs (2,121 lines) → 3 modules
  • services/test_runner.rs (1,787 lines) → 4 modules
  • services/claude_process.rs (1,767 lines) → 3 modules
  • commands/agent.rs (1,707 lines) → 2 modules
  • commands/pr.rs (1,693 lines) → 4 modules

Frontend (TypeScript/React)

  • lib/tauri.ts (2,004 lines) → 16-file directory module
  • AppSettingsPanel.tsx (2,465 lines) → 11 tab components
  • Composer.tsx (1,332 lines) → 3 components + 2 hooks
  • TestRunnerPanel.tsx (1,086 lines) → 4 components + utils
  • ChecksPanel.tsx (914 lines) → 3 row components
  • NewWorkspaceDialog.tsx (907 lines) → 5 mode components
  • MessageBubble.tsx (751 lines) → 3 components + utils

Full Changelog: v1.12.0...v1.13.0

Fury v1.12.0

Choose a tag to compare

@tylergraydev tylergraydev released this 20 Mar 00:10

What's New

Build & CI Fixes

  • Fixed production build failure caused by missing @xterm/addon-search in vite manual chunks
  • Fixed E2E test selectors to match actual HTML structure (tabs use role="tab", not <span>)
  • Fixed ESLint prefer-const violation in test file

Full Changelog: v1.11.0...v1.12.0

Fury v1.11.0

Choose a tag to compare

@tylergraydev tylergraydev released this 19 Mar 19:05

What's New

Rust Backend Expansion

  • Major expansion of Rust backend with new service modules: branch management, checkpoint system, Claude context indexing, dev container lifecycle, Linear integration, LSP support, performance server, test runner, and worktree management
  • Comprehensive unit tests across all 27 command modules and service layers
  • Fixed clippy warnings and improved code quality

Coverage

  • Updated frontend test coverage reports

Full Changelog: https://github.com/tgray/fury/compare/v1.10.0...v1.11.0

v1.10.0

Choose a tag to compare

@tylergraydev tylergraydev released this 05 Mar 15:31
ffcbec6

What's New

  • Auto-update system with popup and signing — The app now supports automatic updates with a user-facing popup and code signing (#128)

Full Changelog: v1.9.0...v1.10.0