[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83263":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":21,"topics":23,"createdAt":9,"pushedAt":9,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":16,"starSnapshotCount":16,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},83263,"scarf","awizemann\u002Fscarf","awizemann","Native macOS and iOS App for the Hermes AI agent — multi-window, multi-server (local + remote over SSH). Chat, dashboard, sessions, memory, cron, MCP, and more.",null,"https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf","Swift",616,39,1,9,0,18,23,54,8.81,false,"main",[24,25,26,27,28,29,30,31],"ai-agent","gui","hermes","macos","macos-app","swift","swiftui","terminal","2026-06-12 02:04:32","\u003Cp align=\"center\">\n  \u003Cimg src=\"icon-v2.5.png\" width=\"128\" height=\"128\" alt=\"Scarf app icon\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Scarf\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  A native macOS companion app for the \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhermes-ai\u002Fhermes-agent\">Hermes AI agent\u003C\u002Fa>.\u003Cbr>\n  Full visibility into what Hermes is doing, when, and what it creates.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FmacOS-14.6+%20Sonoma-blue\" alt=\"macOS\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSwift-6-orange\" alt=\"Swift\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green\" alt=\"License\">\n  \u003Cbr>\n  \u003Cem>Available in English, 简体中文, Deutsch, Français, Español, 日本語, and Português (Brasil).\u003C\u002Fem>\n  \u003Cbr>\u003Cbr>\n  \u003Ca href=\"https:\u002F\u002Fwww.buymeacoffee.com\u002Fawizemann\">\u003Cimg src=\"https:\u002F\u002Fcdn.buymeacoffee.com\u002Fbuttons\u002Fv2\u002Fdefault-yellow.png\" alt=\"Buy Me a Coffee\" height=\"28\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n## What's New in 2.10.1\n\nA \"projects fundamentals\" maintenance release on top of v2.10.0. Six interlocking fixes from user feedback:\n\n- **Global `\u002Fscarf-*` slash commands** — six bundled commands (`scarf-new`, `scarf-help`, `scarf-dashboard`, `scarf-widget`, `scarf-cron`, `scarf-export`) available in every chat, not just per-project. Loaded from `~\u002F.hermes\u002Fscarf\u002Fslash-commands\u002F` and bootstrapped on launch with the same version-gated upgrade pattern as bundled skills.\n- **Skills sidebar finally shows `scarf-template-author`** — `SkillBootstrapService` installs into `~\u002F.hermes\u002Fskills\u002Fscarf\u002F` (matching `SkillsScanner`'s `\u003Ccategory>\u002F\u003Cskill>\u002FSKILL.md` layout) and auto-migrates the old flat install. One-time migration runs at first launch.\n- **Pre-session slash menu** — typing `\u002F` before opening a chat now shows the full agent-command set greyed-out (`\"Available once a chat is open\"`) instead of collapsing to just `\u002Fnew`.\n- **New-project wizard hand-off** — kickoff prompt rewritten with `SKILL:` \u002F `PROJECT_PATH:` anchors that agents reliably treat as invocation markers (vs. the polite \"use the skill\" sentence agents routinely ignored). Skill-presence preflight in `commit()` guarantees the bundled skill is on disk before `session\u002Fnew`.\n- **AGENTS.md `scarf-project` block: Scarf platform reference** — the managed block now describes Scarf's dashboard widget vocabulary, project slash commands, Kanban tenant, model presets, typed config, cron `--workdir`, skill loading, and template export. Idempotent + secret-safe + capped to ~30 lines. Now refreshed on template install too (previously chat-start only).\n- **Health: capabilities diagnostic panel** — raw `hermes --version` line, parsed semver\u002Fdate, per-release flag list, and a Re-detect button. Capabilities auto-refresh on `NSApplication.didBecomeActive` so `hermes update` outside Scarf is picked up without a relaunch.\n\nSee the full [v2.10.1 release notes](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Freleases\u002Ftag\u002Fv2.10.1).\n\n## What's New in 2.10\n\nA coordinated catch-up to **Hermes v0.15.0** (\"The Velocity Release\"). v2.10 surfaces the Scarf-relevant slice of the largest Hermes release yet — OpenAI as a first-class provider, the 104-PR **Kanban maturation wave**, **Bitwarden Secrets Manager**, **MCP mTLS**, **skill bundles**, **per-session edit-approval modes**, plus ntfy, xAI Web Search, and the xAI model-retirement migration. New v0.15 capability flags gate every surface; pre-v0.15 hosts render byte-identical to v2.9.x. (All flag\u002Fconfig\u002Fwire shapes were verified against the `v2026.5.28` Hermes source before implementation.)\n\n### Providers & models\n\n- **OpenAI as a first-class provider** — wire ID `openai-api`, distinct from the OpenAI Codex runtime, in the Models picker. (Bare `openai` stays a Hermes alias to OpenRouter, so it isn't registered separately.)\n- **Krea image generation** — `krea-2-medium` \u002F `krea-2-large` join the image-gen model list.\n- **xAI May-15 model retirement** — retired Grok IDs (`grok-4-0709`, `grok-4-fast-*`, `grok-3`, `grok-code-fast-1`, …) resolve forward to `grok-4.3` so a stored retired model still works, and the Health view warns + offers one-click `hermes migrate xai`.\n- **Vercel removed** — Vercel AI Gateway (provider) and Vercel Sandbox (terminal backend) were deleted upstream in v0.15 and are dropped from Scarf's pickers.\n\n### Kanban — the v0.15 maturation wave\n\n- Server-side **sort** (priority \u002F created \u002F status \u002F assignee \u002F title \u002F updated) from the board header.\n- **Promote**, **Schedule \u002F Park**, and **Delete-permanently** (`archive --rm`) card actions; new **Scheduled** and **Review** columns (collapse when empty).\n- Per-task worktree **`--branch`** on create + a read-only **model-override** line in the inspector; `--board` multi-board plumbing in the service layer.\n- **Precise chat-scoped board** — the chat-header Kanban chip and the board it opens now filter by the originating ACP `session_id` (stamped automatically by Hermes), replacing the old tenant + time-window approximation, with a \"This chat ⇄ All tasks\" scope toggle.\n\n### Bitwarden Secrets Manager\n\n- New **Settings → Secrets** tab for the `secrets.bitwarden.*` block — one bootstrap token (`BWS_ACCESS_TOKEN` in `~\u002F.hermes\u002F.env`) replaces per-provider API keys. EU Cloud \u002F self-hosted server URLs supported.\n\n### MCP mTLS + catalog\n\n- **mTLS client certificates** (`client_cert` \u002F `client_key` \u002F `ssl_verify`) for HTTP + SSE MCP servers, in the server editor.\n- A read-only **`hermes mcp catalog`** browse sheet for the Nous-approved MCP catalog.\n\n### Skill bundles\n\n- A read-only **Bundles** tab listing the named skill groups in `~\u002F.hermes\u002Fskill-bundles\u002F*.yaml` — each loadable in Hermes via one `\u002F\u003Cname>` slash command — with each bundle's member skills and instruction.\n\n### Per-session edit-approval modes\n\n- A chat-header chip toggles a live session between **Default** (ask before edits), **Accept Edits** (auto-allow workspace + `\u002Ftmp`), and **Don't Ask** via ACP `session\u002Fset_mode`. Distinct from the global `approvals.mode` \u002F YOLO surface; sensitive paths always still prompt.\n\n### ntfy, xAI Web Search + more\n\n- **ntfy** as the **23rd gateway platform** (push notifications via a topic URL, no account), plus new per-platform toggles (Telegram `disable_topic_auto_rename` \u002F `ignore_root_dm`, Discord `allow_any_attachment`, Signal group-only `require_mention`).\n- **xAI Web Search** as a `web_tools.search.backend` option (reuses your Grok OAuth \u002F `XAI_API_KEY`), and an opt-in **xAI TTS `auto_speech_tags`** toggle.\n- **Supply-chain audit** — a \"Run supply-chain audit\" button on the Health view runs `hermes audit` (OSV.dev) and shows the result inline.\n\nSee the full [v2.10.0 release notes](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Freleases\u002Ftag\u002Fv2.10.0) for the complete list, including the pre-release review fixes and the v2.9 highlights (Hermes v0.14 catch-up: `\u002Fsubgoal` + `\u002Fyolo` + `\u002Fsessions` + `\u002Fcodex-runtime` slash commands, xAI Grok OAuth + NovitaAI providers, LINE + SimpleX Chat platforms, Brave Search + DuckDuckGo backends, the Hermes Proxy local server) which are all still in play.\n\n**Previous releases:** see the [Release Notes Index](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Fwiki\u002FRelease-Notes-Index) on the wiki for v2.7, v2.6, v2.5, v2.3, v2.2, v2.0, v1.6, and earlier.\n\n## ScarfGo — the iPhone companion\n\nSame Hermes server you've been running on your Mac — reachable from your phone over SSH. Multi-server, project-scoped chat, session resume, memory editor, cron list, skills tree, settings (read), all native iOS. Pure-Swift SSH (Citadel under the hood — no `ssh` binary needed on iOS). Per-project chat writes the same Scarf-managed `AGENTS.md` block the Mac app does, so the agent boots with the same project context regardless of which client opened the session.\n\n**[Join the public TestFlight](https:\u002F\u002Ftestflight.apple.com\u002Fjoin\u002FqCrRpcTz)** — the link is live now but only accepts new beta testers once Apple's Beta Review approves the first build. If you hit a \"not accepting testers\" splash, bookmark it and try again in 24–48h.\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"assets\u002Fscreenshots\u002Fscarfgo-servers.png\">\u003Cimg src=\"assets\u002Fscreenshots\u002Fscarfgo-servers.png\" alt=\"ScarfGo — Servers list\" width=\"140\">\u003C\u002Fa>\n  \u003Ca href=\"assets\u002Fscreenshots\u002Fscarfgo-chat.png\">\u003Cimg src=\"assets\u002Fscreenshots\u002Fscarfgo-chat.png\" alt=\"ScarfGo — Chat with Hermes\" width=\"140\">\u003C\u002Fa>\n  \u003Ca href=\"assets\u002Fscreenshots\u002Fscarfgo-project-dashboard.png\">\u003Cimg src=\"assets\u002Fscreenshots\u002Fscarfgo-project-dashboard.png\" alt=\"ScarfGo — Project dashboard\" width=\"140\">\u003C\u002Fa>\n  \u003Ca href=\"assets\u002Fscreenshots\u002Fscarfgo-skills.png\">\u003Cimg src=\"assets\u002Fscreenshots\u002Fscarfgo-skills.png\" alt=\"ScarfGo — Skills browser\" width=\"140\">\u003C\u002Fa>\n  \u003Ca href=\"assets\u002Fscreenshots\u002Fscarfgo-system.png\">\u003Cimg src=\"assets\u002Fscreenshots\u002Fscarfgo-system.png\" alt=\"ScarfGo — System tab\" width=\"140\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\u003Csub>\u003Cem>Tap any thumbnail to view full size. Servers list · Chat · Project dashboard (Site Status Checker template) · Skills browser · System tab.\u003C\u002Fem>\u003C\u002Fsub>\u003C\u002Fp>\n\nSee the [ScarfGo wiki page](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Fwiki\u002FScarfGo) for the full feature tour, [ScarfGo Onboarding](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Fwiki\u002FScarfGo-Onboarding) for the SSH-key setup walkthrough, and [Platform Differences](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Fwiki\u002FPlatform-Differences) for what is and isn't shared between Mac and iOS.\n\n## Connect ScarfGo to your Hermes server\n\nScarfGo speaks SSH directly — no companion service, no developer-controlled server in between. Onboarding takes about a minute:\n\n1. **Install via TestFlight.** Open the [public TestFlight link](https:\u002F\u002Ftestflight.apple.com\u002Fjoin\u002FqCrRpcTz) on your phone, accept the invite, install ScarfGo from TestFlight (just like any other beta).\n2. **Tap Add Server.** Enter the host (IP or DNS), SSH user, port (default 22), and an optional nickname. Same details you'd type into `ssh user@host`.\n3. **Generate Key.** ScarfGo creates a fresh Ed25519 keypair on the device. The private half lives in the iOS Keychain (`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`) and is excluded from iCloud sync — it never leaves the phone.\n4. **Add the public key to your Hermes host.** Tap **Copy public key**, then on the host run:\n   ```bash\n   cat >> ~\u002F.ssh\u002Fauthorized_keys \u003C\u003C'EOF'\n   \u003Cpaste the line ScarfGo showed you>\n   EOF\n   chmod 600 ~\u002F.ssh\u002Fauthorized_keys\n   ```\n   This is its own line per device — the convention any second SSH client uses. Mac (Scarf) keeps using your existing ssh-agent \u002F `~\u002F.ssh\u002Fconfig` and is unaffected.\n5. **Tap Test connection.** ScarfGo opens an SSH session, probes for the `hermes` binary, and saves the server on success. If it can't find `hermes`, see the [troubleshooting section](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Fwiki\u002FScarfGo-Onboarding#troubleshooting) — it's almost always a `PATH` quirk on non-interactive SSH.\n\nDone. Open the Dashboard tab and tap any session to resume it; tap the **+** in Chat to start a new project-scoped session.\n\n## Multi-server, one window per server\n\nScarf 2.0 is a multi-window app. Each window is bound to exactly one Hermes server — your local `~\u002F.hermes\u002F` is synthesized automatically, and you can add remotes via **File → Open Server…** → **Add Server** (host, user, port, optional identity file). Open a second window for a different server and the two run side-by-side with independent state.\n\nRemote Hermes is reached over system SSH — the same `~\u002F.ssh\u002Fconfig`, ssh-agent, ProxyJump, and ControlMaster pooling your terminal uses. File I\u002FO flows through `scp`\u002F`sftp`; SQLite is served from atomic `sqlite3 .backup` snapshots cached under `~\u002FLibrary\u002FCaches\u002Fscarf\u002Fsnapshots\u002F\u003Cserver-id>\u002F`; chat (ACP) tunnels as `ssh -T host -- hermes acp` with JSON-RPC over stdio end-to-end. Everything in the feature list below works against remote identically to local.\n\n### Remote setup requirements\n\nThe remote host must have:\n\n1. **SSH access** — key-based auth via your local ssh-agent. Scarf never prompts for passphrases; run `ssh-add` once in Terminal before connecting.\n2. **`sqlite3`** on the remote `$PATH` — needed for the atomic DB snapshots. Install on the remote with `apt install sqlite3` (Ubuntu\u002FDebian), `yum install sqlite` (RHEL\u002FFedora), or `apk add sqlite` (Alpine).\n3. **`pgrep`** on the remote `$PATH` — used by the Dashboard \"is Hermes running\" check. Standard on every distro; install `procps` if missing.\n4. **`~\u002F.hermes\u002F` readable by the SSH user**. When Hermes runs as a separate user (systemd service, Docker container), the SSH user needs read access to `config.yaml` and `state.db`. Either (a) SSH as the Hermes user, (b) `chmod` Hermes's home to be group-readable and add your SSH user to that group, or (c) set the **Hermes data directory** field when adding the server to point at the right location (e.g. `\u002Fvar\u002Flib\u002Fhermes\u002F.hermes`).\n\n### Troubleshooting remote connections\n\nIf the connection pill is green but the Dashboard shows \"Stopped\", \"unknown\", or empty values, the SSH user can't read the Hermes state files. Open **Manage Servers → 🩺 Run Diagnostics** (or click the yellow \"Can't read Hermes state\" pill in the toolbar). The diagnostics sheet runs fourteen checks in one SSH session — connectivity, `sqlite3` presence, read access to `config.yaml` and `state.db`, the effective non-login `$PATH` — and tells you exactly which one fails and why, with remediation hints for each. Use the **Copy Full Report** button to paste the full output into a bug report.\n\nFor the common \"Hermes isn't at the default path\" case (systemd services, Docker), **Test Connection** in the Add Server sheet now probes `\u002Fvar\u002Flib\u002Fhermes\u002F.hermes`, `\u002Fopt\u002Fhermes\u002F.hermes`, `\u002Fhome\u002Fhermes\u002F.hermes`, and `\u002Froot\u002F.hermes` when it can't find `state.db` at `~\u002F.hermes\u002F`, and offers a one-click fill if it finds any of them.\n\n## Features\n\nScarf mirrors Hermes's surface area through a sidebar-based UI. Sections below map 1:1 to the app's sidebar.\n\n### Monitor\n\n- **Dashboard** — System health, token usage, cost tracking, recent sessions with live refresh\n- **Insights** — Usage analytics with token breakdown (including reasoning tokens), cost tracking, model\u002Fplatform stats, top tools bar chart, activity heatmaps, notable sessions, and time period filtering (7\u002F30\u002F90 days or all time)\n- **Sessions Browser** — Full conversation history with message rendering, model reasoning\u002Fthinking display, tool call inspection, full-text search, rename, delete, and JSONL export. Subagent sessions are filtered from the main list and accessible via parent session drill-down\n- **Activity Feed** — Recent tool execution log with filtering by kind and session, detail inspector with pretty-printed arguments and tool output display\n\n### Interact\n\n- **Live Chat** — Two modes: **Rich Chat** streams responses in real-time via the Agent Client Protocol (ACP) with iMessage-style bubbles, markdown rendering, tool call visualization, thinking\u002Freasoning display, permission request dialogs, and a one-click `\u002Fcompress` focus sheet (when Hermes advertises the command); **Terminal** runs `hermes chat` with full ANSI color and Rich formatting via [SwiftTerm](https:\u002F\u002Fgithub.com\u002Fmigueldeicaza\u002FSwiftTerm). Both modes support session persistence, resume\u002Fcontinue previous sessions, auto-reconnection with session recovery, and voice mode controls\n- **Memory Viewer\u002FEditor** — View and edit Hermes's MEMORY.md and USER.md with live file-watcher refresh, external memory provider awareness (Honcho, Supermemory, etc.), and profile-scoped memory support with profile picker\n- **Skills Browser** — Browse installed skills by category with file content viewer and required config warnings. **New in 1.6:** Browse the Skills Hub, search by registry (official, skills.sh, well-known, GitHub, ClawHub, LobeHub), install, check for updates, and uninstall — all from the app\n\n### Configure *(new in 1.6)*\n\n- **Platforms** — Native GUI setup for all 13 messaging platforms (Telegram, Discord, Slack, WhatsApp, Signal, Email, Matrix, Mattermost, Feishu, iMessage, Home Assistant, Webhook, CLI). Per-platform forms write credentials to `~\u002F.hermes\u002F.env` and behavior toggles to `~\u002F.hermes\u002Fconfig.yaml`. WhatsApp and Signal pairing use an inline SwiftTerm terminal for QR scan and signal-cli daemon management\n- **Personalities** — List defined personalities, pick the active one, and edit `SOUL.md` inline with markdown preview\n- **Quick Commands** — Editor for custom `\u002Fcommand_name` shell shortcuts with dangerous-pattern detection (`rm -rf`, `mkfs`, etc.)\n- **Credential Pools** — Per-provider credential rotation with a fixed OAuth flow (URL extraction + browser open + code paste) and proper `--type api-key` handling. API keys never stored in UI state — only last-4 preview. Strategy picker (fill_first \u002F round_robin \u002F least_used \u002F random)\n- **Plugins** — Install via Git URL or `owner\u002Frepo`, update, remove, enable\u002Fdisable. Reads `~\u002F.hermes\u002Fplugins\u002F` directly for reliable state\n- **Webhooks** — Create, list, test-fire, and remove webhook subscriptions. Detects the \"platform not enabled\" state and links to gateway setup\n- **Profiles** — Switch between multiple isolated Hermes instances. Create, rename, delete, export (zip), import. Safe-switch warning reminds users to restart Scarf after activating a different profile\n- **Hermes Proxy** *(new in 2.9, Hermes v0.14+)* — Launch the OpenAI-compatible local proxy that forwards requests to your OAuth-authenticated upstream provider (Nous Portal in v0.14; more adapters as Hermes adds them). Status card with running\u002Fstopped badge, endpoint URL with copy button (`http:\u002F\u002F127.0.0.1:8645\u002Fv1`), provider picker, live log tail, and a usage-help card. Point Codex CLI \u002F Aider \u002F Cline \u002F VS Code Continue at the endpoint and any bearer token works — the proxy attaches your real credential\n\n### Manage\n\n- **Tools** — Enable\u002Fdisable toolsets per platform with a connectivity-aware platform menu (green\u002Forange\u002Fgrey\u002Fred dots for connected\u002Fconfigured\u002Foffline\u002Ferror). **Fixed in 1.6:** all 13 platforms now appear (was previously stuck on CLI)\n- **MCP Servers** — Manage Model Context Protocol servers Hermes connects to. Add via curated presets (GitHub, Linear, Notion, Sentry, Stripe, and more) or fully custom (stdio command + args, or HTTP URL with optional bearer auth). Per-server detail view with enable\u002Fdisable toggle, environment variable + header editor, tool-include\u002Fexclude filters, resources\u002Fprompts toggles, request and connect timeouts, OAuth token detection + clearing, and one-click \"Test Connection\" that runs `hermes mcp test` and surfaces the discovered tool list. Gateway-restart banner appears after config changes that require a reload\n- **Gateway Control** — Start\u002Fstop\u002Frestart the messaging gateway, view platform connection status, manage user pairing (approve\u002Frevoke)\n- **Cron Manager** — View scheduled jobs with pre-run scripts, delivery failure tracking, timeout info, and `[SILENT]` job indicators. **New in 1.6:** full write support — create, edit, pause, resume, run-now, and delete jobs from the app\n- **Health** — Component-level status and diagnostics. **New in 1.6:** inline \"Run Dump\" and \"Share Debug Report\" buttons (the latter with an upload-confirmation dialog before sending to Nous support)\n- **Log Viewer** — Real-time log tailing for agent.log, errors.log, and gateway.log with level filtering, component filter (Gateway \u002F Agent \u002F Tools \u002F CLI \u002F Cron), clickable session-ID pills that filter to a single session, and text search\n- **Settings** — **Restructured in 1.6** into a 10-tab layout: General, Display, Agent, Terminal, Browser, Voice, Memory, Aux Models, Security, Advanced. Exposes ~60 previously hidden config fields including all 8 auxiliary model tasks, container limits, full TTS\u002FSTT provider settings, human-delay simulation, compression thresholds, logging rotation, checkpoints, website blocklist, Tirith sandbox, and delegation. One-click **Backup & Restore** via `hermes backup` \u002F `hermes import`. Model picker replaces the old free-text model field, backed by the models.dev cache (111 providers, all major models) with a \"Custom…\" escape hatch\n\n### Project Dashboards\n\nCustom, agent-generated dashboards for any project. Define stat boxes, charts, tables, progress bars, checklists, rich text, and embedded web views in a simple JSON file — Scarf renders them with live refresh. Let your Hermes agent build and maintain project-specific visualizations automatically. See [Project Dashboards](#project-dashboards-1) below for the full schema.\n\n### System\n\n- **Hermes Process Control** — Start, stop, and restart the Hermes agent directly from Scarf\n- **Menu Bar** — Status icon showing Hermes running state with quick actions\n\n## Requirements\n\n- macOS 14.6+ (Sonoma) for Scarf\n- iOS 18.0+ for [ScarfGo](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Fwiki\u002FScarfGo) (the iPhone companion, public TestFlight from v2.5)\n- Xcode 16.0+ to build from source\n- [Hermes agent](https:\u002F\u002Fgithub.com\u002Fhermes-ai\u002Fhermes-agent) v0.6.0+ installed at `~\u002F.hermes\u002F` on each target host (v0.15.0+ recommended for full v2.10 feature support — OpenAI `openai-api` first-class provider, Krea image-gen models, xAI model-retirement aliases + `hermes migrate xai` (Vercel removed), xAI Web Search backend, ntfy as the 23rd gateway platform + per-platform flags, xAI TTS `auto_speech_tags`, the Kanban v0.15 wave (server-side `--sort`, Promote \u002F Schedule \u002F Delete-permanently actions, Scheduled + Review columns, worktree `--branch` + `model_override` display, session-scoped board, `--board` plumbing), Bitwarden Secrets Manager, MCP mTLS client certs + `hermes mcp catalog` browse, the skill Bundles tab, per-session edit-approval modes (`session\u002Fset_mode`), and the Health supply-chain audit. v0.14.0 still works for the v2.9 surface — `\u002Fsubgoal` \u002F `\u002Fyolo` \u002F `\u002Fsessions` \u002F `\u002Fcodex-runtime`, xAI Grok OAuth + NovitaAI, LINE + SimpleX Chat, Brave Search + DuckDuckGo, Hermes Proxy, etc.)\n- For remote servers: SSH access (key-based), `sqlite3` on the remote (for atomic DB snapshots), and the `hermes` CLI resolvable from the remote user's `PATH` or at a path you specify per server. ScarfGo requires the same on every Hermes host it connects to.\n\n### Compatibility\n\nScarf reads Hermes's SQLite database and parses CLI output from `hermes status`, `hermes doctor`, `hermes tools`, `hermes sessions`, `hermes gateway`, and `hermes pairing`. Automatic schema detection provides backward compatibility with older databases while supporting new features in newer Hermes versions.\n\n| Hermes Version | Status |\n|----------------|--------|\n| v0.6.0 (2026-03-30) | Verified |\n| v0.7.0 (2026-04-03) | Verified |\n| v0.8.0 (2026-04-08) | Verified |\n| v0.9.0 (2026-04-13) | Verified |\n| v0.10.0 (2026-04-16) | Verified (Tool Gateway introduced) |\n| v0.11.0 (2026-04-23) | Verified |\n| v0.12.0 (2026-04-30) | Verified |\n| v0.13.0 (2026-05-07) | Verified |\n| v0.14.0 (2026-05-16) | Verified |\n| v0.15.0 (2026-05-28) | Verified |\n| v0.15.1 (2026-05-29) | Verified — hotfix wave (dashboard, Docker, MCP, Kanban worker, skills.sh, `\u002Fyolo`, `\u002Fmodel`) |\n| v0.15.2 (2026-05-29) | **Verified — current target (recommended for full v2.10 feature support)** |\n\nScarf 2.10 targets Hermes v0.15.0 for OpenAI as a first-class provider (`openai-api`, distinct from OpenAI Codex), Krea image-generation models, the xAI May-15 model-retirement aliases + `hermes migrate xai` action (Vercel AI Gateway + Sandbox removed), the xAI Web Search backend, ntfy as the 23rd gateway platform + per-platform flags (Telegram `disable_topic_auto_rename` \u002F `ignore_root_dm`, Discord `allow_any_attachment`, Signal `require_mention`), the xAI TTS `auto_speech_tags` toggle, the Kanban v0.15 maturation wave (server-side `--sort`, Promote \u002F Schedule \u002F Delete-permanently actions, Scheduled + Review columns, worktree `--branch` + read-only `model_override`, the session-scoped board via ACP `session_id`, and `--board` plumbing), Bitwarden Secrets Manager, MCP mTLS client certificates + `hermes mcp catalog` browse, the skill Bundles tab, per-session edit-approval modes (`session\u002Fset_mode`), and the Health supply-chain audit (`hermes audit`). Every v0.15 surface is **capability-gated** — Scarf detects the host's Hermes version once per server connection (`hermes --version` → semver + `YYYY.M.D` parse) and hides v0.15-only UI on older hosts. v0.14.0 hosts keep the full v2.9 surface (`\u002Fsubgoal` + `\u002Fyolo` + `\u002Fsessions` + `\u002Fcodex-runtime`, xAI Grok OAuth + NovitaAI, LINE + SimpleX Chat, Brave Search + DuckDuckGo, Hermes Proxy, ACP `--setup-browser`, the YOLO warning, the Qwen Cloud rename). v0.13.0 hosts keep the full v2.8 surface (Persistent Goals, ACP `\u002Fqueue`, Kanban v0.13 diagnostics, Curator archive\u002Fprune, Google Chat, MCP SSE transport, per-capability Web Tools backends). Earlier Hermes versions remain supported for monitoring, sessions, file-based features, and ACP chat; new behavior degrades gracefully on older agents.\n\nIf a Hermes update changes the database schema or CLI output format, Scarf may need to be updated. Check the [Health](#features) view for compatibility warnings.\n\n## Install\n\n### Pre-built Binary (no Xcode required)\n\nDownload the latest build from [Releases](https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf\u002Freleases):\n\n- `Scarf-vX.X.X-Universal.zip` — Apple Silicon + Intel (recommended)\n- `Scarf-vX.X.X-ARM64.zip` — Apple Silicon only (smaller download)\n\n1. Unzip and drag **Scarf.app** to Applications\n2. Launch normally — builds are Developer ID signed and notarized, so Gatekeeper accepts them on first launch\n\nScarf checks for updates automatically on launch via [Sparkle](https:\u002F\u002Fsparkle-project.org) and daily thereafter. You can disable automatic checks or trigger a manual check from **Settings → General → Updates** or the menu bar icon.\n\n#### \"Scarf.app is damaged\" on first launch\n\nIf Gatekeeper rejects the app on first launch (occasionally happens on macOS 14+ for zip-distributed apps depending on extraction tool + quarantine state), the bundle itself is fine — every release is verified to pass `codesign --verify --strict --deep` and `spctl --assess --type execute` before it ships. The fix is to **only remove the quarantine attribute**, never strip all xattrs or re-sign:\n\n```bash\n# Recommended — non-destructive\nxattr -d com.apple.quarantine \u002FApplications\u002FScarf.app\n\n# Or extract with ditto instead of double-clicking the zip:\nditto -xk ~\u002FDownloads\u002FScarf-vX.X.X-Universal.zip ~\u002FDownloads\u002F\n```\n\n**Do not run `xattr -rc \u002FApplications\u002FScarf.app`** — it strips codesign-related extended attributes and can break the bundle's seal. **Do not run `codesign --force --deep --sign - \u002FApplications\u002FScarf.app`** — `--deep` ad-hoc re-signing is incompatible with Sparkle.framework's nested XPC services and `Updater.app` sub-bundle, and will corrupt the framework signature even if the outer app appears intact afterward. If a clean re-download + `xattr -d com.apple.quarantine` doesn't resolve the issue, please open an issue with `codesign --verify --verbose=4 --strict \u002FApplications\u002FScarf.app` output captured **before** any mitigation attempts.\n\n### Build from Source\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fawizemann\u002Fscarf.git\ncd scarf\u002Fscarf\nopen scarf.xcodeproj\n```\n\nOr from the command line:\n\n```bash\nxcodebuild -project scarf\u002Fscarf.xcodeproj -scheme scarf -configuration Release -arch arm64 -arch x86_64 ONLY_ACTIVE_ARCH=NO build\n```\n\nFor an unsigned local Debug build without an Apple Developer account (handy for contributors), use [`.\u002Fscripts\u002Flocal-build.sh`](scripts\u002Flocal-build.sh) — see [BUILDING.md](BUILDING.md) for prerequisites.\n\n## Architecture\n\nScarf follows the **MVVM-Feature** pattern with zero external dependencies beyond SwiftTerm:\n\n```\nscarf\u002F\n  Core\u002F\n    Models\u002F       Plain data structs (HermesSession, HermesMessage, HermesConfig, etc.)\n    Services\u002F     Data access (SQLite reader, file I\u002FO, log tailing, file watcher)\n  Features\u002F       Self-contained feature modules\n    Dashboard\u002F    System overview and stats\n    Insights\u002F     Usage analytics and activity patterns\n    Sessions\u002F     Conversation browser with rename, delete, export\n    Activity\u002F     Tool execution feed with inspector\n    Projects\u002F     Agent-generated project dashboards with widget rendering\n    Chat\u002F         Rich ACP chat and embedded terminal with voice controls\n    Memory\u002F       Memory viewer and editor\n    Skills\u002F       Skill browser by category\n    Tools\u002F        Toolset management per platform\n    MCPServers\u002F   MCP server registry, presets, OAuth, tool filters, test runner\n    Gateway\u002F      Messaging gateway control and pairing\n    Cron\u002F         Scheduled job viewer\n    Logs\u002F         Real-time log viewer\n    Settings\u002F     Structured config editor\n  Navigation\u002F     AppCoordinator + SidebarView\n```\n\n### Data Sources\n\nScarf reads Hermes data directly from `~\u002F.hermes\u002F`:\n\n| Source | Format | Access |\n|--------|--------|--------|\n| `state.db` | SQLite (WAL mode) | Read-only |\n| `config.yaml` | YAML | Read-only |\n| `memories\u002F*.md` | Markdown | Read\u002FWrite |\n| `cron\u002Fjobs.json` | JSON | Read-only |\n| `logs\u002F*.log` | Text | Read-only |\n| `gateway_state.json` | JSON | Read-only |\n| `skills\u002F` | Directory tree | Read-only |\n| `hermes acp` | ACP subprocess (JSON-RPC stdio) | Real-time chat |\n| `hermes chat` | Terminal subprocess | Interactive |\n| `hermes tools` | CLI commands | Enable\u002FDisable |\n| `hermes sessions` | CLI commands | Rename\u002FDelete\u002FExport |\n| `hermes gateway` | CLI commands | Start\u002FStop\u002FRestart |\n| `hermes pairing` | CLI commands | Approve\u002FRevoke |\n| `hermes mcp` | CLI commands | Add\u002FRemove\u002FTest MCP servers |\n| `mcp-tokens\u002F*.json` | JSON (per-server OAuth) | Detect\u002FDelete |\n| `.scarf\u002Fdashboard.json` | JSON (per-project) | Read-only |\n| `scarf\u002Fprojects.json` | JSON (registry) | Read\u002FWrite |\n\nThe app opens `state.db` in read-only mode to avoid WAL contention with Hermes. Management actions (tool toggles, session rename\u002Fdelete\u002Fexport) go through the Hermes CLI.\n\n### Dependencies\n\n| Package | Purpose |\n|---------|---------|\n| [SwiftTerm](https:\u002F\u002Fgithub.com\u002Fmigueldeicaza\u002FSwiftTerm) | Terminal emulator for the Chat feature |\n| [Sparkle](https:\u002F\u002Fgithub.com\u002Fsparkle-project\u002FSparkle) | Auto-updates from the GitHub-hosted appcast |\n\nEverything else uses system frameworks: SQLite3 C API, Foundation JSON, AttributedString markdown, SwiftUI Charts, GCD file watching.\n\n## How It Works\n\nScarf watches `~\u002F.hermes\u002F` for file changes and queries the SQLite database for sessions, messages, and analytics. Views refresh automatically when Hermes writes new data.\n\nThe Chat tab has two modes. **Rich Chat** communicates with Hermes via the Agent Client Protocol (ACP) — a JSON-RPC connection over stdio — streaming responses in real-time with automatic reconnection and session recovery on connection loss. **Terminal** mode spawns `hermes chat` in a pseudo-terminal for the full interactive CLI experience with proper ANSI rendering. Sessions persist across navigation in both modes — switch tabs and come back without losing your conversation.\n\nManagement actions (renaming sessions, toggling tools, editing memory) call the Hermes CLI or write directly to the appropriate files, keeping Scarf and Hermes in sync.\n\nThe app sandbox is disabled because Scarf needs direct access to `~\u002F.hermes\u002F` and the ability to spawn the Hermes binary.\n\n## Project Dashboards\n\nProject Dashboards turn Scarf into a customizable monitoring hub for all your projects. You define a simple JSON file in your project folder describing what to display — stat boxes, charts, tables, progress bars, checklists, rich text, and embedded web views — and Scarf renders it as a live-updating dashboard. Your Hermes agent can generate and maintain these dashboards automatically.\n\n### What You Can Build\n\n- **Development dashboards** — test coverage, build status, open issues, sprint progress\n- **Data project trackers** — pipeline metrics, data quality scores, processing throughput\n- **Deployment monitors** — deploy history tables, uptime stats, error rate charts\n- **Research dashboards** — experiment results, key findings, paper status checklists\n- **Agent activity views** — cron job results, content generation stats, task completion rates\n- **Embedded web apps** — local dev servers, HTML reports, Grafana dashboards, any web-based tool your agent generates\n- **Any project status** — if your agent can measure it, Scarf can display it\n\n### Quick Start\n\n**1. Create the dashboard file**\n\nCreate `.scarf\u002Fdashboard.json` in any project folder:\n\n```json\n{\n  \"version\": 1,\n  \"title\": \"My Project\",\n  \"description\": \"Project status at a glance\",\n  \"sections\": [\n    {\n      \"title\": \"Overview\",\n      \"columns\": 3,\n      \"widgets\": [\n        {\n          \"type\": \"stat\",\n          \"title\": \"Test Coverage\",\n          \"value\": \"87%\",\n          \"icon\": \"checkmark.shield\",\n          \"color\": \"green\",\n          \"subtitle\": \"+2.1% this week\"\n        },\n        {\n          \"type\": \"progress\",\n          \"title\": \"Sprint Progress\",\n          \"value\": 0.73,\n          \"label\": \"73% complete\",\n          \"color\": \"blue\"\n        },\n        {\n          \"type\": \"list\",\n          \"title\": \"Tasks\",\n          \"items\": [\n            { \"text\": \"Write unit tests\", \"status\": \"done\" },\n            { \"text\": \"Update API docs\", \"status\": \"active\" },\n            { \"text\": \"Deploy to prod\", \"status\": \"pending\" }\n          ]\n        }\n      ]\n    }\n  ]\n}\n```\n\n**2. Register your project**\n\nHave your agent append a `{name, path}` entry directly to the registry at `~\u002F.hermes\u002Fscarf\u002Fprojects.json` — Scarf watches the file and picks up the change on the next sidebar refresh, no manual UI step needed:\n\n```json\n{\n  \"projects\": [\n    { \"name\": \"my-project\", \"path\": \"\u002FUsers\u002Fyou\u002FDeveloper\u002Fmy-project\" }\n  ]\n}\n```\n\n(You can also add the folder by hand in Scarf via **Projects → +** if you'd rather click than edit JSON — both paths write to the same file.)\n\n**3. View in Scarf**\n\nSelect your project in the Projects sidebar — the dashboard renders immediately. Scarf watches the file for changes and refreshes automatically whenever the JSON is updated.\n\n### Widget Types\n\n| Type | Description | Key Fields |\n|------|-------------|------------|\n| `stat` | Key metric with large value display | `value`, `icon`, `color`, `subtitle` |\n| `progress` | Progress bar with label | `value` (0.0–1.0), `label`, `color` |\n| `text` | Rich text block | `content`, `format` (\"markdown\" or \"plain\") |\n| `table` | Data table with headers | `columns`, `rows` |\n| `chart` | Line, bar, or pie chart | `chartType`, `series` (each with `name`, `color`, `data`) |\n| `list` | Checklist with status indicators | `items` (each with `text`, `status`: done\u002Factive\u002Fpending) |\n| `webview` | Embedded web browser | `url`, `height` (default 400) |\n\nThe `webview` widget embeds a live web browser directly in your dashboard — perfect for displaying local dev servers, HTML reports, or any web-based tool your agent generates.\n\nWhen a dashboard includes a webview widget, Scarf adds a tabbed interface: **Dashboard** shows your normal widgets, **Site** shows the web content full-canvas with clean margins — using the entire available space in the app. This gives you the best of both worlds: compact metrics at a glance, and a full embedded browser when you need it.\n\n```json\n{\n  \"type\": \"webview\",\n  \"title\": \"Project Report\",\n  \"url\": \"http:\u002F\u002Flocalhost:8000\u002Fdashboard\",\n  \"height\": 500\n}\n```\n\n- `url`: Any URL — typically a local server (`http:\u002F\u002Flocalhost:...`) or file path\n- `height`: Height in points when displayed as an inline widget card (default: 400). The Site tab always uses full available space regardless of this setting.\n\n**Colors**: red, orange, yellow, green, blue, purple, pink, teal, indigo, mint, brown, gray\n\n**Icons**: Any [SF Symbol](https:\u002F\u002Fdeveloper.apple.com\u002Fsf-symbols\u002F) name (e.g., `checkmark.shield`, `cpu`, `doc.text`, `chart.bar`)\n\n### Agent-Generated Dashboards\n\nThe real power is letting your Hermes agent build and update dashboards automatically. Add instructions like this to your agent's context:\n\n> Analyze this project and create a `.scarf\u002Fdashboard.json` dashboard with relevant metrics and status. Use stat widgets for key numbers, charts for trends, tables for structured data, lists for task tracking, and a webview widget if the project has a local web server or HTML reports. Register the project by appending a `{name, path}` entry to `~\u002F.hermes\u002Fscarf\u002Fprojects.json` if not already registered — Scarf picks up the change on next sidebar refresh.\n\nYour agent can update the dashboard as part of cron jobs, after builds, or whenever project state changes. Since Scarf watches the file, updates appear in real-time.\n\n### Dashboard Schema Reference\n\n```json\n{\n  \"version\": 1,\n  \"title\": \"Required — dashboard title\",\n  \"description\": \"Optional — subtitle text\",\n  \"updatedAt\": \"Optional — ISO 8601 timestamp\",\n  \"sections\": [\n    {\n      \"title\": \"Section Name\",\n      \"columns\": 3,\n      \"widgets\": [{ \"type\": \"...\", \"title\": \"...\" }]\n    }\n  ]\n}\n```\n\nEach section defines a grid with 1–4 columns. Widgets flow left-to-right, wrapping to new rows. See [DASHBOARD_SCHEMA.md](scarf\u002Fdocs\u002FDASHBOARD_SCHEMA.md) for the full schema reference with examples of every widget type.\n\n## Releases\n\nScarf ships through GitHub releases — the App Store is not supported because Scarf spawns the user-installed `hermes` binary and reads `~\u002F.hermes\u002F` directly, both of which App Sandbox forbids.\n\nEach release goes through a single local script: [scripts\u002Frelease.sh](scripts\u002Frelease.sh). The script archives a universal binary, signs it with the Developer ID Application cert, submits to `notarytool`, staples the ticket, produces the distribution zip, signs an appcast entry with Sparkle's EdDSA key, pushes an updated `appcast.xml` to the `gh-pages` branch, creates the GitHub release, and tags `main`.\n\nThe Sparkle appcast is served from [awizemann.github.io\u002Fscarf\u002Fappcast.xml](https:\u002F\u002Fawizemann.github.io\u002Fscarf\u002Fappcast.xml).\n\nSigning prerequisites (one-time):\n\n- `Developer ID Application` certificate in the login Keychain\n- `scarf-notary` keychain profile registered via `xcrun notarytool store-credentials`\n- Sparkle EdDSA private key in Keychain item `https:\u002F\u002Fsparkle-project.org` (back this up — without it, shipped apps can never receive updates)\n\n## Template Catalog\n\nCommunity-contributed Scarf project templates live under [`templates\u002F`](templates\u002F) in this repo and are browsable at **[awizemann.github.io\u002Fscarf\u002Ftemplates\u002F](https:\u002F\u002Fawizemann.github.io\u002Fscarf\u002Ftemplates\u002F)** with live dashboard previews and one-click `scarf:\u002F\u002Finstall?url=…` links.\n\n- **Install from the web** — click \"Install with Scarf\" on any template's detail page; the app takes over from there.\n- **Install from a local file** — Scarf → Projects → Templates → Install from File…, or double-click any `.scarftemplate` in Finder.\n- **Author a template** — see [`templates\u002FCONTRIBUTING.md`](templates\u002FCONTRIBUTING.md) for the full walkthrough. Fork, drop a template under `templates\u002F\u003Cyour-github-handle>\u002F\u003Cyour-name>\u002F`, open a PR; CI validates the bundle automatically.\n\nThe catalog's site is a static HTML + vanilla JS build generated by [`tools\u002Fbuild-catalog.py`](tools\u002Fbuild-catalog.py) and driven by [`scripts\u002Fcatalog.sh`](scripts\u002Fcatalog.sh) (check \u002F build \u002F preview \u002F publish). Appcast and main landing page are independent — updating the catalog never disturbs Sparkle.\n\n## Contributing\n\nContributions are welcome. Please open an issue to discuss what you'd like to change before submitting a PR.\n\n1. Fork the repo\n2. Create your feature branch (`git checkout -b feature\u002Fmy-feature`)\n3. Commit your changes (`git commit -m 'Add my feature'`)\n4. Push to the branch (`git push origin feature\u002Fmy-feature`)\n5. Open a Pull Request\n\nFor template submissions, see [`templates\u002FCONTRIBUTING.md`](templates\u002FCONTRIBUTING.md) — same flow, with a catalog-specific checklist + automated CI validation.\n\n## Support\n\nIf you find Scarf useful, consider buying me a coffee.\n\n\u003Ca href=\"https:\u002F\u002Fwww.buymeacoffee.com\u002Fawizemann\">\u003Cimg src=\"https:\u002F\u002Fcdn.buymeacoffee.com\u002Fbuttons\u002Fv2\u002Fdefault-yellow.png\" alt=\"Buy Me a Coffee\" height=\"40\">\u003C\u002Fa>\n\n## License\n\n[MIT](LICENSE)\n","Scarf 是一款专为 Hermes AI 代理设计的原生 macOS 和 iOS 应用程序，支持多窗口、多服务器（本地及通过 SSH 远程）。其核心功能包括聊天、仪表板、会话管理、内存查看、计划任务、MCP 等，采用 Swift 语言开发，并利用 SwiftUI 构建用户界面。该应用特别适合需要对 Hermes AI 代理进行全方位监控和控制的场景，如开发测试环境中的自动化任务管理或个人项目中的智能助手集成。通过 Scarf，用户可以清晰地了解 Hermes 的运行状态及其生成的内容，从而更高效地与其互动。",2,"2026-06-11 04:10:44","trending"]