Table of Contents
Release Notes Index
Every Scarf release in chronological order. The notes themselves live in releases/v<version>/RELEASE_NOTES.md in the main repo, attached to each GitHub Release as the release body.
Highlights by major
2.8.0 — Coordinated catch-up to Hermes v0.13.0 ("The Tenacity Release"). Ships Persistent Goals via /goal <text> (locks the agent on a target across turns; surfaced as an info-tinted chat-header pill with a Clear context-menu item; pure optimistic mirror since Hermes is the authoritative owner). ACP /queue — queue prompts to run after the current turn, with a header chip + popover preview. /steer now runs as a regular prompt on idle sessions in v0.13 (greyed only on pre-v0.13). Kanban v0.13 diagnostics + recovery UX: hallucination gate on worker-created cards with Verify/Reject buttons + a yellow inspector banner; new diagnostics engine surfaces per-task and per-run distress signals as severity-tinted chip-lists; per-task max_retries on create + display; multiline title input; auto-block reasons rendered verbatim; darwin zombie detection as a distinct kind. Curator archive + prune — new Archived section with per-row Restore + Prune actions, bulk-prune confirm sheet matching the template-uninstall pattern (enumerated list + asymmetric keyboard shortcut), synchronous "Run Now" with progress affordance on v0.13+. Messaging Gateway expansion: Google Chat (20th platform), per-platform allowlist editor (allowed_channels / allowed_chats / allowed_rooms), busy_ack_enabled + gateway_restart_notification + slash-command auto-delete TTL toggles, hermes gateway list cross-profile digest. Provider catalog refresh: 5 new models (deepseek-v4-pro, grok-4.3, owl-alpha, hy3-preview, arcee/trinity-large-thinking), grok-4.20-beta → grok-4.20 alias-resolved at read time, Vercel demoted; image_gen.model honored in Auxiliary tab; OpenRouter response caching toggle. Settings additions: MCP SSE transport with sse_read_timeout, Cron --no-agent watchdog mode, Web Tools per-capability backends (search vs extract split, SearXNG joined as search-only), Profiles --no-skills. UX polish: context compression count chip in chat status bar, /new <name> argument hint, redaction default-flip awareness, display.language picker (zh/ja/de/es/fr/uk/tr), xAI Custom Voices badge. iOS read-only catch-up mirrors goal pill / queue chip / Kanban diagnostics / Curator archived / Platforms allowlists with a v0.13-features-active badge; write parity deferred to v2.8.x per Phase H precedent. 22 new capability flags + the isV013OrLater predicate gate every surface. Two dogfood-discovered fixes ride along: dashboard flicker on v0.13 (file-watcher coalescing with 500 ms quiet floor + 1.5 s max-wait safeguard, plus dashboard load dedupe via inFlightLoad: Task<Void, Never>) and sparse slash menu on resumed sessions (preserve acpCommands across RichChatViewModel.reset() since they're agent-level, plus an active-session-only static fallback set: /clear /compact /cost /model /tools /reload-skills /help /exit deduped against the ACP-advertised set). Pre-v0.13 hosts render the v2.7.5 surface byte-identical.
2.7.5 — Feature release that lifts Kanban from a read-only list (the v2.6 placeholder shipped while upstream Kanban was still mid-rework) to a full drag-and-drop board with the complete Hermes v0.12 mutation surface wired up. Five visible columns (Triage / Up Next / Running / Blocked / Done) collapsing the seven Hermes statuses into a layout that doesn't waste space on ready. Drop-on-Running fires kanban dispatch, drop-on-Blocked / drop-on-Done open optional reason / result sheets and call the matching verb, blocked → running chains unblock + dispatch; forbidden transitions reject with red-stroke feedback (Done is terminal; Triage is promoted by a specifier worker). Side-pane inspector with Comments / Events / Runs / Log tabs — Log streams worker stdout via hermes kanban log <id> polled every 2s while the task is running with auto-scroll and a ● streaming indicator. Inline assignee picker on the inspector header (yellow chip when unassigned to catch the eye); selecting a profile fires kanban assign + kanban dispatch. Health banner surfaces unassigned-and-stuck (skipped_unassigned) and last-failed-run (stale_lock / crashed / etc.) states; suppressed during an active fresh attempt so the Log tab is the live signal. Per-project Kanban tabs bound to a Scarf-minted scarf:<slug> tenant slug persisted to <project>/.scarf/manifest.json (immutable across rename); ProjectAgentContextService injects a Kanban tenant: … line into the AGENTS.md scarf-managed block so agents pass --tenant <slug> automatically. New kanban_summary dashboard widget. iOS read-only board as a horizontally-paged segmented Picker of single-column lists; tap a card → modal Comments / Events / Runs sheet. Sidebar moves Kanban from Manage → Monitor — runtime work-in-progress, not configuration. Board | List toggle preserves the v2.6 list view as a fallback. Critical fix in the same release: GUI-launched Scarf was handing every local subprocess macOS's stripped launch-services PATH (/usr/bin:/bin:/usr/sbin:/sbin), which meant the kanban dispatcher's worker spawn couldn't find hermes by name and recorded outcome=spawn_failed. LocalTransport now mirrors SSHTransport.environmentEnricher and is wired by scarfApp.swift to the same HermesFileService.enrichedEnvironment() login-shell probe. 19 new ScarfCore tests cover decoding (incl. Unix integer timestamps from SQLite columns), the transition planner's verb mapping, argv assembly, glance string formatting, the (no parser-leak fix from kanban assignees's empty-state sentinel, and the env-enrichment fallback. Pre-v0.12 hosts gracefully hide the surface end-to-end.
2.7.1 — Patch bundling three bug reports filed against 2.7.0 plus follow-up cleanups in the same neighborhood. #77 Sessions screen empty — pipe-buffer deadlock in SSHScriptRunner (v2.7's batched sessionListSnapshot payload finally crossed macOS's 16–64 KB pipe-buffer threshold for any user with ~150+ sessions); fixed by draining stdout/stderr concurrently via readabilityHandler. #78 Skills "What's New" pill schizophrenia — pill (local file deltas) and Updates tab (upstream version availability) both said "update"; pill scoped to Installed sub-tab and reworded "updated" → "changed". #79 hub search returns nothing visible in Browse — Hermes's "all sources" search routes through the centralized index and skips API sources; "All Sources" search now filters the cached Browse list client-side. Plus narrower pgrep for the gateway probe and port-anchored stop-dashboard (replacing broad pkill -f). New scripts/local-build.sh + BUILDING.md for unsigned Debug builds without an Apple Developer account. Doc fix: BUILDING.md and CONTRIBUTING.md runtime min restored to macOS 14.6 (Sonoma) / Xcode 16.0. Cherry-picked from #76 — thanks to @unixwzrd and @bricelb.
2.7 — The largest perf-focused release since 2.6 (36 commits, no schema bump, no Hermes capability bump). Skeleton-then-hydrate chat + Activity loaders make slow-remote contexts usable: a fetchSkeletonMessages / fetchRecentToolCallSkeleton pair selects only the columns needed to render placeholder rows (NULLs the heavy ones at SQL level), then paged background hydration fills tool calls in 5-id batches; tool-result CONTENT is opt-in via Settings → Display, with per-card lazy-fetch in the inspector pane. L1 single-id whale recovery when a 5-id batch trips the 30s timeout. SSH cancellation propagation through SSHScriptRunner.run + RemoteSQLiteBackend.query via withTaskCancellationHandler — kills abandoned ssh subprocesses within 100ms instead of pinning them to the 30s deadline (fixes "third chat hangs" / "dashboard spins" after rapid switching). In-flight coalescing for loadRecentSessions drops the 2-3× contention seen during file-watcher streams. Loading-state UX hardening: synchronous greying of the chat sidebar on click; phase-typed status ("Spawning hermes acp…" → "Authenticating…" → "Loading session…" → "Loading history…" → "Ready"). Partial-result + mismatch + pinned-model banners replace silent empty-states. New Project from Scratch wizard scaffolds a Scarf-standard skeleton + AGENTS.md marker block, registers it, and hands off to a chat session that auto-activates the bundled scarf-template-author skill. Cron + Keychain mirrors resolved Keychain values into ~/.hermes/.env under marker-bounded $SCARF_<UPPER_SLUG>_<UPPER_FIELD> env vars (cron prompts can finally use secret-typed config fields without the literal keychain:// URI surfacing). Five new dashboard widgets (markdown_file, log_tail, cron_status, image, status_grid) with project-wide auto-refresh; stat gains inline sparklines; typed status enum with lenient decode; structured widget error card. OAuth keepalive cron prevents weeks-of-inactivity expiry; remote OAuth re-auth unblocked; OAuth remove button; resolve_provider_client errors classified into a clear hint. ScarfMon — perf instrumentation harness: 4096-entry in-memory ring buffer + os.Logger backend + signpost-only mode; new measure points across chat / transport / sqlite / sessionLoad / diskIO with payload bytes recorded. In-app release notes via inline <description> HTML in the Sparkle appcast (rendered from releases/v<ver>/RELEASE_NOTES.md by tools/render-release-notes.py).
2.6 — Catch up to Hermes v2026.4.30 (v0.12.0), the largest single Hermes update Scarf has had to follow since v0.10's Tool Gateway. New surfaces — all capability-gated so v0.11 hosts see the v2.5.2 surface unchanged: autonomous Curator (Mac sidebar + iOS panel) — pin / unpin skills, run / pause / resume, three leaderboards, restore archived; multimodal image input in chat (drag/drop + paste on Mac, PhotosPicker on iOS, 1568px JPEG q=0.85 detached); 5 new inference providers in the model picker (GMI Cloud, Azure AI Foundry, LM Studio first-class, MiniMax OAuth, Tencent TokenHub); Microsoft Teams + Yuanbao gateway platforms; read-only Kanban with 5s polling; Skills v0.12 surface (URL install, reload, OFF pill for disabled skills, curator pin badge); cron --workdir field; Settings deltas (cache TTL picker, redaction toggle, runtime metadata footer, Piper TTS, Vercel terminal); ScarfGo gains read-only Webhooks / Plugins / Profiles plus a pre-v0.12 Hermes-version banner. auxiliary.curator aux task replaces flush_memories on v0.12 hosts (preserved on v0.11). Plus a post-merge bug-fix round driven by GitHub issue triage: chat composer typing lag (#67), font-size slider now actually scales rich chat (#68), placeholder ghosting on first keystroke (#65), draft text bleeding between sessions (#62), sent message rendering blank after navigation (#63), background completion notifications (#64), per-message TTS playback (#66), ACP control-message timeout 30s→60s for gateway-contended hosts (#61).
2.5.2 — Patch release with one substantial new feature (iOS chat resilience) plus a stack of fixes. ScarfGo gains 5-attempt exponential reconnect via session/resume/session/load, a NetworkReachabilityService that suspends reconnect attempts while offline, scene-phase aware reconnect on foreground, and per-session draft persistence — phone-sleep, network handoffs, and SSH socket drops no longer cost the agent's work. Cross-platform cached-snapshot fallback (ServerTransport.cachedSnapshotPath) lets Dashboard / Sessions / Activity stay readable while the connection is down. Bounded message-history paging via HermesDataService.fetchMessages(limit:before:) + loadEarlier() replaces the prior unbounded fetch — long sessions stay smooth. Mac fixes: Settings → Model and Credential Pools no longer freeze for 1–2 minutes on remote contexts (#59) — loadProvidersAsync() / loadModelsAsync(for:) dispatch off MainActor. Diagnostics tri-state — missing config.yaml is informational on a fresh Hermes v0.11 install (Hermes lazy-creates it), reads "12/12 passing (2 optional skipped)" instead of "12/14". Credential Pools surfaces OAuth-authed providers (Nous, Spotify, Copilot, Qwen, Gemini) in a parallel section. New ProjectHermesShadowDetector warns when a project-local .hermes/ shadows the server-level config. iOS fixes: #56 Citadel snapshot path now uses executeCommandStream + Citadel-friendly PATH= prefix so missing-sqlite3 errors surface meaningfully; #57 keyboard-dismiss chevron moved to the leading edge so it doesn't stack over the send button. New: chat-start model preflight (ChatModelPreflightSheet) catches missing model/provider before the ACP session opens; Nous Portal live model catalog (NousModelCatalogService); remote-aware admin sheets for profile import/export, backup restore, and template install destination — all mirroring the Add Project pattern from #54.
2.5.1 — Patch release bundling every reported issue against 2.5.0 plus TestFlight-driven iOS fixes. Mac chat O(n)-per-token rendering bog-down on long sessions (#46) — settled bubbles now short-circuit body re-eval via Equatable, trailing-group patch helper replaces full buildMessageGroups() per chunk. Hermes v0.11 profile awareness (#50) — new HermesProfileResolver reads ~/.hermes/active_profile, every derived path follows automatically, SessionInfoBar gains a profile chip. Granular reasons + actionable hint popover on the "Connected — can't read Hermes state" pill (#53). Pill probe and Run Diagnostics no longer disagree (#44) — both now go through a shared SSHScriptRunner that bypasses runProcess's argument quoting. New chat density preferences in Settings → Display (#47 + #48) — Tool calls Full / Compact / Hidden, Reasoning Disclosure / Inline / Hidden, chat font size 85–130%. iOS keyboard now dismissable via swipe + accessory toolbar (#51); first-run Cancel button hidden when there's nothing to cancel back to (#55); opt-in iCloud Keychain sync for SSH keys (#52) — pair iPhone + iPad without onboarding twice. Add Project on remote contexts now hides the local Browse button and shows a Verify-against-remote affordance (#54). Release pipeline gains a post-package codesign / spctl gate (#49). No data migrations.
2.5 — ScarfGo iOS companion ships in public TestFlight + full Hermes v2026.4.23 (v0.11.0) support: /steer non-interruptive guidance, per-turn stopwatch, numbered approval shortcuts, git branch chip in chat header, messages.reasoning_content + sessions.api_call_count columns surfaced. Portable project-scoped slash commands — author at <project>/.scarf/slash-commands/<name>.md and ship via .scarftemplate (schemaVersion 3); Mac authoring tab + iOS read-only browser. New skills: in-app Spotify OAuth sheet + design-md npx prereq check. SKILL.md frontmatter chips (allowed_tools, related_skills, dependencies). "What's New" pill on the Skills tab tracks per-server skill deltas. Mac global Sessions gets project filter + badges (parity with ScarfGo). Cross-platform CronScheduleFormatter, GitBranchService, SkillSnapshotService, SkillPrereqService, ProjectSlashCommandService, SpotifyAuthFlow consolidate into ScarfCore. See Platform Differences for the Mac↔iOS feature matrix.
2.3 — Projects sidebar grows up: folders, rename, archive, search, ⌘1-9 keyboard jumps, per-project Sessions tab, and Scarf-managed AGENTS.md context block injected at chat-start so the agent always knows what project it's in. Catches up to Hermes v0.10.0's Tool Gateway — Nous Portal subscription routing, in-app sign-in, Health-tab visibility for tool routing.
2.2 — Project Templates: shareable .scarftemplate bundles with typed configuration schemas, Keychain-backed secrets, a public template catalog at awizemann.github.io/scarf/templates/, scarf://install?url=… deep links, CI-enforced PR validator, and a Site tab for webview-bearing dashboards. Cross-agent by default via the AGENTS.md standard — works in Claude Code, Cursor, Codex, Aider, and every other agent that reads it. v2.2.1 adds the awizemann/template-author scaffolding-skill template and fixes the Configuration sheet's segmented-picker overflow on schemas with long enum labels.
2.1 — Full UI translations for six locales on top of English (Simplified Chinese, German, French, Spanish, Japanese, Brazilian Portuguese); locale-aware currency / byte-size / compact-number formatting; chat slash-command menu with filtering and argument hints; auto-scroll polish and loading state for chat session reconnects.
2.0 — Multi-server, remote Hermes over SSH, chat UX overhaul (no more flash, no scroll jumping, real error explanations), and a correctness pass that fixed remote WAL spam, stale-snapshot session resume, auto-resume of dead cron sessions, and 230+ Swift 6 concurrency warnings.
1.6 — Configure section: native GUI for all 13 messaging platforms, Credential Pools with proper OAuth, Model Picker backed by models.dev's 111-provider catalog, 10-tab Settings exposing ~60 previously hidden config fields, plus Personalities, Quick Commands, Plugins, Webhooks, Profiles.
1.5 — Initial public release series; foundation for everything above.
After a release
When scripts/release.sh <version> completes a full (non-draft) release, this page should be updated:
- Add a row at the top of the table.
- Bump the Latest release line on Home.
- Run
./scripts/wiki.sh commit "docs: index v<version> release"thenpush.
This is one of the wiki update triggers that future Claude Code sessions will follow automatically.
Last updated: 2026-04-29 — Scarf v2.5.2 patch (iOS chat resilience + remote-aware admin sheets + Nous live catalog)
Getting Started
ScarfGo (iOS)
User Guide
- Dashboard
- Insights & Activity
- Chat
- Slash Commands
- Memory & Skills
- Projects & Profiles
- Project Templates
- Template Catalog
- Template Ideas
- Platforms / Personalities / Quick Commands
- Servers & Remote
- MCP, Plugins, Webhooks, Tools
- Gateway / Cron / Health / Logs
Architecture
- Overview
- Core Services
- Design System
- Data Model
- Transport Layer
- ScarfCore Package
- Sidebar & Navigation
- ACP Subprocess
Developer Guide
Reference
Troubleshooting
Contributing
- Contributing
- Wiki Maintenance
- ScarfGo Roadmap (dev reference)
Release History
Legal & Support
Wiki edited via the local .wiki-worktree/ clone. See Wiki Maintenance for the workflow. Last sync: 2026-04-20.