Files
scarf/CLAUDE.md
T
Alan Wizemann c5d6116f99 feat: Add Hermes v0.9.0 compatibility and new feature surfaces
- Log parser: session-ID tag in v0.9.0 log format is now an optional
  capture group; session pill renders inline and tap-filters the view.
- Logs: component filter (Gateway/Agent/Tools/CLI/Cron) and bounded
  logger column with middle truncation.
- Gateway stop: uses `hermes gateway stop` CLI (v0.9.0's launchctl
  bootout fix) with SIGTERM as fallback.
- HermesConfig: new keys for Fast Mode (service_tier), gateway notify
  interval, force IPv4, context engine, interim assistant messages,
  and Honcho eager init (camelCase per PR #6995).
- Settings: new Performance, Network, Advanced, and Backup & Restore
  sections that call `hermes backup` / `hermes import` off the main
  actor; robust zip-path extraction via regex.
- Platforms: iMessage (BlueBubbles) added to KnownPlatforms and
  icon map.
- Cron: Discord thread delivery (`discord:chat:thread`) renders as
  "Discord thread X in Y".
- Chat: `/compress <focus>` button appears when ACP advertises the
  command; optional focus sheet sends through existing prompt path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:59:46 -07:00

2.0 KiB

Scarf — macOS GUI for the Hermes AI Agent

Project Structure

scarf/scarf/           Xcode project root (PBXFileSystemSynchronizedRootGroup — auto-discovers files)
  scarf/               Main app target source
    Core/Services/     HermesDataService, HermesFileService, HermesLogService, ACPClient, HermesFileWatcher
    Core/Models/       Plain structs: HermesSession, HermesMessage, HermesConfig, etc.
    Features/          MVVM-F feature modules (Dashboard, Sessions, Activity, Chat, Memory, Skills, Cron, Logs, Settings)
    Navigation/        AppCoordinator, SidebarView
  docs/                PRD, Architecture, Discovery notes
  standards/           Copied development standards (read-only reference)

Architecture Rules

  • MVVM-F: Features never import sibling features. Cross-feature goes through services.
  • AppCoordinator: Single @Observable coordinator for all navigation state, injected via .environment().
  • No external dependencies: System SQLite3, Foundation JSON, AttributedString markdown.
  • Read-only DB access: Never write to ~/.hermes/state.db. Only write to memory files and cron jobs.
  • Sandbox disabled: App reads ~/.hermes/ directly.
  • Swift 6 concurrency: @MainActor default. Services use nonisolated + async/await.

Key Paths

  • Hermes home: ~/.hermes/
  • SQLite DB: ~/.hermes/state.db (WAL mode, read-only)
  • Config: ~/.hermes/config.yaml
  • Memory: ~/.hermes/memories/MEMORY.md, ~/.hermes/memories/USER.md
  • Sessions: ~/.hermes/sessions/session_*.json
  • Cron: ~/.hermes/cron/jobs.json
  • Logs: ~/.hermes/logs/errors.log, ~/.hermes/logs/gateway.log
  • ACP: hermes acp subprocess (stdio JSON-RPC)

Build

xcodebuild -project scarf/scarf.xcodeproj -scheme scarf -configuration Debug build

Hermes Version

Targets Hermes v0.9.0 (v2026.4.13). Log lines may carry an optional [session_id] tag between the level and logger name — HermesLogService.parseLine treats the session tag as an optional capture group, so older untagged lines still parse.