mirror of
https://github.com/awizemann/scarf.git
synced 2026-05-10 10:36:35 +00:00
c5d6116f99
- 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>
2.0 KiB
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
@Observablecoordinator 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:
@MainActordefault. Services usenonisolated+ 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 acpsubprocess (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.