# Changelog

What's new in Foxl. All notable changes to the project.

## v0.2.0 (in progress)

### Multi-Agent
- Per-agent tool event callbacks — each agent's tool calls scoped to its own instance (no cross-agent leaking)
- Subagent thinking capture — model reasoning blocks (reasoningContentDelta/thinking_delta) recorded to DB
- Auto-continuation triggers per-completion — each agent result delivered independently (no 30s batching)
- Parent breaks after spawning subagents — waits for auto-continuation instead of re-prompting
- Fork children keep full tool list for prompt cache sharing — spawn blocked at hook level
- Block subagent spawning during auto-continuation turn
- Remove goal-based dedup guard (Claude Code doesn't do this)
- AgentChatView fully DB-driven timeline — survives WS disconnect, complete/error events rendered
- Remove duplicate goal message bubble + duplicate result rendering
- Completed agent goal display — merge DB goal into in-memory state
- Remove all subagent result/tool truncation (was 1000-5000 chars)
- Remove duplicate active agents section from Agents page (fork tags sanitized)

### Tool Approval
- "Always Allow" auto-approves remaining parallel pending tool calls matching new permission rule
- Load DB permission rules at server startup — "auto approve all tools" was silently ignored (ESM require fix)

### Channels
- Auto-reconnect channels on server restart (Telegram, Signal)

### Skills
- Fix YAML folded scalar (`>`) and literal (`|`) block parsing in skill frontmatter
- Multiline description fields now correctly joined instead of showing `>` literal

---

## v0.1.9 - April 7, 2026

### Relay Dashboard
- New unified Relay card on gateway page with connection topology tree
- Desktop node shows online/offline status, platform, connection time
- Web client branches display browser, OS, and connection duration
- Remote restart: restart desktop app from any device via tunnel
- Remote update check: trigger auto-update remotely
- Force disconnect individual web clients by fingerprint
- Session history timeline with audit log (deduplicated, last 10 entries)
- Tunnel toggle integrated into dashboard header (desktop mode)
- Account email and relay connection status in card description
- 15s auto-refresh with visibility-aware polling
- Full i18n support across 10 languages (27 new keys)

### Tunnel Cost Optimization
- On-demand heartbeat: idle 5min, active 30s (was 24/7 30s)
- HTTP heartbeat bypasses Durable Object entirely (zero DO request cost)
- Slow/fast heartbeat switching on web client connect/disconnect
- Dead connection detection maintained via HTTP liveness check
- Estimated tunnel capacity: ~630 DAU on $5/mo Cloudflare plan (was ~115)

### Mobile Terminal
- Compact quick keys: smaller buttons prevent horizontal overflow
- Scroll-to-bottom button in quick keys bar
- Auto scroll-to-bottom after terminal resize (prevents mobile scroll jump)

### Foxl Notes Landing
- White/light theme redesign for foxl.ai/note
- Pricing section removed
- Modernized mockup styling

### Landing Page
- "Products" renamed to "Projects" (portfolio tone)
- FAQ rewritten: free/open project, Claude Code/Dispatch comparison, mobile access, privacy
- Hero subtitle: "A personal AI agent... Free and open."
- CTA: "Try it out" with "No account required"
- Footer: "An open project by foxl-ai" (was copyright notice)
- Refund link removed from footer
- Billing/subscription language hidden from Terms and Privacy (comment-preserved)
- Nacho entity reference hidden from legal pages

### Fixes
- Model selector: foxl relay models now appear first when tunnel connected
- Discord bot: pricing-disabled instruction prevents outdated billing answers
- Terminal scroll position preserved across resize events

## v0.1.8 - April 5, 2026

### Tunnel Stability
- Fix DO hibernate state loss: persist userId/deviceId to durable storage, restore on wake
- Fix tunnel status: check is_online flag for instant disconnect detection (was only using stale last_seen_at)

### Tunnel Cost Optimization
- Durable Object Hibernatable WebSocket API: DO sleeps when idle, wakes on message
- Client-driven heartbeat: desktop sends ping every 30s (no more server-side setInterval)
- Chat delta batching: 100ms window reduces DO wake-ups by ~90%
- Estimated DO cost reduction: $8.38/mo to ~$0.41/mo per 2 tunnel users

### Subagent Fork
- Fork subagent: children inherit parent's full conversation as byte-identical prefix for prompt cache sharing
- Identical system prompt + tool definitions across fork children (Claude Code pattern)
- Anti-spawn via fork directive prompt (soft guard) + isInForkChild() code check (hard guard)

### Terminal Reopen Fix
- Terminal panel loads scrollback on reopen (no more blank black screen)
- Works for both running and restored sessions

### Mobile Chat Copy
- "Copy Entire Text" works on app.foxl.ai (reads from localStorage in relay-only mode)
- Message copy/edit/regenerate buttons always visible on mobile (no hover needed)

### Fixes
- Fixed auto-update "Relaunch" button only hiding window instead of restarting on macOS
- Fixed 10+ TypeScript type errors across App, AgentEvent, ImageAttachment, ConversationItem, ScheduleExecution

## v0.1.7 - April 4, 2026

### Native 1M Context Window
- Opus 4.6 and Sonnet 4.6 now have native 1M context window (no beta header needed)
- Removed separate "(1M)" model variants -- all Opus/Sonnet 4.6 are 1M by default
- Simplified model selector: single entry per model instead of two

### Adaptive Thinking Effort
- New effort level selector: Low, Medium, High, Max (replaces token budget)
- Adaptive thinking with effort parameter sent via Bedrock `output_config`
- Max effort is Opus 4.6 exclusive (other models fall back to High)
- Default effort level: Medium

### Tool Approval
- Claude Code-style permission prompts inline with tool calls: Allow, Always allow, Deny
- Pattern-based trust: "Always allow" on `exec ls` creates `exec(ls*)` rule
- Permission rules persist to DB across restarts, with `*` wildcard as default
- Settings page: toggle auto-approve-all, add/remove patterns manually
- Built-in safety: destructive commands (`rm -rf /`, `mkfs`, `dd`) are always denied

### Agent Core v2
- Context compaction: auto-summarize long conversations to stay within context window
- Error retry with exponential backoff for transient failures
- Hook system: BeforeToolCall / AfterToolCall lifecycle for permission checks and plugins
- Fork subagent: spawn child agents from parent conversation context
- System prompt token optimization (34K to 19K chars, 44% reduction)

### GLM 5 + Kimi K2.5
- GLM 5 (Z.AI) available on Bedrock + relay with reasoning_config thinking support
- Kimi K2.5 (Moonshot AI) with 256K context, vision, and tool use

### Context Usage in HUD
- Context window usage percentage displayed in macOS titlebar HUD
- Per-conversation tracking from actual token metrics
- Real-time updates during streaming, persists across conversation switches

### Claude Code SSO Fixes
- Fixed double text output and shimmer stuck during streaming
- Rewrote CLI stream parser for reliable tool result handling

### File Attachments
- Drag & drop files onto chat area with visual drop zone overlay
- Accept any file type via paste or file picker (json, yaml, py, ts, etc.)
- Unsupported Bedrock formats (json, xml, yaml) mapped to txt server-side
- Document attachment pill constrained to message bubble (no overflow)

### Subagents
- Removed execution timeout — agents run until completion (no more premature stops)
- Auto-continuation max-wait safety timer (30s) for result synthesis

### Settings Persistence
- AWS profile, region, and thinking effort persist across server restarts
- Saved to server-config.json in data directory

### Schedule Reliability
- Schedules auto-disable after 3 consecutive failures (including stuck task timeouts)
- Prevents infinite retry loops for broken schedules

### Large Text Paste
- Virtualized text viewer for attached text blocks (handles 1M+ chars without freezing)
- indexOf-based parser replaces regex (no backtracking on huge content)
- Copy button still copies full original content

### Provider Detection
- Bedrock provider correctly reports unconfigured when no AWS credentials exist
- foxl.ai relay models listed above BYOK/bedrock models in model selector

### Update Banner
- "Updated to vX.X.X" with Relaunch button in sidebar when auto-update completes

### Landing Page
- Animated SoftAurora background with mouse interaction and fade-in
- Redesigned Security section with CSS Grid layout
- Discord button, pricing display, license URL fixes

### Electron
- Electron 41, electron-builder v26
- Bundled Node.js runtime for non-developer users
- Source map protection (never ship .map files)

### Fixes
- Model/provider sent in chat stream request body (fixes race condition)
- Fixed tunnel double-connection on sleep/wake reconnect
- Fixed production terminal, schedule persistence, provider switching
- Auto-close terminal panel when last session killed
- Fixed spinner stuck after stream completion (agentRunning:false broadcast)
- OS-aware download button in navbar
- Sidebar refresh after OAuth login

## v0.1.6 - March 29, 2026

### Claude Code SSO
- Use your Claude Pro/Max subscription directly in Foxl -no API key needed
- Auto-detects credentials from macOS Keychain or ~/.claude/.credentials.json
- Just run "claude auth login" once, then select Claude Code (SSO) in Settings
- Token-level streaming with thinking/reasoning separation
- Available models: Opus 4.6, Sonnet 4.6, Haiku 4.5 via your subscription

### BYOK Relay Passthrough
- Use your own Anthropic API key through app.foxl.ai -zero Foxl credits consumed
- Relay acts as stateless proxy -your key is never stored server-side
- Usage tracked for analytics only (cost: $0)

### Terminal Relay Interface
- Built-in terminal in Chat UI -spawn PTY sessions, tabs, split view, resize
- JetBrains Mono Nerd Font bundled (Ghostty-style zero config)
- Remote monitoring via relay tunnel -view desktop terminals from mobile
- Terminal tool: agent can spawn, write, read, kill sessions programmatically
- ANSI strip filter for clean LLM output

### Chrome Extension Multi-Tab
- Multi-tab browser control -switch between tracked tabs with labels
- New commands: switch_tab, list_contexts for tab management
- Sidepanel tab bar UI with chips and 3s polling

### Bedrock Prompt Caching
- Automatic prompt caching via cacheConfig strategy for Opus/Sonnet/Haiku
- Applied across server, agent, and provider layers

### Relay
- Ultra tier upgraded to 10,000 credits/month
- Free tier Opus access blocked (Haiku + Sonnet only)
- Tunnel pending request cap (50) + chat stream cap (10) for stability

### Async Subagents
- Auto-continuation: when all subagents complete, main agent auto-synthesizes results
- Completion queue prevents concurrent auto-continuations on same conversation
- Schedule persistence across app restarts

### Agents UX
- Terminal fullscreen mode in chat panel
- Crew-style suggestion cards on empty chat screen
- AI-generated suggestions with structured defaults

### Skills Sync
- Auto-sync skills from foxl-ai/skills repo on first install
- Skills sync button in SkillsPage UI
- Local edits preserved via content comparison during sync

### Mobile
- Terminal persistence, mobile IME fix, mobile terminal UI
- Mobile terminal return icon and Del key

### Windows Support
- Native Windows desktop app -NSIS installer + portable exe
- CRLF line ending normalization for skills parsing
- PowerShell terminal with smart shell detection (pwsh.exe, powershell.exe)
- Native Windows title bar, portable Node.js detection
- Code signing with self-signed certificate

### Auto-Update Fix
- Universal build targets -single DMG/ZIP works on both Intel and Apple Silicon
- Fixed latest-mac.yml referencing non-existent arch-specific files

### Discord Integration
- Discord Q&A bot with /ask slash command (Cloudflare Worker)
- Gateway bot with presence detection and auto-respond in channels
- Relay auth with KV token persistence for bot sessions

### Release Automation
- Changelog automation pipeline: CHANGELOG.md as single source of truth
- Release scripts: `release.sh` (full desktop release), `sync-changelog.sh` (changelog-only deploy)
- Generated changelog surfaces: foxl.ai/#changelog, foxl.ai/changelog.md, GitHub Release notes

### Fixes
- Enable AI suggestions in relay-only mode via tunnel
- Terminal mobile return button visibility and light theme text color
- app.foxl.ai: relay-only sidebar now correctly shows only Chat and Account pages
- Message copy handler preserves hyperlinks as "text (url)"
- Gateway page i18n -hardcoded strings replaced with translations
- Terminal line ending normalization for cross-platform PTY compatibility
- Terminal tool: backspace character processing for clean AI output
- Terminal tool: literal \n escape handling for reliable command execution
- Schedule execution prevConvId not defined error
- esbuild-bundle server to fix 5+ minute NSIS install time (16K to 420 files)
- NSIS installer auto-closes running Foxl before install
- Windows taskbar icon uses exe embedded icon for proper size
- 800+ translation keys across 10 locales (en, ko, ja, zh, es, fr, de, pt, ru, ar)

## v0.1.5 - March 21, 2026

### Auto-Update
- VSCode-style silent auto-update -download in background, notify when ready
- Settings toggle to enable/disable auto-update

### Tunnel: Login = Access
- Pairing code flow removed -relay auto-registers device on connect
- Web clients connect immediately (no approval blocking)
- E2E encryption (ECDH) on all WebSocket messages

### Tunnel E2E Streaming
- Chat streaming via relay tunnel with SSE passthrough
- Image and document upload through tunnel
- Reconnect recovery with snapshot hydration

### Fixes
- Electron UA: real platform/arch (was hardcoded Intel Mac)
- Session detection: Foxl/ UA parsing for device info
- Model naming: "Opus 4.6[1m]" style (Claude Code convention)
- sharp added to server-bundle for screenshot tool

## v0.1.4 - March 20, 2026

### Multi-Agent Thread UI
- Codex-style subagent orchestration with collapsible thread sidebar
- Real-time subagent streaming via WebSocket events (200ms batched flush)
- Event-driven child-to-parent result injection on subagent completion
- SpawnIndicator inline in parent chat with live elapsed timer
- Thread history endpoint (GET /api/agents/:agentId/history)

### Streaming Recovery
- Snapshot endpoint for instant page-refresh recovery (text, tool calls, threads)
- Sequence-based SSE subscribe with gap detection
- Recovery state machine (idle, fetching_snapshot, subscribing, live, disconnected)
- WS streaming_state enrichment with currentText, toolCalls, threads
- Fallback to SSE replay when snapshot unavailable

### Model Selector
- app.foxl.ai now follows desktop model/provider selection via tunnel
- Desktop BYOK models visible in relay-only mode when tunnel connected
- Model selection syncs back to desktop via tunnel API
- Fix: model selector silently overriding local model with foxl relay

### SDK
- Strands Agents SDK upgraded to v0.7.0 (Plugin system, prompt caching)

### Fixes
- Credit exhausted popup removed from AccountPage
- Chrome extension Pilot renamed to Foxl branding
- Default provider fallback changed from 'foxl' to 'bedrock'
- WS multi-subscriber Set pattern (prevents callback overwrite)

## v0.1.3 - March 19, 2026

### Tunnel
- Tunnel resilience: heartbeat 3x failure reconnect with backoff reset
- Online-gated routing: __foxlTunnelOnline flag, sidebar isOnline
- Tunnel auto-refresh on online/offline transition
- Load desktop conversations via tunnel API when connected

### Chat
- Mobile-first ChatPage layout (relay-only always full-width)
- Model ID resolution: compound prefix + version suffix handling
- WS 4003 token mismatch auto-reload

### Fixes
- Chrome extension health check 500ms AbortSignal timeout
- GatewayPage device field mapping normalized
- Provider selection persists via localStorage key
- All model tiers accessible on all plans (restriction removed)

## v0.1.2 - March 15, 2026

### Web App
- app.foxl.ai: relay-only chat with localStorage conversations
- OAuth hash login, Google/Apple sign-in on web and desktop
- AccountPage: credits display, subscription, lazy sessions
- Onboarding flow: welcome, extension, login, chat

### Relay
- Welcome 200 credits on signup, monthly 10 credit refill (cron)
- Atomic credit deduction (D1 batch transactions)
- D1-backed rate limiting, OAuth CSRF protection
- Strict model ID validation, 5 Claude models enabled
- relay-worker/ consolidated to relay/

### Desktop
- Universal macOS build (arm64 + x64)
- Random port + connection token (VSCode-style security)
- Server crash protection, CORS hardening
- sessions_status tool: waitSeconds parameter

### Docs & Infra
- Starlight documentation site (16 pages, full-text search)
- llms.txt / llms-full.txt from real documentation
- CI workflows: deploy-app, deploy-docs, deploy-relay, deploy-site
- Version unified to 0.1.2 across all packages

## v0.1.1 - March 11, 2026

### Agent
- AgentsPage: make expanded session card scrollable

### Chat
- Channel: group mention filter, Signal greeting, conversation history API

### UI
- Topup UI, webhook idempotency, tray menu, deep link, build fix
- i18n: add useTranslation hook to all 29 sub-components
- i18n: apply t() to 109 strings across 6 pages

### i18n
- i18n expansion (496 keys, 10 locales), dev data path fix
- 251 keys across 10 locales, sync script, comprehensive coverage
- Expand to 10 languages, system language detection, complete translations

### Skills
- Revert nested skills scan, use symlink instead
- Support nested skills dir + add .omc to gitignore

### Fixes
- Fix SettingsPage crash: add useTranslation hook to main component
- Fix i18n: add useTranslation import and hook to all pages
- Fix DialogTitle accessibility warning, add PILOT_SKIP_SERVER
- Fix message queue leaking across conversations
- CI cache-dependency-path for setup-node

### Other
- Add Foxl proprietary license
- Security: path traversal protection, JWT production guard
- Show git commit hash in app version (Settings > About)

## v0.0.2 - March 8, 2026

### Agent System
- OpenClaw-parity heartbeat runner with active hours, stuck detection, requests-in-flight skip
- Context overflow auto-continuation (creates new conversation with summary)
- Subagent spawn with result/error saved to conversation messages
- Subagents blocked from spawning other subagents (infinite recursion prevention)
- WebSocket reconnection restores agent state automatically

### Chat
- Tool call display with per-tool icons (15 icon types: Monitor, Globe, Terminal, Database, Git, etc.)
- Human-readable tool titles for all 20+ tools
- Confirmation component (shadcn AI pattern) for tool approval
- Extended thinking with collapsible reasoning display
- Image upload, paste, and document attachment support

### Skills
- 68 built-in skills (ported from OpenClaw)
- Skills always loaded regardless of binary availability (install at runtime)
- Lazy skill loading (list only, read on demand) for token savings
- Skill eligibility check with missing dependency display

### UI
- Agents page redesign: date grouping, time range filter, status filter
- Agent detail dialog: stepper activity timeline, tools used summary, last response
- Settings: Heartbeat config card, provider SVG icons, active hours selector
- Workspace/Skills: Cmd+F search with content search, search button
- Usage Explorer: 30-day default, estimated cost per model
- Dock badge: notifications + unread chat count

### Providers
- 7 relay proxy providers: Bedrock, Anthropic, OpenAI, Google, Groq, xAI, DeepSeek
- 24 local providers via OpenAI-compatible API
- Provider SVG icons (light/dark mode)
- Credit system with 10% margin (1 credit = $0.04)

### Channels
- Telegram bot integration (non-blocking start)
- Signal CLI integration (foxl-ai/signal-cli)
- Channel send tool for proactive outbound messaging

## v0.0.1 - March 3, 2026

- Initial Electron desktop app with embedded server
- Pixel Office view with agent characters and pet system
- Code splitting: 14 lazy-loaded pages (1,407KB to 177KB main bundle)
- Token usage tracking with SQLite persistence
- Session memory with LLM-generated summaries
- Context compaction via Bedrock compact API
- Tool approval system with always-allow option
- Browser automation with accessibility tree snapshots (93% token reduction)
- Workspace memory system (SOUL.md, USER.md, MEMORY.md, daily logs)
- Scheduling system (cron, heartbeat, webhooks)
- Multi-provider support (Bedrock, Anthropic, OpenAI, Google, Ollama)
