Scarf tackles the common developer frustration of managing AI agents through command line interfaces and raw state files by providing a native macOS and iOS companion app for the Hermes AI agent. It wraps Hermes’s CLI and SQLite state database in a SwiftUI GUI, enabling multi-window chat sessions, skill browsing, cron job editing, and real-time monitoring — all with a responsive UI that avoids the usual sluggishness caused by heavy image processing or database queries.
native macOS and iOS GUI for the Hermes AI agent
At its core, Scarf is a native application written in Swift for macOS 14.6+ (Sonoma) and iOS 18.0+ (via the companion app ScarfGo). It connects to Hermes AI agents running locally or remotely via SSH, using Citadel on iOS for a pure-Swift SSH implementation.
The app provides a graphical layer over Hermes’s CLI and SQLite state database, which means it parses command outputs like hermes status and reads Hermes’s state.db for session and skill data. This approach ensures it can support real-time features such as a dashboard displaying Hermes’s operational status and session progress.
Key functionalities include multi-window chat for interacting with Hermes agents, browsing and managing AI skills, editing scheduled cron jobs that control autonomous agent behaviors, and observing a live dashboard that leverages atomic SQLite snapshot reads to avoid data inconsistencies.
The app requires Hermes agent v0.6.0 or newer, with v0.12.0+ recommended to unlock advanced features like autonomous Curator, multimodal image input, new provider integrations, and extended gateway support.
concurrency patterns and state synchronization under the hood
What distinguishes Scarf is its handling of UI responsiveness, especially when dealing with multimodal inputs like images. SwiftUI’s MainActor can become a bottleneck if expensive tasks like image encoding run on the main thread, causing UI jank. Scarf sidesteps this by offloading JPEG image downsampling and encoding (to 1568px JPEGs) onto a background actor detached from the MainActor. This concurrency pattern prevents blocking and keeps typing and UI interactions smooth.
For state synchronization, Scarf reads Hermes’s SQLite database snapshots atomically, ensuring consistent dashboard data without partial reads. This is essential for real-time monitoring where stale or corrupted data could mislead users.
The app also addresses common SwiftUI state management issues such as typing lag and draft leakage by applying fixes to how state updates propagate in the UI.
Connectivity-wise, Scarf uses SSH to communicate with Hermes instances, supporting both local and remote hosts. It includes capability gating that gracefully enables or disables features depending on the connected Hermes version, maintaining compatibility across releases.
quick start
remote setup requirements
The remote host must have:
SSH access — key-based authentication via your local ssh-agent. Scarf does not prompt for passphrases; you must run
ssh-addonce in the Terminal before connecting.sqlite3installed and available in the remote$PATHfor atomic DB snapshots. On Ubuntu/Debian, install it withapt install sqlite3; on RHEL/Fedora, useyum install sqlite; on Alpine,apk add sqlite.pgrepavailable in the remote$PATH. It is used by the Dashboard to check if Hermes is running. This is standard on most distros; if missing, installprocps.Read access to
~/.hermes/by the SSH user. When Hermes runs under a different user (systemd service or Docker), ensure the SSH user can readconfig.yamlandstate.db. This can be done by SSHing as the Hermes user, adjusting permissions and groups accordingly, or specifying the Hermes data directory explicitly in the server settings.
requirements summary
- macOS 14.6+ (Sonoma) for Scarf
- iOS 18.0+ for ScarfGo (TestFlight available from v2.5)
- Xcode 16.0+ to build from source
- Hermes agent v0.6.0+ installed at
~/.hermes/on the target hosts, with v0.12.0+ recommended for full feature support
This setup ensures proper SSH connectivity, atomic state snapshotting, and CLI command availability.
verdict
Scarf is a well-crafted native Swift app that fills a practical gap: providing a friendly, performant UI for interacting with the Hermes AI agent. Its careful concurrency design for image encoding and robust SQLite state synchronization show attention to real-world SwiftUI challenges.
The tradeoff is that it depends heavily on Hermes’s CLI and database schema, which means any upstream changes to Hermes require corresponding updates in Scarf. Also, the SSH-based connectivity and remote setup requirements add complexity for casual users.
That said, if you’re running Hermes AI agents and want a polished macOS/iOS companion that supports multimodal input and real-time dashboards without UI lag, Scarf is worth exploring. The clear remote prerequisites and capability gating make it suitable for production environments where stability and compatibility matter.
For developers interested in Swift concurrency patterns and native UI integration with CLI-based AI systems, Scarf offers useful patterns and insights worth studying.
Related Articles
- elizaOS: a TypeScript monorepo for building and deploying AI agents — Explore elizaOS, a TypeScript monorepo for AI agents with CLI and web UI. Build and deploy agents fast or extend with pl
- nh: a Rust-based unified CLI for the Nix ecosystem with enhanced search and ergonomics — nh is a Rust CLI tool consolidating Nix, NixOS, and Home Manager commands with improved ergonomics, speed, and Elasticse
- Jan: a local-first desktop app for large language models with Tauri and Rust — Jan is an open-source desktop app that runs large language models locally using Tauri, Node.js, and Rust. It offers priv
- PinchTab: Token-efficient Chrome automation for AI agents with Go — PinchTab is a Go HTTP server enabling AI agents to control Chrome instances efficiently by extracting structured text, c
- Pydoll: Async-native Chromium automation with typed extraction for web scraping — Pydoll is a Python library for Chromium automation using Chrome DevTools Protocol. It offers async-native APIs and Pydan
→ GitHub Repo: awizemann/scarf ⭐ 374 · Swift